From aa5a7e4079c1be5d3b1936f3811f9b5cf35cf70a Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Tue, 2 Sep 2025 02:02:01 +0300 Subject: [PATCH 001/233] Update tandy shake code for latest master changes --- src/include/86box/m_tandy.h | 9 +++ src/include/86box/vid_cga.h | 1 + src/video/vid_cga.c | 28 +++++++ src/video/vid_tandy.c | 146 ++++++++++++++++++++++++------------ 4 files changed, 136 insertions(+), 48 deletions(-) diff --git a/src/include/86box/m_tandy.h b/src/include/86box/m_tandy.h index 5ef509830..99fce8a4d 100644 --- a/src/include/86box/m_tandy.h +++ b/src/include/86box/m_tandy.h @@ -36,6 +36,15 @@ typedef struct t1kvid_t { uint8_t planar_ctrl; uint8_t lp_strobe; + uint8_t baseline_hsyncpos; + uint8_t baseline_vsyncpos; + uint8_t last_hdisp; + uint8_t last_vdisp; + int calib_countdown; + int baseline_ready; + int hsync_offset; + int vsync_offset; + int linepos; int displine; int scanline; diff --git a/src/include/86box/vid_cga.h b/src/include/86box/vid_cga.h index 439ee36fc..d6e391afb 100644 --- a/src/include/86box/vid_cga.h +++ b/src/include/86box/vid_cga.h @@ -125,6 +125,7 @@ extern void cga_recalctimings(cga_t *cga); extern void cga_interpolate_init(void); extern void cga_blit_memtoscreen(int x, int y, int w, int h, int double_type); extern void cga_do_blit(int vid_xsize, int firstline, int lastline, int double_type); +extern void cga_do_blit_tandy(int vid_xsize, int firstline, int lastline, int double_type, int hsync_offset, int vsync_offset); extern void cga_poll(void *priv); //#ifdef EMU_DEVICE_H diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c index 3bedf53a4..7791d664d 100644 --- a/src/video/vid_cga.c +++ b/src/video/vid_cga.c @@ -545,6 +545,34 @@ cga_do_blit(int vid_xsize, int firstline, int lastline, int double_type) } } +void +cga_do_blit_tandy(int vid_xsize, int firstline, int lastline, int double_type, int hsync_offset, int vsync_offset) +{ + if (double_type > DOUBLE_NONE) { + if (enable_overscan) { + cga_blit_memtoscreen(0 + hsync_offset, ((firstline - 8) << 1) + (vsync_offset << 1), + vid_xsize, ((lastline - firstline) + 16) << 1, + double_type + ); + } else { + cga_blit_memtoscreen(16 + hsync_offset, (firstline << 1) + (vsync_offset << 1), + vid_xsize, (lastline - firstline) << 1, + double_type + ); + } + } else { + if (enable_overscan) { + video_blit_memtoscreen(0 + hsync_offset, (firstline - 8) + vsync_offset, + vid_xsize, (lastline - firstline) + 8 + ); + } else { + video_blit_memtoscreen(16 + hsync_offset, firstline + vsync_offset, + vid_xsize, lastline - firstline + ); + } + } +} + void cga_poll(void *priv) { diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index f11b687ef..0d4daa6fc 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -164,6 +164,47 @@ vid_update_latch(t1kvid_t *vid) vid->crtc[0x11] = lp_latch & 0xff; } +static void +vid_update_display_offset(t1kvid_t *vid) +{ + const int calib_frames = 12; + const int hsync_scale = 16; + const int vsync_scale = 4; + + if (vid->crtc[1] != vid->last_hdisp || vid->crtc[6] != vid->last_vdisp) { + vid->last_hdisp = vid->crtc[1]; + vid->last_vdisp = vid->crtc[6]; + vid->calib_countdown = calib_frames; + vid->baseline_ready = 0; + vid->hsync_offset = 0; + vid->vsync_offset = 0; + return; + } + + if (vid->calib_countdown > 0) { + vid->calib_countdown--; + vid->baseline_hsyncpos = vid->crtc[2]; + vid->baseline_vsyncpos = vid->crtc[7]; + vid->hsync_offset = 0; + vid->vsync_offset = 0; + if (vid->calib_countdown == 0) + vid->baseline_ready = 1; + return; + } + + if (!vid->baseline_ready) { + vid->hsync_offset = 0; + vid->vsync_offset = 0; + return; + } + + int hsync_deviation = (int)vid->baseline_hsyncpos - (int)vid->crtc[2]; + int vsync_deviation = (int)vid->baseline_vsyncpos - (int)vid->crtc[7]; + + vid->hsync_offset = hsync_deviation * hsync_scale; + vid->vsync_offset = vsync_deviation * vsync_scale; +} + void tandy_vid_out(uint16_t addr, uint8_t val, void *priv) { @@ -190,6 +231,7 @@ tandy_vid_out(uint16_t addr, uint8_t val, void *priv) vid->fullchange = changeframecount; recalc_timings(dev); } + vid_update_display_offset(vid); } break; @@ -354,25 +396,25 @@ vid_render(tandy_t *dev, int line) cols[0] = (vid->array[2] & 0xf) + 16; - for (c = 0; c < 8; c++) { + for (c = 0; c < 16; c++) { if (vid->array[3] & 4) { buffer32->line[line][c] = cols[0]; if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + 8] = cols[0]; + buffer32->line[line][c + (vid->crtc[1] << 3) + 16] = cols[0]; else - buffer32->line[line][c + (vid->crtc[1] << 4) + 8] = cols[0]; + buffer32->line[line][c + (vid->crtc[1] << 4) + 16] = cols[0]; } else if ((vid->mode & 0x12) == 0x12) { buffer32->line[line][c] = 0; if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + 8] = 0; + buffer32->line[line][c + (vid->crtc[1] << 3) + 16] = 0; else - buffer32->line[line][c + (vid->crtc[1] << 4) + 8] = 0; + buffer32->line[line][c + (vid->crtc[1] << 4) + 16] = 0; } else { buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->col & 15) + 16; if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + 8] = (vid->col & 15) + 16; + buffer32->line[line][c + (vid->crtc[1] << 3) + 16] = (vid->col & 15) + 16; else - buffer32->line[line][c + (vid->crtc[1] << 4) + 8] = (vid->col & 15) + 16; + buffer32->line[line][c + (vid->crtc[1] << 4) + 16] = (vid->col & 15) + 16; } } @@ -380,23 +422,23 @@ vid_render(tandy_t *dev, int line) for (x = 0; x < vid->crtc[1] * 2; x++) { dat = (vid->vram[(vid->memaddr << 1) & 0xffff] << 8) | vid->vram[((vid->memaddr << 1) + 1) & 0xffff]; vid->memaddr++; - buffer32->line[line][(x << 2) + 8] = vid->array[((dat >> 12) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + 9] = vid->array[((dat >> 8) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + 10] = vid->array[((dat >> 4) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + 11] = vid->array[(dat & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + 16] = vid->array[((dat >> 12) & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + 17] = vid->array[((dat >> 8) & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + 18] = vid->array[((dat >> 4) & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + 19] = 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->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; - buffer32->line[line][(x << 3) + 8] = buffer32->line[line][(x << 3) + 9] = + buffer32->line[line][(x << 3) + 16] = buffer32->line[line][(x << 3) + 17] = vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + 10] = buffer32->line[line][(x << 3) + 11] = + buffer32->line[line][(x << 3) + 18] = buffer32->line[line][(x << 3) + 19] = vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + 12] = buffer32->line[line][(x << 3) + 13] = + buffer32->line[line][(x << 3) + 20] = buffer32->line[line][(x << 3) + 21] = vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + 14] = buffer32->line[line][(x << 3) + 15] = + buffer32->line[line][(x << 3) + 22] = buffer32->line[line][(x << 3) + 23] = vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; } } else if (vid->array[3] & 0x10) { /*160x200x16*/ @@ -408,17 +450,17 @@ vid_render(tandy_t *dev, int line) dat = (vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; - buffer32->line[line][(x << 4) + 8] = buffer32->line[line][(x << 4) + 9] = - buffer32->line[line][(x << 4) + 10] = buffer32->line[line][(x << 4) + 11] = - vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 4) + 12] = buffer32->line[line][(x << 4) + 13] = - buffer32->line[line][(x << 4) + 14] = buffer32->line[line][(x << 4) + 15] = - vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; buffer32->line[line][(x << 4) + 16] = buffer32->line[line][(x << 4) + 17] = buffer32->line[line][(x << 4) + 18] = buffer32->line[line][(x << 4) + 19] = - vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; + vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; buffer32->line[line][(x << 4) + 20] = buffer32->line[line][(x << 4) + 21] = buffer32->line[line][(x << 4) + 22] = buffer32->line[line][(x << 4) + 23] = + vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; + buffer32->line[line][(x << 4) + 24] = buffer32->line[line][(x << 4) + 25] = + buffer32->line[line][(x << 4) + 26] = buffer32->line[line][(x << 4) + 27] = + vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; + buffer32->line[line][(x << 4) + 28] = buffer32->line[line][(x << 4) + 29] = + buffer32->line[line][(x << 4) + 30] = buffer32->line[line][(x << 4) + 31] = vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; } } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ @@ -429,7 +471,7 @@ vid_render(tandy_t *dev, int line) for (c = 0; c < 8; c++) { chr = (dat >> 6) & 2; chr |= ((dat >> 15) & 1); - buffer32->line[line][(x << 3) + 8 + c] = + buffer32->line[line][(x << 3) + 16 + c] = vid->array[(chr & vid->array[1]) + 16] + 16; dat <<= 1; } @@ -449,16 +491,16 @@ vid_render(tandy_t *dev, int line) cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; } if (vid->scanline & 8) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 3) + c + 8] = + buffer32->line[line][(x << 3) + c + 16] = ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; else for (c = 0; c < 8; c++) { if (vid->scanline == 8) - buffer32->line[line][(x << 3) + c + 8] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; + buffer32->line[line][(x << 3) + c + 16] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; else - buffer32->line[line][(x << 3) + c + 8] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; + buffer32->line[line][(x << 3) + c + 16] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; } if (drawcursor) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 3) + c + 8] ^= 15; + buffer32->line[line][(x << 3) + c + 16] ^= 15; vid->memaddr++; } } else if (!(vid->mode & 2)) { @@ -477,21 +519,21 @@ vid_render(tandy_t *dev, int line) } vid->memaddr++; if (vid->scanline & 8) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 4) + (c << 1) + 8] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 8] = + buffer32->line[line][(x << 4) + (c << 1) + 16] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; else for (c = 0; c < 8; c++) { if (vid->scanline == 8) - buffer32->line[line][(x << 4) + (c << 1) + 8] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 8] = + buffer32->line[line][(x << 4) + (c << 1) + 16] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; else - buffer32->line[line][(x << 4) + (c << 1) + 8] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 8] = + buffer32->line[line][(x << 4) + (c << 1) + 16] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; } if (drawcursor) for (c = 0; c < 16; c++) - buffer32->line[line][(x << 4) + c + 8] ^= 15; + buffer32->line[line][(x << 4) + c + 16] ^= 15; } } else if (!(vid->mode & 16)) { cols[0] = (vid->col & 15); @@ -518,8 +560,8 @@ vid_render(tandy_t *dev, int line) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; for (c = 0; c < 8; c++) { - buffer32->line[line][(x << 4) + (c << 1) + 8] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 8] = cols[dat >> 14]; + buffer32->line[line][(x << 4) + (c << 1) + 16] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = cols[dat >> 14]; dat <<= 2; } } @@ -531,7 +573,7 @@ vid_render(tandy_t *dev, int line) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; for (c = 0; c < 16; c++) { - buffer32->line[line][(x << 4) + c + 8] = buffer32->line[(line) + 1][(x << 4) + c + 8] = cols[dat >> 15]; + buffer32->line[line][(x << 4) + c + 16] = buffer32->line[(line) + 1][(x << 4) + c + 16] = cols[dat >> 15]; dat <<= 1; } } @@ -545,16 +587,16 @@ vid_render_blank(tandy_t *dev, int line) if (vid->array[3] & 4) { if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 32, (vid->array[2] & 0xf) + 16); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 32, (vid->array[2] & 0xf) + 16); } else { int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 32, cols); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 32, cols); } } @@ -565,9 +607,9 @@ vid_render_process(tandy_t *dev, int line) int x; if (vid->mode & 1) - x = (vid->crtc[1] << 3) + 16; + x = (vid->crtc[1] << 3) + 32; else - x = (vid->crtc[1] << 4) + 16; + x = (vid->crtc[1] << 4) + 32; if (!dev->is_sl2 && vid->composite) Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); @@ -704,9 +746,9 @@ vid_poll(void *priv) picint(1 << 5); if (vid->crtc[7]) { if (vid->mode & 1) - x = (vid->crtc[1] << 3) + 16; + x = (vid->crtc[1] << 3) + 32; else - x = (vid->crtc[1] << 4) + 16; + x = (vid->crtc[1] << 4) + 32; vid->lastline++; xs_temp = x; @@ -718,18 +760,18 @@ vid_poll(void *priv) if (ys_temp < 32) ys_temp = 400; if (!enable_overscan) - xs_temp -= 16; + xs_temp -= 32; 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)); + set_screen_size(xsize, ysize + (enable_overscan ? 32 : 0)); if (video_force_resize_get()) video_force_resize_set(0); } - cga_do_blit(xsize, vid->firstline, vid->lastline, vid->double_type); + cga_do_blit_tandy(xsize, vid->firstline, vid->lastline, vid->double_type, vid->hsync_offset, vid->vsync_offset); } frames++; @@ -797,6 +839,14 @@ tandy_vid_init(tandy_t *dev) t1kvid_t *vid; vid = calloc(1, sizeof(t1kvid_t)); + vid->baseline_hsyncpos = 0; + vid->baseline_vsyncpos = 0; + vid->last_hdisp = 0xFF; + vid->last_vdisp = 0xFF; + vid->calib_countdown = 0; + vid->baseline_ready = 0; + vid->hsync_offset = 0; + vid->vsync_offset = 0; vid->memctrl = -1; video_inform(VIDEO_FLAG_TYPE_CGA, &timing_dram); From 3bd879bf3c24fca1b62433b8c027591a3f90569b Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Fri, 12 Sep 2025 16:05:17 +0300 Subject: [PATCH 002/233] Refactor calibration system - Replace frame-based calibration system with timer-based approach - Replace fixed scaling constants with dynamic video mode-aware calculations - Reduce unnecessary vid_update_display_offset() calls by filtering registers - Introduce dynamic horizontal/vertical scaling calculations - Update rendering pipeline to use dynamic display parameters --- src/include/86box/m_tandy.h | 4 +- src/video/vid_cga.c | 28 ---- src/video/vid_tandy.c | 253 ++++++++++++++++++++++-------------- 3 files changed, 157 insertions(+), 128 deletions(-) diff --git a/src/include/86box/m_tandy.h b/src/include/86box/m_tandy.h index 99fce8a4d..75d917beb 100644 --- a/src/include/86box/m_tandy.h +++ b/src/include/86box/m_tandy.h @@ -38,9 +38,6 @@ typedef struct t1kvid_t { uint8_t baseline_hsyncpos; uint8_t baseline_vsyncpos; - uint8_t last_hdisp; - uint8_t last_vdisp; - int calib_countdown; int baseline_ready; int hsync_offset; int vsync_offset; @@ -63,6 +60,7 @@ typedef struct t1kvid_t { uint64_t dispontime; uint64_t dispofftime; pc_timer_t timer; + pc_timer_t calib_timer; int firstline; int lastline; diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c index 7791d664d..3bedf53a4 100644 --- a/src/video/vid_cga.c +++ b/src/video/vid_cga.c @@ -545,34 +545,6 @@ cga_do_blit(int vid_xsize, int firstline, int lastline, int double_type) } } -void -cga_do_blit_tandy(int vid_xsize, int firstline, int lastline, int double_type, int hsync_offset, int vsync_offset) -{ - if (double_type > DOUBLE_NONE) { - if (enable_overscan) { - cga_blit_memtoscreen(0 + hsync_offset, ((firstline - 8) << 1) + (vsync_offset << 1), - vid_xsize, ((lastline - firstline) + 16) << 1, - double_type - ); - } else { - cga_blit_memtoscreen(16 + hsync_offset, (firstline << 1) + (vsync_offset << 1), - vid_xsize, (lastline - firstline) << 1, - double_type - ); - } - } else { - if (enable_overscan) { - video_blit_memtoscreen(0 + hsync_offset, (firstline - 8) + vsync_offset, - vid_xsize, (lastline - firstline) + 8 - ); - } else { - video_blit_memtoscreen(16 + hsync_offset, firstline + vsync_offset, - vid_xsize, lastline - firstline - ); - } - } -} - void cga_poll(void *priv) { diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 0d4daa6fc..4b8ee82ad 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -164,31 +164,50 @@ vid_update_latch(t1kvid_t *vid) vid->crtc[0x11] = lp_latch & 0xff; } -static void -vid_update_display_offset(t1kvid_t *vid) +static int +vid_h_scale(t1kvid_t *vid) { - const int calib_frames = 12; - const int hsync_scale = 16; - const int vsync_scale = 4; + int cwidth; - if (vid->crtc[1] != vid->last_hdisp || vid->crtc[6] != vid->last_vdisp) { - vid->last_hdisp = vid->crtc[1]; - vid->last_vdisp = vid->crtc[6]; - vid->calib_countdown = calib_frames; - vid->baseline_ready = 0; - vid->hsync_offset = 0; - vid->vsync_offset = 0; - return; + if ((vid->mode & 2) && !(vid->mode & 1) && (vid->array[3] & 0x10)) { /* 160x200 */ + cwidth = 32; + } else if (!(vid->mode & 16) && ((vid->mode & 2) || (vid->mode & 4))) { /* 320x200 + 40 column text */ + cwidth = 16; + } else { /* 640x200 + 80 column text */ + cwidth = 8; } - if (vid->calib_countdown > 0) { - vid->calib_countdown--; - vid->baseline_hsyncpos = vid->crtc[2]; - vid->baseline_vsyncpos = vid->crtc[7]; - vid->hsync_offset = 0; - vid->vsync_offset = 0; - if (vid->calib_countdown == 0) - vid->baseline_ready = 1; + return cwidth; +} + +static void +baseline_calib_start(t1kvid_t *vid) +{ + vid->baseline_ready = 0; + vid->hsync_offset = 0; + vid->vsync_offset = 0; + timer_on_auto(&vid->calib_timer, 100000.0); +} + +static void +baseline_calib_finish(void *priv) +{ + tandy_t *dev = (tandy_t *) priv; + t1kvid_t *vid = dev->vid; + + vid->baseline_hsyncpos = vid->crtc[2]; + vid->baseline_vsyncpos = vid->crtc[7]; + vid->baseline_ready = 1; +} + +static void +vid_update_display_offset(t1kvid_t *vid, uint8_t reg) +{ + int hsync_scale = vid_h_scale(vid); + int vsync_scale = vid->crtc[9] + 1; + + if (reg == 1 || reg == 6) { + baseline_calib_start(vid); return; } @@ -196,13 +215,16 @@ vid_update_display_offset(t1kvid_t *vid) vid->hsync_offset = 0; vid->vsync_offset = 0; return; + } else { + switch (reg) { + case 2: + vid->hsync_offset = ((int)vid->baseline_hsyncpos - (int)vid->crtc[2]) * hsync_scale; + break; + case 7: + vid->vsync_offset = ((int)vid->baseline_vsyncpos - (int)vid->crtc[7]) * vsync_scale; + break; + } } - - int hsync_deviation = (int)vid->baseline_hsyncpos - (int)vid->crtc[2]; - int vsync_deviation = (int)vid->baseline_vsyncpos - (int)vid->crtc[7]; - - vid->hsync_offset = hsync_deviation * hsync_scale; - vid->vsync_offset = vsync_deviation * vsync_scale; } void @@ -231,7 +253,10 @@ tandy_vid_out(uint16_t addr, uint8_t val, void *priv) vid->fullchange = changeframecount; recalc_timings(dev); } - vid_update_display_offset(vid); + if ((vid->crtcreg >= 0x01 && vid->crtcreg <= 0x02) || + (vid->crtcreg >= 0x06 && vid->crtcreg <= 0x07)) { + vid_update_display_offset(vid, vid->crtcreg); + } } break; @@ -381,7 +406,7 @@ vid_read(uint32_t addr, void *priv) } static void -vid_render(tandy_t *dev, int line) +vid_render(tandy_t *dev, int line, int hos_offs) { t1kvid_t *vid = dev->vid; uint16_t cursoraddr = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; @@ -396,25 +421,25 @@ vid_render(tandy_t *dev, int line) cols[0] = (vid->array[2] & 0xf) + 16; - for (c = 0; c < 16; c++) { + for (c = 0; c < hos_offs; c++) { if (vid->array[3] & 4) { buffer32->line[line][c] = cols[0]; if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + 16] = cols[0]; + buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = cols[0]; else - buffer32->line[line][c + (vid->crtc[1] << 4) + 16] = cols[0]; + buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = cols[0]; } else if ((vid->mode & 0x12) == 0x12) { buffer32->line[line][c] = 0; if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + 16] = 0; + buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = 0; else - buffer32->line[line][c + (vid->crtc[1] << 4) + 16] = 0; + buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = 0; } else { buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->col & 15) + 16; if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + 16] = (vid->col & 15) + 16; + buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = (vid->col & 15) + 16; else - buffer32->line[line][c + (vid->crtc[1] << 4) + 16] = (vid->col & 15) + 16; + buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = (vid->col & 15) + 16; } } @@ -422,23 +447,23 @@ vid_render(tandy_t *dev, int line) for (x = 0; x < vid->crtc[1] * 2; x++) { dat = (vid->vram[(vid->memaddr << 1) & 0xffff] << 8) | vid->vram[((vid->memaddr << 1) + 1) & 0xffff]; vid->memaddr++; - buffer32->line[line][(x << 2) + 16] = vid->array[((dat >> 12) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + 17] = vid->array[((dat >> 8) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + 18] = vid->array[((dat >> 4) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + 19] = vid->array[(dat & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + hos_offs] = vid->array[((dat >> 12) & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + hos_offs + 1] = vid->array[((dat >> 8) & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + hos_offs + 2] = vid->array[((dat >> 4) & 0xf) + 16] + 16; + buffer32->line[line][(x << 2) + hos_offs + 3] = 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->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; - buffer32->line[line][(x << 3) + 16] = buffer32->line[line][(x << 3) + 17] = + buffer32->line[line][(x << 3) + hos_offs] = buffer32->line[line][(x << 3) + hos_offs + 1] = vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + 18] = buffer32->line[line][(x << 3) + 19] = + buffer32->line[line][(x << 3) + hos_offs + 2] = buffer32->line[line][(x << 3) + hos_offs + 3] = vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + 20] = buffer32->line[line][(x << 3) + 21] = + buffer32->line[line][(x << 3) + hos_offs + 4] = buffer32->line[line][(x << 3) + hos_offs + 5] = vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + 22] = buffer32->line[line][(x << 3) + 23] = + buffer32->line[line][(x << 3) + hos_offs + 6] = buffer32->line[line][(x << 3) + hos_offs + 7] = vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; } } else if (vid->array[3] & 0x10) { /*160x200x16*/ @@ -450,17 +475,17 @@ vid_render(tandy_t *dev, int line) dat = (vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; - buffer32->line[line][(x << 4) + 16] = buffer32->line[line][(x << 4) + 17] = - buffer32->line[line][(x << 4) + 18] = buffer32->line[line][(x << 4) + 19] = + buffer32->line[line][(x << 4) + hos_offs] = buffer32->line[line][(x << 4) + hos_offs + 1] = + buffer32->line[line][(x << 4) + hos_offs + 2] = buffer32->line[line][(x << 4) + hos_offs + 3] = vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 4) + 20] = buffer32->line[line][(x << 4) + 21] = - buffer32->line[line][(x << 4) + 22] = buffer32->line[line][(x << 4) + 23] = + buffer32->line[line][(x << 4) + hos_offs + 4] = buffer32->line[line][(x << 4) + hos_offs + 5] = + buffer32->line[line][(x << 4) + hos_offs + 6] = buffer32->line[line][(x << 4) + hos_offs + 7] = vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 4) + 24] = buffer32->line[line][(x << 4) + 25] = - buffer32->line[line][(x << 4) + 26] = buffer32->line[line][(x << 4) + 27] = + buffer32->line[line][(x << 4) + hos_offs + 8] = buffer32->line[line][(x << 4) + hos_offs + 9] = + buffer32->line[line][(x << 4) + hos_offs + 10] = buffer32->line[line][(x << 4) + hos_offs + 11] = vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 4) + 28] = buffer32->line[line][(x << 4) + 29] = - buffer32->line[line][(x << 4) + 30] = buffer32->line[line][(x << 4) + 31] = + buffer32->line[line][(x << 4) + hos_offs + 12] = buffer32->line[line][(x << 4) + hos_offs + 13] = + buffer32->line[line][(x << 4) + hos_offs + 14] = buffer32->line[line][(x << 4) + hos_offs + 15] = vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; } } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ @@ -471,7 +496,7 @@ vid_render(tandy_t *dev, int line) for (c = 0; c < 8; c++) { chr = (dat >> 6) & 2; chr |= ((dat >> 15) & 1); - buffer32->line[line][(x << 3) + 16 + c] = + buffer32->line[line][(x << 3) + hos_offs + c] = vid->array[(chr & vid->array[1]) + 16] + 16; dat <<= 1; } @@ -491,16 +516,16 @@ vid_render(tandy_t *dev, int line) cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; } if (vid->scanline & 8) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 3) + c + 16] = + buffer32->line[line][(x << 3) + c + hos_offs] = ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; else for (c = 0; c < 8; c++) { if (vid->scanline == 8) - buffer32->line[line][(x << 3) + c + 16] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; + buffer32->line[line][(x << 3) + c + hos_offs] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; else - buffer32->line[line][(x << 3) + c + 16] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; + buffer32->line[line][(x << 3) + c + hos_offs] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; } if (drawcursor) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 3) + c + 16] ^= 15; + buffer32->line[line][(x << 3) + c + hos_offs] ^= 15; vid->memaddr++; } } else if (!(vid->mode & 2)) { @@ -519,21 +544,21 @@ vid_render(tandy_t *dev, int line) } vid->memaddr++; if (vid->scanline & 8) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 4) + (c << 1) + 16] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = + buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; else for (c = 0; c < 8; c++) { if (vid->scanline == 8) - buffer32->line[line][(x << 4) + (c << 1) + 16] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = + buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; else - buffer32->line[line][(x << 4) + (c << 1) + 16] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = + buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; } if (drawcursor) for (c = 0; c < 16; c++) - buffer32->line[line][(x << 4) + c + 16] ^= 15; + buffer32->line[line][(x << 4) + c + hos_offs] ^= 15; } } else if (!(vid->mode & 16)) { cols[0] = (vid->col & 15); @@ -560,8 +585,8 @@ vid_render(tandy_t *dev, int line) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; for (c = 0; c < 8; c++) { - buffer32->line[line][(x << 4) + (c << 1) + 16] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + 16] = cols[dat >> 14]; + buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = + buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = cols[dat >> 14]; dat <<= 2; } } @@ -573,7 +598,7 @@ vid_render(tandy_t *dev, int line) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; for (c = 0; c < 16; c++) { - buffer32->line[line][(x << 4) + c + 16] = buffer32->line[(line) + 1][(x << 4) + c + 16] = cols[dat >> 15]; + buffer32->line[line][(x << 4) + c + hos_offs] = buffer32->line[(line) + 1][(x << 4) + c + hos_offs] = cols[dat >> 15]; dat <<= 1; } } @@ -581,35 +606,35 @@ vid_render(tandy_t *dev, int line) } static void -vid_render_blank(tandy_t *dev, int line) +vid_render_blank(tandy_t *dev, int line, int hos_offs_tot) { t1kvid_t *vid = dev->vid; if (vid->array[3] & 4) { if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 32, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_offs_tot, (vid->array[2] & 0xf) + 16); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 32, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_offs_tot, (vid->array[2] & 0xf) + 16); } else { int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 32, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_offs_tot, cols); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 32, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_offs_tot, cols); } } static void -vid_render_process(tandy_t *dev, int line) +vid_render_process(tandy_t *dev, int line, int hos_offs_tot) { t1kvid_t *vid = dev->vid; int x; if (vid->mode & 1) - x = (vid->crtc[1] << 3) + 32; + x = (vid->crtc[1] << 3) + hos_offs_tot; else - x = (vid->crtc[1] << 4) + 32; + x = (vid->crtc[1] << 4) + hos_offs_tot; if (!dev->is_sl2 && vid->composite) Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); @@ -628,6 +653,10 @@ vid_poll(void *priv) int oldvc; int scanline_old; int old_ma; + int hscale = vid_h_scale(vid); + int hscale_tot = hscale << 1; + int hos_offs = hscale + vid->hsync_offset; + int hos_offs_tot = hscale_tot + vid->hsync_offset; if (!vid->linepos) { timer_advance_u64(&vid->timer, vid->dispofftime); @@ -636,6 +665,20 @@ vid_poll(void *priv) scanline_old = vid->scanline; if ((vid->crtc[8] & 3) == 3) vid->scanline = (vid->scanline << 1) & 7; + + int border_col; + if (vid->array[3] & 4) { + border_col = (vid->array[2] & 0xf) + 16; + } else { + border_col = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; + } + if (vid->double_type > DOUBLE_NONE) { + hline(buffer32, 0, vid->displine << 1, xsize, border_col); + hline(buffer32, 0, (vid->displine << 1) + 1, xsize, border_col); + } else { + hline(buffer32, 0, vid->displine, xsize, border_col); + } + if (vid->dispon) { if (vid->displine < vid->firstline) { vid->firstline = vid->displine; @@ -644,39 +687,39 @@ vid_poll(void *priv) vid->lastline = vid->displine; switch (vid->double_type) { default: - vid_render(dev, vid->displine << 1); - vid_render_blank(dev, (vid->displine << 1) + 1); + vid_render(dev, vid->displine << 1, hos_offs); + vid_render_blank(dev, (vid->displine << 1) + 1, hos_offs_tot); break; case DOUBLE_NONE: - vid_render(dev, vid->displine); + vid_render(dev, vid->displine, hos_offs); break; case DOUBLE_SIMPLE: old_ma = vid->memaddr; - vid_render(dev, vid->displine << 1); + vid_render(dev, vid->displine << 1, hos_offs); vid->memaddr = old_ma; - vid_render(dev, (vid->displine << 1) + 1); + vid_render(dev, (vid->displine << 1) + 1, hos_offs); break; } } else switch (vid->double_type) { default: - vid_render_blank(dev, vid->displine << 1); + vid_render_blank(dev, vid->displine << 1, hos_offs_tot); break; case DOUBLE_NONE: - vid_render_blank(dev, vid->displine); + vid_render_blank(dev, vid->displine, hos_offs_tot); break; case DOUBLE_SIMPLE: - vid_render_blank(dev, vid->displine << 1); - vid_render_blank(dev, (vid->displine << 1) + 1); + vid_render_blank(dev, vid->displine << 1, hos_offs_tot); + vid_render_blank(dev, (vid->displine << 1) + 1, hos_offs_tot); break; } switch (vid->double_type) { default: - vid_render_process(dev, vid->displine << 1); - vid_render_process(dev, (vid->displine << 1) + 1); + vid_render_process(dev, vid->displine << 1, hos_offs_tot); + vid_render_process(dev, (vid->displine << 1) + 1, hos_offs_tot); break; case DOUBLE_NONE: - vid_render_process(dev, vid->displine); + vid_render_process(dev, vid->displine, hos_offs_tot); break; } @@ -746,9 +789,9 @@ vid_poll(void *priv) picint(1 << 5); if (vid->crtc[7]) { if (vid->mode & 1) - x = (vid->crtc[1] << 3) + 32; + x = (vid->crtc[1] << 3) + hscale_tot; else - x = (vid->crtc[1] << 4) + 32; + x = (vid->crtc[1] << 4) + hscale_tot; vid->lastline++; xs_temp = x; @@ -760,20 +803,35 @@ vid_poll(void *priv) if (ys_temp < 32) ys_temp = 400; if (!enable_overscan) - xs_temp -= 32; + xs_temp -= hscale_tot; if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { xsize = xs_temp; ysize = ys_temp; - set_screen_size(xsize, ysize + (enable_overscan ? 32 : 0)); + set_screen_size(xsize, ysize + (enable_overscan ? 16 : 0)); if (video_force_resize_get()) video_force_resize_set(0); } - cga_do_blit_tandy(xsize, vid->firstline, vid->lastline, vid->double_type, vid->hsync_offset, vid->vsync_offset); + if (vid->double_type > DOUBLE_NONE) { + if (enable_overscan) + cga_blit_memtoscreen(0, ((vid->firstline - 4) << 1) - (vid->vsync_offset << 1), + xsize, ((vid->lastline - vid->firstline) << 1) + 16, + vid->double_type); + else + cga_blit_memtoscreen(hscale, (vid->firstline << 1) - (vid->vsync_offset << 1), + xsize, (vid->lastline - vid->firstline) << 1, + vid->double_type); + } else { + if (enable_overscan) + video_blit_memtoscreen(0, (vid->firstline - 4) - vid->vsync_offset, + xsize, (vid->lastline - vid->firstline) + 8); + else + video_blit_memtoscreen(hscale, vid->firstline - vid->vsync_offset, + xsize, vid->lastline - vid->firstline); + } } - frames++; video_res_x = xsize; @@ -828,6 +886,8 @@ tandy_vid_close(void *priv) { tandy_t *dev = (tandy_t *) priv; + timer_on_auto(&dev->vid->calib_timer, 0.0); + free(dev->vid); dev->vid = NULL; } @@ -841,9 +901,6 @@ tandy_vid_init(tandy_t *dev) vid = calloc(1, sizeof(t1kvid_t)); vid->baseline_hsyncpos = 0; vid->baseline_vsyncpos = 0; - vid->last_hdisp = 0xFF; - vid->last_vdisp = 0xFF; - vid->calib_countdown = 0; vid->baseline_ready = 0; vid->hsync_offset = 0; vid->vsync_offset = 0; @@ -859,13 +916,15 @@ tandy_vid_init(tandy_t *dev) if (dev->is_sl2) { vid->b8000_limit = 0x8000; vid->planar_ctrl = 4; - overscan_x = overscan_y = 16; + overscan_x = vid_h_scale(vid) << 1; + overscan_y = 16; io_sethandler(0x0065, 1, tandy_vid_in, NULL, NULL, tandy_vid_out, NULL, NULL, dev); } else vid->b8000_mask = 0x3fff; timer_add(&vid->timer, vid_poll, dev, 1); + timer_add(&vid->calib_timer, baseline_calib_finish, dev, 0); mem_mapping_add(&vid->mapping, 0xb8000, 0x08000, vid_read, NULL, NULL, vid_write, NULL, NULL, NULL, 0, dev); io_sethandler(0x03d0, 16, From de1f89d8c98b36be241f0adb360aa63c10bea5b0 Mon Sep 17 00:00:00 2001 From: Valerio Date: Fri, 12 Sep 2025 15:36:18 +0200 Subject: [PATCH 003/233] initial --- src/include/86box/unix_osd.h | 11 ++ src/unix/CMakeLists.txt | 1 + src/unix/unix.c | 238 ++++++++++++++-------- src/unix/unix_osd.c | 369 +++++++++++++++++++++++++++++++++++ src/utils/crc32.c | 3 + 5 files changed, 538 insertions(+), 84 deletions(-) create mode 100644 src/include/86box/unix_osd.h create mode 100644 src/unix/unix_osd.c diff --git a/src/include/86box/unix_osd.h b/src/include/86box/unix_osd.h new file mode 100644 index 000000000..4ae93a8c2 --- /dev/null +++ b/src/include/86box/unix_osd.h @@ -0,0 +1,11 @@ +#ifndef _UNIX_OSD_H +#define _UNIX_OSD_H + +#include + +extern int osd_open(SDL_Event event); +extern int osd_close(SDL_Event event); +extern int osd_handle(SDL_Event event); + +#endif /*_UNIX_OSD_H*/ + diff --git a/src/unix/CMakeLists.txt b/src/unix/CMakeLists.txt index 724ab041f..1d428fa2b 100644 --- a/src/unix/CMakeLists.txt +++ b/src/unix/CMakeLists.txt @@ -44,6 +44,7 @@ endif() add_library(ui OBJECT unix_sdl.c + unix_osd.c unix_cdrom.c dummy_cdrom_ioctl.c ) diff --git a/src/unix/unix.c b/src/unix/unix.c index 4f3990590..d15646e2b 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -41,6 +41,7 @@ #include <86box/device.h> #include <86box/gameport.h> #include <86box/unix_sdl.h> +#include <86box/unix_osd.h> #include "cpu.h" #include <86box/timer.h> #include <86box/nvr.h> @@ -291,7 +292,7 @@ plat_get_string(int i) case STRING_MONITOR_SLEEP: return L"Monitor in sleep mode"; case STRING_EDID_TOO_LARGE: - return "EDID file \"%ls\" is too large."; + return L"EDID file \"%ls\" is too large."; } return L""; } @@ -1287,98 +1288,30 @@ main(int argc, char **argv) SDL_AddTimer(1000, timer_onesec, NULL); while (!is_quit) { static int mouse_inside = 0; + static int r_alt_pressed = 0; + static int flag_osd_open = 0; - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - exit_event = 1; - break; - case SDL_MOUSEWHEEL: + while (SDL_PollEvent(&event)) + { + if (flag_osd_open == 1) + { + // route almost everything to the OSD + switch (event.type) + { + case SDL_QUIT: { - if (mouse_capture || video_fullscreen) { - if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) { - event.wheel.x *= -1; - event.wheel.y *= -1; - } - SDL_LockMutex(mousemutex); - mouse_set_z(event.wheel.y); - SDL_UnlockMutex(mousemutex); - } + exit_event = 1; break; } - case SDL_MOUSEMOTION: - { - if (mouse_capture || video_fullscreen) { - SDL_LockMutex(mousemutex); - mouse_scale(event.motion.xrel, event.motion.yrel); - SDL_UnlockMutex(mousemutex); - } - break; - } - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: - { - if ((event.button.button == SDL_BUTTON_LEFT) - && !(mouse_capture || video_fullscreen) - && event.button.state == SDL_RELEASED - && mouse_inside) { - plat_mouse_capture(1); - break; - } - if (mouse_get_buttons() < 3 && event.button.button == SDL_BUTTON_MIDDLE && !video_fullscreen) { - plat_mouse_capture(0); - break; - } - if (mouse_capture || video_fullscreen) { - int buttonmask = 0; - - switch (event.button.button) { - case SDL_BUTTON_LEFT: - buttonmask = 1; - break; - case SDL_BUTTON_RIGHT: - buttonmask = 2; - break; - case SDL_BUTTON_MIDDLE: - buttonmask = 4; - break; - case SDL_BUTTON_X1: - buttonmask = 8; - break; - case SDL_BUTTON_X2: - buttonmask = 16; - break; - } - SDL_LockMutex(mousemutex); - if (event.button.state == SDL_PRESSED) - mouse_set_buttons_ex(mouse_get_buttons_ex() | buttonmask); - else - mouse_set_buttons_ex(mouse_get_buttons_ex() & ~buttonmask); - SDL_UnlockMutex(mousemutex); - } - break; - } - case SDL_RENDER_DEVICE_RESET: - case SDL_RENDER_TARGETS_RESET: + case SDL_RENDER_DEVICE_RESET: + case SDL_RENDER_TARGETS_RESET: { extern void sdl_reinit_texture(void); sdl_reinit_texture(); break; } - case SDL_KEYDOWN: - case SDL_KEYUP: - { - uint16_t xtkey = 0; - - switch (event.key.keysym.scancode) { - default: - xtkey = sdl_to_xt[event.key.keysym.scancode]; - break; - } - keyboard_input(event.key.state == SDL_PRESSED, xtkey); - } - case SDL_WINDOWEVENT: + case SDL_WINDOWEVENT: { switch (event.window.event) { case SDL_WINDOWEVENT_ENTER: @@ -1389,9 +1322,146 @@ main(int argc, char **argv) break; } } + default: + // route everything else + flag_osd_open = osd_handle(event); + + if (flag_osd_open == 0) + { + // close it + osd_close(event); + } + + break; + } + } + else + { + switch (event.type) + { + case SDL_QUIT: + exit_event = 1; + break; + case SDL_MOUSEWHEEL: + { + if (mouse_capture || video_fullscreen) { + if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) { + event.wheel.x *= -1; + event.wheel.y *= -1; + } + SDL_LockMutex(mousemutex); + mouse_set_z(event.wheel.y); + SDL_UnlockMutex(mousemutex); + } + break; + } + case SDL_MOUSEMOTION: + { + if (mouse_capture || video_fullscreen) { + SDL_LockMutex(mousemutex); + mouse_scale(event.motion.xrel, event.motion.yrel); + SDL_UnlockMutex(mousemutex); + } + break; + } + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + { + if ((event.button.button == SDL_BUTTON_LEFT) + && !(mouse_capture || video_fullscreen) + && event.button.state == SDL_RELEASED + && mouse_inside) { + plat_mouse_capture(1); + break; + } + if (mouse_get_buttons() < 3 && event.button.button == SDL_BUTTON_MIDDLE && !video_fullscreen) { + plat_mouse_capture(0); + break; + } + if (mouse_capture || video_fullscreen) { + int buttonmask = 0; + + switch (event.button.button) { + case SDL_BUTTON_LEFT: + buttonmask = 1; + break; + case SDL_BUTTON_RIGHT: + buttonmask = 2; + break; + case SDL_BUTTON_MIDDLE: + buttonmask = 4; + break; + case SDL_BUTTON_X1: + buttonmask = 8; + break; + case SDL_BUTTON_X2: + buttonmask = 16; + break; + } + SDL_LockMutex(mousemutex); + if (event.button.state == SDL_PRESSED) + mouse_set_buttons_ex(mouse_get_buttons_ex() | buttonmask); + else + mouse_set_buttons_ex(mouse_get_buttons_ex() & ~buttonmask); + SDL_UnlockMutex(mousemutex); + } + break; + } + case SDL_RENDER_DEVICE_RESET: + case SDL_RENDER_TARGETS_RESET: + { + extern void sdl_reinit_texture(void); + + sdl_reinit_texture(); + break; + } + case SDL_KEYDOWN: + case SDL_KEYUP: + { + uint16_t xtkey = 0; + + if (event.key.keysym.scancode == SDL_SCANCODE_RALT) + { + if (event.type == SDL_KEYDOWN) + r_alt_pressed = 1; + else + r_alt_pressed = 0; + } + + if (r_alt_pressed && event.type == SDL_KEYDOWN && event.key.keysym.scancode == SDL_SCANCODE_G) + { + // open OSD! + flag_osd_open = osd_open(event); + // we can assume alt-gr has been released + r_alt_pressed = 0; + break; + } + + switch (event.key.keysym.scancode) { + default: + xtkey = sdl_to_xt[event.key.keysym.scancode]; + break; + } + + keyboard_input(event.key.state == SDL_PRESSED, xtkey); + } + case SDL_WINDOWEVENT: + { + switch (event.window.event) { + case SDL_WINDOWEVENT_ENTER: + mouse_inside = 1; + break; + case SDL_WINDOWEVENT_LEAVE: + mouse_inside = 0; + break; + } + } + } } } - if (blitreq) { + + // blit only if the OSD is closed + if (blitreq && !flag_osd_open) { extern void sdl_blit(int x, int y, int w, int h); sdl_blit(params.x, params.y, params.w, params.h); } diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c new file mode 100644 index 000000000..48c801117 --- /dev/null +++ b/src/unix/unix_osd.c @@ -0,0 +1,369 @@ +#include +#include + +#include +#include +#include +#include +#include +/* This #undef is needed because a SDL include header redefines HAVE_STDARG_H. */ +#undef HAVE_STDARG_H +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/plat.h> +#include <86box/plat_dynld.h> +#include <86box/video.h> +#include <86box/ui.h> +#include <86box/version.h> +#include <86box/unix_sdl.h> +#include <86box/unix_osd.h> + +#include +#include +#include + +static int SCREEN_W = 640; +static int SCREEN_H = 480; +static int BOX_W = 240; +static int BOX_H = 160; +#define LINE_HEIGHT 16 +#define TITLE_HEIGHT 16 +#define SCROLLBAR_WIDTH 6 +#define CHAR_W 8 +#define CHAR_H 8 + +extern SDL_Window *sdl_win; +extern SDL_Renderer *sdl_render; + +typedef enum { + STATE_MENU, + STATE_FILESELECT +} AppState; + +static const char *menu_items[] = { + "fddload - Load floppy disk image", + "cdload - Load CD-ROM image", + "rdiskload - Load removable disk image", + "cartload - Load cartridge image", + "moload - Load MO image", + "fddeject - eject disk from floppy drive", + "cdeject - eject disc from CD-ROM drive", + "rdiskeject - eject removable disk", + "carteject - eject cartridge", + "moeject - eject image from MO drive", + "hardreset - hard reset the emulated system", + "pause - pause the the emulated system", + "fullscreen - toggle fullscreen", + "version - print version and license information", + "exit - exit 86Box", + "close OSD" +}; +#define MENU_ITEMS (sizeof(menu_items) / sizeof(menu_items[0])) + +static char selected_file[256] = ""; // memoria della selezione + +static SDL_Texture *font_texture = NULL; +static int font_cols = 16; // numero colonne nella bitmap font (16x16 caratteri) +static int font_rows = 16; + +static int selected = 0; +static int file_selected = 0; +static int scroll_offset = 0; +static AppState state = STATE_MENU; + +static char files[100][256]; +static int file_count = 0; + +static int max_visible = 0; + +// ------------------- Funzione: trova i file .iso ------------------- +int load_iso_files(char files[][256], int max_files) { + DIR *d; + struct dirent *dir; + int count = 0; + d = opendir("."); + if (!d) return 0; + + while ((dir = readdir(d)) != NULL && count < max_files) { + if (strstr(dir->d_name, ".iso")) { + strncpy(files[count], dir->d_name, 255); + files[count][255] = '\0'; + count++; + } + } + closedir(d); + return count; +} + +// ------------------- Disegna testo da bitmap font ------------------- +void draw_text(SDL_Renderer *renderer, const char *text, int x, int y, SDL_Color color) { + if (!font_texture) return; + SDL_SetTextureColorMod(font_texture, color.r, color.g, color.b); + + int i = 0; + while (text[i]) { + unsigned char c = text[i]; + int tx = (c % font_cols) * CHAR_W; + int ty = (c / font_cols) * CHAR_H; + SDL_Rect src = {tx, ty, CHAR_W, CHAR_H}; + SDL_Rect dst = {x + i * CHAR_W, y, CHAR_W, CHAR_H}; + SDL_RenderCopy(renderer, font_texture, &src, &dst); + i++; + } +} + +// ------------------- Disegna cornice rossa + riquadro ------------------- +void draw_box_with_border(SDL_Renderer *renderer, SDL_Rect box) { + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderDrawRect(renderer, &box); + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_Rect inner = {box.x + 2, box.y + 2, box.w - 4, box.h - 4}; + SDL_RenderDrawRect(renderer, &inner); + + SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); + SDL_RenderFillRect(renderer, &inner); +} + +// ------------------- Disegna menu principale ------------------- +void draw_menu(SDL_Renderer *renderer, int selected) { + SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); + SDL_RenderClear(renderer); + + int x0 = (SCREEN_W - BOX_W) / 2; + int y0 = (SCREEN_H - BOX_H) / 2; + SDL_Rect box = {x0, y0, BOX_W, BOX_H}; + draw_box_with_border(renderer, box); + + draw_text(renderer, "MAIN MENU", x0 + 20, y0 + 5, (SDL_Color){255,255,255,255}); + + for (int i = 0; i < MENU_ITEMS; i++) { + int tx = x0 + 20; + int ty = y0 + TITLE_HEIGHT + i * LINE_HEIGHT; + + SDL_Color textColor; + SDL_Rect bgRect = {tx - 5, ty - 2, BOX_W - 20, LINE_HEIGHT}; + + if (i == selected) { + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_RenderFillRect(renderer, &bgRect); + textColor = (SDL_Color){0, 0, 0, 255}; + } else { + textColor = (SDL_Color){255, 255, 0, 255}; + } + + draw_text(renderer, menu_items[i], tx, ty, textColor); + } + + if (selected_file[0] != '\0') { + char buffer[300]; + snprintf(buffer, sizeof(buffer), "File: %s", selected_file); + draw_text(renderer, buffer, 20, SCREEN_H - 20, (SDL_Color){255,255,255,255}); + } + + SDL_RenderPresent(renderer); +} + +// ------------------- Disegna selezione file ------------------- +void draw_file_selector(SDL_Renderer *renderer, + char files[][256], int file_count, + int selected, int scroll_offset, int max_visible) { + SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); + SDL_RenderClear(renderer); + + int x0 = (SCREEN_W - BOX_W) / 2; + int y0 = (SCREEN_H - BOX_H) / 2; + SDL_Rect box = {x0, y0, BOX_W, BOX_H}; + draw_box_with_border(renderer, box); + + draw_text(renderer, "SELEZIONE FILE", x0 + 20, y0 + 5, (SDL_Color){255,255,255,255}); + + if (file_count == 0) { + draw_text(renderer, "Nessun file trovato", + x0 + 20, y0 + TITLE_HEIGHT + 10, + (SDL_Color){255, 255, 0, 255}); + } else { + for (int i = 0; i < max_visible && (i + scroll_offset) < file_count; i++) { + int index = i + scroll_offset; + int tx = x0 + 20; + int ty = y0 + TITLE_HEIGHT + i * LINE_HEIGHT; + + SDL_Color textColor; + SDL_Rect bgRect = {tx - 5, ty - 2, 200, LINE_HEIGHT}; + + if (index == selected) { + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_RenderFillRect(renderer, &bgRect); + textColor = (SDL_Color){0, 0, 0, 255}; + } else { + textColor = (SDL_Color){255, 255, 0, 255}; + } + + draw_text(renderer, files[index], tx, ty, textColor); + } + } + + SDL_RenderPresent(renderer); +} + +int osd_open(SDL_Event event) +{ + // ok opened + fprintf(stderr, "OSD OPEN\n"); + + SDL_GetWindowSize(sdl_win, &SCREEN_W, &SCREEN_H); + BOX_W = (SCREEN_W / 4) * 3; + BOX_H = (SCREEN_H / 4) * 3; + + max_visible = (BOX_H - TITLE_HEIGHT) / LINE_HEIGHT; + + // Carica font bitmap (font.bmp 128x128, 16x16 caratteri, 8x8 ciascuno) + SDL_Surface *font_surface = SDL_LoadBMP("font.bmp"); + if (!font_surface) { + printf("Errore caricamento font.bmp: %s\n", SDL_GetError()); + return 1; + } + // Imposta trasparenza sul nero puro + SDL_SetColorKey(font_surface, SDL_TRUE, SDL_MapRGB(font_surface->format, 0, 0, 0)); + font_texture = SDL_CreateTextureFromSurface(sdl_render, font_surface); + SDL_FreeSurface(font_surface); + + return 1; +} + +int osd_close(SDL_Event event) +{ + // ok closed + fprintf(stderr, "OSD CLOSE\n"); + + SDL_DestroyTexture(font_texture); + + return 1; +} + + +int osd_handle(SDL_Event event) +{ + fprintf(stderr, "OSD HANDLE\n"); + + if (state == STATE_MENU) { + draw_menu(sdl_render, selected); + } else if (state == STATE_FILESELECT) { + draw_file_selector(sdl_render, files, file_count, file_selected, scroll_offset, max_visible); + } + + if (event.type == SDL_KEYUP) + { + if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE) + { + // Close the OSD + fprintf(stderr, "OSD HANDLE: escape\n"); + return 0; + } + } + + if (event.type == SDL_KEYDOWN) { + if (state == STATE_MENU) { + switch (event.key.keysym.sym) { + case SDLK_UP: + selected = (selected - 1 + MENU_ITEMS) % MENU_ITEMS; + break; + case SDLK_DOWN: + selected = (selected + 1) % MENU_ITEMS; + break; + case SDLK_RETURN: + case SDLK_KP_ENTER: + if (selected == MENU_ITEMS - 1) { + return 0; // Esci + } + else if (strcmp(menu_items[selected], "Carica partita") == 0) + { + file_count = load_iso_files(files, 100); + file_selected = 0; + scroll_offset = 0; + state = STATE_FILESELECT; + } + else + { + switch (selected) + { + case 0 : // "fddload - Load floppy disk image", + break; + case 1 : // "cdload - Load CD-ROM image", + break; + case 2 : // "rdiskload - Load removable disk image", + break; + case 3 : // "cartload - Load cartridge image", + break; + case 4 : // "moload - Load MO image", + break; + case 5 : // "fddeject - eject disk from floppy drive", + break; + case 6 : // "cdeject - eject disc from CD-ROM drive", + break; + case 7 : // "rdiskeject - eject removable disk", + break; + case 8 : // "carteject - eject cartridge", + break; + case 9 : // "moeject - eject image from MO drive", + break; + case 10 : // "hardreset - hard reset the emulated system", + break; + case 11 : // "pause - pause the the emulated system", + break; + case 12 : // "fullscreen - toggle fullscreen", + break; + case 13 : // "version - print version and license information", + break; + case 14 : // "exit - exit 86Box", + break; + case 15 : // "close OSD" + break; + } + + printf("Hai scelto: %s\n", menu_items[selected]); + } + break; + } + } else if (state == STATE_FILESELECT) { + if (file_count == 0) { + if (event.key.keysym.sym == SDLK_ESCAPE) { + state = STATE_MENU; + } + } else { + switch (event.key.keysym.sym) { + case SDLK_UP: + if (file_selected > 0) { + file_selected--; + if (file_selected < scroll_offset) { + scroll_offset--; + } + } + break; + case SDLK_DOWN: + if (file_selected < file_count - 1) { + file_selected++; + if (file_selected >= scroll_offset + max_visible) { + scroll_offset++; + } + } + break; + case SDLK_RETURN: + case SDLK_KP_ENTER: + strncpy(selected_file, files[file_selected], 255); + selected_file[255] = '\0'; + printf("Selezionato file: %s\n", selected_file); + state = STATE_MENU; + break; + case SDLK_ESCAPE: + state = STATE_MENU; + break; + } + } + } + } + + // Keep it open + return 1; +} diff --git a/src/utils/crc32.c b/src/utils/crc32.c index 6993654ae..8c4e96c3c 100644 --- a/src/utils/crc32.c +++ b/src/utils/crc32.c @@ -22,7 +22,10 @@ #include #include +#ifndef __USE_LARGEFILE64 #define __USE_LARGEFILE64 +#endif + #include #if (defined(__HAIKU__) || defined(__unix__) || defined(__APPLE__)) && !defined(__linux__) From a2d66eea51f02d88b0bd995d7c9762b35c6afaf3 Mon Sep 17 00:00:00 2001 From: Valerio Date: Fri, 12 Sep 2025 16:34:20 +0200 Subject: [PATCH 004/233] initial --- src/include/86box/unix_osd_font.h | 4109 +++++++++++++++++++++++++++++ src/unix/unix.c | 438 +-- src/unix/unix_osd.c | 29 +- 3 files changed, 4352 insertions(+), 224 deletions(-) create mode 100644 src/include/86box/unix_osd_font.h diff --git a/src/include/86box/unix_osd_font.h b/src/include/86box/unix_osd_font.h new file mode 100644 index 000000000..412d367c7 --- /dev/null +++ b/src/include/86box/unix_osd_font.h @@ -0,0 +1,4109 @@ +#ifndef UNIX_OSD_FONT_H_INCLUDED +#define UNIX_OSD_FONT_H_INCLUDED + +unsigned char _________font_bmp[] = { + 0x42, 0x4d, 0x36, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, + 0x00, 0x00, 0xc4, 0x0e, 0x00, 0x00, 0xc4, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa +}; +unsigned int _________font_bmp_len = 49206; + +#endif // UNIX_OSD_FONT_H_INCLUDED diff --git a/src/unix/unix.c b/src/unix/unix.c index d15646e2b..45f108ef2 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -974,67 +974,48 @@ timer_onesec(uint32_t interval, UNUSED(void *param)) } void -monitor_thread(UNUSED(void *param)) +unix_executeLine(char *line) { -#ifndef USE_CLI - if (isatty(fileno(stdin)) && isatty(fileno(stdout))) { - char *line = NULL; - size_t n; + if (line) { + int cmdargc = 0; + char *linecpy; - printf("86Box monitor console.\n"); - while (!exit_event) { - if (feof(stdin)) + line[strcspn(line, "\r\n")] = '\0'; + linecpy = strdup(line); + if (!linecpy) { + free(line); + line = NULL; + return; + } + if (f_add_history) + f_add_history(line); + memset(xargv, 0, sizeof(xargv)); + while (1) { + xargv[cmdargc++] = local_strsep(&linecpy, " "); + if (xargv[cmdargc - 1] == NULL || cmdargc >= 512) break; -#ifdef ENABLE_READLINE - if (f_readline) - line = f_readline("(86Box) "); - else { -#endif - printf("(86Box) "); - (void) !getline(&line, &n, stdin); -#ifdef ENABLE_READLINE - } -#endif - if (line) { - int cmdargc = 0; - char *linecpy; - - line[strcspn(line, "\r\n")] = '\0'; - linecpy = strdup(line); - if (!linecpy) { - free(line); - line = NULL; - continue; - } - if (f_add_history) - f_add_history(line); - memset(xargv, 0, sizeof(xargv)); - while (1) { - xargv[cmdargc++] = local_strsep(&linecpy, " "); - if (xargv[cmdargc - 1] == NULL || cmdargc >= 512) - break; - } - cmdargc--; - if (strncasecmp(xargv[0], "help", 4) == 0) { - printf( - "fddload - Load floppy disk image into drive .\n" - "cdload - Load CD-ROM image into drive .\n" - "rdiskload - Load removable disk image into removable disk drive .\n" - "cartload - Load cartridge image into cartridge drive .\n" - "moload - Load MO image into MO drive .\n\n" - "fddeject - eject disk from floppy drive .\n" - "cdeject - eject disc from CD-ROM drive .\n" - "rdiskeject - eject removable disk image from removable disk drive .\n" - "carteject - eject cartridge from drive .\n" - "moeject - eject image from MO drive .\n\n" - "hardreset - hard reset the emulated system.\n" - "pause - pause the the emulated system.\n" - "fullscreen - toggle fullscreen.\n" - "version - print version and license information.\n" - "exit - exit 86Box.\n"); - } else if (strncasecmp(xargv[0], "exit", 4) == 0) { - exit_event = 1; - } else if (strncasecmp(xargv[0], "version", 7) == 0) { + } + cmdargc--; + if (strncasecmp(xargv[0], "help", 4) == 0) { + printf( + "fddload - Load floppy disk image into drive .\n" + "cdload - Load CD-ROM image into drive .\n" + "rdiskload - Load removable disk image into removable disk drive .\n" + "cartload - Load cartridge image into cartridge drive .\n" + "moload - Load MO image into MO drive .\n\n" + "fddeject - eject disk from floppy drive .\n" + "cdeject - eject disc from CD-ROM drive .\n" + "rdiskeject - eject removable disk image from removable disk drive .\n" + "carteject - eject cartridge from drive .\n" + "moeject - eject image from MO drive .\n\n" + "hardreset - hard reset the emulated system.\n" + "pause - pause the the emulated system.\n" + "fullscreen - toggle fullscreen.\n" + "version - print version and license information.\n" + "exit - exit 86Box.\n"); + } else if (strncasecmp(xargv[0], "exit", 4) == 0) { + exit_event = 1; + } else if (strncasecmp(xargv[0], "version", 7) == 0) { # ifndef EMU_GIT_HASH # define EMU_GIT_HASH "0000000" # endif @@ -1061,169 +1042,194 @@ monitor_thread(UNUSED(void *param)) # define DYNAREC_STR "no dynarec" # endif - printf( - "%s v%s [%s] [%s, %s]\n\n" - "An emulator of old computers\n" - "Authors: Miran GrÄa (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), " - "Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), " - "Tiseno100, reenigne, and others.\n" - "With previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n" - "Released under the GNU General Public License version 2 or later. See LICENSE for more information.\n", - EMU_NAME, EMU_VERSION_FULL, EMU_GIT_HASH, ARCH_STR, DYNAREC_STR); - } else if (strncasecmp(xargv[0], "fullscreen", 10) == 0) { - video_fullscreen = video_fullscreen ? 0 : 1; - fullscreen_pending = 1; - } else if (strncasecmp(xargv[0], "pause", 5) == 0) { - plat_pause(dopause ^ 1); - printf("%s", dopause ? "Paused.\n" : "Unpaused.\n"); - } else if (strncasecmp(xargv[0], "hardreset", 9) == 0) { - pc_reset_hard(); - } else if (strncasecmp(xargv[0], "cdload", 6) == 0 && cmdargc >= 3) { - uint8_t id; - bool err = false; - char fn[PATH_MAX]; + printf( + "%s v%s [%s] [%s, %s]\n\n" + "An emulator of old computers\n" + "Authors: Miran GrÄa (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), " + "Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), " + "Tiseno100, reenigne, and others.\n" + "With previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n" + "Released under the GNU General Public License version 2 or later. See LICENSE for more information.\n", + EMU_NAME, EMU_VERSION_FULL, EMU_GIT_HASH, ARCH_STR, DYNAREC_STR); + } else if (strncasecmp(xargv[0], "fullscreen", 10) == 0) { + video_fullscreen = video_fullscreen ? 0 : 1; + fullscreen_pending = 1; + } else if (strncasecmp(xargv[0], "pause", 5) == 0) { + plat_pause(dopause ^ 1); + printf("%s", dopause ? "Paused.\n" : "Unpaused.\n"); + } else if (strncasecmp(xargv[0], "hardreset", 9) == 0) { + pc_reset_hard(); + } else if (strncasecmp(xargv[0], "cdload", 6) == 0 && cmdargc >= 3) { + uint8_t id; + bool err = false; + char fn[PATH_MAX]; - if (!xargv[2] || !xargv[1]) { - free(line); - free(linecpy); - line = NULL; - continue; - } - id = atoi(xargv[1]); - memset(fn, 0, sizeof(fn)); - if (xargv[2][0] == '\'' || xargv[2][0] == '"') { - int curarg = 2; - - for (curarg = 2; curarg < cmdargc; curarg++) { - if (strlen(fn) + strlen(xargv[curarg]) >= PATH_MAX) { - err = true; - fprintf(stderr, "Path name too long.\n"); - } - strcat(fn, xargv[curarg] + (xargv[curarg][0] == '\'' || xargv[curarg][0] == '"')); - if (fn[strlen(fn) - 1] == '\'' - || fn[strlen(fn) - 1] == '"') { - break; - } - strcat(fn, " "); - } - } else { - if (strlen(xargv[2]) < PATH_MAX) { - strcpy(fn, xargv[2]); - } else { - fprintf(stderr, "Path name too long.\n"); - } - } - if (!err) { - - if (fn[strlen(fn) - 1] == '\'' - || fn[strlen(fn) - 1] == '"') - fn[strlen(fn) - 1] = '\0'; - printf("Inserting disc into CD-ROM drive %hhu: %s\n", id, fn); - cdrom_mount(id, fn); - } - } else if (strncasecmp(xargv[0], "fddeject", 8) == 0 && cmdargc >= 2) { - floppy_eject(atoi(xargv[1])); - } else if (strncasecmp(xargv[0], "cdeject", 8) == 0 && cmdargc >= 2) { - cdrom_mount(atoi(xargv[1]), ""); - } else if (strncasecmp(xargv[0], "moeject", 8) == 0 && cmdargc >= 2) { - mo_eject(atoi(xargv[1])); - } else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) { - cartridge_eject(atoi(xargv[1])); - } else if (strncasecmp(xargv[0], "rdiskeject", 8) == 0 && cmdargc >= 2) { - rdisk_eject(atoi(xargv[1])); - } else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) { - uint8_t id; - uint8_t wp; - bool err = false; - char fn[PATH_MAX]; - - memset(fn, 0, sizeof(fn)); - - if (!xargv[2] || !xargv[1]) { - free(line); - free(linecpy); - line = NULL; - continue; - } - err = process_media_commands_3(&id, fn, &wp, cmdargc); - if (!err) { - if (fn[strlen(fn) - 1] == '\'' - || fn[strlen(fn) - 1] == '"') - fn[strlen(fn) - 1] = '\0'; - printf("Inserting disk into floppy drive %c: %s\n", id + 'A', fn); - floppy_mount(id, fn, wp); - } - } else if (strncasecmp(xargv[0], "moload", 7) == 0 && cmdargc >= 4) { - uint8_t id; - uint8_t wp; - bool err = false; - char fn[PATH_MAX]; - - memset(fn, 0, sizeof(fn)); - - if (!xargv[2] || !xargv[1]) { - free(line); - free(linecpy); - line = NULL; - continue; - } - err = process_media_commands_3(&id, fn, &wp, cmdargc); - if (!err) { - if (fn[strlen(fn) - 1] == '\'' - || fn[strlen(fn) - 1] == '"') - fn[strlen(fn) - 1] = '\0'; - printf("Inserting into mo drive %hhu: %s\n", id, fn); - mo_mount(id, fn, wp); - } - } else if (strncasecmp(xargv[0], "cartload", 7) == 0 && cmdargc >= 4) { - uint8_t id; - uint8_t wp; - bool err = false; - char fn[PATH_MAX]; - - memset(fn, 0, sizeof(fn)); - - if (!xargv[2] || !xargv[1]) { - free(line); - free(linecpy); - line = NULL; - continue; - } - err = process_media_commands_3(&id, fn, &wp, cmdargc); - if (!err) { - if (fn[strlen(fn) - 1] == '\'' - || fn[strlen(fn) - 1] == '"') - fn[strlen(fn) - 1] = '\0'; - printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn); - cartridge_mount(id, fn, wp); - } - } else if (strncasecmp(xargv[0], "rdiskload", 7) == 0 && cmdargc >= 4) { - uint8_t id; - uint8_t wp; - bool err = false; - char fn[PATH_MAX]; - - memset(fn, 0, sizeof(fn)); - - if (!xargv[2] || !xargv[1]) { - free(line); - free(linecpy); - line = NULL; - continue; - } - err = process_media_commands_3(&id, fn, &wp, cmdargc); - if (!err) { - if (fn[strlen(fn) - 1] == '\'' - || fn[strlen(fn) - 1] == '"') - fn[strlen(fn) - 1] = '\0'; - printf("Inserting disk into removable disk drive %c: %s\n", id + 'A', fn); - rdisk_mount(id, fn, wp); - } - } + if (!xargv[2] || !xargv[1]) { free(line); free(linecpy); line = NULL; + return; } + id = atoi(xargv[1]); + memset(fn, 0, sizeof(fn)); + if (xargv[2][0] == '\'' || xargv[2][0] == '"') { + int curarg = 2; + + for (curarg = 2; curarg < cmdargc; curarg++) { + if (strlen(fn) + strlen(xargv[curarg]) >= PATH_MAX) { + err = true; + fprintf(stderr, "Path name too long.\n"); + } + strcat(fn, xargv[curarg] + (xargv[curarg][0] == '\'' || xargv[curarg][0] == '"')); + if (fn[strlen(fn) - 1] == '\'' + || fn[strlen(fn) - 1] == '"') { + break; + } + strcat(fn, " "); + } + } else { + if (strlen(xargv[2]) < PATH_MAX) { + strcpy(fn, xargv[2]); + } else { + fprintf(stderr, "Path name too long.\n"); + } + } + if (!err) { + + if (fn[strlen(fn) - 1] == '\'' + || fn[strlen(fn) - 1] == '"') + fn[strlen(fn) - 1] = '\0'; + printf("Inserting disc into CD-ROM drive %hhu: %s\n", id, fn); + cdrom_mount(id, fn); + } + } else if (strncasecmp(xargv[0], "fddeject", 8) == 0 && cmdargc >= 2) { + floppy_eject(atoi(xargv[1])); + } else if (strncasecmp(xargv[0], "cdeject", 8) == 0 && cmdargc >= 2) { + cdrom_mount(atoi(xargv[1]), ""); + } else if (strncasecmp(xargv[0], "moeject", 8) == 0 && cmdargc >= 2) { + mo_eject(atoi(xargv[1])); + } else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) { + cartridge_eject(atoi(xargv[1])); + } else if (strncasecmp(xargv[0], "rdiskeject", 8) == 0 && cmdargc >= 2) { + rdisk_eject(atoi(xargv[1])); + } else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) { + uint8_t id; + uint8_t wp; + bool err = false; + char fn[PATH_MAX]; + + memset(fn, 0, sizeof(fn)); + + if (!xargv[2] || !xargv[1]) { + free(line); + free(linecpy); + line = NULL; + return; + } + err = process_media_commands_3(&id, fn, &wp, cmdargc); + if (!err) { + if (fn[strlen(fn) - 1] == '\'' + || fn[strlen(fn) - 1] == '"') + fn[strlen(fn) - 1] = '\0'; + printf("Inserting disk into floppy drive %c: %s\n", id + 'A', fn); + floppy_mount(id, fn, wp); + } + } else if (strncasecmp(xargv[0], "moload", 7) == 0 && cmdargc >= 4) { + uint8_t id; + uint8_t wp; + bool err = false; + char fn[PATH_MAX]; + + memset(fn, 0, sizeof(fn)); + + if (!xargv[2] || !xargv[1]) { + free(line); + free(linecpy); + line = NULL; + return; + } + err = process_media_commands_3(&id, fn, &wp, cmdargc); + if (!err) { + if (fn[strlen(fn) - 1] == '\'' + || fn[strlen(fn) - 1] == '"') + fn[strlen(fn) - 1] = '\0'; + printf("Inserting into mo drive %hhu: %s\n", id, fn); + mo_mount(id, fn, wp); + } + } else if (strncasecmp(xargv[0], "cartload", 7) == 0 && cmdargc >= 4) { + uint8_t id; + uint8_t wp; + bool err = false; + char fn[PATH_MAX]; + + memset(fn, 0, sizeof(fn)); + + if (!xargv[2] || !xargv[1]) { + free(line); + free(linecpy); + line = NULL; + return; + } + err = process_media_commands_3(&id, fn, &wp, cmdargc); + if (!err) { + if (fn[strlen(fn) - 1] == '\'' + || fn[strlen(fn) - 1] == '"') + fn[strlen(fn) - 1] = '\0'; + printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn); + cartridge_mount(id, fn, wp); + } + } else if (strncasecmp(xargv[0], "rdiskload", 7) == 0 && cmdargc >= 4) { + uint8_t id; + uint8_t wp; + bool err = false; + char fn[PATH_MAX]; + + memset(fn, 0, sizeof(fn)); + + if (!xargv[2] || !xargv[1]) { + free(line); + free(linecpy); + line = NULL; + return; + } + err = process_media_commands_3(&id, fn, &wp, cmdargc); + if (!err) { + if (fn[strlen(fn) - 1] == '\'' + || fn[strlen(fn) - 1] == '"') + fn[strlen(fn) - 1] = '\0'; + printf("Inserting disk into removable disk drive %c: %s\n", id + 'A', fn); + rdisk_mount(id, fn, wp); + } + } + free(line); + free(linecpy); + line = NULL; + } +} + +void +monitor_thread(UNUSED(void *param)) +{ +#ifndef USE_CLI + if (isatty(fileno(stdin)) && isatty(fileno(stdout))) { + char *line = NULL; + size_t n; + + printf("86Box monitor console.\n"); + while (!exit_event) { + if (feof(stdin)) + break; +#ifdef ENABLE_READLINE + if (f_readline) + line = f_readline("(86Box) "); + else { +#endif + printf("(86Box) "); + (void) !getline(&line, &n, stdin); +#ifdef ENABLE_READLINE + } +#endif + unix_executeLine(line); } } #endif diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 48c801117..3fbdf723f 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -5,7 +5,10 @@ #include #include #include +#include +#include #include + /* This #undef is needed because a SDL include header redefines HAVE_STDARG_H. */ #undef HAVE_STDARG_H #define HAVE_STDARG_H @@ -18,10 +21,7 @@ #include <86box/version.h> #include <86box/unix_sdl.h> #include <86box/unix_osd.h> - -#include -#include -#include +#include <86box/unix_osd_font.h> static int SCREEN_W = 640; static int SCREEN_H = 480; @@ -33,9 +33,13 @@ static int BOX_H = 160; #define CHAR_W 8 #define CHAR_H 8 +// interface to SDL environment extern SDL_Window *sdl_win; extern SDL_Renderer *sdl_render; +// interface back to main unix monitor implementation +extern void unix_executeLine(char *line); + typedef enum { STATE_MENU, STATE_FILESELECT @@ -219,11 +223,20 @@ int osd_open(SDL_Event event) max_visible = (BOX_H - TITLE_HEIGHT) / LINE_HEIGHT; // Carica font bitmap (font.bmp 128x128, 16x16 caratteri, 8x8 ciascuno) - SDL_Surface *font_surface = SDL_LoadBMP("font.bmp"); - if (!font_surface) { - printf("Errore caricamento font.bmp: %s\n", SDL_GetError()); - return 1; + SDL_RWops *rwop = SDL_RWFromConstMem(_________font_bmp, _________font_bmp_len); + if (!rwop) + { + fprintf(stderr, "Cannot create a new SDL RW stream: %s\n", SDL_GetError()); + return 0; } + + // auto-closes the stream + SDL_Surface *font_surface = SDL_LoadBMP_RW(rwop, 1); + if (!font_surface) { + fprintf(stderr, "Cannot create a surface using RW stream: %s\n", SDL_GetError()); + return 0; + } + // Imposta trasparenza sul nero puro SDL_SetColorKey(font_surface, SDL_TRUE, SDL_MapRGB(font_surface->format, 0, 0, 0)); font_texture = SDL_CreateTextureFromSurface(sdl_render, font_surface); From 47298ed3189e8d020d58e9201861c4bd2c7e80fd Mon Sep 17 00:00:00 2001 From: Valerio Vitali Date: Fri, 12 Sep 2025 19:19:45 +0200 Subject: [PATCH 005/233] fullscreen on/off --- src/unix/unix.c | 3 +++ src/unix/unix_osd.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/unix/unix.c b/src/unix/unix.c index 45f108ef2..cbf41f6ed 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1327,8 +1327,10 @@ main(int argc, char **argv) mouse_inside = 0; break; } + break; } default: + { // route everything else flag_osd_open = osd_handle(event); @@ -1339,6 +1341,7 @@ main(int argc, char **argv) } break; + } } } else diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 3fbdf723f..5e155367a 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -326,6 +326,9 @@ int osd_handle(SDL_Event event) case 11 : // "pause - pause the the emulated system", break; case 12 : // "fullscreen - toggle fullscreen", + unix_executeLine(strdup("fullscreen")); + // directly close the OSD + return 0; break; case 13 : // "version - print version and license information", break; From df503f95f9b05709005fdd045ad05836992a589d Mon Sep 17 00:00:00 2001 From: Valerio Date: Fri, 12 Sep 2025 19:40:12 +0200 Subject: [PATCH 006/233] more commands --- src/unix/unix_osd.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 5e155367a..910c84849 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -322,8 +322,14 @@ int osd_handle(SDL_Event event) case 9 : // "moeject - eject image from MO drive", break; case 10 : // "hardreset - hard reset the emulated system", + unix_executeLine(strdup("hardreset")); + // directly close the OSD + return 0; break; case 11 : // "pause - pause the the emulated system", + unix_executeLine(strdup("pause")); + // directly close the OSD + return 0; break; case 12 : // "fullscreen - toggle fullscreen", unix_executeLine(strdup("fullscreen")); @@ -331,11 +337,18 @@ int osd_handle(SDL_Event event) return 0; break; case 13 : // "version - print version and license information", + unix_executeLine(strdup("version")); + // directly close the OSD + return 0; break; case 14 : // "exit - exit 86Box", + unix_executeLine(strdup("exit")); + // directly close the OSD + return 0; break; case 15 : // "close OSD" - break; + // directly close the OSD + return 0; } printf("Hai scelto: %s\n", menu_items[selected]); From 606b9aca3d5b72439c7d7946e0d807dfa16c8eb1 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sat, 13 Sep 2025 12:23:11 +0200 Subject: [PATCH 007/233] other fixes, cd and floppy load --- src/86box.c | 5 +- src/include/86box/unix_osd.h | 3 + src/unix/unix.c | 50 +++---- src/unix/unix_osd.c | 279 ++++++++++++++++++++--------------- src/unix/unix_sdl.c | 5 +- 5 files changed, 193 insertions(+), 149 deletions(-) diff --git a/src/86box.c b/src/86box.c index 0b5a26131..44e2d24f6 100644 --- a/src/86box.c +++ b/src/86box.c @@ -1078,7 +1078,10 @@ usage: /* Build the global configuration file path. */ if (global == NULL) { plat_get_global_config_dir(global_cfg_path, sizeof(global_cfg_path)); - path_append_filename(global_cfg_path, global_cfg_path, GLOBAL_CONFIG_FILE); + // avoid strcpy global_cfg_path over itself (valgrind says it's bad...) + // path_append_filename(global_cfg_path, global_cfg_path, GLOBAL_CONFIG_FILE); + path_slash(global_cfg_path); + strcat(global_cfg_path, GLOBAL_CONFIG_FILE); } else { strncpy(global_cfg_path, global, sizeof(global_cfg_path) - 1); } diff --git a/src/include/86box/unix_osd.h b/src/include/86box/unix_osd.h index 4ae93a8c2..90c319fbe 100644 --- a/src/include/86box/unix_osd.h +++ b/src/include/86box/unix_osd.h @@ -3,6 +3,9 @@ #include +extern void osd_init(); +extern void osd_deinit(); + extern int osd_open(SDL_Event event); extern int osd_close(SDL_Event event); extern int osd_handle(SDL_Event event); diff --git a/src/unix/unix.c b/src/unix/unix.c index cbf41f6ed..0eefea211 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -753,7 +753,6 @@ ui_sb_set_ready(UNUSED(int ready)) /* No-op. */ } -char *xargv[512]; // From musl. char * @@ -915,7 +914,7 @@ plat_get_vmm_dir(char *outbuf, const size_t len) } bool -process_media_commands_3(uint8_t *id, char *fn, uint8_t *wp, int cmdargc) +process_media_commands_3(uint8_t *id, char *fn, uint8_t *wp, char **xargv, int cmdargc) { bool err = false; @@ -951,6 +950,7 @@ process_media_commands_3(uint8_t *id, char *fn, uint8_t *wp, int cmdargc) fn[strlen(fn) - 1] = '\0'; return err; } + char *(*f_readline)(const char *) = NULL; int (*f_add_history)(const char *) = NULL; void (*f_rl_callback_handler_remove)(void) = NULL; @@ -977,21 +977,23 @@ void unix_executeLine(char *line) { if (line) { + char *xargv[512]; int cmdargc = 0; - char *linecpy; + char *linecpy, *linespn; + + linecpy = linespn = strdup(line); + linecpy[strcspn(linecpy, "\r\n")] = 0; - line[strcspn(line, "\r\n")] = '\0'; - linecpy = strdup(line); if (!linecpy) { - free(line); - line = NULL; return; } + if (f_add_history) - f_add_history(line); + f_add_history(linecpy); + memset(xargv, 0, sizeof(xargv)); while (1) { - xargv[cmdargc++] = local_strsep(&linecpy, " "); + xargv[cmdargc++] = local_strsep(&linespn, " "); if (xargv[cmdargc - 1] == NULL || cmdargc >= 512) break; } @@ -1065,9 +1067,7 @@ unix_executeLine(char *line) char fn[PATH_MAX]; if (!xargv[2] || !xargv[1]) { - free(line); free(linecpy); - line = NULL; return; } id = atoi(xargv[1]); @@ -1121,12 +1121,10 @@ unix_executeLine(char *line) memset(fn, 0, sizeof(fn)); if (!xargv[2] || !xargv[1]) { - free(line); free(linecpy); - line = NULL; return; } - err = process_media_commands_3(&id, fn, &wp, cmdargc); + err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc); if (!err) { if (fn[strlen(fn) - 1] == '\'' || fn[strlen(fn) - 1] == '"') @@ -1143,12 +1141,10 @@ unix_executeLine(char *line) memset(fn, 0, sizeof(fn)); if (!xargv[2] || !xargv[1]) { - free(line); free(linecpy); - line = NULL; return; } - err = process_media_commands_3(&id, fn, &wp, cmdargc); + err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc); if (!err) { if (fn[strlen(fn) - 1] == '\'' || fn[strlen(fn) - 1] == '"') @@ -1165,12 +1161,10 @@ unix_executeLine(char *line) memset(fn, 0, sizeof(fn)); if (!xargv[2] || !xargv[1]) { - free(line); free(linecpy); - line = NULL; return; } - err = process_media_commands_3(&id, fn, &wp, cmdargc); + err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc); if (!err) { if (fn[strlen(fn) - 1] == '\'' || fn[strlen(fn) - 1] == '"') @@ -1187,12 +1181,10 @@ unix_executeLine(char *line) memset(fn, 0, sizeof(fn)); if (!xargv[2] || !xargv[1]) { - free(line); free(linecpy); - line = NULL; return; } - err = process_media_commands_3(&id, fn, &wp, cmdargc); + err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc); if (!err) { if (fn[strlen(fn) - 1] == '\'' || fn[strlen(fn) - 1] == '"') @@ -1201,9 +1193,7 @@ unix_executeLine(char *line) rdisk_mount(id, fn, wp); } } - free(line); free(linecpy); - line = NULL; } } @@ -1230,6 +1220,9 @@ monitor_thread(UNUSED(void *param)) } #endif unix_executeLine(line); + + free(line); + line = NULL; } } #endif @@ -1286,13 +1279,15 @@ main(int argc, char **argv) plat_pause(0); /* Initialize the rendering window, or fullscreen. */ - do_start(); + #ifndef USE_CLI thread_create(monitor_thread, NULL); #endif + SDL_AddTimer(1000, timer_onesec, NULL); - while (!is_quit) { + while (!is_quit) + { static int mouse_inside = 0; static int r_alt_pressed = 0; static int flag_osd_open = 0; @@ -1314,6 +1309,7 @@ main(int argc, char **argv) { extern void sdl_reinit_texture(void); + printf("reinit tex\n"); sdl_reinit_texture(); break; } diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 910c84849..34fe5f09f 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -29,20 +29,23 @@ static int BOX_W = 240; static int BOX_H = 160; #define LINE_HEIGHT 16 #define TITLE_HEIGHT 16 -#define SCROLLBAR_WIDTH 6 #define CHAR_W 8 #define CHAR_H 8 // interface to SDL environment extern SDL_Window *sdl_win; extern SDL_Renderer *sdl_render; +extern SDL_mutex *sdl_mutex; // interface back to main unix monitor implementation extern void unix_executeLine(char *line); +static SDL_Texture *font_texture = NULL; + typedef enum { STATE_MENU, - STATE_FILESELECT + STATE_FILESELECT_FLOPPY, + STATE_FILESELECT_CD } AppState; static const char *menu_items[] = { @@ -67,7 +70,6 @@ static const char *menu_items[] = { static char selected_file[256] = ""; // memoria della selezione -static SDL_Texture *font_texture = NULL; static int font_cols = 16; // numero colonne nella bitmap font (16x16 caratteri) static int font_rows = 16; @@ -81,32 +83,38 @@ static int file_count = 0; static int max_visible = 0; -// ------------------- Funzione: trova i file .iso ------------------- -int load_iso_files(char files[][256], int max_files) { +int load_iso_files(char files[][256], int max_files, char *mask) +{ DIR *d; struct dirent *dir; int count = 0; d = opendir("."); - if (!d) return 0; + if (!d) + return 0; while ((dir = readdir(d)) != NULL && count < max_files) { - if (strstr(dir->d_name, ".iso")) { + if (strstr(dir->d_name, mask)) { strncpy(files[count], dir->d_name, 255); files[count][255] = '\0'; count++; } } + closedir(d); + return count; } -// ------------------- Disegna testo da bitmap font ------------------- -void draw_text(SDL_Renderer *renderer, const char *text, int x, int y, SDL_Color color) { - if (!font_texture) return; +void draw_text(SDL_Renderer *renderer, const char *text, int x, int y, SDL_Color color) +{ + if (!font_texture) + return; + SDL_SetTextureColorMod(font_texture, color.r, color.g, color.b); int i = 0; - while (text[i]) { + while (text[i]) + { unsigned char c = text[i]; int tx = (c % font_cols) * CHAR_W; int ty = (c / font_cols) * CHAR_H; @@ -117,8 +125,8 @@ void draw_text(SDL_Renderer *renderer, const char *text, int x, int y, SDL_Color } } -// ------------------- Disegna cornice rossa + riquadro ------------------- -void draw_box_with_border(SDL_Renderer *renderer, SDL_Rect box) { +void draw_box_with_border(SDL_Renderer *renderer, SDL_Rect box) +{ SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); SDL_RenderDrawRect(renderer, &box); @@ -130,10 +138,11 @@ void draw_box_with_border(SDL_Renderer *renderer, SDL_Rect box) { SDL_RenderFillRect(renderer, &inner); } -// ------------------- Disegna menu principale ------------------- -void draw_menu(SDL_Renderer *renderer, int selected) { - SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); - SDL_RenderClear(renderer); + +void draw_menu(SDL_Renderer *renderer, int selected) +{ + // SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); + // SDL_RenderClear(renderer); int x0 = (SCREEN_W - BOX_W) / 2; int y0 = (SCREEN_H - BOX_H) / 2; @@ -142,7 +151,8 @@ void draw_menu(SDL_Renderer *renderer, int selected) { draw_text(renderer, "MAIN MENU", x0 + 20, y0 + 5, (SDL_Color){255,255,255,255}); - for (int i = 0; i < MENU_ITEMS; i++) { + for (int i = 0; i < MENU_ITEMS; i++) + { int tx = x0 + 20; int ty = y0 + TITLE_HEIGHT + i * LINE_HEIGHT; @@ -160,31 +170,27 @@ void draw_menu(SDL_Renderer *renderer, int selected) { draw_text(renderer, menu_items[i], tx, ty, textColor); } - if (selected_file[0] != '\0') { - char buffer[300]; - snprintf(buffer, sizeof(buffer), "File: %s", selected_file); - draw_text(renderer, buffer, 20, SCREEN_H - 20, (SDL_Color){255,255,255,255}); - } - SDL_RenderPresent(renderer); } // ------------------- Disegna selezione file ------------------- void draw_file_selector(SDL_Renderer *renderer, + char *title, char files[][256], int file_count, - int selected, int scroll_offset, int max_visible) { - SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); - SDL_RenderClear(renderer); + int selected, int scroll_offset, int max_visible) +{ + // SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); + // SDL_RenderClear(renderer); int x0 = (SCREEN_W - BOX_W) / 2; int y0 = (SCREEN_H - BOX_H) / 2; SDL_Rect box = {x0, y0, BOX_W, BOX_H}; draw_box_with_border(renderer, box); - draw_text(renderer, "SELEZIONE FILE", x0 + 20, y0 + 5, (SDL_Color){255,255,255,255}); + draw_text(renderer, title, x0 + 20, y0 + 5, (SDL_Color){255,255,255,255}); if (file_count == 0) { - draw_text(renderer, "Nessun file trovato", + draw_text(renderer, "No files.", x0 + 20, y0 + TITLE_HEIGHT + 10, (SDL_Color){255, 255, 0, 255}); } else { @@ -211,6 +217,47 @@ void draw_file_selector(SDL_Renderer *renderer, SDL_RenderPresent(renderer); } +void osd_init() +{ + fprintf(stderr, "OSD INIT\n"); + + if (font_texture == NULL) + { + fprintf(stderr, "OSD INIT FONT\n"); + + // Carica font bitmap (font.bmp 128x128, 16x16 caratteri, 8x8 ciascuno) + SDL_RWops *rwop = SDL_RWFromConstMem(_________font_bmp, _________font_bmp_len); + if (!rwop) + { + fprintf(stderr, "Cannot create a new SDL RW stream: %s\n", SDL_GetError()); + return; + } + + // auto-closes the stream + SDL_Surface *font_surface = SDL_LoadBMP_RW(rwop, 1); + if (!font_surface) { + fprintf(stderr, "Cannot create a surface using RW stream: %s\n", SDL_GetError()); + return; + } + + // Imposta trasparenza sul nero puro + SDL_SetColorKey(font_surface, SDL_TRUE, SDL_MapRGB(font_surface->format, 0, 0, 0)); + font_texture = SDL_CreateTextureFromSurface(sdl_render, font_surface); + SDL_FreeSurface(font_surface); + } +} + +void osd_deinit() +{ + // nothing to do + fprintf(stderr, "OSD DEINIT\n"); + + // will be implicitly freed on exit + // SDL_DestroyTexture(font_texture); + + font_texture = NULL; +} + int osd_open(SDL_Event event) { // ok opened @@ -222,26 +269,6 @@ int osd_open(SDL_Event event) max_visible = (BOX_H - TITLE_HEIGHT) / LINE_HEIGHT; - // Carica font bitmap (font.bmp 128x128, 16x16 caratteri, 8x8 ciascuno) - SDL_RWops *rwop = SDL_RWFromConstMem(_________font_bmp, _________font_bmp_len); - if (!rwop) - { - fprintf(stderr, "Cannot create a new SDL RW stream: %s\n", SDL_GetError()); - return 0; - } - - // auto-closes the stream - SDL_Surface *font_surface = SDL_LoadBMP_RW(rwop, 1); - if (!font_surface) { - fprintf(stderr, "Cannot create a surface using RW stream: %s\n", SDL_GetError()); - return 0; - } - - // Imposta trasparenza sul nero puro - SDL_SetColorKey(font_surface, SDL_TRUE, SDL_MapRGB(font_surface->format, 0, 0, 0)); - font_texture = SDL_CreateTextureFromSurface(sdl_render, font_surface); - SDL_FreeSurface(font_surface); - return 1; } @@ -250,21 +277,35 @@ int osd_close(SDL_Event event) // ok closed fprintf(stderr, "OSD CLOSE\n"); - SDL_DestroyTexture(font_texture); - return 1; } +static void osd_cmd_run(char *c) +{ + char *l = calloc(strlen(c)+2, 1); + strcpy(l, c); + unix_executeLine(l); + free(l); +} + int osd_handle(SDL_Event event) { fprintf(stderr, "OSD HANDLE\n"); + SDL_LockMutex(sdl_mutex); + if (state == STATE_MENU) { draw_menu(sdl_render, selected); - } else if (state == STATE_FILESELECT) { - draw_file_selector(sdl_render, files, file_count, file_selected, scroll_offset, max_visible); } + else if (state == STATE_FILESELECT_FLOPPY) { + draw_file_selector(sdl_render, "SELECT FLOPPY IMAGE", files, file_count, file_selected, scroll_offset, max_visible); + } + else if (state == STATE_FILESELECT_CD) { + draw_file_selector(sdl_render, "SELECT CD ISO IMAGE", files, file_count, file_selected, scroll_offset, max_visible); + } + + SDL_UnlockMutex(sdl_mutex); if (event.type == SDL_KEYUP) { @@ -287,75 +328,68 @@ int osd_handle(SDL_Event event) break; case SDLK_RETURN: case SDLK_KP_ENTER: - if (selected == MENU_ITEMS - 1) { - return 0; // Esci - } - else if (strcmp(menu_items[selected], "Carica partita") == 0) + switch (selected) { - file_count = load_iso_files(files, 100); - file_selected = 0; - scroll_offset = 0; - state = STATE_FILESELECT; - } - else - { - switch (selected) - { - case 0 : // "fddload - Load floppy disk image", - break; - case 1 : // "cdload - Load CD-ROM image", - break; - case 2 : // "rdiskload - Load removable disk image", - break; - case 3 : // "cartload - Load cartridge image", - break; - case 4 : // "moload - Load MO image", - break; - case 5 : // "fddeject - eject disk from floppy drive", - break; - case 6 : // "cdeject - eject disc from CD-ROM drive", - break; - case 7 : // "rdiskeject - eject removable disk", - break; - case 8 : // "carteject - eject cartridge", - break; - case 9 : // "moeject - eject image from MO drive", - break; - case 10 : // "hardreset - hard reset the emulated system", - unix_executeLine(strdup("hardreset")); - // directly close the OSD - return 0; - break; - case 11 : // "pause - pause the the emulated system", - unix_executeLine(strdup("pause")); - // directly close the OSD - return 0; - break; - case 12 : // "fullscreen - toggle fullscreen", - unix_executeLine(strdup("fullscreen")); - // directly close the OSD - return 0; - break; - case 13 : // "version - print version and license information", - unix_executeLine(strdup("version")); - // directly close the OSD - return 0; - break; - case 14 : // "exit - exit 86Box", - unix_executeLine(strdup("exit")); - // directly close the OSD - return 0; - break; - case 15 : // "close OSD" - // directly close the OSD - return 0; - } + case 0 : // "fddload - Load floppy disk image", + file_count = load_iso_files(files, 100, "*.img"); + file_selected = 0; + scroll_offset = 0; + state = STATE_FILESELECT_FLOPPY; + break; + case 1 : // "cdload - Load CD-ROM image", + file_count = load_iso_files(files, 100, "*.iso"); + file_selected = 0; + scroll_offset = 0; + state = STATE_FILESELECT_CD; + break; + case 2 : // "rdiskload - Load removable disk image", + break; + case 3 : // "cartload - Load cartridge image", + break; + case 4 : // "moload - Load MO image", + break; + case 5 : // "fddeject - eject disk from floppy drive", + osd_cmd_run("fddeject 0"); + break; + case 6 : // "cdeject - eject disc from CD-ROM drive", + osd_cmd_run("cdeject 0"); + break; + case 7 : // "rdiskeject - eject removable disk", + osd_cmd_run("rdiskeject 0"); + break; + case 8 : // "carteject - eject cartridge", + osd_cmd_run("carteject 0"); + break; + case 9 : // "moeject - eject image from MO drive", + osd_cmd_run("moeject 0"); + break; + case 10 : // "hardreset - hard reset the emulated system", + osd_cmd_run("hardreset"); + return 0; - printf("Hai scelto: %s\n", menu_items[selected]); + case 11 : // "pause - pause the the emulated system", + osd_cmd_run("pause"); + return 0; + + case 12 : // "fullscreen - toggle fullscreen", + osd_cmd_run("fullscreen"); + return 0; + + case 13 : // "version - print version and license information", + osd_cmd_run("version"); + return 0; + + case 14 : // "exit - exit 86Box", + osd_cmd_run("exit"); + return 0; + + case 15 : // "close OSD" + // return zero does directly close the OSD + return 0; } break; } - } else if (state == STATE_FILESELECT) { + } else if (state == STATE_FILESELECT_FLOPPY || state == STATE_FILESELECT_CD) { if (file_count == 0) { if (event.key.keysym.sym == SDLK_ESCAPE) { state = STATE_MENU; @@ -380,9 +414,14 @@ int osd_handle(SDL_Event event) break; case SDLK_RETURN: case SDLK_KP_ENTER: - strncpy(selected_file, files[file_selected], 255); - selected_file[255] = '\0'; - printf("Selezionato file: %s\n", selected_file); + char cmd[1024] = ""; + + if (state == STATE_FILESELECT_FLOPPY) + sprintf(cmd, "fddload 0 %s 0", files[file_selected]); + if (state == STATE_FILESELECT_CD) + sprintf(cmd, "cdload 0 %s", files[file_selected]); + + unix_executeLine(cmd); state = STATE_MENU; break; case SDLK_ESCAPE: diff --git a/src/unix/unix_sdl.c b/src/unix/unix_sdl.c index 651822335..0568b99ae 100644 --- a/src/unix/unix_sdl.c +++ b/src/unix/unix_sdl.c @@ -16,6 +16,7 @@ #include <86box/video.h> #include <86box/ui.h> #include <86box/version.h> +#include <86box/unix_osd.h> #include <86box/unix_sdl.h> #define RENDERER_FULL_SCREEN 1 @@ -45,7 +46,7 @@ static int cur_wy = 0; static int cur_ww = 0; static int cur_wh = 0; static volatile int sdl_enabled = 1; -static SDL_mutex *sdl_mutex = NULL; +SDL_mutex *sdl_mutex = NULL; int mouse_capture; int title_set = 0; int resize_pending = 0; @@ -314,6 +315,7 @@ sdl_select_best_hw_driver(void) void sdl_reinit_texture(void) { + osd_deinit(); sdl_destroy_texture(); if (sdl_flags & RENDERER_HARDWARE) { @@ -324,6 +326,7 @@ sdl_reinit_texture(void) sdl_tex = SDL_CreateTexture(sdl_render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, 2048, 2048); + osd_init(); } void From d7f12ae36e8dfe69271634b8c61a76a5f9e03653 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sat, 13 Sep 2025 12:41:45 +0200 Subject: [PATCH 008/233] fix img and iso masks --- src/unix/unix_osd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 34fe5f09f..e64d890b5 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -331,13 +331,13 @@ int osd_handle(SDL_Event event) switch (selected) { case 0 : // "fddload - Load floppy disk image", - file_count = load_iso_files(files, 100, "*.img"); + file_count = load_iso_files(files, 100, ".img"); file_selected = 0; scroll_offset = 0; state = STATE_FILESELECT_FLOPPY; break; case 1 : // "cdload - Load CD-ROM image", - file_count = load_iso_files(files, 100, "*.iso"); + file_count = load_iso_files(files, 100, ".iso"); file_selected = 0; scroll_offset = 0; state = STATE_FILESELECT_CD; From f4a0537a8c34d66802df4dd27b9fc078a703ba9f Mon Sep 17 00:00:00 2001 From: Valerio Date: Sat, 13 Sep 2025 12:48:54 +0200 Subject: [PATCH 009/233] close osd when doing actions --- src/unix/unix_osd.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index e64d890b5..c7c5af02b 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -350,19 +350,24 @@ int osd_handle(SDL_Event event) break; case 5 : // "fddeject - eject disk from floppy drive", osd_cmd_run("fddeject 0"); - break; + return 0; + case 6 : // "cdeject - eject disc from CD-ROM drive", osd_cmd_run("cdeject 0"); - break; + return 0; + case 7 : // "rdiskeject - eject removable disk", osd_cmd_run("rdiskeject 0"); - break; + return 0; + case 8 : // "carteject - eject cartridge", osd_cmd_run("carteject 0"); - break; + return 0; + case 9 : // "moeject - eject image from MO drive", osd_cmd_run("moeject 0"); - break; + return 0; + case 10 : // "hardreset - hard reset the emulated system", osd_cmd_run("hardreset"); return 0; @@ -423,7 +428,8 @@ int osd_handle(SDL_Event event) unix_executeLine(cmd); state = STATE_MENU; - break; + return 0; + case SDLK_ESCAPE: state = STATE_MENU; break; From 52b20c21186343949a25fa6d30f69538b7faea86 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sat, 13 Sep 2025 18:50:38 +0200 Subject: [PATCH 010/233] cdrom load, future icons --- src/include/86box/unix_osd.h | 4 ++++ src/unix/unix.c | 6 +++--- src/unix/unix_cdrom.c | 9 ++++++++- src/unix/unix_osd.c | 14 ++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/include/86box/unix_osd.h b/src/include/86box/unix_osd.h index 90c319fbe..b774cbea1 100644 --- a/src/include/86box/unix_osd.h +++ b/src/include/86box/unix_osd.h @@ -10,5 +10,9 @@ extern int osd_open(SDL_Event event); extern int osd_close(SDL_Event event); extern int osd_handle(SDL_Event event); +extern void osd_ui_sb_update_icon_state(int tag, int state); +extern void osd_ui_sb_update_icon(int tag, int active); +extern void osd_ui_sb_update_icon_write(int tag, int active); + #endif /*_UNIX_OSD_H*/ diff --git a/src/unix/unix.c b/src/unix/unix.c index 0eefea211..0d4f0189f 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -476,19 +476,19 @@ plat_remove(char *path) void ui_sb_update_icon_state(UNUSED(int tag), UNUSED(int state)) { - /* No-op. */ + osd_ui_sb_update_icon_state(tag, state); } void ui_sb_update_icon(UNUSED(int tag), UNUSED(int active)) { - /* No-op. */ + osd_ui_sb_update_icon(tag, active); } void ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active)) { - /* No-op. */ + osd_ui_sb_update_icon_write(tag, active); } void diff --git a/src/unix/unix_cdrom.c b/src/unix/unix_cdrom.c index 09aaa5092..76c5f1501 100644 --- a/src/unix/unix_cdrom.c +++ b/src/unix/unix_cdrom.c @@ -140,6 +140,9 @@ plat_cdrom_ui_update(uint8_t id, UNUSED(uint8_t reload)) void cdrom_mount(uint8_t id, char *fn) { + int ret = cdrom_load( &(cdrom[id]), fn, 0); + + /* strcpy(cdrom[id].prev_image_path, cdrom[id].image_path); if (cdrom[id].ops && cdrom[id].ops->close) cdrom[id].ops->close(cdrom[id].local); @@ -148,13 +151,17 @@ cdrom_mount(uint8_t id, char *fn) if ((fn != NULL) && (strlen(fn) >= 1) && (fn[strlen(fn) - 1] == '\\')) fn[strlen(fn) - 1] = '/'; image_open(&(cdrom[id]), fn); - /* Signal media change to the emulated machine. */ + // Signal media change to the emulated machine. if (cdrom[id].insert) cdrom[id].insert(cdrom[id].priv); + if (cdrom[id].image_path[0] == 0x00) ui_sb_update_icon_state(SB_CDROM | id, 0); else ui_sb_update_icon_state(SB_CDROM | id, 1); + */ + + ui_sb_update_icon_state(SB_CDROM | id, ret == 0 ? 1 : 0); #if 0 media_menu_update_cdrom(id); #endif diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index c7c5af02b..42517c866 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -441,3 +441,17 @@ int osd_handle(SDL_Event event) // Keep it open return 1; } + +void osd_ui_sb_update_icon_state(UNUSED(int tag), UNUSED(int state)) +{ +} + +void +osd_ui_sb_update_icon(UNUSED(int tag), UNUSED(int active)) +{ +} + +void +osd_ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active)) +{ +} From 28b5f6324dc08216590935dca3cd6d33e6f1c3ab Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 14 Sep 2025 11:17:56 +0200 Subject: [PATCH 011/233] additional folders for iso and img, better ALTGR-G handling, moved osd draw to main blit loop --- src/include/86box/unix_osd.h | 9 ++- src/unix/unix.c | 54 ++++++++----- src/unix/unix_cdrom.c | 87 ++++++--------------- src/unix/unix_osd.c | 142 +++++++++++++++++++++++++---------- src/unix/unix_sdl.c | 4 + 5 files changed, 172 insertions(+), 124 deletions(-) diff --git a/src/include/86box/unix_osd.h b/src/include/86box/unix_osd.h index b774cbea1..c6582b322 100644 --- a/src/include/86box/unix_osd.h +++ b/src/include/86box/unix_osd.h @@ -3,16 +3,23 @@ #include +// state management extern void osd_init(); extern void osd_deinit(); - extern int osd_open(SDL_Event event); extern int osd_close(SDL_Event event); + +// keyboard event handler extern int osd_handle(SDL_Event event); +// draw the osd interface, if it's open +extern void osd_present(); + +// future ui extern void osd_ui_sb_update_icon_state(int tag, int state); extern void osd_ui_sb_update_icon(int tag, int active); extern void osd_ui_sb_update_icon_write(int tag, int active); +extern void osd_ui_sb_update_icon_wp(int tag, int state); #endif /*_UNIX_OSD_H*/ diff --git a/src/unix/unix.c b/src/unix/unix.c index 0d4f0189f..629528394 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -473,24 +473,26 @@ plat_remove(char *path) remove(path); } -void -ui_sb_update_icon_state(UNUSED(int tag), UNUSED(int state)) +void ui_sb_update_icon_state(int tag, int state) { osd_ui_sb_update_icon_state(tag, state); } -void -ui_sb_update_icon(UNUSED(int tag), UNUSED(int active)) +void ui_sb_update_icon(int tag, int active) { osd_ui_sb_update_icon(tag, active); } -void -ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active)) +void ui_sb_update_icon_write(int tag, int active) { osd_ui_sb_update_icon_write(tag, active); } +void ui_sb_update_icon_wp(int tag, int state) +{ + osd_ui_sb_update_icon_wp(tag, state); +} + void plat_delay_ms(uint32_t count) { @@ -534,7 +536,6 @@ path_get_dirname(char *dest, const char *path) *dest++ = *path++; *dest = '\0'; } -volatile int cpu_thread_run = 1; void ui_sb_set_text_w(UNUSED(wchar_t *wstr)) @@ -554,6 +555,8 @@ strnicmp(const char *s1, const char *s2, size_t n) return strncasecmp(s1, s2, n); } +volatile int cpu_thread_run = 1; + void main_thread(UNUSED(void *param)) { @@ -567,15 +570,20 @@ main_thread(UNUSED(void *param)) // title_update = 1; old_time = SDL_GetTicks(); drawits = frames = 0; - while (!is_quit && cpu_thread_run) { + while (!is_quit && cpu_thread_run) + { /* See if it is time to run a frame of code. */ new_time = SDL_GetTicks(); + #ifdef USE_GDBSTUB if (gdbstub_next_asap && (drawits <= 0)) drawits = 10; else -#endif drawits += (new_time - old_time); +#else + drawits += (new_time - old_time); +#endif + old_time = new_time; if (drawits > 0 && !dopause) { /* Yes, so do one frame now. */ @@ -592,15 +600,18 @@ main_thread(UNUSED(void *param)) nvr_dosave = 0; frames = 0; } - } else /* Just so we dont overload the host OS. */ + } + else /* Just so we dont overload the host OS. */ SDL_Delay(1); /* If needed, handle a screen resize. */ if (atomic_load(&doresize_monitors[0]) && !video_fullscreen && !is_quit) { + if (vid_resize & 2) plat_resize(fixed_size_x, fixed_size_y, 0); else plat_resize(scrnsz_x, scrnsz_y, 0); + atomic_store(&doresize_monitors[0], 1); } } @@ -753,7 +764,6 @@ ui_sb_set_ready(UNUSED(int ready)) /* No-op. */ } - // From musl. char * local_strsep(char **str, const char *sep) @@ -961,11 +971,6 @@ void (*f_rl_callback_handler_remove)(void) = NULL; # define LIBEDIT_LIBRARY "libedit.so" #endif -void ui_sb_update_icon_wp(int tag, int state) -{ - /* No-op */ -} - uint32_t timer_onesec(uint32_t interval, UNUSED(void *param)) { @@ -1206,9 +1211,11 @@ monitor_thread(UNUSED(void *param)) size_t n; printf("86Box monitor console.\n"); - while (!exit_event) { + while (!exit_event) + { if (feof(stdin)) break; + #ifdef ENABLE_READLINE if (f_readline) line = f_readline("(86Box) "); @@ -1219,6 +1226,7 @@ monitor_thread(UNUSED(void *param)) #ifdef ENABLE_READLINE } #endif + unix_executeLine(line); free(line); @@ -1437,10 +1445,17 @@ main(int argc, char **argv) { // open OSD! flag_osd_open = osd_open(event); - // we can assume alt-gr has been released + + // we can assume alt-gr has been released, tell this also to the virtual machine r_alt_pressed = 0; + keyboard_input(0, sdl_to_xt[SDL_SCANCODE_RALT]); break; } + else + { + // invalidate r_alt_pressed is something happens between its keydown and keydown for G + r_alt_pressed = 0; + } switch (event.key.keysym.scancode) { default: @@ -1465,8 +1480,7 @@ main(int argc, char **argv) } } - // blit only if the OSD is closed - if (blitreq && !flag_osd_open) { + if (blitreq) { extern void sdl_blit(int x, int y, int w, int h); sdl_blit(params.x, params.y, params.w, params.h); } diff --git a/src/unix/unix_cdrom.c b/src/unix/unix_cdrom.c index 76c5f1501..131fe6139 100644 --- a/src/unix/unix_cdrom.c +++ b/src/unix/unix_cdrom.c @@ -46,13 +46,14 @@ cassette_mount(char *fn, uint8_t wp) memset(cassette_fname, 0, sizeof(cassette_fname)); cassette_ui_writeprot = wp; pc_cas_set_fname(cassette, fn); + if (fn != NULL) memcpy(cassette_fname, fn, MIN(511, strlen(fn))); + ui_sb_update_icon_state(SB_CASSETTE, (fn == NULL) ? 1 : 0); -#if 0 - media_menu_update_cassette(); -#endif + ui_sb_update_tip(SB_CASSETTE); + config_save(); } @@ -61,11 +62,11 @@ cassette_eject(void) { pc_cas_set_fname(cassette, NULL); memset(cassette_fname, 0x00, sizeof(cassette_fname)); + ui_sb_update_icon_state(SB_CASSETTE, 1); -#if 0 - media_menu_update_cassette(); -#endif + ui_sb_update_tip(SB_CASSETTE); + config_save(); } @@ -74,11 +75,11 @@ cartridge_mount(uint8_t id, char *fn, UNUSED(uint8_t wp)) { cart_close(id); cart_load(id, fn); + ui_sb_update_icon_state(SB_CARTRIDGE | id, strlen(cart_fns[id]) ? 0 : 1); -#if 0 - media_menu_update_cartridge(id); -#endif + ui_sb_update_tip(SB_CARTRIDGE | id); + config_save(); } @@ -86,11 +87,11 @@ void cartridge_eject(uint8_t id) { cart_close(id); + ui_sb_update_icon_state(SB_CARTRIDGE | id, 1); -#if 0 - media_menu_update_cartridge(id); -#endif + ui_sb_update_tip(SB_CARTRIDGE | id); + config_save(); } @@ -100,11 +101,11 @@ floppy_mount(uint8_t id, char *fn, uint8_t wp) fdd_close(id); ui_writeprot[id] = wp; fdd_load(id, fn); + ui_sb_update_icon_state(SB_FLOPPY | id, strlen(floppyfns[id]) ? 0 : 1); -#if 0 - media_menu_update_floppy(id); -#endif + ui_sb_update_tip(SB_FLOPPY | id); + config_save(); } @@ -112,11 +113,11 @@ void floppy_eject(uint8_t id) { fdd_close(id); + ui_sb_update_icon_state(SB_FLOPPY | id, 1); -#if 0 - media_menu_update_floppy(id); -#endif + ui_sb_update_tip(SB_FLOPPY | id); + config_save(); } @@ -131,9 +132,6 @@ plat_cdrom_ui_update(uint8_t id, UNUSED(uint8_t reload)) ui_sb_update_icon_state(SB_CDROM | id, 0); } -#if 0 - media_menu_update_cdrom(id); -#endif ui_sb_update_tip(SB_CDROM | id); } @@ -142,30 +140,8 @@ cdrom_mount(uint8_t id, char *fn) { int ret = cdrom_load( &(cdrom[id]), fn, 0); - /* - strcpy(cdrom[id].prev_image_path, cdrom[id].image_path); - if (cdrom[id].ops && cdrom[id].ops->close) - cdrom[id].ops->close(cdrom[id].local); - cdrom[id].ops = NULL; - memset(cdrom[id].image_path, 0, sizeof(cdrom[id].image_path)); - if ((fn != NULL) && (strlen(fn) >= 1) && (fn[strlen(fn) - 1] == '\\')) - fn[strlen(fn) - 1] = '/'; - image_open(&(cdrom[id]), fn); - // Signal media change to the emulated machine. - if (cdrom[id].insert) - cdrom[id].insert(cdrom[id].priv); + plat_cdrom_ui_update(id, 0); - if (cdrom[id].image_path[0] == 0x00) - ui_sb_update_icon_state(SB_CDROM | id, 0); - else - ui_sb_update_icon_state(SB_CDROM | id, 1); - */ - - ui_sb_update_icon_state(SB_CDROM | id, ret == 0 ? 1 : 0); -#if 0 - media_menu_update_cdrom(id); -#endif - ui_sb_update_tip(SB_CDROM | id); config_save(); } @@ -181,9 +157,7 @@ mo_eject(uint8_t id) } ui_sb_update_icon_state(SB_MO | id, 1); -#if 0 - media_menu_update_mo(id); -#endif + ui_sb_update_tip(SB_MO | id); config_save(); } @@ -198,9 +172,7 @@ mo_mount(uint8_t id, char *fn, uint8_t wp) mo_load(dev, fn, 0); ui_sb_update_icon_state(SB_MO | id, strlen(mo_drives[id].image_path) ? 0 : 1); -#if 0 - media_menu_update_mo(id); -#endif + ui_sb_update_tip(SB_MO | id); config_save(); @@ -218,9 +190,6 @@ mo_reload(uint8_t id) ui_sb_update_icon_state(SB_MO | id, 0); } -#if 0 - media_menu_update_mo(id); -#endif ui_sb_update_tip(SB_MO | id); config_save(); @@ -238,10 +207,9 @@ rdisk_eject(uint8_t id) } ui_sb_update_icon_state(SB_RDISK | id, 1); -#if 0 - media_menu_update_rdisk(id); -#endif + ui_sb_update_tip(SB_RDISK | id); + config_save(); } @@ -255,9 +223,7 @@ rdisk_mount(uint8_t id, char *fn, uint8_t wp) rdisk_load(dev, fn, 0); ui_sb_update_icon_state(SB_RDISK | id, strlen(rdisk_drives[id].image_path) ? 0 : 1); -#if 0 - media_menu_update_rdisk(id); -#endif + ui_sb_update_tip(SB_RDISK | id); config_save(); @@ -275,9 +241,6 @@ rdisk_reload(uint8_t id) ui_sb_update_icon_state(SB_RDISK | id, 0); } -#if 0 - media_menu_update_rdisk(id); -#endif ui_sb_update_tip(SB_RDISK | id); config_save(); diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 42517c866..11b255656 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -32,6 +32,9 @@ static int BOX_H = 160; #define CHAR_W 8 #define CHAR_H 8 +// this makes the osd embeddable in the 86box main sdl loop +#define OSD_INSIDE_MAIN_LOOP + // interface to SDL environment extern SDL_Window *sdl_win; extern SDL_Renderer *sdl_render; @@ -70,32 +73,53 @@ static const char *menu_items[] = { static char selected_file[256] = ""; // memoria della selezione -static int font_cols = 16; // numero colonne nella bitmap font (16x16 caratteri) +// chars per cols and rows +static int font_cols = 16; static int font_rows = 16; static int selected = 0; static int file_selected = 0; static int scroll_offset = 0; + +static int osd_is_open = 0; static AppState state = STATE_MENU; -static char files[100][256]; +static char files[100][1024]; static int file_count = 0; static int max_visible = 0; -int load_iso_files(char files[][256], int max_files, char *mask) +int reset_iso_files() +{ + file_selected = 0; + scroll_offset = 0; + + file_count = 0; + memzero(files, sizeof(files)); +} + +static int endswith(char *s1, char *mask) +{ + return strlen(s1) >= strlen(mask) && strncasecmp(s1+strlen(s1)-strlen(mask), mask, strlen(mask)); +} + +int load_iso_files(char *basedir, char files[][1024], int max_files, char *mask) { DIR *d; struct dirent *dir; - int count = 0; - d = opendir("."); + int count = file_count; + d = opendir(basedir); if (!d) - return 0; + return file_count; + + while ((dir = readdir(d)) != NULL && count < max_files) + { + if (endswith(dir->d_name, mask)) + { + strcpy(files[count], basedir); + strcat(files[count], "/"); + strcat(files[count], dir->d_name); - while ((dir = readdir(d)) != NULL && count < max_files) { - if (strstr(dir->d_name, mask)) { - strncpy(files[count], dir->d_name, 255); - files[count][255] = '\0'; count++; } } @@ -141,9 +165,6 @@ void draw_box_with_border(SDL_Renderer *renderer, SDL_Rect box) void draw_menu(SDL_Renderer *renderer, int selected) { - // SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); - // SDL_RenderClear(renderer); - int x0 = (SCREEN_W - BOX_W) / 2; int y0 = (SCREEN_H - BOX_H) / 2; SDL_Rect box = {x0, y0, BOX_W, BOX_H}; @@ -170,7 +191,9 @@ void draw_menu(SDL_Renderer *renderer, int selected) draw_text(renderer, menu_items[i], tx, ty, textColor); } +#ifndef OSD_INSIDE_MAIN_LOOP SDL_RenderPresent(renderer); +#endif } // ------------------- Disegna selezione file ------------------- @@ -179,9 +202,6 @@ void draw_file_selector(SDL_Renderer *renderer, char files[][256], int file_count, int selected, int scroll_offset, int max_visible) { - // SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255); - // SDL_RenderClear(renderer); - int x0 = (SCREEN_W - BOX_W) / 2; int y0 = (SCREEN_H - BOX_H) / 2; SDL_Rect box = {x0, y0, BOX_W, BOX_H}; @@ -214,16 +234,18 @@ void draw_file_selector(SDL_Renderer *renderer, } } +#ifndef OSD_INSIDE_MAIN_LOOP SDL_RenderPresent(renderer); +#endif } void osd_init() { - fprintf(stderr, "OSD INIT\n"); + // debug: fprintf(stderr, "OSD INIT\n"); if (font_texture == NULL) { - fprintf(stderr, "OSD INIT FONT\n"); + // debug: fprintf(stderr, "OSD INIT FONT\n"); // Carica font bitmap (font.bmp 128x128, 16x16 caratteri, 8x8 ciascuno) SDL_RWops *rwop = SDL_RWFromConstMem(_________font_bmp, _________font_bmp_len); @@ -250,7 +272,7 @@ void osd_init() void osd_deinit() { // nothing to do - fprintf(stderr, "OSD DEINIT\n"); + // debug: fprintf(stderr, "OSD DEINIT\n"); // will be implicitly freed on exit // SDL_DestroyTexture(font_texture); @@ -261,7 +283,7 @@ void osd_deinit() int osd_open(SDL_Event event) { // ok opened - fprintf(stderr, "OSD OPEN\n"); + // debug: fprintf(stderr, "OSD OPEN\n"); SDL_GetWindowSize(sdl_win, &SCREEN_W, &SCREEN_H); BOX_W = (SCREEN_W / 4) * 3; @@ -269,13 +291,17 @@ int osd_open(SDL_Event event) max_visible = (BOX_H - TITLE_HEIGHT) / LINE_HEIGHT; + osd_is_open = 1; + return 1; } int osd_close(SDL_Event event) { // ok closed - fprintf(stderr, "OSD CLOSE\n"); + // debug: fprintf(stderr, "OSD CLOSE\n"); + + osd_is_open = 0; return 1; } @@ -288,12 +314,15 @@ static void osd_cmd_run(char *c) free(l); } - -int osd_handle(SDL_Event event) +void osd_present() { - fprintf(stderr, "OSD HANDLE\n"); + // shortcut + if (!osd_is_open) + return; +#ifndef OSD_INSIDE_MAIN_LOOP SDL_LockMutex(sdl_mutex); +#endif if (state == STATE_MENU) { draw_menu(sdl_render, selected); @@ -305,49 +334,71 @@ int osd_handle(SDL_Event event) draw_file_selector(sdl_render, "SELECT CD ISO IMAGE", files, file_count, file_selected, scroll_offset, max_visible); } +#ifndef OSD_INSIDE_MAIN_LOOP SDL_UnlockMutex(sdl_mutex); +#endif +} + +int osd_handle(SDL_Event event) +{ + // debug: fprintf(stderr, "OSD HANDLE\n"); if (event.type == SDL_KEYUP) { if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE) { // Close the OSD - fprintf(stderr, "OSD HANDLE: escape\n"); + // debug: fprintf(stderr, "OSD HANDLE: escape\n"); return 0; } } - if (event.type == SDL_KEYDOWN) { - if (state == STATE_MENU) { - switch (event.key.keysym.sym) { + if (event.type == SDL_KEYDOWN) + { + if (state == STATE_MENU) + { + switch (event.key.keysym.sym) + { case SDLK_UP: selected = (selected - 1 + MENU_ITEMS) % MENU_ITEMS; break; + case SDLK_DOWN: selected = (selected + 1) % MENU_ITEMS; break; + case SDLK_RETURN: case SDLK_KP_ENTER: switch (selected) { case 0 : // "fddload - Load floppy disk image", - file_count = load_iso_files(files, 100, ".img"); - file_selected = 0; - scroll_offset = 0; + reset_iso_files(); + file_count = load_iso_files(".", files, 100, ".img"); + file_count = load_iso_files("/mnt", files, 100, ".img"); + file_count = load_iso_files("/mnt/usbkey", files, 100, ".img"); state = STATE_FILESELECT_FLOPPY; break; + case 1 : // "cdload - Load CD-ROM image", - file_count = load_iso_files(files, 100, ".iso"); - file_selected = 0; - scroll_offset = 0; + reset_iso_files(); + file_count = load_iso_files(".", files, 100, ".iso"); + file_count = load_iso_files("/mnt", files, 100, ".iso"); + file_count = load_iso_files("/mnt/usbkey", files, 100, ".iso"); state = STATE_FILESELECT_CD; break; + case 2 : // "rdiskload - Load removable disk image", + reset_iso_files(); break; + case 3 : // "cartload - Load cartridge image", + reset_iso_files(); break; + case 4 : // "moload - Load MO image", + reset_iso_files(); break; + case 5 : // "fddeject - eject disk from floppy drive", osd_cmd_run("fddeject 0"); return 0; @@ -394,12 +445,18 @@ int osd_handle(SDL_Event event) } break; } - } else if (state == STATE_FILESELECT_FLOPPY || state == STATE_FILESELECT_CD) { - if (file_count == 0) { + } + else if (state == STATE_FILESELECT_FLOPPY || state == STATE_FILESELECT_CD) + { + if (file_count == 0) + { + // no files, there is nothing else to do if (event.key.keysym.sym == SDLK_ESCAPE) { state = STATE_MENU; } - } else { + } + else + { switch (event.key.keysym.sym) { case SDLK_UP: if (file_selected > 0) { @@ -417,6 +474,7 @@ int osd_handle(SDL_Event event) } } break; + case SDLK_RETURN: case SDLK_KP_ENTER: char cmd[1024] = ""; @@ -446,12 +504,14 @@ void osd_ui_sb_update_icon_state(UNUSED(int tag), UNUSED(int state)) { } -void -osd_ui_sb_update_icon(UNUSED(int tag), UNUSED(int active)) +void osd_ui_sb_update_icon(UNUSED(int tag), UNUSED(int active)) { } -void -osd_ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active)) +void osd_ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active)) +{ +} + +void osd_ui_sb_update_icon_wp(UNUSED(int tag), UNUSED(int state)) { } diff --git a/src/unix/unix_sdl.c b/src/unix/unix_sdl.c index 0568b99ae..26115deff 100644 --- a/src/unix/unix_sdl.c +++ b/src/unix/unix_sdl.c @@ -190,6 +190,9 @@ sdl_real_blit(SDL_Rect *r_src) if (ret) fprintf(stderr, "SDL: unable to copy texture to renderer (%s)\n", SDL_GetError()); + // give the osd an opportunity to draw itself + osd_present(); + SDL_RenderPresent(sdl_render); } @@ -215,6 +218,7 @@ sdl_blit(int x, int y, int w, int h) sdl_resize(resize_w, resize_h); resize_pending = 0; } + r_src.x = x; r_src.y = y; r_src.w = w; From 596dab6df4e73d43d33675d2aa028a05b3baeeba Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 14 Sep 2025 11:27:42 +0200 Subject: [PATCH 012/233] mistakes --- src/unix/unix_osd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 11b255656..7fdabb698 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -95,7 +95,7 @@ int reset_iso_files() scroll_offset = 0; file_count = 0; - memzero(files, sizeof(files)); + memset(files, 0, sizeof(files)); } static int endswith(char *s1, char *mask) @@ -199,7 +199,7 @@ void draw_menu(SDL_Renderer *renderer, int selected) // ------------------- Disegna selezione file ------------------- void draw_file_selector(SDL_Renderer *renderer, char *title, - char files[][256], int file_count, + char files[][1024], int file_count, int selected, int scroll_offset, int max_visible) { int x0 = (SCREEN_W - BOX_W) / 2; @@ -477,7 +477,7 @@ int osd_handle(SDL_Event event) case SDLK_RETURN: case SDLK_KP_ENTER: - char cmd[1024] = ""; + char cmd[1280] = ""; if (state == STATE_FILESELECT_FLOPPY) sprintf(cmd, "fddload 0 %s 0", files[file_selected]); From 003fc5423bb216104cdb6cb07aa8b25c3484671e Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 14 Sep 2025 11:40:53 +0200 Subject: [PATCH 013/233] more mistakes --- src/unix/unix.c | 3 +-- src/unix/unix_osd.c | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/unix/unix.c b/src/unix/unix.c index 629528394..c02dbea63 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1440,8 +1440,7 @@ main(int argc, char **argv) else r_alt_pressed = 0; } - - if (r_alt_pressed && event.type == SDL_KEYDOWN && event.key.keysym.scancode == SDL_SCANCODE_G) + else if (r_alt_pressed && event.type == SDL_KEYDOWN && event.key.keysym.scancode == SDL_SCANCODE_G) { // open OSD! flag_osd_open = osd_open(event); diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 7fdabb698..a5da5fe1a 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -100,7 +100,9 @@ int reset_iso_files() static int endswith(char *s1, char *mask) { - return strlen(s1) >= strlen(mask) && strncasecmp(s1+strlen(s1)-strlen(mask), mask, strlen(mask)); + int ss = strlen(s1); + int sm = strlen(mask); + return ss >= sm && strncasecmp(s1+ss-sm, mask, sm) == 0; } int load_iso_files(char *basedir, char files[][1024], int max_files, char *mask) From 677a50dda41c7f61f6269eb8418d6fe908d543b9 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 14 Sep 2025 11:58:14 +0200 Subject: [PATCH 014/233] maybe better on keyup --- src/unix/unix_osd.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index a5da5fe1a..527a1b6a9 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -353,10 +353,7 @@ int osd_handle(SDL_Event event) // debug: fprintf(stderr, "OSD HANDLE: escape\n"); return 0; } - } - if (event.type == SDL_KEYDOWN) - { if (state == STATE_MENU) { switch (event.key.keysym.sym) From 078368ba48aeaba2be1c4b921c586a71572d28b5 Mon Sep 17 00:00:00 2001 From: Valerio Date: Mon, 15 Sep 2025 16:34:45 +0200 Subject: [PATCH 015/233] no pause, last three media types, readme --- README-DEDICATED-PC.txt | 32 +++++++++++++++++++++++++++ src/unix/unix_osd.c | 49 +++++++++++++++++++++++++++++++++++------ 2 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 README-DEDICATED-PC.txt diff --git a/README-DEDICATED-PC.txt b/README-DEDICATED-PC.txt new file mode 100644 index 000000000..f11c776a0 --- /dev/null +++ b/README-DEDICATED-PC.txt @@ -0,0 +1,32 @@ +These are the steps to install a machine fully dedicated to 86Box and tuned to make it appear almost native. + +1) install a vanilla Debian Trixie with netinst and without any graphical environment + depending on the machine speed, this will make boot time extremely short + +2) apt update if necessary + +3) install git and almost all required packages + apt install git build-essential cmake extra-cmake-modules pkg-config ninja-build libfreetype-dev libsdl2-dev libpng-dev libopenal-dev librtmidi-dev libfluidsynth-dev libsndfile1-dev libserialport-dev libevdev-dev libxkbcommon-dev libxkbcommon-x11-dev libslirp-dev + +4) setup git and clone + git@github.com:Valefungo/86Box.git + git@github.com:86Box/roms.git + git checkout unix_ods + +5) build (128 => super speed, too much for a 2GB machine) + cd 86Box + mkdir build + cd build + cmake .. --preset regular -D QT=OFF -D PREFER_STATIC=ON + cmake --build regular -j 128 + cd ../../ + ln -s 86Box/build/regular/src/86Box 86Box.exe + +6) boot + as root so it can take complete ownership of the linux framebuffer + +7) notes: +- 86Box will complain to be unable to find readline, this is fine, we don't need the command line at all +- ALSOFT will complain it can't connect to PipeWire, no problem, sounds will come from standard ALSA + + diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 527a1b6a9..f6037cbbd 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -48,7 +48,10 @@ static SDL_Texture *font_texture = NULL; typedef enum { STATE_MENU, STATE_FILESELECT_FLOPPY, - STATE_FILESELECT_CD + STATE_FILESELECT_CD, + STATE_FILESELECT_RDISK, + STATE_FILESELECT_CART, + STATE_FILESELECT_MO } AppState; static const char *menu_items[] = { @@ -63,7 +66,7 @@ static const char *menu_items[] = { "carteject - eject cartridge", "moeject - eject image from MO drive", "hardreset - hard reset the emulated system", - "pause - pause the the emulated system", + // "pause - pause the the emulated system", "fullscreen - toggle fullscreen", "version - print version and license information", "exit - exit 86Box", @@ -335,6 +338,16 @@ void osd_present() else if (state == STATE_FILESELECT_CD) { draw_file_selector(sdl_render, "SELECT CD ISO IMAGE", files, file_count, file_selected, scroll_offset, max_visible); } + else if (state == STATE_FILESELECT_RDISK) { + draw_file_selector(sdl_render, "SELECT REMOVABLE DISK IMAGE", files, file_count, file_selected, scroll_offset, max_visible); + } + else if (state == STATE_FILESELECT_CART) { + draw_file_selector(sdl_render, "SELECT CARTRIDGE IMAGE", files, file_count, file_selected, scroll_offset, max_visible); + } + else if (state == STATE_FILESELECT_MO) { + draw_file_selector(sdl_render, "SELECT MO IMAGE", files, file_count, file_selected, scroll_offset, max_visible); + } + #ifndef OSD_INSIDE_MAIN_LOOP SDL_UnlockMutex(sdl_mutex); @@ -388,14 +401,26 @@ int osd_handle(SDL_Event event) case 2 : // "rdiskload - Load removable disk image", reset_iso_files(); + file_count = load_iso_files(".", files, 100, ".img"); + file_count = load_iso_files("/mnt", files, 100, ".img"); + file_count = load_iso_files("/mnt/usbkey", files, 100, ".img"); + state = STATE_FILESELECT_RDISK; break; case 3 : // "cartload - Load cartridge image", reset_iso_files(); + file_count = load_iso_files(".", files, 100, ".img"); + file_count = load_iso_files("/mnt", files, 100, ".img"); + file_count = load_iso_files("/mnt/usbkey", files, 100, ".img"); + state = STATE_FILESELECT_CART; break; case 4 : // "moload - Load MO image", reset_iso_files(); + file_count = load_iso_files(".", files, 100, ".img"); + file_count = load_iso_files("/mnt", files, 100, ".img"); + file_count = load_iso_files("/mnt/usbkey", files, 100, ".img"); + state = STATE_FILESELECT_MO; break; case 5 : // "fddeject - eject disk from floppy drive", @@ -422,30 +447,32 @@ int osd_handle(SDL_Event event) osd_cmd_run("hardreset"); return 0; + /* better not pause ourself, we will be unable to get out of it case 11 : // "pause - pause the the emulated system", osd_cmd_run("pause"); return 0; + */ - case 12 : // "fullscreen - toggle fullscreen", + case 11 : // "fullscreen - toggle fullscreen", osd_cmd_run("fullscreen"); return 0; - case 13 : // "version - print version and license information", + case 12 : // "version - print version and license information", osd_cmd_run("version"); return 0; - case 14 : // "exit - exit 86Box", + case 13 : // "exit - exit 86Box", osd_cmd_run("exit"); return 0; - case 15 : // "close OSD" + case 14 : // "close OSD" // return zero does directly close the OSD return 0; } break; } } - else if (state == STATE_FILESELECT_FLOPPY || state == STATE_FILESELECT_CD) + else if (state == STATE_FILESELECT_FLOPPY || state == STATE_FILESELECT_CD || state == STATE_FILESELECT_RDISK || state == STATE_FILESELECT_CART || state == STATE_FILESELECT_MO) { if (file_count == 0) { @@ -476,15 +503,23 @@ int osd_handle(SDL_Event event) case SDLK_RETURN: case SDLK_KP_ENTER: + { char cmd[1280] = ""; if (state == STATE_FILESELECT_FLOPPY) sprintf(cmd, "fddload 0 %s 0", files[file_selected]); if (state == STATE_FILESELECT_CD) sprintf(cmd, "cdload 0 %s", files[file_selected]); + if (state == STATE_FILESELECT_RDISK) + sprintf(cmd, "rdiskload 0 %s 0", files[file_selected]); + if (state == STATE_FILESELECT_CART) + sprintf(cmd, "cartload 0 %s 0", files[file_selected]); + if (state == STATE_FILESELECT_MO) + sprintf(cmd, "moload 0 %s 0", files[file_selected]); unix_executeLine(cmd); state = STATE_MENU; + } return 0; case SDLK_ESCAPE: From 29665ee35d156cac4b4352a45c799633acfb89ff Mon Sep 17 00:00:00 2001 From: Valerio Vitali Date: Mon, 15 Sep 2025 20:18:35 +0200 Subject: [PATCH 016/233] explanation of udev --- README-DEDICATED-PC.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README-DEDICATED-PC.txt b/README-DEDICATED-PC.txt index f11c776a0..ba3dfa50c 100644 --- a/README-DEDICATED-PC.txt +++ b/README-DEDICATED-PC.txt @@ -29,4 +29,14 @@ These are the steps to install a machine fully dedicated to 86Box and tuned to m - 86Box will complain to be unable to find readline, this is fine, we don't need the command line at all - ALSOFT will complain it can't connect to PipeWire, no problem, sounds will come from standard ALSA +8) additional steps + add a new udev rule to automount any USB key to a known location so files in it can be listed in the OSD floppy/cd mount options + + create /etc/udev/rules.d/99-automount.rules + + with: + ACTION=="add", ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="disk", ENV{ID_FS_TYPE}=="exfat", RUN+="/usr/bin/systemd-mount --no-block --automount=yes --collect /dev/%k '/mnt'" + + replicate this line for each filesystem you expect the usb key to be formatted, in this example "exfat" + this is going to conflict if multiple keys are inserted, don't do it From bea5a6ff1b9979ecba3058888c78a5dac5399b56 Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Wed, 17 Sep 2025 10:16:56 +0300 Subject: [PATCH 017/233] Fix border rendering issues, add boolean type support, and improve variable/function naming --- src/include/86box/m_tandy.h | 2 +- src/include/86box/vid_cga.h | 1 - src/video/vid_tandy.c | 113 ++++++++++++++++-------------------- 3 files changed, 52 insertions(+), 64 deletions(-) diff --git a/src/include/86box/m_tandy.h b/src/include/86box/m_tandy.h index 75d917beb..e8cfbae15 100644 --- a/src/include/86box/m_tandy.h +++ b/src/include/86box/m_tandy.h @@ -38,7 +38,7 @@ typedef struct t1kvid_t { uint8_t baseline_hsyncpos; uint8_t baseline_vsyncpos; - int baseline_ready; + bool baseline_ready; int hsync_offset; int vsync_offset; diff --git a/src/include/86box/vid_cga.h b/src/include/86box/vid_cga.h index d6e391afb..439ee36fc 100644 --- a/src/include/86box/vid_cga.h +++ b/src/include/86box/vid_cga.h @@ -125,7 +125,6 @@ extern void cga_recalctimings(cga_t *cga); extern void cga_interpolate_init(void); extern void cga_blit_memtoscreen(int x, int y, int w, int h, int double_type); extern void cga_do_blit(int vid_xsize, int firstline, int lastline, int double_type); -extern void cga_do_blit_tandy(int vid_xsize, int firstline, int lastline, int double_type, int hsync_offset, int vsync_offset); extern void cga_poll(void *priv); //#ifdef EMU_DEVICE_H diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 4b8ee82ad..a26c1c38a 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -18,6 +18,7 @@ * Copyright 2016-2019 Miran Grca. * Copyright 2025 starfrost */ +#include #include #include #include @@ -165,25 +166,21 @@ vid_update_latch(t1kvid_t *vid) } static int -vid_h_scale(t1kvid_t *vid) +vid_get_char_width(t1kvid_t *vid) { - int cwidth; - - if ((vid->mode & 2) && !(vid->mode & 1) && (vid->array[3] & 0x10)) { /* 160x200 */ - cwidth = 32; - } else if (!(vid->mode & 16) && ((vid->mode & 2) || (vid->mode & 4))) { /* 320x200 + 40 column text */ - cwidth = 16; - } else { /* 640x200 + 80 column text */ - cwidth = 8; + if ((vid->mode & 2) && !(vid->mode & 1) && (vid->array[3] & 0x10)) { /*160x200*/ + return 32; + } else if (!(vid->mode & 16) && ((vid->mode & 2) || (vid->mode & 4))) { /*320x200 + 40-column text*/ + return 16; + } else { /*640x200 + 80-column text*/ + return 8; } - - return cwidth; } static void baseline_calib_start(t1kvid_t *vid) { - vid->baseline_ready = 0; + vid->baseline_ready = false; vid->hsync_offset = 0; vid->vsync_offset = 0; timer_on_auto(&vid->calib_timer, 100000.0); @@ -197,13 +194,13 @@ baseline_calib_finish(void *priv) vid->baseline_hsyncpos = vid->crtc[2]; vid->baseline_vsyncpos = vid->crtc[7]; - vid->baseline_ready = 1; + vid->baseline_ready = true; } static void vid_update_display_offset(t1kvid_t *vid, uint8_t reg) { - int hsync_scale = vid_h_scale(vid); + int hsync_scale = vid_get_char_width(vid); int vsync_scale = vid->crtc[9] + 1; if (reg == 1 || reg == 6) { @@ -406,7 +403,7 @@ vid_read(uint32_t addr, void *priv) } static void -vid_render(tandy_t *dev, int line, int hos_offs) +vid_render(tandy_t *dev, int line, int hos, int hos_offs) { t1kvid_t *vid = dev->vid; uint16_t cursoraddr = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; @@ -424,18 +421,25 @@ vid_render(tandy_t *dev, int line, int hos_offs) for (c = 0; c < hos_offs; c++) { if (vid->array[3] & 4) { buffer32->line[line][c] = cols[0]; + } else if ((vid->mode & 0x12) == 0x12) { + buffer32->line[line][c] = 0; + } else { + buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->col & 15) + 16; + } + } + + for (c = 0; c < hos - vid->hsync_offset; c++) { + if (vid->array[3] & 4) { if (vid->mode & 1) buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = cols[0]; else buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = cols[0]; } else if ((vid->mode & 0x12) == 0x12) { - buffer32->line[line][c] = 0; if (vid->mode & 1) buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = 0; else buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = 0; } else { - buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->col & 15) + 16; if (vid->mode & 1) buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = (vid->col & 15) + 16; else @@ -606,35 +610,35 @@ vid_render(tandy_t *dev, int line, int hos_offs) } static void -vid_render_blank(tandy_t *dev, int line, int hos_offs_tot) +vid_render_blank(tandy_t *dev, int line, int hos_tot) { t1kvid_t *vid = dev->vid; if (vid->array[3] & 4) { if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_offs_tot, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_tot, (vid->array[2] & 0xf) + 16); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_offs_tot, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_tot, (vid->array[2] & 0xf) + 16); } else { int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_offs_tot, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_tot, cols); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_offs_tot, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_tot, cols); } } static void -vid_render_process(tandy_t *dev, int line, int hos_offs_tot) +vid_render_process(tandy_t *dev, int line, int hos_tot) { t1kvid_t *vid = dev->vid; int x; if (vid->mode & 1) - x = (vid->crtc[1] << 3) + hos_offs_tot; + x = (vid->crtc[1] << 3) + hos_tot; else - x = (vid->crtc[1] << 4) + hos_offs_tot; + x = (vid->crtc[1] << 4) + hos_tot; if (!dev->is_sl2 && vid->composite) Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); @@ -653,10 +657,9 @@ vid_poll(void *priv) int oldvc; int scanline_old; int old_ma; - int hscale = vid_h_scale(vid); - int hscale_tot = hscale << 1; - int hos_offs = hscale + vid->hsync_offset; - int hos_offs_tot = hscale_tot + vid->hsync_offset; + int hos = vid_get_char_width(vid); + int hos_tot = hos << 1; + int hos_offs = hos + vid->hsync_offset; if (!vid->linepos) { timer_advance_u64(&vid->timer, vid->dispofftime); @@ -665,20 +668,6 @@ vid_poll(void *priv) scanline_old = vid->scanline; if ((vid->crtc[8] & 3) == 3) vid->scanline = (vid->scanline << 1) & 7; - - int border_col; - if (vid->array[3] & 4) { - border_col = (vid->array[2] & 0xf) + 16; - } else { - border_col = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; - } - if (vid->double_type > DOUBLE_NONE) { - hline(buffer32, 0, vid->displine << 1, xsize, border_col); - hline(buffer32, 0, (vid->displine << 1) + 1, xsize, border_col); - } else { - hline(buffer32, 0, vid->displine, xsize, border_col); - } - if (vid->dispon) { if (vid->displine < vid->firstline) { vid->firstline = vid->displine; @@ -687,39 +676,39 @@ vid_poll(void *priv) vid->lastline = vid->displine; switch (vid->double_type) { default: - vid_render(dev, vid->displine << 1, hos_offs); - vid_render_blank(dev, (vid->displine << 1) + 1, hos_offs_tot); + vid_render(dev, vid->displine << 1, hos, hos_offs); + vid_render_blank(dev, (vid->displine << 1) + 1, hos_tot); break; case DOUBLE_NONE: - vid_render(dev, vid->displine, hos_offs); + vid_render(dev, vid->displine, hos, hos_offs); break; case DOUBLE_SIMPLE: old_ma = vid->memaddr; - vid_render(dev, vid->displine << 1, hos_offs); + vid_render(dev, vid->displine << 1, hos, hos_offs); vid->memaddr = old_ma; - vid_render(dev, (vid->displine << 1) + 1, hos_offs); + vid_render(dev, (vid->displine << 1) + 1, hos, hos_offs); break; } } else switch (vid->double_type) { default: - vid_render_blank(dev, vid->displine << 1, hos_offs_tot); + vid_render_blank(dev, vid->displine << 1, hos_tot); break; case DOUBLE_NONE: - vid_render_blank(dev, vid->displine, hos_offs_tot); + vid_render_blank(dev, vid->displine, hos_tot); break; case DOUBLE_SIMPLE: - vid_render_blank(dev, vid->displine << 1, hos_offs_tot); - vid_render_blank(dev, (vid->displine << 1) + 1, hos_offs_tot); + vid_render_blank(dev, vid->displine << 1, hos_tot); + vid_render_blank(dev, (vid->displine << 1) + 1, hos_tot); break; } switch (vid->double_type) { default: - vid_render_process(dev, vid->displine << 1, hos_offs_tot); - vid_render_process(dev, (vid->displine << 1) + 1, hos_offs_tot); + vid_render_process(dev, vid->displine << 1, hos_tot); + vid_render_process(dev, (vid->displine << 1) + 1, hos_tot); break; case DOUBLE_NONE: - vid_render_process(dev, vid->displine, hos_offs_tot); + vid_render_process(dev, vid->displine, hos_tot); break; } @@ -789,9 +778,9 @@ vid_poll(void *priv) picint(1 << 5); if (vid->crtc[7]) { if (vid->mode & 1) - x = (vid->crtc[1] << 3) + hscale_tot; + x = (vid->crtc[1] << 3) + hos_tot; else - x = (vid->crtc[1] << 4) + hscale_tot; + x = (vid->crtc[1] << 4) + hos_tot; vid->lastline++; xs_temp = x; @@ -803,7 +792,7 @@ vid_poll(void *priv) if (ys_temp < 32) ys_temp = 400; if (!enable_overscan) - xs_temp -= hscale_tot; + xs_temp -= hos_tot; if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { xsize = xs_temp; @@ -820,7 +809,7 @@ vid_poll(void *priv) xsize, ((vid->lastline - vid->firstline) << 1) + 16, vid->double_type); else - cga_blit_memtoscreen(hscale, (vid->firstline << 1) - (vid->vsync_offset << 1), + cga_blit_memtoscreen(hos, (vid->firstline << 1) - (vid->vsync_offset << 1), xsize, (vid->lastline - vid->firstline) << 1, vid->double_type); } else { @@ -828,7 +817,7 @@ vid_poll(void *priv) video_blit_memtoscreen(0, (vid->firstline - 4) - vid->vsync_offset, xsize, (vid->lastline - vid->firstline) + 8); else - video_blit_memtoscreen(hscale, vid->firstline - vid->vsync_offset, + video_blit_memtoscreen(hos, vid->firstline - vid->vsync_offset, xsize, vid->lastline - vid->firstline); } } @@ -901,7 +890,7 @@ tandy_vid_init(tandy_t *dev) vid = calloc(1, sizeof(t1kvid_t)); vid->baseline_hsyncpos = 0; vid->baseline_vsyncpos = 0; - vid->baseline_ready = 0; + vid->baseline_ready = false; vid->hsync_offset = 0; vid->vsync_offset = 0; vid->memctrl = -1; @@ -916,7 +905,7 @@ tandy_vid_init(tandy_t *dev) if (dev->is_sl2) { vid->b8000_limit = 0x8000; vid->planar_ctrl = 4; - overscan_x = vid_h_scale(vid) << 1; + overscan_x = vid_get_char_width(vid) << 1; overscan_y = 16; io_sethandler(0x0065, 1, tandy_vid_in, NULL, NULL, tandy_vid_out, NULL, NULL, dev); From 83f729e46c609c98ef0a364f432f7c7b2a3f8b0b Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Fri, 19 Sep 2025 10:41:21 +0300 Subject: [PATCH 018/233] Replace dynamic horizontal overscan with fixed constants, fix character clock width calculation and remove vid_get_char_width() --- src/video/vid_tandy.c | 76 ++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index a26c1c38a..602b7d0d9 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -27,6 +27,8 @@ #include #include #define HAVE_STDARG_H +#define HOS 16 +#define HOS_SIDE 8 #include <86box/86box.h> #include <86box/timer.h> #include <86box/io.h> @@ -165,18 +167,6 @@ vid_update_latch(t1kvid_t *vid) vid->crtc[0x11] = lp_latch & 0xff; } -static int -vid_get_char_width(t1kvid_t *vid) -{ - if ((vid->mode & 2) && !(vid->mode & 1) && (vid->array[3] & 0x10)) { /*160x200*/ - return 32; - } else if (!(vid->mode & 16) && ((vid->mode & 2) || (vid->mode & 4))) { /*320x200 + 40-column text*/ - return 16; - } else { /*640x200 + 80-column text*/ - return 8; - } -} - static void baseline_calib_start(t1kvid_t *vid) { @@ -200,7 +190,7 @@ baseline_calib_finish(void *priv) static void vid_update_display_offset(t1kvid_t *vid, uint8_t reg) { - int hsync_scale = vid_get_char_width(vid); + int hsync_scale = (vid->mode & 1) ? 8 : 16; int vsync_scale = vid->crtc[9] + 1; if (reg == 1 || reg == 6) { @@ -403,7 +393,7 @@ vid_read(uint32_t addr, void *priv) } static void -vid_render(tandy_t *dev, int line, int hos, int hos_offs) +vid_render(tandy_t *dev, int line, int hos_offs) { t1kvid_t *vid = dev->vid; uint16_t cursoraddr = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; @@ -428,7 +418,7 @@ vid_render(tandy_t *dev, int line, int hos, int hos_offs) } } - for (c = 0; c < hos - vid->hsync_offset; c++) { + for (c = 0; c < HOS_SIDE - vid->hsync_offset; c++) { if (vid->array[3] & 4) { if (vid->mode & 1) buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = cols[0]; @@ -610,35 +600,35 @@ vid_render(tandy_t *dev, int line, int hos, int hos_offs) } static void -vid_render_blank(tandy_t *dev, int line, int hos_tot) +vid_render_blank(tandy_t *dev, int line) { t1kvid_t *vid = dev->vid; if (vid->array[3] & 4) { if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_tot, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + HOS, (vid->array[2] & 0xf) + 16); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_tot, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + HOS, (vid->array[2] & 0xf) + 16); } else { int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + hos_tot, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + HOS, cols); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + hos_tot, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + HOS, cols); } } static void -vid_render_process(tandy_t *dev, int line, int hos_tot) +vid_render_process(tandy_t *dev, int line) { t1kvid_t *vid = dev->vid; int x; if (vid->mode & 1) - x = (vid->crtc[1] << 3) + hos_tot; + x = (vid->crtc[1] << 3) + HOS; else - x = (vid->crtc[1] << 4) + hos_tot; + x = (vid->crtc[1] << 4) + HOS; if (!dev->is_sl2 && vid->composite) Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); @@ -657,9 +647,7 @@ vid_poll(void *priv) int oldvc; int scanline_old; int old_ma; - int hos = vid_get_char_width(vid); - int hos_tot = hos << 1; - int hos_offs = hos + vid->hsync_offset; + int hos_offs = HOS_SIDE + vid->hsync_offset; if (!vid->linepos) { timer_advance_u64(&vid->timer, vid->dispofftime); @@ -676,39 +664,39 @@ vid_poll(void *priv) vid->lastline = vid->displine; switch (vid->double_type) { default: - vid_render(dev, vid->displine << 1, hos, hos_offs); - vid_render_blank(dev, (vid->displine << 1) + 1, hos_tot); + vid_render(dev, vid->displine << 1, hos_offs); + vid_render_blank(dev, (vid->displine << 1) + 1); break; case DOUBLE_NONE: - vid_render(dev, vid->displine, hos, hos_offs); + vid_render(dev, vid->displine, hos_offs); break; case DOUBLE_SIMPLE: old_ma = vid->memaddr; - vid_render(dev, vid->displine << 1, hos, hos_offs); + vid_render(dev, vid->displine << 1, hos_offs); vid->memaddr = old_ma; - vid_render(dev, (vid->displine << 1) + 1, hos, hos_offs); + vid_render(dev, (vid->displine << 1) + 1, hos_offs); break; } } else switch (vid->double_type) { default: - vid_render_blank(dev, vid->displine << 1, hos_tot); + vid_render_blank(dev, vid->displine << 1); break; case DOUBLE_NONE: - vid_render_blank(dev, vid->displine, hos_tot); + vid_render_blank(dev, vid->displine); break; case DOUBLE_SIMPLE: - vid_render_blank(dev, vid->displine << 1, hos_tot); - vid_render_blank(dev, (vid->displine << 1) + 1, hos_tot); + vid_render_blank(dev, vid->displine << 1); + vid_render_blank(dev, (vid->displine << 1) + 1); break; } switch (vid->double_type) { default: - vid_render_process(dev, vid->displine << 1, hos_tot); - vid_render_process(dev, (vid->displine << 1) + 1, hos_tot); + vid_render_process(dev, vid->displine << 1); + vid_render_process(dev, (vid->displine << 1) + 1); break; case DOUBLE_NONE: - vid_render_process(dev, vid->displine, hos_tot); + vid_render_process(dev, vid->displine); break; } @@ -778,9 +766,9 @@ vid_poll(void *priv) picint(1 << 5); if (vid->crtc[7]) { if (vid->mode & 1) - x = (vid->crtc[1] << 3) + hos_tot; + x = (vid->crtc[1] << 3) + HOS; else - x = (vid->crtc[1] << 4) + hos_tot; + x = (vid->crtc[1] << 4) + HOS; vid->lastline++; xs_temp = x; @@ -792,7 +780,7 @@ vid_poll(void *priv) if (ys_temp < 32) ys_temp = 400; if (!enable_overscan) - xs_temp -= hos_tot; + xs_temp -= HOS; if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { xsize = xs_temp; @@ -809,7 +797,7 @@ vid_poll(void *priv) xsize, ((vid->lastline - vid->firstline) << 1) + 16, vid->double_type); else - cga_blit_memtoscreen(hos, (vid->firstline << 1) - (vid->vsync_offset << 1), + cga_blit_memtoscreen(HOS_SIDE, (vid->firstline << 1) - (vid->vsync_offset << 1), xsize, (vid->lastline - vid->firstline) << 1, vid->double_type); } else { @@ -817,7 +805,7 @@ vid_poll(void *priv) video_blit_memtoscreen(0, (vid->firstline - 4) - vid->vsync_offset, xsize, (vid->lastline - vid->firstline) + 8); else - video_blit_memtoscreen(hos, vid->firstline - vid->vsync_offset, + video_blit_memtoscreen(HOS_SIDE, vid->firstline - vid->vsync_offset, xsize, vid->lastline - vid->firstline); } } @@ -905,7 +893,7 @@ tandy_vid_init(tandy_t *dev) if (dev->is_sl2) { vid->b8000_limit = 0x8000; vid->planar_ctrl = 4; - overscan_x = vid_get_char_width(vid) << 1; + overscan_x = HOS_SIDE; overscan_y = 16; io_sethandler(0x0065, 1, tandy_vid_in, NULL, NULL, tandy_vid_out, NULL, NULL, dev); From aa7cb72c933cadaa0319b2651958aeeeae3557f0 Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Thu, 25 Sep 2025 15:42:17 +0300 Subject: [PATCH 019/233] Apply vsync_offset during scanline rendering instead of the final blit; clean up code --- src/video/vid_tandy.c | 88 +++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 46 deletions(-) diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 602b7d0d9..978a03c8d 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -27,8 +27,6 @@ #include #include #define HAVE_STDARG_H -#define HOS 16 -#define HOS_SIDE 8 #include <86box/86box.h> #include <86box/timer.h> #include <86box/io.h> @@ -418,7 +416,7 @@ vid_render(tandy_t *dev, int line, int hos_offs) } } - for (c = 0; c < HOS_SIDE - vid->hsync_offset; c++) { + for (c = 0; c < 8 - vid->hsync_offset; c++) { if (vid->array[3] & 4) { if (vid->mode & 1) buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = cols[0]; @@ -606,16 +604,16 @@ vid_render_blank(tandy_t *dev, int line) if (vid->array[3] & 4) { if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + HOS, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + HOS, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); } else { int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + HOS, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, cols); else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + HOS, cols); + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, cols); } } @@ -626,9 +624,9 @@ vid_render_process(tandy_t *dev, int line) int x; if (vid->mode & 1) - x = (vid->crtc[1] << 3) + HOS; + x = (vid->crtc[1] << 3) + 16; else - x = (vid->crtc[1] << 4) + HOS; + x = (vid->crtc[1] << 4) + 16; if (!dev->is_sl2 && vid->composite) Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); @@ -647,7 +645,9 @@ vid_poll(void *priv) int oldvc; int scanline_old; int old_ma; - int hos_offs = HOS_SIDE + vid->hsync_offset; + int hos_offs = 8 + vid->hsync_offset; + int displine_offs = vid->displine - vid->vsync_offset; + int displine_offs_double = (vid->displine << 1) - (vid->vsync_offset << 1); if (!vid->linepos) { timer_advance_u64(&vid->timer, vid->dispofftime); @@ -664,39 +664,51 @@ vid_poll(void *priv) vid->lastline = vid->displine; switch (vid->double_type) { default: - vid_render(dev, vid->displine << 1, hos_offs); - vid_render_blank(dev, (vid->displine << 1) + 1); + if (displine_offs_double >= 0) { + vid_render(dev, displine_offs_double, hos_offs); + vid_render_blank(dev, displine_offs_double + 1); + } break; case DOUBLE_NONE: - vid_render(dev, vid->displine, hos_offs); + if (displine_offs >= 0) + vid_render(dev, displine_offs, hos_offs); break; case DOUBLE_SIMPLE: - old_ma = vid->memaddr; - vid_render(dev, vid->displine << 1, hos_offs); - vid->memaddr = old_ma; - vid_render(dev, (vid->displine << 1) + 1, hos_offs); + if (displine_offs_double >= 0) { + old_ma = vid->memaddr; + vid_render(dev, displine_offs_double, hos_offs); + vid->memaddr = old_ma; + vid_render(dev, displine_offs_double + 1, hos_offs); + } break; } } else switch (vid->double_type) { default: - vid_render_blank(dev, vid->displine << 1); + if (displine_offs_double >= 0) + vid_render_blank(dev, displine_offs_double); break; case DOUBLE_NONE: - vid_render_blank(dev, vid->displine); + if (displine_offs >= 0) + vid_render_blank(dev, displine_offs); break; case DOUBLE_SIMPLE: - vid_render_blank(dev, vid->displine << 1); - vid_render_blank(dev, (vid->displine << 1) + 1); + if (displine_offs_double >= 0) { + vid_render_blank(dev, displine_offs_double); + vid_render_blank(dev, displine_offs_double + 1); + } break; } switch (vid->double_type) { default: - vid_render_process(dev, vid->displine << 1); - vid_render_process(dev, (vid->displine << 1) + 1); + if (displine_offs_double >= 0) { + vid_render_process(dev, displine_offs_double); + vid_render_process(dev, displine_offs_double + 1); + } break; case DOUBLE_NONE: - vid_render_process(dev, vid->displine); + if (displine_offs >= 0) + vid_render_process(dev, displine_offs); break; } @@ -766,9 +778,9 @@ vid_poll(void *priv) picint(1 << 5); if (vid->crtc[7]) { if (vid->mode & 1) - x = (vid->crtc[1] << 3) + HOS; + x = (vid->crtc[1] << 3) + 16; else - x = (vid->crtc[1] << 4) + HOS; + x = (vid->crtc[1] << 4) + 16; vid->lastline++; xs_temp = x; @@ -780,7 +792,7 @@ vid_poll(void *priv) if (ys_temp < 32) ys_temp = 400; if (!enable_overscan) - xs_temp -= HOS; + xs_temp -= 16; if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { xsize = xs_temp; @@ -791,24 +803,9 @@ vid_poll(void *priv) video_force_resize_set(0); } - if (vid->double_type > DOUBLE_NONE) { - if (enable_overscan) - cga_blit_memtoscreen(0, ((vid->firstline - 4) << 1) - (vid->vsync_offset << 1), - xsize, ((vid->lastline - vid->firstline) << 1) + 16, - vid->double_type); - else - cga_blit_memtoscreen(HOS_SIDE, (vid->firstline << 1) - (vid->vsync_offset << 1), - xsize, (vid->lastline - vid->firstline) << 1, - vid->double_type); - } else { - if (enable_overscan) - video_blit_memtoscreen(0, (vid->firstline - 4) - vid->vsync_offset, - xsize, (vid->lastline - vid->firstline) + 8); - else - video_blit_memtoscreen(HOS_SIDE, vid->firstline - vid->vsync_offset, - xsize, vid->lastline - vid->firstline); - } + cga_do_blit(xsize, vid->firstline, vid->lastline, vid->double_type); } + frames++; video_res_x = xsize; @@ -893,8 +890,7 @@ tandy_vid_init(tandy_t *dev) if (dev->is_sl2) { vid->b8000_limit = 0x8000; vid->planar_ctrl = 4; - overscan_x = HOS_SIDE; - overscan_y = 16; + overscan_x = overscan_y = 16; io_sethandler(0x0065, 1, tandy_vid_in, NULL, NULL, tandy_vid_out, NULL, NULL, dev); } else From c293a2d7652eecca25bc2e974cd7e59cfd6ebf28 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 28 Sep 2025 11:37:36 +0200 Subject: [PATCH 020/233] touchpad events --- src/unix/unix.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/unix/unix.c b/src/unix/unix.c index 832aab7f3..4ee31f38a 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1373,6 +1373,20 @@ main(int argc, char **argv) } break; } + /* Touch events */ + /* SDL_FINGERDOWN, */ + /* SDL_FINGERUP, */ + case SDL_FINGERMOTION: + { + // See SDL_TouchFingerEvent + if (mouse_capture || video_fullscreen) { + SDL_LockMutex(mousemutex); + mouse_scale((int)(event.tfinger.dx * 10), (int)(event.tfinger.dy * 10)); + SDL_UnlockMutex(mousemutex); + } + break; + } + case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: { From df8762cf6566f66d9f1d7434ce6413173648e849 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 28 Sep 2025 11:49:31 +0200 Subject: [PATCH 021/233] touchpad events --- src/unix/unix.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/unix/unix.c b/src/unix/unix.c index 4ee31f38a..a0820cba3 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1232,6 +1232,8 @@ monitor_thread(UNUSED(void *param)) #endif } +#define FINGER_MOTION_MULTIPLIER 100 + extern int gfxcard[GFXCARD_MAX]; int main(int argc, char **argv) @@ -1381,7 +1383,7 @@ main(int argc, char **argv) // See SDL_TouchFingerEvent if (mouse_capture || video_fullscreen) { SDL_LockMutex(mousemutex); - mouse_scale((int)(event.tfinger.dx * 10), (int)(event.tfinger.dy * 10)); + mouse_scale((int)(event.tfinger.dx * FINGER_MOTION_MULTIPLIER), (int)(event.tfinger.dy * FINGER_MOTION_MULTIPLIER)); SDL_UnlockMutex(mousemutex); } break; From ef33439e0b2305186f700bfd80954a09a64df8ab Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 28 Sep 2025 12:05:49 +0200 Subject: [PATCH 022/233] touchpad events, try sdl emulation --- src/unix/unix.c | 2 ++ src/unix/unix_sdl.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/unix/unix.c b/src/unix/unix.c index a0820cba3..15d6b9b7e 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1378,6 +1378,7 @@ main(int argc, char **argv) /* Touch events */ /* SDL_FINGERDOWN, */ /* SDL_FINGERUP, */ + /* case SDL_FINGERMOTION: { // See SDL_TouchFingerEvent @@ -1388,6 +1389,7 @@ main(int argc, char **argv) } break; } + */ case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: diff --git a/src/unix/unix_sdl.c b/src/unix/unix_sdl.c index 26115deff..806f71918 100644 --- a/src/unix/unix_sdl.c +++ b/src/unix/unix_sdl.c @@ -419,6 +419,10 @@ sdl_init_common(int flags) return (0); } + // Ensure mouse and touchpads behaves the same for us + SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "1"); + SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "1"); + if (flags & RENDERER_HARDWARE) { if (flags & RENDERER_OPENGL) { SDL_SetHint(SDL_HINT_RENDER_DRIVER, "OpenGL"); From a52b18f9e2d7743769fb032b90df3726498980e2 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 28 Sep 2025 12:11:38 +0200 Subject: [PATCH 023/233] touchpad events, try sdl emulation --- src/unix/unix.c | 4 ++-- src/unix/unix_sdl.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/unix/unix.c b/src/unix/unix.c index 15d6b9b7e..049c0ec9d 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1378,7 +1378,6 @@ main(int argc, char **argv) /* Touch events */ /* SDL_FINGERDOWN, */ /* SDL_FINGERUP, */ - /* case SDL_FINGERMOTION: { // See SDL_TouchFingerEvent @@ -1389,7 +1388,6 @@ main(int argc, char **argv) } break; } - */ case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: @@ -1424,6 +1422,8 @@ main(int argc, char **argv) case SDL_BUTTON_X2: buttonmask = 16; break; + default: + printf("Unknown mouse button %d\n", event.button.button); } SDL_LockMutex(mousemutex); if (event.button.state == SDL_PRESSED) diff --git a/src/unix/unix_sdl.c b/src/unix/unix_sdl.c index 806f71918..8d3a71002 100644 --- a/src/unix/unix_sdl.c +++ b/src/unix/unix_sdl.c @@ -419,7 +419,7 @@ sdl_init_common(int flags) return (0); } - // Ensure mouse and touchpads behaves the same for us + // Ensure mouse and touchpads behaves the same for us, dunno if these really do something SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "1"); SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "1"); From 340a43ad64426a0801ab16bd5ad277384b7ba048 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 28 Sep 2025 12:38:43 +0200 Subject: [PATCH 024/233] touchpad events, right button click --- src/unix/unix.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/unix/unix.c b/src/unix/unix.c index 049c0ec9d..e9c4c38aa 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -53,6 +53,8 @@ #define __USE_GNU 1 /* shouldn't be done, yet it is */ #include +extern SDL_Window *sdl_win; + static int first_use = 1; static uint64_t StartingTime; static uint64_t Frequency; @@ -1376,14 +1378,27 @@ main(int argc, char **argv) break; } /* Touch events */ - /* SDL_FINGERDOWN, */ - /* SDL_FINGERUP, */ + case SDL_FINGERDOWN: + { + // Trap these but ignore them for now + break; + } + case SDL_FINGERUP: + { + // Trap these but ignore them for now + break; + } case SDL_FINGERMOTION: { // See SDL_TouchFingerEvent if (mouse_capture || video_fullscreen) { SDL_LockMutex(mousemutex); - mouse_scale((int)(event.tfinger.dx * FINGER_MOTION_MULTIPLIER), (int)(event.tfinger.dy * FINGER_MOTION_MULTIPLIER)); + + // Real multiplier is the window size + int w, h; + SDL_GetWindowSize(sdl_win, &w, &h); + + mouse_scale((int)(event.tfinger.dx * w), (int)(event.tfinger.dy * h)); SDL_UnlockMutex(mousemutex); } break; @@ -1477,6 +1492,7 @@ main(int argc, char **argv) } keyboard_input(event.key.state == SDL_PRESSED, xtkey); + break; } case SDL_WINDOWEVENT: { @@ -1488,7 +1504,13 @@ main(int argc, char **argv) mouse_inside = 0; break; } + break; } + default: + { + printf("Unhandled SDL event: %d\n", event.type); + break; + } } } } From 891982c2c421aa42ca0a6dc6acf2975d44b1d819 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 29 Sep 2025 22:15:10 -0400 Subject: [PATCH 025/233] Align array entries in machine table and format machines (#6254) --- src/machine/m_amstrad.c | 519 +- src/machine/m_at_286.c | 56 +- src/machine/m_at_386dx.c | 45 +- src/machine/m_at_386dx_486.c | 43 +- src/machine/m_at_386sx.c | 136 +- src/machine/m_at_486_misc.c | 6 + src/machine/m_at_common.c | 4 +- src/machine/m_at_misc.c | 17 +- src/machine/m_at_slot1.c | 199 +- src/machine/m_at_slot1_socket370.c | 27 +- src/machine/m_at_socket1.c | 11 +- src/machine/m_at_socket2.c | 8 +- src/machine/m_at_socket3.c | 58 +- src/machine/m_at_socket370.c | 12 + src/machine/m_at_socket3_pci.c | 242 +- src/machine/m_at_socket4.c | 139 +- src/machine/m_at_socket4_5.c | 1 + src/machine/m_at_socket5.c | 210 +- src/machine/m_at_socket7.c | 336 +- src/machine/m_at_socket7_3v.c | 360 +- src/machine/m_at_socket8.c | 128 +- src/machine/m_at_sockets7.c | 78 +- src/machine/m_elt.c | 4 +- src/machine/m_europc.c | 23 +- src/machine/m_pcjr.c | 36 +- src/machine/m_ps1.c | 146 +- src/machine/m_ps2_isa.c | 4 +- src/machine/m_ps2_mca.c | 292 +- src/machine/m_tandy.c | 8 +- src/machine/m_v86p.c | 10 +- src/machine/m_xt.c | 468 +- src/machine/m_xt_olivetti.c | 83 +- src/machine/m_xt_t1000.c | 10 +- src/machine/m_xt_xi8088.c | 56 +- src/machine/machine.c | 6 +- src/machine/machine_table.c | 28396 +++++++++++++-------------- 36 files changed, 16601 insertions(+), 15576 deletions(-) diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index cded8e4f9..8e52bd488 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -75,14 +75,14 @@ #include <86box/m_amstrad.h> #include <86box/plat_unused.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 DOUBLE_NONE 0 #define DOUBLE_SIMPLE 1 @@ -90,17 +90,17 @@ #define DOUBLE_INTERPOLATE_LINEAR 3 typedef struct amsvid_t { - 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 */ + 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; uint8_t type; @@ -161,8 +161,8 @@ typedef struct amstrad_t { /* Video stuff. */ amsvid_t *vid; - fdc_t *fdc; - lpt_t *lpt; + fdc_t *fdc; + lpt_t *lpt; } amstrad_t; uint32_t amstrad_latch; @@ -345,20 +345,18 @@ vid_read_1512(uint32_t addr, void *priv) static void ams1512_render(amsvid_t *vid, int line) { - uint16_t cursoraddr = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; - int drawcursor; - int x; - int c; - uint8_t chr; - uint8_t attr; - uint16_t dat; - uint16_t dat2; - uint16_t dat3; - uint16_t dat4; - int cols[4]; - int col; + uint16_t cursoraddr = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; + int drawcursor; + uint8_t chr; + uint8_t attr; + uint16_t dat; + uint16_t dat2; + uint16_t dat3; + uint16_t dat4; + int cols[4]; + int col; - for (c = 0; c < 8; c++) { + for (uint8_t c = 0; c < 8; c++) { if ((vid->cgamode & 0x12) == 0x12) { buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->border & 15) + 16; if (vid->cgamode & CGA_MODE_FLAG_HIGHRES) { @@ -376,10 +374,10 @@ ams1512_render(amsvid_t *vid, int line) } } if (vid->cgamode & CGA_MODE_FLAG_HIGHRES) { - for (x = 0; x < 80; x++) { - chr = vid->vram[(vid->memaddr<< 1) & 0x3fff]; - attr = vid->vram[((vid->memaddr<< 1) + 1) & 0x3fff]; - drawcursor = ((vid->memaddr== cursoraddr) && vid->cursorvisible && vid->cursoron); + for (uint8_t x = 0; x < 80; x++) { + chr = vid->vram[(vid->memaddr << 1) & 0x3fff]; + attr = vid->vram[((vid->memaddr << 1) + 1) & 0x3fff]; + drawcursor = ((vid->memaddr == cursoraddr) && vid->cursorvisible && vid->cursoron); if (vid->cgamode & CGA_MODE_FLAG_BLINK) { cols[1] = (attr & 15) + 16; cols[0] = ((attr >> 4) & 7) + 16; @@ -390,21 +388,21 @@ ams1512_render(amsvid_t *vid, int line) cols[0] = (attr >> 4) + 16; } if (drawcursor) - for (c = 0; c < 8; c++) + for (uint8_t c = 0; c < 8; c++) buffer32->line[line][(x << 3) + c + 8] = cols[(fontdat[vid->fontbase + chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 15; else - for (c = 0; c < 8; c++) + for (uint8_t c = 0; c < 8; c++) buffer32->line[line][(x << 3) + c + 8] = cols[(fontdat[vid->fontbase + chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; vid->memaddr++; } } else if (!(vid->cgamode & CGA_MODE_FLAG_GRAPHICS)) { - for (x = 0; x < 40; x++) { - chr = vid->vram[(vid->memaddr<< 1) & 0x3fff]; - attr = vid->vram[((vid->memaddr<< 1) + 1) & 0x3fff]; - drawcursor = ((vid->memaddr == cursoraddr) && vid->cursorvisible && vid->cursoron); - + for (uint8_t x = 0; x < 40; x++) { + chr = vid->vram[(vid->memaddr << 1) & 0x3fff]; + attr = vid->vram[((vid->memaddr << 1) + 1) & 0x3fff]; + drawcursor = ((vid->memaddr == cursoraddr) && vid->cursorvisible && vid->cursoron); + if (vid->cgamode & CGA_MODE_FLAG_BLINK) { cols[1] = (attr & 15) + 16; cols[0] = ((attr >> 4) & 7) + 16; @@ -416,12 +414,12 @@ ams1512_render(amsvid_t *vid, int line) } vid->memaddr++; if (drawcursor) - for (c = 0; c < 8; c++) + for (uint8_t c = 0; c < 8; c++) buffer32->line[line][(x << 4) + (c << 1) + 8] = buffer32->line[line][(x << 4) + (c << 1) + 1 + 8] = cols[(fontdat[vid->fontbase + chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 15; else - for (c = 0; c < 8; c++) + for (uint8_t c = 0; c < 8; c++) buffer32->line[line][(x << 4) + (c << 1) + 8] = buffer32->line[line][(x << 4) + (c << 1) + 1 + 8] = cols[(fontdat[vid->fontbase + chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; @@ -442,26 +440,26 @@ ams1512_render(amsvid_t *vid, int line) cols[2] = col | 4; cols[3] = col | 6; } - for (x = 0; x < 40; x++) { + for (uint8_t x = 0; x < 40; x++) { dat = (vid->vram[((vid->memaddr<< 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000)] << 8) | vid->vram[((vid->memaddr<< 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; - for (c = 0; c < 8; c++) { + for (uint8_t c = 0; c < 8; c++) { buffer32->line[line][(x << 4) + (c << 1) + 8] = buffer32->line[line][(x << 4) + (c << 1) + 1 + 8] = cols[dat >> 14]; dat <<= 2; } } } else { - for (x = 0; x < 40; x++) { - cursoraddr = ((vid->memaddr<< 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000); - dat = (vid->vram[cursoraddr] << 8) | vid->vram[cursoraddr + 1]; - dat2 = (vid->vram[cursoraddr + 0x4000] << 8) | vid->vram[cursoraddr + 0x4001]; - dat3 = (vid->vram[cursoraddr + 0x8000] << 8) | vid->vram[cursoraddr + 0x8001]; - dat4 = (vid->vram[cursoraddr + 0xc000] << 8) | vid->vram[cursoraddr + 0xc001]; + for (uint8_t x = 0; x < 40; x++) { + cursoraddr = ((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000); + dat = (vid->vram[cursoraddr] << 8) | vid->vram[cursoraddr + 1]; + dat2 = (vid->vram[cursoraddr + 0x4000] << 8) | vid->vram[cursoraddr + 0x4001]; + dat3 = (vid->vram[cursoraddr + 0x8000] << 8) | vid->vram[cursoraddr + 0x8001]; + dat4 = (vid->vram[cursoraddr + 0xc000] << 8) | vid->vram[cursoraddr + 0xc001]; vid->memaddr++; - for (c = 0; c < 16; c++) { + for (uint8_t c = 0; c < 16; c++) { buffer32->line[line][(x << 4) + c + 8] = (((dat >> 15) | ((dat2 >> 15) << 1) | ((dat3 >> 15) << 2) | ((dat4 >> 15) << 3)) & (vid->cgacol & 15)) + 16; dat <<= 1; @@ -498,7 +496,7 @@ vid_poll_1512(void *priv) timer_advance_u64(&vid->timer, vid->dispofftime); vid->status |= 1; vid->linepos = 1; - scanline_old = vid->scanline; + scanline_old = vid->scanline; if (vid->dispon) { if (vid->displine < vid->firstline) { vid->firstline = vid->displine; @@ -520,18 +518,19 @@ vid_poll_1512(void *priv) ams1512_render(vid, (vid->displine << 1) + 1); break; } - } else switch (vid->double_type) { - default: - ams1512_render_blank(vid, vid->displine << 1); - break; - case DOUBLE_NONE: - ams1512_render_blank(vid, vid->displine); - break; - case DOUBLE_SIMPLE: - ams1512_render_blank(vid, vid->displine << 1); - ams1512_render_blank(vid, (vid->displine << 1) + 1); - break; - } + } else + switch (vid->double_type) { + default: + ams1512_render_blank(vid, vid->displine << 1); + break; + case DOUBLE_NONE: + ams1512_render_blank(vid, vid->displine); + break; + case DOUBLE_SIMPLE: + ams1512_render_blank(vid, vid->displine << 1); + ams1512_render_blank(vid, (vid->displine << 1) + 1); + break; + } if (vid->cgamode & CGA_MODE_FLAG_HIGHRES) x = (vid->crtc[1] << 3) + 16; @@ -567,21 +566,21 @@ vid_poll_1512(void *priv) vid->status &= ~8; } if (vid->scanline == (vid->crtc[11] & 31)) { - vid->cursorvisible = 0; + vid->cursorvisible = 0; } if (vid->vadj) { vid->scanline++; vid->scanline &= 31; - vid->memaddr= vid->memaddr_backup; + vid->memaddr = vid->memaddr_backup; vid->vadj--; if (!vid->vadj) { - vid->dispon = 1; - vid->memaddr= vid->memaddr_backup = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; - vid->scanline = 0; + vid->dispon = 1; + vid->memaddr = vid->memaddr_backup = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; + vid->scanline = 0; } } else if (vid->scanline == vid->crtc[9]) { vid->memaddr_backup = vid->memaddr; - vid->scanline = 0; + vid->scanline = 0; vid->vc++; vid->vc &= 127; @@ -652,7 +651,7 @@ vid_poll_1512(void *priv) } else { vid->scanline++; vid->scanline &= 31; - vid->memaddr= vid->memaddr_backup; + vid->memaddr = vid->memaddr_backup; } if (vid->scanline == (vid->crtc[10] & 31)) vid->cursorvisible = 1; @@ -662,10 +661,8 @@ vid_poll_1512(void *priv) static void vid_init_1512(amstrad_t *ams) { - amsvid_t *vid; - /* Allocate a video controller block. */ - vid = (amsvid_t *) calloc(1, sizeof(amsvid_t)); + amsvid_t *vid = (amsvid_t *) calloc(1, sizeof(amsvid_t)); video_inform(VIDEO_FLAG_TYPE_CGA, &timing_pc1512); @@ -712,20 +709,21 @@ vid_speed_change_1512(void *priv) } const device_config_t vid_1512_config[] = { - // clang-format off + // clang-format off { - .name = "display_type", - .description = "Display type", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "display_type", + .description = "Display type", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "PC-CM (Colour)", .value = 0 }, { .description = "PC-MM (Monochrome)", .value = 3 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { .name = "double_type", @@ -745,29 +743,30 @@ const device_config_t vid_1512_config[] = { .bios = { { 0 } } }, { - .name = "codepage", - .description = "Hardware font", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 3, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "codepage", + .description = "Hardware font", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 3, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "US English", .value = 3 }, { .description = "Danish", .value = 1 }, { .description = "Greek", .value = 0 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { - .name = "language", - .description = "BIOS language", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 7, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "language", + .description = "BIOS language", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 7, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "English", .value = 7 }, { .description = "German", .value = 6 }, { .description = "French", .value = 5 }, @@ -777,10 +776,11 @@ const device_config_t vid_1512_config[] = { { .description = "Italian", .value = 1 }, { .description = "Diagnostic mode", .value = 0 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t vid_1512_device = { @@ -915,7 +915,7 @@ vid_init_1640(amstrad_t *ams) cga_palette = 0; cgapal_rebuild(); - vid->double_type = device_get_config_int("double_type"); + vid->double_type = device_get_config_int("double_type"); vid->cga.double_type = device_get_config_int("double_type"); cga_interpolate_init(); @@ -941,7 +941,7 @@ vid_speed_changed_1640(void *priv) } const device_config_t vid_1640_config[] = { - // clang-format off + // clang-format off { .name = "double_type", .description = "Line doubling type", @@ -960,14 +960,14 @@ const device_config_t vid_1640_config[] = { .bios = { { 0 } } }, { - .name = "language", - .description = "BIOS language", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 7, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "language", + .description = "BIOS language", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 7, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "English", .value = 7 }, { .description = "German", .value = 6 }, { .description = "French", .value = 5 }, @@ -977,10 +977,11 @@ const device_config_t vid_1640_config[] = { { .description = "Italian", .value = 1 }, { .description = "Diagnostic mode", .value = 0 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t vid_1640_device = { @@ -1357,8 +1358,8 @@ lcd_draw_char_40(amsvid_t *vid, uint32_t *buffer, uint8_t chr, static void lcdm_poll(amsvid_t *vid) { - mda_t *mda = &vid->mda; - uint16_t cursoraddr = (mda->crtc[MDA_CRTC_CURSOR_ADDR_LOW] | (mda->crtc[MDA_CRTC_CURSOR_ADDR_HIGH] << 8)) & 0x3fff; + mda_t *mda = &vid->mda; + uint16_t cursoraddr = (mda->crtc[MDA_CRTC_CURSOR_ADDR_LOW] | (mda->crtc[MDA_CRTC_CURSOR_ADDR_HIGH] << 8)) & 0x3fff; int drawcursor; int x; int oldvc; @@ -1371,7 +1372,7 @@ lcdm_poll(amsvid_t *vid) timer_advance_u64(&vid->timer, mda->dispofftime); mda->status |= 1; mda->linepos = 1; - scanline_old = mda->scanline; + scanline_old = mda->scanline; if ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3) mda->scanline = (mda->scanline << 1) & 7; if (mda->dispon) { @@ -1379,9 +1380,9 @@ lcdm_poll(amsvid_t *vid) mda->firstline = mda->displine; mda->lastline = mda->displine; for (x = 0; x < mda->crtc[MDA_CRTC_HDISP]; x++) { - chr = mda->vram[(mda->memaddr<< 1) & 0xfff]; - attr = mda->vram[((mda->memaddr<< 1) + 1) & 0xfff]; - drawcursor = ((mda->memaddr== cursoraddr) && mda->cursorvisible && mda->cursoron); + chr = mda->vram[(mda->memaddr << 1) & 0xfff]; + attr = mda->vram[((mda->memaddr << 1) + 1) & 0xfff]; + drawcursor = ((mda->memaddr == cursoraddr) && mda->cursorvisible && mda->cursoron); blink = ((mda->blink & 16) && (mda->mode & MDA_MODE_BLINK) && (attr & 0x80) && !drawcursor); lcd_draw_char_80(vid, &(buffer32->line[mda->displine])[x * 8], chr, attr, drawcursor, blink, mda->scanline, 0, mda->mode); @@ -1405,22 +1406,22 @@ lcdm_poll(amsvid_t *vid) mda->status &= ~8; } if (mda->scanline == (mda->crtc[MDA_CRTC_CURSOR_END] & 31) || ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3 && mda->scanline == ((mda->crtc[MDA_CRTC_CURSOR_END] & 31) >> 1))) { - mda->cursorvisible = 0; + mda->cursorvisible = 0; } if (mda->vadj) { mda->scanline++; mda->scanline &= 31; - mda->memaddr= mda->memaddr_backup; + mda->memaddr = mda->memaddr_backup; mda->vadj--; if (!mda->vadj) { - mda->dispon = 1; - mda->memaddr= mda->memaddr_backup = (mda->crtc[MDA_CRTC_START_ADDR_LOW] | (mda->crtc[MDA_CRTC_START_ADDR_HIGH] << 8)) & 0x3fff; - mda->scanline = 0; + mda->dispon = 1; + mda->memaddr = mda->memaddr_backup = (mda->crtc[MDA_CRTC_START_ADDR_LOW] | (mda->crtc[MDA_CRTC_START_ADDR_HIGH] << 8)) & 0x3fff; + mda->scanline = 0; } } else if (mda->scanline == mda->crtc[MDA_CRTC_MAX_SCANLINE_ADDR] || ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3 && mda->scanline == (mda->crtc[MDA_CRTC_MAX_SCANLINE_ADDR] >> 1))) { mda->memaddr_backup = mda->memaddr; - mda->scanline = 0; - oldvc = mda->vc; + mda->scanline = 0; + oldvc = mda->vc; mda->vc++; mda->vc &= 127; if (mda->vc == mda->crtc[MDA_CRTC_VDISP]) @@ -1431,7 +1432,7 @@ lcdm_poll(amsvid_t *vid) if (!mda->vadj) mda->dispon = 1; if (!mda->vadj) - mda->memaddr= mda->memaddr_backup = (mda->crtc[MDA_CRTC_START_ADDR_LOW] | (mda->crtc[MDA_CRTC_START_ADDR_HIGH] << 8)) & 0x3fff; + mda->memaddr = mda->memaddr_backup = (mda->crtc[MDA_CRTC_START_ADDR_LOW] | (mda->crtc[MDA_CRTC_START_ADDR_HIGH] << 8)) & 0x3fff; if ((mda->crtc[MDA_CRTC_CURSOR_START] & 0x60) == 0x20) mda->cursoron = 0; else @@ -1469,7 +1470,7 @@ lcdm_poll(amsvid_t *vid) } else { mda->scanline++; mda->scanline &= 31; - mda->memaddr= mda->memaddr_backup; + mda->memaddr = mda->memaddr_backup; } if (mda->scanline == (mda->crtc[MDA_CRTC_CURSOR_START] & 31) || ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3 && mda->scanline == ((mda->crtc[MDA_CRTC_CURSOR_START] & 31) >> 1))) mda->cursorvisible = 1; @@ -1498,7 +1499,7 @@ lcdc_poll(amsvid_t *vid) timer_advance_u64(&vid->timer, cga->dispofftime); cga->cgastat |= 1; cga->linepos = 1; - scanline_old = cga->scanline; + scanline_old = cga->scanline; if ((cga->crtc[CGA_CRTC_INTERLACE] & 3) == 3) cga->scanline = ((cga->scanline << 1) + cga->oddeven) & 7; if (cga->cgadispon) { @@ -1568,7 +1569,7 @@ lcdc_poll(amsvid_t *vid) cga->cgastat &= ~8; } if (cga->scanline == (cga->crtc[CGA_CRTC_CURSOR_END] & 31) || ((cga->crtc[CGA_CRTC_INTERLACE] & 3) == 3 && cga->scanline == ((cga->crtc[CGA_CRTC_CURSOR_END] & 31) >> 1))) { - cga->cursorvisible = 0; + cga->cursorvisible = 0; } if ((cga->crtc[CGA_CRTC_INTERLACE] & 3) == 3 && cga->scanline == (cga->crtc[CGA_CRTC_MAX_SCANLINE_ADDR] >> 1)) cga->memaddr_backup = cga->memaddr; @@ -1580,12 +1581,12 @@ lcdc_poll(amsvid_t *vid) if (!cga->vadj) { cga->cgadispon = 1; cga->memaddr = cga->memaddr_backup = (cga->crtc[CGA_CRTC_START_ADDR_LOW] | (cga->crtc[CGA_CRTC_START_ADDR_HIGH] << 8)) & 0x3fff; - cga->scanline = 0; + cga->scanline = 0; } } else if (cga->scanline == cga->crtc[CGA_CRTC_MAX_SCANLINE_ADDR]) { cga->memaddr_backup = cga->memaddr; - cga->scanline = 0; - oldvc = cga->vc; + cga->scanline = 0; + oldvc = cga->vc; cga->vc++; cga->vc &= 127; @@ -1828,68 +1829,71 @@ vid_close_200(void *priv) } const device_config_t vid_200_config[] = { - /* TODO: Should have options here for: - * - * > Display port (TTL or RF) - */ - // clang-format off + /* TODO: Should have options here for: + * + * > Display port (TTL or RF) + */ + // clang-format off { - .name = "video_emulation", - .description = "Display type", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = PC200_CGA, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "video_emulation", + .description = "Display type", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = PC200_CGA, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "CGA monitor", .value = PC200_CGA }, { .description = "MDA monitor", .value = PC200_MDA }, { .description = "Television", .value = PC200_TV }, { .description = "" } - } + }, + .bios = { { 0 } } }, { - .name = "display_type", - .description = "Monitor type", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "display_type", + .description = "Monitor type", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "RGB", .value = 0 }, { .description = "RGB (no brown)", .value = 4 }, { .description = "Green Monochrome", .value = 1 }, { .description = "Amber Monochrome", .value = 2 }, { .description = "White Monochrome", .value = 3 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { - .name = "codepage", - .description = "Hardware font", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 3, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "codepage", + .description = "Hardware font", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 3, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "US English", .value = 3 }, { .description = "Portugese", .value = 2 }, { .description = "Norwegian", .value = 1 }, { .description = "Greek", .value = 0 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { - .name = "language", - .description = "BIOS language", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 7, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "language", + .description = "BIOS language", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 7, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "English", .value = 7 }, { .description = "German", .value = 6 }, { .description = "French", .value = 5 }, @@ -1899,10 +1903,11 @@ const device_config_t vid_200_config[] = { { .description = "Italian", .value = 1 }, { .description = "Diagnostic mode", .value = 0 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t vid_200_device = { @@ -1920,36 +1925,37 @@ const device_t vid_200_device = { }; const device_config_t vid_ppc512_config[] = { - /* TODO: Should have options here for: - * - * > Display port (TTL or RF) - */ - // clang-format off + /* TODO: Should have options here for: + * + * > Display port (TTL or RF) + */ + // clang-format off { - .name = "video_emulation", - .description = "Display type", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = PC200_LCDC, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "video_emulation", + .description = "Display type", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = PC200_LCDC, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "CGA monitor", .value = PC200_CGA }, { .description = "MDA monitor", .value = PC200_MDA }, { .description = "LCD (CGA mode)", .value = PC200_LCDC }, { .description = "LCD (MDA mode)", .value = PC200_LCDM }, { .description = "" } }, + .bios = { { 0 } } }, { - .name = "display_type", - .description = "Monitor type", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "display_type", + .description = "Monitor type", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "RGB", .value = 0 }, { .description = "RGB (no brown)", .value = 4 }, { .description = "Green Monochrome", .value = 1 }, @@ -1957,32 +1963,34 @@ const device_config_t vid_ppc512_config[] = { { .description = "White Monochrome", .value = 3 }, { .description = "" } }, + .bios = { { 0 } } }, { - .name = "codepage", - .description = "Hardware font", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 3, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "codepage", + .description = "Hardware font", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 3, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "US English", .value = 3 }, { .description = "Portugese", .value = 2 }, { .description = "Norwegian", .value = 1 }, { .description = "Greek", .value = 0 }, { .description = "" } }, + .bios = { { 0 } } }, { - .name = "language", - .description = "BIOS language", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 7, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "language", + .description = "BIOS language", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 7, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "English", .value = 7 }, { .description = "German", .value = 6 }, { .description = "French", .value = 5 }, @@ -1992,17 +2000,22 @@ const device_config_t vid_ppc512_config[] = { { .description = "Italian", .value = 1 }, { .description = "Diagnostic mode", .value = 0 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { - .name = "invert", - .description = "Invert LCD colors", - .type = CONFIG_BINARY, - .default_string = "", - .default_int = 0 + .name = "invert", + .description = "Invert LCD colors", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t vid_ppc512_device = { @@ -2020,23 +2033,24 @@ const device_t vid_ppc512_device = { }; const device_config_t vid_pc2086_config[] = { - // clang-format off + // clang-format off { - .name = "language", - .description = "BIOS language", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 7, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "language", + .description = "BIOS language", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 7, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "English", .value = 7 }, { .description = "Diagnostic mode", .value = 0 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t vid_pc2086_device = { @@ -2054,23 +2068,24 @@ const device_t vid_pc2086_device = { }; const device_config_t vid_pc3086_config[] = { - // clang-format off + // clang-format off { - .name = "language", - .description = "BIOS language", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 7, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "language", + .description = "BIOS language", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 7, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "English", .value = 7 }, { .description = "Diagnostic mode", .value = 3 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t vid_pc3086_device = { @@ -2119,7 +2134,7 @@ static int ms_poll(void *priv) { amstrad_t *ams = (amstrad_t *) priv; - int b = mouse_get_buttons_ex(); + int b = mouse_get_buttons_ex(); if ((b & 1) && !(ams->oldb & 1)) keyboard_send(0x7e); @@ -2431,7 +2446,7 @@ ams_read(uint16_t port, void *priv) } static const scancode scancode_pc200[512] = { - // clang-format off + // clang-format off { .mk = { 0 }, .brk = { 0 } }, /* 000 */ { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ { .mk = { 0x02, 0 }, .brk = { 0x82, 0 } }, /* 002 */ @@ -2944,7 +2959,7 @@ static const scancode scancode_pc200[512] = { { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ { .mk = {0xe0, 0xfe, 0 }, .brk = { 0 } }, /* 1fe */ { .mk = {0xe0, 0xff, 0 }, .brk = { 0 } } /* 1ff */ - // clang-format on + // clang-format on }; static void @@ -2952,7 +2967,7 @@ machine_amstrad_init(const machine_t *model, int type) { amstrad_t *ams; - ams = (amstrad_t *) calloc(1, sizeof(amstrad_t)); + ams = (amstrad_t *) calloc(1, sizeof(amstrad_t)); ams->type = type; amstrad_latch = 0x80000000; diff --git a/src/machine/m_at_286.c b/src/machine/m_at_286.c index b8e1f746a..7f6442940 100644 --- a/src/machine/m_at_286.c +++ b/src/machine/m_at_286.c @@ -54,8 +54,9 @@ static const device_config_t ibmat_config[] = { .type = CONFIG_BIOS, .default_string = "ibm5170_111585", .default_int = 0, - .file_filter = "", + .file_filter = NULL, .spinner = { 0 }, + .selection = { { 0 } }, .bios = { { .name = "62X082x (11/15/85)", @@ -108,10 +109,15 @@ static const device_config_t ibmat_config[] = { }, }, { - .name = "enable_5161", - .description = "IBM 5161 Expansion Unit", - .type = CONFIG_BINARY, - .default_int = 0 + .name = "enable_5161", + .description = "IBM 5161 Expansion Unit", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -156,10 +162,10 @@ machine_at_ibmat_init(const machine_t *model) return ret; device_context(model->device); - enable_5161 = machine_get_config_int("enable_5161"); - fn[0] = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); - fn[1] = device_get_bios_file(model->device, device_get_config_bios("bios"), 1); - ret = bios_load_interleaved(fn[0], fn[1], 0x000f0000, 65536, 0); + enable_5161 = machine_get_config_int("enable_5161"); + fn[0] = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + fn[1] = device_get_bios_file(model->device, device_get_config_bios("bios"), 1); + ret = bios_load_interleaved(fn[0], fn[1], 0x000f0000, 65536, 0); device_context_restore(); if (bios_only || !ret) @@ -176,10 +182,15 @@ machine_at_ibmat_init(const machine_t *model) static const device_config_t ibmxt286_config[] = { // clang-format off { - .name = "enable_5161", - .description = "IBM 5161 Expansion Unit", - .type = CONFIG_BINARY, - .default_int = 0 + .name = "enable_5161", + .description = "IBM 5161 Expansion Unit", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -206,7 +217,7 @@ machine_at_ibmxt286_init(const machine_t *model) uint8_t enable_5161; device_context(model->device); - enable_5161 = machine_get_config_int("enable_5161"); + enable_5161 = machine_get_config_int("enable_5161"); device_context_restore(); ret = bios_load_interleaved("roms/machines/ibmxt286/bios_5162_21apr86_u34_78x7460_27256.bin", @@ -279,8 +290,7 @@ machine_at_portableiii_init(const machine_t *model) int ret; ret = bios_load_linearr("roms/machines/portableiii/K Combined.bin", - 0x000f8000, 65536, 0); - + 0x000f8000, 65536, 0); if (bios_only || !ret) return ret; @@ -292,7 +302,7 @@ machine_at_portableiii_init(const machine_t *model) if (hdc_current[0] == HDC_INTERNAL) device_add(&ide_isa_device); - + if (gfxcard[0] == VID_INTERNAL) device_add(&compaq_plasma_device); @@ -318,8 +328,8 @@ machine_at_grid1520_init(const machine_t *model) mem_remap_top(384); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); - // for now just select CGA with amber monitor - //device_add(&cga_device); + // for now just select CGA with amber monitor + // device_add(&cga_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -992,12 +1002,12 @@ machine_at_drsm35286_init(const machine_t *model) if (bios_only || !ret) return ret; - + device_add(&ide_isa_device); device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI)); - + machine_at_scat_init(model, 1, 0); - + if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -1018,7 +1028,7 @@ machine_at_deskmaster286_init(const machine_t *model) machine_at_scat_init(model, 0, 1); device_add(&f82c710_device); - + device_add(&ide_isa_device); return ret; diff --git a/src/machine/m_at_386dx.c b/src/machine/m_at_386dx.c index 7fb045d58..5816204ed 100644 --- a/src/machine/m_at_386dx.c +++ b/src/machine/m_at_386dx.c @@ -60,18 +60,33 @@ machine_compaq_p1_handler(void) static const device_config_t deskpro386_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "deskpro386", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "September 1986", .internal_name = "deskpro386_09_1986", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/deskpro386/1986-09-04-HI.json.bin", "" } }, - { .name = "May 1988", .internal_name = "deskpro386", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/deskpro386/1988-05-10.json.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "September 1986", + .internal_name = "deskpro386_09_1986", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/deskpro386/1986-09-04-HI.json.bin", "" } + }, + { + .name = "May 1988", + .internal_name = "deskpro386", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/deskpro386/1988-05-10.json.bin", "" } + }, { .files_no = 0 } }, }, @@ -96,15 +111,15 @@ const device_t deskpro386_device = { int machine_at_deskpro386_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linearr(fn, 0x000f8000, 65536, 0); if (fdc_current[0] == FDC_INTERNAL) @@ -127,7 +142,7 @@ machine_at_portableiii386_init(const machine_t *model) int ret; ret = bios_load_linearr("roms/machines/portableiii/P.2 Combined.bin", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) return ret; diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 2942180bb..9ac53805a 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -103,18 +103,33 @@ machine_at_c747_init(const machine_t *model) static const device_config_t opti495_ami_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "ami495", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "AMI 060692", .internal_name = "ami495", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/ami495/opt495sx.ami", "" } }, - { .name = "MR BIOS V1.60", .internal_name = "mr495", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/ami495/opt495sx.mr", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMI 060692", + .internal_name = "ami495", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/ami495/opt495sx.ami", "" } + }, + { + .name = "MR BIOS V1.60", + .internal_name = "mr495", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/ami495/opt495sx.mr", "" } + }, { .files_no = 0 } }, }, @@ -139,15 +154,15 @@ const device_t opti495_ami_device = { int machine_at_opti495_ami_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000f0000, 65536, 0); machine_at_common_init(model); diff --git a/src/machine/m_at_386sx.c b/src/machine/m_at_386sx.c index 0dc9142db..ae9870c77 100644 --- a/src/machine/m_at_386sx.c +++ b/src/machine/m_at_386sx.c @@ -98,20 +98,35 @@ machine_at_quadt386sx_init(const machine_t *model) static const device_config_t pbl300sx_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "pbl300sx", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Phoenix ROM BIOS PLUS 1.10 - Revision 19910723091302", .internal_name = "pbl300sx_1991", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/pbl300sx/V1.10_1113_910723.bin", "" } }, - { .name = "Phoenix ROM BIOS PLUS 1.10 - Revision 19920910", .internal_name = "pbl300sx", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/pbl300sx/pb_l300sx_1992.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Phoenix ROM BIOS PLUS 1.10 - Revision 19910723091302", + .internal_name = "pbl300sx_1991", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/pbl300sx/V1.10_1113_910723.bin", "" } + }, + { + .name = "Phoenix ROM BIOS PLUS 1.10 - Revision 19920910", + .internal_name = "pbl300sx", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/pbl300sx/pb_l300sx_1992.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -134,15 +149,15 @@ const device_t pbl300sx_device = { int machine_at_pbl300sx_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -234,20 +249,35 @@ machine_at_flytech386_init(const machine_t *model) static const device_config_t c325ax_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "325ax", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, .bios = { - { .name = "AMIBIOS 070791", .internal_name = "325ax", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/325ax/M27C512.BIN", "" } }, - { .name = "MR BIOS V1.41", .internal_name = "mr1217", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/325ax/mrbios.BIN", "" } }, + { + .name = "AMIBIOS 070791", + .internal_name = "325ax", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/325ax/M27C512.BIN", "" } + }, + { + .name = "MR BIOS V1.41", + .internal_name = "mr1217", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/325ax/mrbios.BIN", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -270,15 +300,15 @@ const device_t c325ax_device = { int machine_at_325ax_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000f0000, 65536, 0); machine_at_common_init(model); @@ -309,9 +339,9 @@ machine_at_acer100t_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(&oti077_acer100t_device); - + device_add_params(&pc87310_device, (void *) (PC87310_ALI)); - + return ret; } @@ -575,20 +605,34 @@ machine_at_dataexpert386sx_init(const machine_t *model) static const device_config_t dells333sl_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "dells333sl", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Phoenix ROM BIOS PLUS 1.10 - Revision J01 (Jostens Learning Corporation OEM)", .internal_name = "dells333sl_j01", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/dells333sl/DELL386.BIN", "" } }, - { .name = "Phoenix ROM BIOS PLUS 1.10 - Revision A02", .internal_name = "dells333sl", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/dells333sl/Dell_386SX_30807_UBIOS_B400_VLSI_VL82C311_Cirrus_Logic_GD5420.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "Phoenix ROM BIOS PLUS 1.10 - Revision J01 (Jostens Learning Corporation OEM)", + .internal_name = "dells333sl_j01", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/dells333sl/DELL386.BIN", "" } + }, + { + .name = "Phoenix ROM BIOS PLUS 1.10 - Revision A02", + .internal_name = "dells333sl", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/dells333sl/Dell_386SX_30807_UBIOS_B400_VLSI_VL82C311_Cirrus_Logic_GD5420.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -611,15 +655,15 @@ const device_t dells333sl_device = { int machine_at_dells333sl_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 262144, 0); memcpy(rom, &(rom[0x00020000]), 131072); mem_mapping_set_addr(&bios_mapping, 0x0c0000, 0x40000); diff --git a/src/machine/m_at_486_misc.c b/src/machine/m_at_486_misc.c index 9eb8f8d4c..6c492ada5 100644 --- a/src/machine/m_at_486_misc.c +++ b/src/machine/m_at_486_misc.c @@ -66,6 +66,7 @@ machine_at_itoxstar_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 2, 3, 4); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_client_device); device_add(&sst_flash_29ee020_device); @@ -97,6 +98,7 @@ machine_at_arb1423c_init(const machine_t *model) pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 0, 0, 0); pci_register_slot(0x1E, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x1D, PCI_CARD_NORMAL, 3, 4, 1, 2); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_consumer2_device); device_add(&winbond_flash_w29c020_device); @@ -123,6 +125,7 @@ machine_at_arb1479_init(const machine_t *model) pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 0, 0, 0); pci_register_slot(0x1E, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x1D, PCI_CARD_NORMAL, 3, 4, 1, 2); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_consumer2_device); device_add(&winbond_flash_w29c020_device); @@ -146,6 +149,7 @@ machine_at_iach488_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_consumer2_device); device_add(&sst_flash_29ee020_device); @@ -173,6 +177,7 @@ machine_at_pcm9340_init(const machine_t *model) pci_register_slot(0x1D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x1E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x1F, PCI_CARD_NORMAL, 2, 3, 4, 1); + device_add_inst_params(&w83977_device, 1, (void *) (W83977F | W83977_AMI)); device_add_inst_params(&w83977_device, 2, (void *) W83977F); device_add(&stpc_elite_device); @@ -201,6 +206,7 @@ machine_at_pcm5330_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_SOUTHBRIDGE_IDE, 0, 0, 0, 0); pci_register_slot(0x0E, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + device_add(&stpc_serial_device); device_add_params(&w83977_device, (void *) (W83977F | W83977_370 | W83977_AMI)); device_add(&stpc_atlas_device); diff --git a/src/machine/m_at_common.c b/src/machine/m_at_common.c index 9526c7749..383c8dba5 100644 --- a/src/machine/m_at_common.c +++ b/src/machine/m_at_common.c @@ -7,7 +7,7 @@ * This file is part of the 86Box distribution. * * Implementation of the common initialization functions for - * the PC/AT and copatible machines. + * the PC/AT and copatible machines. * * Authors: Miran Grca, * Sarah Walker, @@ -135,5 +135,3 @@ machine_at_ps2_ide_init(const machine_t *model) device_add(&ide_isa_device); } - - diff --git a/src/machine/m_at_misc.c b/src/machine/m_at_misc.c index 268cf7f7d..eb93688a7 100644 --- a/src/machine/m_at_misc.c +++ b/src/machine/m_at_misc.c @@ -53,15 +53,16 @@ machine_at_vpc2007_init(const machine_t *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, 4); - pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, 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, 1, 2, 3, 4); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i440bx_no_agp_device); + device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977F | W83977_370 | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 22d6baac8..6a34b564a 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -53,15 +53,16 @@ machine_at_m729_init(const machine_t *model) 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(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x03, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&winbond_flash_w29c010_device); @@ -92,6 +93,7 @@ machine_at_acerv62x_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_APM)); @@ -138,6 +140,7 @@ machine_at_kn97_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -154,18 +157,32 @@ machine_at_kn97_init(const machine_t *model) static const device_config_t lx6_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "lx6", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Award Modular BIOS v4.51PG - Revision LY", .internal_name = "lx6", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/lx6/LX6C_LY.BIN", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision PZ Beta", .internal_name = "lx6_beta", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/lx6/LX6C_PZ.B00", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision LY", + .internal_name = "lx6", .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/lx6/LX6C_LY.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision PZ Beta", + .internal_name = "lx6_beta", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/lx6/LX6C_PZ.B00", "" } + }, { .files_no = 0 } }, }, @@ -190,15 +207,15 @@ const device_t lx6_device = { int machine_at_lx6_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -212,6 +229,7 @@ machine_at_lx6_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440lx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -277,6 +295,7 @@ machine_at_spitfire_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440lx_device); device_add(&piix4e_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_NORMAL | FDC37C93X_NO_NVR)); @@ -312,6 +331,7 @@ machine_at_ma30d_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 3, 0, 0, 0); + device_add(&i440lx_device); device_add(&piix4e_device); device_add(&nec_mate_unk_device); @@ -339,9 +359,10 @@ machine_at_p6i440e2_init(const machine_t *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, 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_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -379,6 +400,7 @@ machine_at_bf6_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 3, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -391,20 +413,35 @@ machine_at_bf6_init(const machine_t *model) static const device_config_t bx6_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "bx6", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Award Modular BIOS v4.51PG - Revision EG", .internal_name = "bx6_eg", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/bx6/BX6_EG.BIN", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision QS", .internal_name = "bx6", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/bx6/BX6_QS.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision EG", + .internal_name = "bx6_eg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/bx6/BX6_EG.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision QS", + .internal_name = "bx6", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/bx6/BX6_QS.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -427,15 +464,15 @@ const device_t bx6_device = { int machine_at_bx6_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -449,6 +486,7 @@ machine_at_bx6_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -481,6 +519,7 @@ machine_at_p2bls_init(const machine_t *model) pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -519,6 +558,7 @@ machine_at_p3bf_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -553,6 +593,7 @@ machine_at_ax6bc_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -584,6 +625,7 @@ machine_at_686bx_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -602,24 +644,53 @@ machine_at_686bx_init(const machine_t *model) static const device_config_t ms6119_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "ms6119", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "AMIBIOS 6 (071595) - Revision 1.90 (Packard Bell Tacoma)", .internal_name = "tacoma", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/A19P2190.ROM", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision 2.10", .internal_name = "ms6119", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/w6119ims.2a0", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision 2.12 (Viglen Vig69M)", .internal_name = "vig69m", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/vig69m.212", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision 3.30b1 (LG IBM Multinet i x7G)", .internal_name = "lgibmx7g", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/ms6119.331", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 1.90 (Packard Bell Tacoma)", + .internal_name = "tacoma", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6119/A19P2190.ROM", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 2.10", + .internal_name = "ms6119", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6119/w6119ims.2a0", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 2.12 (Viglen Vig69M)", + .internal_name = "vig69m", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6119/vig69m.212", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 3.30b1 (LG IBM Multinet i x7G)", + .internal_name = "lgibmx7g", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6119/ms6119.331", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -642,15 +713,15 @@ const device_t ms6119_device = { int machine_at_ms6119_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000c0000, 262144, 0); device_context_restore(); @@ -664,12 +735,13 @@ machine_at_ms6119_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&winbond_flash_w29c020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); - + return ret; } @@ -696,6 +768,7 @@ machine_at_p6sba_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 0, 0); pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -733,6 +806,7 @@ machine_at_s1846_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&pc87309_device, (void *) (PCX730X_AMI | PC87309_PC87309)); @@ -768,6 +842,7 @@ machine_at_vei8_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440zx_device); device_add(&piix4e_device); device_add_params(&fdc37m60x_device, (void *) (FDC37XXX2 | FDC37XXXX_370)); @@ -792,6 +867,7 @@ machine_at_ms6168_common_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440zx_device); device_add(&piix4e_device); @@ -862,6 +938,7 @@ machine_at_atc6310bxii_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&slc90e66_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -893,6 +970,7 @@ machine_at_ficka6130_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro_device); device_add(&via_vt82c596a_device); device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); @@ -926,6 +1004,7 @@ machine_at_p3v133_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro133_device); device_add(&via_vt82c596b_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -963,6 +1042,7 @@ machine_at_p3v4x_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro133a_device); device_add(&via_vt82c596b_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -995,6 +1075,7 @@ machine_at_gt694va_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro133a_device); device_add(&via_vt82c596b_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -1038,6 +1119,7 @@ machine_at_p6f99_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); + device_add(&sis_5600_device); device_add(&it8661f_device); device_add(&winbond_flash_w29c020_device); @@ -1070,6 +1152,7 @@ machine_at_m747_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); + device_add(&sis_5600_device); device_add(&it8661f_device); device_add(&winbond_flash_w29c020_device); diff --git a/src/machine/m_at_slot1_socket370.c b/src/machine/m_at_slot1_socket370.c index c52885965..cf689fd08 100644 --- a/src/machine/m_at_slot1_socket370.c +++ b/src/machine/m_at_slot1_socket370.c @@ -55,12 +55,13 @@ machine_at_prosignias31x_bx_init(const machine_t *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, 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(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0d, PCI_CARD_SOUND, 4, 3, 2, 1); /* assumed */ - 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(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0d, PCI_CARD_SOUND, 4, 3, 2, 1); /* assumed */ + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -101,6 +102,7 @@ machine_at_s1857_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -132,12 +134,13 @@ machine_at_p6bat_init(const machine_t *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, 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(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0d, PCI_CARD_NORMAL, 4, 3, 2, 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(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0d, PCI_CARD_NORMAL, 4, 3, 2, 1); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro133_device); device_add(&via_vt82c596b_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); diff --git a/src/machine/m_at_socket1.c b/src/machine/m_at_socket1.c index ab0fadb1a..7d16e1381 100644 --- a/src/machine/m_at_socket1.c +++ b/src/machine/m_at_socket1.c @@ -341,7 +341,7 @@ machine_at_d824_init(const machine_t *model) device_add(&ide_isa_device); device_add_params(&fdc37c6xx_device, (void *) FDC37C651); - + return ret; } @@ -364,14 +364,14 @@ machine_at_pcs44c_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(&oti077_pcs44c_device); - + device_add(&vl82c113_device); device_add(&ide_isa_device); device_add_params(&pc873xx_device, (void *) (PCX73XX_IDE_PRI | PCX730X_398)); device_add(&intel_flash_bxt_device); - + return ret; } @@ -401,8 +401,9 @@ machine_at_tuliptc38_init(const machine_t *model) 0x000c0000, 32768, 0); device_add(machine_get_vid_device(machine)); - } else for (uint16_t i = 0; i < 32768; i++) - rom[i] = mem_readb_phys(0x000c0000 + i); + } else + for (uint16_t i = 0; i < 32768; i++) + rom[i] = mem_readb_phys(0x000c0000 + i); mem_mapping_set_addr(&bios_mapping, 0x0c0000, 0x40000); mem_mapping_set_exec(&bios_mapping, rom); diff --git a/src/machine/m_at_socket2.c b/src/machine/m_at_socket2.c index 6c24070ba..b7cf93d92 100644 --- a/src/machine/m_at_socket2.c +++ b/src/machine/m_at_socket2.c @@ -228,16 +228,16 @@ machine_at_cobalt_init(const machine_t *model) if (bios_only || !ret) return ret; - + machine_at_common_init(model); device_add(&opti499_device); device_add(&ide_opti611_vlb_device); device_add(&ide_isa_sec_device); device_add_params(&fdc37c6xx_device, (void *) FDC37C665); - + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); - + if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -374,6 +374,6 @@ machine_at_martin_init(const machine_t *model) device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI)); device_add(&intel_flash_bxt_device); - + return ret; } diff --git a/src/machine/m_at_socket3.c b/src/machine/m_at_socket3.c index d882dbd4d..b98d27627 100644 --- a/src/machine/m_at_socket3.c +++ b/src/machine/m_at_socket3.c @@ -170,22 +170,44 @@ machine_at_greenb_init(const machine_t *model) static const device_config_t j403tg_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "403tg", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "AMI WinBIOS (121593)", .internal_name = "403tg", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/403tg/J403TGRevD.BIN", "" } }, - { .name = "Award Modular BIOS v4.50G", .internal_name = "403tg_award", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/403tg/403TG.BIN", "" } }, - { .name = "MR BIOS V2.02", .internal_name = "403tg_mr", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/403tg/MRBiosOPT895.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMI WinBIOS (121593)", + .internal_name = "403tg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/403tg/J403TGRevD.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.50G", + .internal_name = "403tg_award", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/403tg/403TG.BIN", "" } + }, + { + .name = "MR BIOS V2.02", + .internal_name = "403tg_mr", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/403tg/MRBiosOPT895.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -208,8 +230,8 @@ const device_t j403tg_device = { int machine_at_403tg_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) @@ -217,8 +239,8 @@ machine_at_403tg_init(const machine_t *model) device_context(model->device); int nvr_hack = !strcmp(device_get_config_bios("bios"), "403tg"); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); - ret = bios_load_linear(fn, 0x000f0000, 65536, 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000f0000, 65536, 0); if (nvr_hack) { machine_at_common_init_ex(model, 2); diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index 1094e59f5..f902a7fa9 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -60,6 +60,7 @@ machine_at_s370slm_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440lx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -95,6 +96,7 @@ machine_at_awo671r_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0D, PCI_CARD_VIDEO, 2, 3, 4, 1); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_inst_params(&w83977_device, 1, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -129,6 +131,7 @@ machine_at_ambx133_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -166,6 +169,7 @@ machine_at_cubx_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -201,6 +205,7 @@ machine_at_63a1_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); /* Integrated Sound? */ pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440zx_device); device_add(&piix4e_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -233,6 +238,7 @@ machine_at_atc7020bxii_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0E, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&slc90e66_device); device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -264,6 +270,7 @@ machine_at_m773_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); device_add(&slc90e66_device); device_add(&it8671f_device); @@ -303,6 +310,7 @@ machine_at_apas3_init(const machine_t *model) 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(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro_device); device_add(&via_vt82c586b_device); device_add_params(&fdc37c669_device, (void *) 0); @@ -335,6 +343,7 @@ machine_at_p6bap_init(const machine_t *model) pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0d, PCI_CARD_NORMAL, 4, 3, 2, 1); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro133a_device); /* Rebranded as ET82C693A */ device_add(&via_vt82c596b_device); /* Rebranded as ET82C696B */ device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); @@ -370,6 +379,7 @@ machine_at_6via90ap_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro133a_device); device_add(&via_vt82c686b_device); /* fans: CPU1, CPU2; temperatures: CPU, System, unused */ device_add(ics9xxx_get(ICS9250_18)); @@ -410,6 +420,7 @@ machine_at_cuv4xls_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&via_apro133a_device); device_add(&via_vt82c686b_device); device_add(ics9xxx_get(ICS9250_18)); @@ -444,6 +455,7 @@ machine_at_7sbb_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&sis_5600_device); device_add(&it8661f_device); device_add(&sst_flash_29ee020_device); /* assumed */ diff --git a/src/machine/m_at_socket3_pci.c b/src/machine/m_at_socket3_pci.c index c122caa2d..a8b0f8eea 100644 --- a/src/machine/m_at_socket3_pci.c +++ b/src/machine/m_at_socket3_pci.c @@ -68,12 +68,11 @@ machine_at_ms4134_init(const machine_t *model) pci_init(FLAG_MECHANISM_1 | FLAG_MECHANISM_2 | PCI_ALWAYS_EXPOSE_DEV0); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - - pci_register_slot(0x0B, PCI_CARD_SCSI, 4, 1, 2, 3); - 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, 1, 2); - pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0B, PCI_CARD_SCSI, 4, 1, 2, 3); + 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, 1, 2); + pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1435_device); device_add(&sst_flash_29ee010_device); @@ -102,11 +101,10 @@ machine_at_tg486gp_init(const machine_t *model) pci_init(FLAG_MECHANISM_1 | FLAG_MECHANISM_2 | PCI_ALWAYS_EXPOSE_DEV0); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - - pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1435_device); device_add(&sst_flash_29ee010_device); @@ -290,20 +288,34 @@ machine_at_ms4145_init(const machine_t *model) static const device_config_t pc330_6573_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Language", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Language", + .type = CONFIG_BIOS, .default_string = "pc330_6573", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "English (PC 330, type 6573)", .internal_name = "pc330_6573", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/pc330_6573/$IMAGES.USF", "" } }, - { .name = "Japanese (Aptiva 510/710/Vision)", .internal_name = "aptiva510", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/pc330_6573/aptiva510_$IMAGES.USF", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "English (PC 330, type 6573)", + .internal_name = "pc330_6573", .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/pc330_6573/$IMAGES.USF", "" } + }, + { + .name = "Japanese (Aptiva 510/710/Vision)", + .internal_name = "aptiva510", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/pc330_6573/aptiva510_$IMAGES.USF", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -326,15 +338,15 @@ const device_t pc330_6573_device = { int machine_at_pc330_6573_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -371,22 +383,44 @@ machine_at_pc330_6573_init(const machine_t *model) static const device_config_t pb450_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "pb450a", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "PhoenixBIOS 4.03 - Revision PCI 1.0A", .internal_name = "pb450a_pci10a" /*"pci10a"*/, .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/pb450/OPTI802.bin", "" } }, - { .name = "PhoenixBIOS 4.03 - Revision PNP 1.1A", .internal_name = "pb450a", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/pb450/PNP11A.bin", "" } }, - { .name = "PhoenixBIOS 4.05 - Revision P4HS20 (by Micro Firmware)", .internal_name = "pb450a_p4hs20", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/pb450/p4hs20.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS 4.03 - Revision PCI 1.0A", + .internal_name = "pb450a_pci10a" /*"pci10a"*/, + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/pb450/OPTI802.bin", "" } + }, + { + .name = "PhoenixBIOS 4.03 - Revision PNP 1.1A", + .internal_name = "pb450a", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/pb450/PNP11A.bin", "" } + }, + { + .name = "PhoenixBIOS 4.05 - Revision P4HS20 (by Micro Firmware)", + .internal_name = "pb450a_p4hs20", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/pb450/p4hs20.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -409,18 +443,18 @@ const device_t pb450_device = { int machine_at_pb450_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); - + if (bios_only || !ret) return ret; @@ -735,22 +769,44 @@ machine_at_486sp3g_init(const machine_t *model) static const device_config_t sb486pv_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "sb486pv", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "AMI WinBIOS (062594) - Revision 0108", .internal_name = "sb486pv_0108", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/sb486pv/41-0108-062594-SATURN2.rom", "" } }, - { .name = "AMI WinBIOS (062594) - Revision 0301", .internal_name = "sb486pv_0301", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/sb486pv/0301-062594-SATURN2.rom", "" } }, - { .name = "AMIBIOS 6 (071595) - Revision 1301", .internal_name = "sb486pv", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/sb486pv/amiboot.rom", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMI WinBIOS (062594) - Revision 0108", + .internal_name = "sb486pv_0108", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/sb486pv/41-0108-062594-SATURN2.rom", "" } + }, + { + .name = "AMI WinBIOS (062594) - Revision 0301", + .internal_name = "sb486pv_0301", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/sb486pv/0301-062594-SATURN2.rom", "" } + }, + { + .name = "AMIBIOS 6 (071595) - Revision 1301", + .internal_name = "sb486pv", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/sb486pv/amiboot.rom", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -773,8 +829,8 @@ const device_t sb486pv_device = { int machine_at_sb486pv_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) @@ -877,11 +933,12 @@ machine_at_acerp3_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_device); + pci_register_slot(0x09, PCI_CARD_VIDEO, 0, 0, 0, 0); - pci_register_slot(0x0A, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0A, PCI_CARD_IDE, 0, 0, 0, 0); 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(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -910,6 +967,7 @@ machine_at_486sp3c_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_device); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); @@ -937,6 +995,7 @@ machine_at_ls486e_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_ls486e_device); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); @@ -963,6 +1022,7 @@ machine_at_m4li_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_device); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); @@ -989,6 +1049,7 @@ machine_at_ms4144_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_ls486e_device); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); @@ -1016,6 +1077,7 @@ machine_at_r418_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_device); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); @@ -1042,6 +1104,7 @@ machine_at_4saw2_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_device); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); @@ -1070,6 +1133,7 @@ machine_at_4dps_init(const machine_t *model) machine_at_sis_85c496_common_init(model); device_add(&sis_85c496_device); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); @@ -1161,8 +1225,7 @@ machine_at_pl4600c_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); /* Slot 02 */ pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); /* Onboard */ - pci_register_slot(0x13, PCI_CARD_VIDEO, 0, 0, 0, 0); /* Onboard */ - + pci_register_slot(0x13, PCI_CARD_VIDEO, 0, 0, 0, 0); /* Onboard */ device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1176,7 +1239,7 @@ machine_at_pl4600c_init(const machine_t *model) if (sound_card_current[0] == SOUND_INTERNAL) device_add(&ess_1688_device); - if (fdc_current[0] == FDC_INTERNAL){ + if (fdc_current[0] == FDC_INTERNAL) { fdd_set_turbo(0, 1); fdd_set_turbo(1, 1); } @@ -1305,7 +1368,7 @@ machine_at_m919_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&umc_hb4_device); - device_add(&umc_8886af_device); /* AF is correct - the BIOS does IDE writes to ports 108h and 109h. */ + device_add(&umc_8886af_device); /* AF is correct - the BIOS does IDE writes to ports 108h and 109h. */ device_add_params(&um866x_device, (void *) UM8663BF); device_add(&sst_flash_29ee010_device); @@ -1344,20 +1407,35 @@ machine_at_spc7700plw_init(const machine_t *model) static const device_config_t hot433a_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "hot433a", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "AMIBIOS 5 (101094) - Revision 433AUS33", .internal_name = "hot433a", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/hot433/433AUS33.ROM", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision 2.5 (by eSupport)", .internal_name = "hot433a_v451pg", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/hot433/2A4X5H21.BIN", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 5 (101094) - Revision 433AUS33", + .internal_name = "hot433a", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/hot433/433AUS33.ROM", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 2.5 (by eSupport)", + .internal_name = "hot433a_v451pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/hot433/2A4X5H21.BIN", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -1380,8 +1458,8 @@ const device_t hot433a_device = { int machine_at_hot433a_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) @@ -1389,8 +1467,8 @@ machine_at_hot433a_init(const machine_t *model) device_context(model->device); int is_award = !strcmp(device_get_config_bios("bios"), "hot433a_v451pg"); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); - ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); machine_at_common_init_ex(model, 2); diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index 5e1bf533f..d518ac5dd 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -43,20 +43,35 @@ static const device_config_t v12p_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "v12p", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, /*W1*/ - .bios = { - { .name = "Acer BIOS V1.2 - Revision R1.4", .internal_name = "v12p_r14", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/v12p/v12p_14.bin", "" } }, - { .name = "Acer BIOS V1.2 - Revision R1.6", .internal_name = "v12p", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/v12p/v12p_16.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Acer BIOS V1.2 - Revision R1.4", + .internal_name = "v12p_r14", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/v12p/v12p_14.bin", "" } + }, + { + .name = "Acer BIOS V1.2 - Revision R1.6", + .internal_name = "v12p", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/v12p/v12p_16.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -70,7 +85,7 @@ const device_t v12p_device = { .init = NULL, .close = NULL, .reset = NULL, - .available = NULL, + .available = NULL, .speed_changed = NULL, .force_redraw = NULL, .config = v12p_config @@ -79,18 +94,18 @@ const device_t v12p_device = { int machine_at_v12p_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); - + machine_at_common_init(model); device_add(&ide_isa_device); @@ -101,6 +116,7 @@ machine_at_v12p_init(const machine_t *model) pci_register_slot(0x03, PCI_CARD_NORMAL, 3, 2, 1, 4); pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 0, 0, 0); pci_register_slot(0x05, PCI_CARD_NORMAL, 0, 0, 0, 0); + device_add(&i430lx_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&sio_zb_device); @@ -130,6 +146,7 @@ machine_at_excaliburpci_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&ide_cmd640_pci_legacy_only_device); @@ -160,6 +177,7 @@ machine_at_p5mp3_init(const machine_t *model) pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ pci_register_slot(0x03, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 3 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&fdc_at_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -192,6 +210,7 @@ machine_at_opti560l_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 4, 3, 2); pci_register_slot(0x08, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430lx_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&sio_zb_device); @@ -264,6 +283,7 @@ machine_at_valuepointp60_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&sio_device); device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); @@ -280,22 +300,44 @@ machine_at_valuepointp60_init(const machine_t *model) static const device_config_t batman_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "batman", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "AMIBIOS 111192 - Revision A08 (Dell Dimension XPS P60)", .internal_name = "dellxp60", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/batman/XP60-A08.ROM", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.04.AF1P (AMBRA DP60 PCI)", .internal_name = "ambradp60", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/batman/1004AF1P.BIO", "roms/machines/batman/1004AF1P.BI1", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.08.AF1", .internal_name = "batman", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/batman/1008AF1_.BIO", "roms/machines/batman/1008AF1_.BI1", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 111192 - Revision A08 (Dell Dimension XPS P60)", + .internal_name = "dellxp60", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/batman/XP60-A08.ROM", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.04.AF1P (AMBRA DP60 PCI)", + .internal_name = "ambradp60", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/batman/1004AF1P.BIO", "roms/machines/batman/1004AF1P.BI1", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.08.AF1", + .internal_name = "batman", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/batman/1008AF1_.BIO", "roms/machines/batman/1008AF1_.BI1", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -318,9 +360,9 @@ const device_t batman_device = { int machine_at_batman_init(const machine_t *model) { - int ret = 0; - const char* fn; - const char* fn2; + int ret = 0; + const char *fn; + const char *fn2; /* No ROMs available */ if (!device_available(model->device)) @@ -328,7 +370,7 @@ machine_at_batman_init(const machine_t *model) device_context(model->device); int is_dell = !strcmp(device_get_config_bios("bios"), "dellxp60"); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); if (is_dell) ret = bios_load_linear_inverted(fn, 0x000e0000, 131072, 0); else { @@ -346,15 +388,16 @@ machine_at_batman_init(const machine_t *model) pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); if (is_dell) { - pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 4, 3, 3); - pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 4, 3, 2); - pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 1, 3, 4); + pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 4, 3, 3); + pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 4, 3, 2); + pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 1, 3, 4); } else { - pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 2, 1, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); + pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 2, 1, 4); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); } pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&sio_zb_device); device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); @@ -380,6 +423,7 @@ machine_at_premiere_common_init(const machine_t *model, int pci_switch) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&sio_zb_device); device_add(&ide_rz1000_pci_single_channel_device); @@ -412,7 +456,7 @@ machine_at_m5pi_init(const machine_t *model) int ret; ret = bios_load_linear_inverted("roms/machines/m5pi/M5PI10R.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) return ret; @@ -426,10 +470,11 @@ machine_at_m5pi_init(const machine_t *model) pci_register_slot(0x0c, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&i430lx_device); - device_add(&sio_zb_device); + + device_add(&i430lx_device); + device_add(&sio_zb_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); - device_add(&ide_w83769f_pci_single_channel_device); + device_add(&ide_w83769f_pci_single_channel_device); device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&intel_flash_bxt_ami_device); @@ -458,6 +503,7 @@ machine_at_pb520r_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430lx_device); device_add(&ide_cmd640_pci_single_channel_device); @@ -579,6 +625,7 @@ machine_at_excaliburpci2_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0C, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&ide_cmd640_pci_legacy_only_device); @@ -605,6 +652,7 @@ machine_at_sp4_common_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); + device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -649,6 +697,7 @@ machine_at_ecs50x_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&sis_85c50x_device); device_add_params(&ide_cmd640_pci_device, (void *) 0x100000); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); diff --git a/src/machine/m_at_socket4_5.c b/src/machine/m_at_socket4_5.c index f5b7ae87c..573f8bb71 100644 --- a/src/machine/m_at_socket4_5.c +++ b/src/machine/m_at_socket4_5.c @@ -98,6 +98,7 @@ machine_at_celebris5xx_init(const machine_t *model) device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&ide_cmd640_pci_device); + if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index c61f4c8bb..d544dbc2e 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -62,6 +62,7 @@ machine_at_p54np4_init(const machine_t *model) pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 04 = Slot 4 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430nx_device); device_add(&sio_zb_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -92,22 +93,44 @@ machine_at_586ip_init(const machine_t *model) static const device_config_t plato_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "plato", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Intel AMIBIOS - Revision 1.00.02.AX1P (AMBRA DP90 PCI)", .internal_name = "ambradp90", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/plato/1002AX1P.BIO", "roms/machines/plato/1002AX1P.BI1", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.16.AX1", .internal_name = "plato", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/plato/1016ax1_.bio", "roms/machines/plato/1016ax1_.bi1", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.16.AX1J (Dell Dimension XPS P___)", .internal_name = "dellplato", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/plato/1016AX1J.BIO", "roms/machines/plato/1016AX1J.BI1", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Intel AMIBIOS - Revision 1.00.02.AX1P (AMBRA DP90 PCI)", + .internal_name = "ambradp90", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/plato/1002AX1P.BIO", "roms/machines/plato/1002AX1P.BI1", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.16.AX1", + .internal_name = "plato", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/plato/1016ax1_.bio", "roms/machines/plato/1016ax1_.bi1", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.16.AX1J (Dell Dimension XPS P___)", + .internal_name = "dellplato", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/plato/1016AX1J.BIO", "roms/machines/plato/1016AX1J.BI1", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -130,16 +153,16 @@ const device_t plato_device = { int machine_at_plato_init(const machine_t *model) { - int ret = 0; - const char* fn; - const char* fn2; + int ret = 0; + const char *fn; + const char *fn2; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); fn2 = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 1); ret = bios_load_linear_combined(fn, fn2, 0x1d000, 128); device_context_restore(); @@ -154,28 +177,71 @@ machine_at_plato_init(const machine_t *model) static const device_config_t d842_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "d842", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, /*W1*/ - .bios = { - { .name = "PhoenixBIOS Pentium 1.03 - Revision 1.03.842", .internal_name = "d842_103", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d842/d842.BIN", "" } }, - { .name = "PhoenixBIOS Pentium 1.03 - Revision 1.09.842", .internal_name = "d842_109", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d842/d842_jul96.bin", "" } }, - { .name = "PhoenixBIOS Pentium 1.03 - Revision 1.10.842", .internal_name = "d842", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d842/d842_jun98_1.bin", "" } }, - { .name = "PhoenixBIOS 4.04 - Revision 1.05.842", .internal_name = "d842_105", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d842/d842_mar96.bin", "" } }, - { .name = "PhoenixBIOS 4.04 - Revision 1.06.842", .internal_name = "d842_106", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d842/d842_apr98.bin", "" } }, - { .name = "PhoenixBIOS 4.04 - Revision 1.07.842", .internal_name = "d842_107", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d842/d842_jun98.BIN", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS Pentium 1.03 - Revision 1.03.842", + .internal_name = "d842_103", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d842/d842.BIN", "" } + }, + { + .name = "PhoenixBIOS Pentium 1.03 - Revision 1.09.842", + .internal_name = "d842_109", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d842/d842_jul96.bin", "" } + }, + { + .name = "PhoenixBIOS Pentium 1.03 - Revision 1.10.842", + .internal_name = "d842", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d842/d842_jun98_1.bin", "" } + }, + { + .name = "PhoenixBIOS 4.04 - Revision 1.05.842", + .internal_name = "d842_105", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d842/d842_mar96.bin", "" } + }, + { + .name = "PhoenixBIOS 4.04 - Revision 1.06.842", + .internal_name = "d842_106", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d842/d842_apr98.bin", "" } + }, + { + .name = "PhoenixBIOS 4.04 - Revision 1.07.842", + .internal_name = "d842_107", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d842/d842_jun98.BIN", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -198,15 +264,15 @@ const device_t d842_device = { int machine_at_d842_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -249,7 +315,9 @@ machine_at_tek932_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); + machine_force_ps2(1); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430nx_device); device_add(&sio_zb_device); @@ -281,6 +349,7 @@ machine_at_acerv30_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i430fx_device); device_add(&piix_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -312,6 +381,7 @@ machine_at_apollo_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430fx_device); device_add(&piix_device); @@ -411,6 +481,7 @@ machine_at_pt2000_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430fx_device); device_add(&piix_device); @@ -441,6 +512,7 @@ machine_at_zappa_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430fx_device); device_add(&piix_device); device_add_params(&pc87306_device, (void *) PCX730X_AMI); @@ -468,6 +540,7 @@ machine_at_powermatev_init(const machine_t *model) pci_register_slot(0x08, PCI_CARD_NORMAL, 0, 0, 0, 0); pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430fx_device); device_add(&piix_device); @@ -497,6 +570,7 @@ machine_at_hawk_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430fx_device); device_add(&piix_device); @@ -630,6 +704,7 @@ machine_at_sq588_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_single_channel_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -655,10 +730,11 @@ machine_at_p54sps_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&sis_85c50x_device); device_add(&ide_pci_2ch_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -685,11 +761,12 @@ machine_at_ms5109_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 3, 2, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 3, 2, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x07, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 3, 2, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 1, 3, 4); + pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 3, 2, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&sis_550x_85c503_device); device_add(&ide_w83769f_pci_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -717,10 +794,10 @@ machine_at_torino_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_VIDEO, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x08, PCI_CARD_VIDEO, 0, 0, 0, 0); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -744,19 +821,20 @@ machine_at_hot539_init(const machine_t *model) 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(0x12, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x15, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x16, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x15, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x16, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&umc_8890_device); device_add(&umc_8886af_device); device_add(&sst_flash_29ee010_device); @@ -795,10 +873,12 @@ machine_at_bravoms586_init(const machine_t *model) device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&ide_cmd640_pci_single_channel_device); + if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); + device_add(&ast_readout_device); /* AST custom jumper readout */ - device_add(&ast_nvr_device); /* AST custom secondary NVR device */ + device_add(&ast_nvr_device); /* AST custom secondary NVR device */ return ret; } @@ -824,6 +904,7 @@ machine_at_g586vpmc_init(const machine_t *model) pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x08, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0A, PCI_CARD_IDE, 0, 0, 0, 0); + device_add(&vl82c59x_device); device_add(&sst_flash_29ee010_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -852,6 +933,7 @@ machine_at_m54si_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + /* Slots are a guess since this BIOS won't work with pcireg */ device_add(&vl82c59x_device); device_add(&intel_flash_bxt_device); @@ -883,12 +965,14 @@ machine_at_pb600_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); + device_add(&vl82c59x_device); device_add(&intel_flash_bxt_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&phoenix_486_jumper_pci_pb600_device); device_add(&ide_cmd640_pci_device); + if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -917,11 +1001,13 @@ machine_at_globalyst620_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); /* Slot 04 */ pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); /* Slot 05 */ pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); /* Slot 06 */ + device_add(&vl82c59x_wildcat_device); device_add(&intel_flash_bxt_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&ide_cmd640_pci_single_channel_legacy_only_device); device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); + if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index b3d504148..75f94f82e 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -65,6 +65,7 @@ machine_at_acerm3a_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x10, PCI_CARD_VIDEO, 4, 0, 0, 0); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_NORMAL)); @@ -94,6 +95,7 @@ machine_at_p55t2p4_init(const machine_t *model) 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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -116,6 +118,7 @@ machine_at_p65up5_common_init(const machine_t *model, const device_t *northbridg pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(northbridge); device_add(&piix3_ioapic_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -143,28 +146,49 @@ machine_at_p65up5_cp55t2d_init(const machine_t *model) static const device_config_t cu430hx_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "cu430hx", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Intel AMIBIOS - Revision 1.00.03.DK08 (Toshiba Equium 5xx0D)", .internal_name = "equium5200", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/cu430hx/1003DK08.BIO", "roms/machines/cu430hx/1003DK08.BI1", - "roms/machines/cu430hx/1003DK08.BI2", "roms/machines/cu430hx/1003DK08.BI3", - "roms/machines/cu430hx/1003DK08.RCV", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.04.DK0K (NEC PowerMate V2xxx/P2xxx)", .internal_name = "powermatev2p2", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/cu430hx/1004DK0K.BIO", "roms/machines/cu430hx/1004DK0K.BI1", - "roms/machines/cu430hx/1004DK0K.BI2", "roms/machines/cu430hx/1004DK0K.BI3", - "roms/machines/cu430hx/1004DK0K.RCV", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.06.DK0", .internal_name = "cu430hx", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/cu430hx/1006DK0_.BIO", "roms/machines/cu430hx/1006DK0_.BI1", - "roms/machines/cu430hx/1006DK0_.BI2", "roms/machines/cu430hx/1006DK0_.BI3", - "roms/machines/cu430hx/1006DK0_.RCV", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Intel AMIBIOS - Revision 1.00.03.DK08 (Toshiba Equium 5xx0D)", + .internal_name = "equium5200", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/cu430hx/1003DK08.BIO", "roms/machines/cu430hx/1003DK08.BI1", + "roms/machines/cu430hx/1003DK08.BI2", "roms/machines/cu430hx/1003DK08.BI3", + "roms/machines/cu430hx/1003DK08.RCV", "" } }, + { + .name = "Intel AMIBIOS - Revision 1.00.04.DK0K (NEC PowerMate V2xxx/P2xxx)", + .internal_name = "powermatev2p2", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/cu430hx/1004DK0K.BIO", "roms/machines/cu430hx/1004DK0K.BI1", + "roms/machines/cu430hx/1004DK0K.BI2", "roms/machines/cu430hx/1004DK0K.BI3", + "roms/machines/cu430hx/1004DK0K.RCV", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.06.DK0", + .internal_name = "cu430hx", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/cu430hx/1006DK0_.BIO", "roms/machines/cu430hx/1006DK0_.BI1", + "roms/machines/cu430hx/1006DK0_.BI2", "roms/machines/cu430hx/1006DK0_.BI3", + "roms/machines/cu430hx/1006DK0_.RCV", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -218,8 +242,8 @@ machine_at_cu430hx_gpio_init(void) int machine_at_cu430hx_init(const machine_t *model) { - int ret = 0; - const char* fn[5]; + int ret = 0; + const char *fn[5]; /* No ROMs available */ if (!device_available(model->device)) @@ -258,24 +282,39 @@ machine_at_cu430hx_init(const machine_t *model) static const device_config_t tc430hx_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "tc430hx", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Intel AMIBIOS - Revision 1.00.07.DH0", .internal_name = "tc430hx", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "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", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.08.DH08 (Toshiba Infinia 7xx1)", .internal_name = "infinia7200", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/tc430hx/1008DH08.BIO", "roms/machines/tc430hx/1008DH08.BI1", - "roms/machines/tc430hx/1008DH08.BI2", "roms/machines/tc430hx/1008DH08.BI3", - "roms/machines/tc430hx/1008DH08.RCV", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Intel AMIBIOS - Revision 1.00.07.DH0", + .internal_name = "tc430hx", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "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", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.08.DH08 (Toshiba Infinia 7xx1)", + .internal_name = "infinia7200", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/tc430hx/1008DH08.BIO", "roms/machines/tc430hx/1008DH08.BI1", + "roms/machines/tc430hx/1008DH08.BI2", "roms/machines/tc430hx/1008DH08.BI3", + "roms/machines/tc430hx/1008DH08.RCV", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -329,8 +368,8 @@ machine_at_tc430hx_gpio_init(void) int machine_at_tc430hx_init(const machine_t *model) { - int ret = 0; - const char* fn[5]; + int ret = 0; + const char *fn[5]; /* No ROMs available */ if (!device_available(model->device)) @@ -371,20 +410,35 @@ machine_at_tc430hx_init(const machine_t *model) static const device_config_t m7shi_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "m7shi", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision 05/20/97", .internal_name = "m7shi", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/m7shi/m7shi2n.rom", "" } }, - { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision 01/21/98", .internal_name = "m7shi_4", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/m7shi/M7ns04.rom", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS 4.0 Release 6.0 - Revision 05/20/97", + .internal_name = "m7shi", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/m7shi/m7shi2n.rom", "" } + }, + { + .name = "PhoenixBIOS 4.0 Release 6.0 - Revision 01/21/98", + .internal_name = "m7shi_4", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/m7shi/M7ns04.rom", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -407,15 +461,15 @@ const device_t m7shi_device = { int machine_at_m7shi_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000c0000, 262144, 0); device_context_restore(); @@ -428,6 +482,7 @@ machine_at_m7shi_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_NORMAL)); @@ -457,6 +512,7 @@ machine_at_epc2102_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -497,6 +553,7 @@ machine_at_pcv90_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(&pc87306_device, (void *) PCX730X_AMI); @@ -528,6 +585,7 @@ machine_at_p55t2s_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(&pc87306_device, (void *) PCX730X_AMI); @@ -561,6 +619,7 @@ machine_at_ap5vm_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -591,6 +650,7 @@ machine_at_p55tvp4_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -619,6 +679,7 @@ machine_at_5ivg_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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -648,6 +709,7 @@ machine_at_8500tvxa_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, 2, 1); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 3, 2, 1); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -742,6 +804,7 @@ machine_at_dellhannibalp_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX2 | FDC37C93X_FR)); @@ -770,6 +833,7 @@ machine_at_p5vxb_init(const machine_t *model) pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -799,6 +863,7 @@ machine_at_p55va_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX2 | FDC37C93X_FR)); @@ -864,6 +929,7 @@ machine_at_brio80xx_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_NORMAL | FDC37XXXX_370)); @@ -875,20 +941,35 @@ machine_at_brio80xx_init(const machine_t *model) static const device_config_t lgibmx52_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "lgibmx52", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "PhoenixBIOS 4.05 - Revision 08/21/97", .internal_name = "lgibmx52_082197", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/lgibmx52/BIOS.ROM", "" } }, - { .name = "PhoenixBIOS 4.05 - Revision 03/26/99", .internal_name = "lgibmx52", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/lgibmx52/MS5136 LG IBM OEM.ROM", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS 4.05 - Revision 08/21/97", + .internal_name = "lgibmx52_082197", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/lgibmx52/BIOS.ROM", "" } + }, + { + .name = "PhoenixBIOS 4.05 - Revision 03/26/99", + .internal_name = "lgibmx52", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/lgibmx52/MS5136 LG IBM OEM.ROM", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -911,15 +992,15 @@ const device_t lgibmx52_device = { int machine_at_lgibmx52_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -932,6 +1013,7 @@ machine_at_lgibmx52_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -997,9 +1079,9 @@ machine_at_pb810_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); - pci_register_slot(0x0b, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 3, 4); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); + pci_register_slot(0x0b, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (sound_card_current[0] == SOUND_INTERNAL) @@ -1033,6 +1115,7 @@ machine_at_mb520n_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -1062,6 +1145,7 @@ machine_at_i430vx_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430vx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -1134,6 +1218,7 @@ machine_at_tx97_init(const machine_t *model) 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); device_add(&piix4_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -1155,6 +1240,7 @@ void machine_at_optiplex_21152_init(void) { uint8_t bus_index = pci_bridge_get_bus_index(device_add(&dec21152_device)); + pci_register_bus_slot(bus_index, 0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_bus_slot(bus_index, 0x0a, PCI_CARD_NORMAL, 4, 2, 1, 3); pci_register_bus_slot(bus_index, 0x0b, PCI_CARD_NORMAL, 1, 3, 4, 2); @@ -1219,6 +1305,7 @@ machine_at_tomahawk_init(const machine_t *model) pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); + device_add(&i430tx_device); device_add(&piix4_device); device_add_params(&fdc37c67x_device, (void *) (FDC37XXX2 | FDC37XXXX_370)); @@ -1261,6 +1348,7 @@ machine_at_ym430tx_init(const machine_t *model) 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); device_add(&piix4_device); device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); @@ -1290,6 +1378,7 @@ machine_at_thunderbolt_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 0); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 0, 1); pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 0, 1, 2); + device_add(&i430tx_device); device_add(&piix4_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_NORMAL | FDC37C93X_NO_NVR)); @@ -1319,6 +1408,7 @@ machine_at_ma23c_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0B, PCI_CARD_VIDEO, 3, 4, 1, 2); + device_add(&i430tx_device); device_add(&piix4_device); device_add(&nec_mate_unk_device); @@ -1354,6 +1444,7 @@ machine_at_an430tx_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); + device_add(&i430tx_device); device_add(&piix4_device); #ifdef FOLLOW_THE_SPECIFICATION @@ -1391,6 +1482,7 @@ machine_at_mb540n_init(const machine_t *model) 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 */ + device_add(&i430tx_device); device_add(&piix4_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -1422,6 +1514,7 @@ machine_at_56a5_init(const machine_t *model) 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(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); + device_add(&i430tx_device); device_add(&piix4_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -1452,6 +1545,7 @@ machine_at_p5mms98_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); + device_add(&i430tx_device); device_add(&piix4_device); /* This actually has the Winbond W83967AF, for which I can not find any datasheet at all. */ @@ -1484,6 +1578,7 @@ machine_at_richmond_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); + device_add(&i430tx_device); device_add(&piix4_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -1517,6 +1612,7 @@ machine_at_ficva502_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + device_add(&via_vpx_device); device_add(&via_vt82c586b_device); device_add_params(&fdc37c669_device, (void *) FDC37C6XX_370); @@ -1649,20 +1745,35 @@ machine_at_ms5146_init(const machine_t *model) static const device_config_t r534f_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "r534f_1998", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Award Modular BIOS v4.51PG - Revision 06/12/1998", .internal_name = "r534f_1998", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/r534f/r534f008-1998.bin", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision 03/13/2000 (by Unicore Software)", .internal_name = "r534f", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/r534f/r534f008.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision 06/12/1998", + .internal_name = "r534f_1998", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/r534f/r534f008-1998.bin", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 03/13/2000 (by Unicore Software)", + .internal_name = "r534f", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/r534f/r534f008.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -1685,15 +1796,15 @@ const device_t r534f_device = { int machine_at_r534f_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -1736,6 +1847,7 @@ machine_at_sp97xv_init(const machine_t *model) 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(0x13, PCI_CARD_VIDEO, 1, 2, 3, 4); /* On-chip SiS graphics, absent here. */ + device_add(&sis_5581_device); device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&sst_flash_29ee010_device); @@ -1762,6 +1874,7 @@ machine_at_sq578_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); + device_add(&sis_5581_device); device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&sst_flash_29ee010_device); @@ -1790,6 +1903,7 @@ machine_at_ms5172_init(const machine_t *model) 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(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); + device_add(&sis_5591_1997_device); device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&sst_flash_29ee010_device); @@ -1801,20 +1915,35 @@ machine_at_ms5172_init(const machine_t *model) static const device_config_t m5ata_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "m5ata", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Award Modular BIOS v4.51PG - Revision 12/23/97", .internal_name = "m5ata_1223", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/m5ata/ATA1223.BIN", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision 05/27/98", .internal_name = "m5ata", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/m5ata/ATA0527B.BIN", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision 12/23/97", + .internal_name = "m5ata_1223", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/m5ata/ATA1223.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 05/27/98", + .internal_name = "m5ata", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/m5ata/ATA0527B.BIN", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -1837,15 +1966,15 @@ const device_t m5ata_device = { int machine_at_m5ata_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -1923,6 +2052,7 @@ machine_at_m560_init(const machine_t *model) pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); 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(&sst_flash_29ee010_device); diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 068782db7..76d09dbe0 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -45,18 +45,33 @@ static const device_config_t p54tp4xe_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "p54tp4xe", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Award Modular BIOS v4.51PG - Revision 0302", .internal_name = "p54tp4xe", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/p54tp4xe/t15i0302.awd", "" } }, - { .name = "MR BIOS V3.30", .internal_name = "p54tp4xe_mr", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/p54tp4xe/TRITON.BIO", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision 0302", + .internal_name = "p54tp4xe", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/p54tp4xe/t15i0302.awd", "" } + }, + { + .name = "MR BIOS V3.30", + .internal_name = "p54tp4xe_mr", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/p54tp4xe/TRITON.BIO", "" } + }, { .files_no = 0 } }, }, @@ -81,15 +96,15 @@ const device_t p54tp4xe_device = { int machine_at_p54tp4xe_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -102,6 +117,7 @@ machine_at_p54tp4xe_init(const machine_t *model) 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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430fx_device); device_add(&piix_device); @@ -126,11 +142,12 @@ machine_at_exp8551_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - 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(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); + 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(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430fx_device); device_add(&piix_device); @@ -175,22 +192,44 @@ machine_at_vectra54_init(const machine_t *model) static const device_config_t thor_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "thor", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Intel AMIBIOS - Revision 1.00.03.CN0T (Gateway 2000)", .internal_name = "gw2katx", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/thor/1003CN0T.BIO", "roms/machines/thor/1003CN0T.BI1", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.06.CN0", .internal_name = "thor", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/thor/1006cn0_.bio", "roms/machines/thor/1006cn0_.bi1", "" } }, - { .name = "MR BIOS V3.28", .internal_name = "mrthor", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/thor/mr_atx.bio", "" } }, + .default_int = 0, + .file_filter = "", + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Intel AMIBIOS - Revision 1.00.03.CN0T (Gateway 2000)", + .internal_name = "gw2katx", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/thor/1003CN0T.BIO", "roms/machines/thor/1003CN0T.BI1", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.06.CN0", + .internal_name = "thor", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/thor/1006cn0_.bio", "roms/machines/thor/1006cn0_.bi1", "" } + }, + { + .name = "MR BIOS V3.28", + .internal_name = "mrthor", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/thor/mr_atx.bio", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -258,9 +297,9 @@ machine_at_thor_gpio_init(void) int machine_at_thor_init(const machine_t *model) { - int ret = 0; - const char* fn; - const char* fn2; + int ret = 0; + const char *fn; + const char *fn2; /* No ROMs available */ if (!device_available(model->device)) @@ -269,7 +308,7 @@ machine_at_thor_init(const machine_t *model) device_context(model->device); int is_mr = !strcmp(device_get_config_bios("bios"), "mrthor"); int has_video = !strcmp(device_get_config_bios("bios"), "thor"); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); if (is_mr) ret = bios_load_linear(fn, 0x000e0000, 131072, 0); else { @@ -366,20 +405,21 @@ machine_at_endeavor_gpio_handler(uint8_t write, uint32_t val) if (write) { ret &= ((val & 0xffffffcf) | 0xffff0000); ret |= (val & 0x00000030); - if (machine_snd != NULL) switch ((val >> 4) & 0x03) { - case 0x00: - sb_vibra16s_onboard_relocate_base(0x0220, machine_snd); - break; - case 0x01: - sb_vibra16s_onboard_relocate_base(0x0260, machine_snd); - break; - case 0x02: - sb_vibra16s_onboard_relocate_base(0x0240, machine_snd); - break; - case 0x03: - sb_vibra16s_onboard_relocate_base(0x0280, machine_snd); - break; - } + if (machine_snd != NULL) + switch ((val >> 4) & 0x03) { + case 0x00: + sb_vibra16s_onboard_relocate_base(0x0220, machine_snd); + break; + case 0x01: + sb_vibra16s_onboard_relocate_base(0x0260, machine_snd); + break; + case 0x02: + sb_vibra16s_onboard_relocate_base(0x0240, machine_snd); + break; + case 0x03: + sb_vibra16s_onboard_relocate_base(0x0280, machine_snd); + break; + } machine_set_gpio(ret); } else ret = machine_get_gpio(); @@ -508,6 +548,7 @@ machine_at_pb640_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 2, 1, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430fx_rev02_device); device_add(&piix_rev02_device); @@ -535,11 +576,12 @@ machine_at_mb500n_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); device_add(&i430fx_device); device_add(&piix_no_mirq_device); @@ -595,11 +637,12 @@ machine_at_acerv35n_init(const machine_t *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(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); - pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); + pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + device_add(&i430hx_device); device_add(&piix3_device); /* The chip is not marked FR but the BIOS accesses register 06h of GPIO. */ @@ -630,6 +673,7 @@ machine_at_ap53_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x06, PCI_CARD_VIDEO, 1, 2, 3, 4); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -659,6 +703,7 @@ machine_at_8500tuc_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -671,24 +716,53 @@ machine_at_8500tuc_init(const machine_t *model) static const device_config_t d943_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "d943", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, /*W1*/ - .bios = { - { .name = "PhoenixBIOS 4.05 - Revision 1.02.943", .internal_name = "d943_oct96", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d943/d943_oct96.bin", "" } }, - { .name = "PhoenixBIOS 4.05 - Revision 1.03.943", .internal_name = "d943_dec96", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d943/d943_dec96.bin", "" } }, - { .name = "PhoenixBIOS 4.05 - Revision 1.05.943", .internal_name = "d943_sept97", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d943/d943_sept97.bin", "" } }, - { .name = "PhoenixBIOS 4.05 - Revision 1.06.943", .internal_name = "d943", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/d943/d943_oct97.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS 4.05 - Revision 1.02.943", + .internal_name = "d943_oct96", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d943/d943_oct96.bin", "" } + }, + { + .name = "PhoenixBIOS 4.05 - Revision 1.03.943", + .internal_name = "d943_dec96", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d943/d943_dec96.bin", "" } + }, + { + .name = "PhoenixBIOS 4.05 - Revision 1.05.943", + .internal_name = "d943_sept97", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d943/d943_sept97.bin", "" } + }, + { + .name = "PhoenixBIOS 4.05 - Revision 1.06.943", + .internal_name = "d943", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/d943/d943_oct97.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -711,18 +785,18 @@ const device_t d943_device = { int machine_at_d943_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); - + machine_at_common_init_ex(model, 2); device_add(&amstrad_megapc_nvr_device); @@ -731,8 +805,9 @@ machine_at_d943_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 2, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 1, 3, 4); + pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 3, 2, 4); + device_add(&i430hx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -790,22 +865,44 @@ machine_at_gw2kma_init(const machine_t *model) static const device_config_t c5sbm2_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "5sbm2", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Award Modular BIOS v4.50GP - Revision 07/17/1995", .internal_name = "5sbm2_v450gp", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/5sbm2/5SBM0717.BIN", "" } }, - { .name = "Award Modular BIOS v4.50PG - Revision 03/26/1996", .internal_name = "5sbm2", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/5sbm2/5SBM0326.BIN", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision 2.2 (by Unicore Software)", .internal_name = "5sbm2_451pg", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/5sbm2/2A5ICC3A.BIN", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.50GP - Revision 07/17/1995", + .internal_name = "5sbm2_v450gp", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/5sbm2/5SBM0717.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.50PG - Revision 03/26/1996", + .internal_name = "5sbm2", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/5sbm2/5SBM0326.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 2.2 (by Unicore Software)", + .internal_name = "5sbm2_451pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/5sbm2/2A5ICC3A.BIN", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -828,15 +925,15 @@ const device_t c5sbm2_device = { int machine_at_5sbm2_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -893,22 +990,44 @@ machine_at_amis727_init(const machine_t *model) static const device_config_t ap5s_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "ap5s", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Award Modular BIOS v4.50PG - Revision R1.20", .internal_name = "ap5s_450pg", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/ap5s/ap5s120.bin", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision R1.50", .internal_name = "ap5s_r150", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/ap5s/AP5S150.BIN", "" } }, - { .name = "Award Modular BIOS v4.51PG - Revision R1.60", .internal_name = "ap5s", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/ap5s/ap5s160.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.50PG - Revision R1.20", + .internal_name = "ap5s_450pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ap5s/ap5s120.bin", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision R1.50", + .internal_name = "ap5s_r150", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ap5s/AP5S150.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision R1.60", + .internal_name = "ap5s", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ap5s/ap5s160.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -931,15 +1050,15 @@ const device_t ap5s_device = { int machine_at_ap5s_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -1038,12 +1157,13 @@ machine_at_zeoswildcat_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x0D, PCI_CARD_IDE, 1, 2, 0, 0); /* Onboard device */ - pci_register_slot(0x0E, PCI_CARD_SCSI, 1, 0, 0, 0); /* Onboard device */ - pci_register_slot(0x0F, PCI_CARD_NETWORK, 1, 0, 0, 0); /* Onboard device */ - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); /* Slot 03 */ - pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 2, 3, 1); /* Slot 04 */ - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); /* Slot 05 */ + pci_register_slot(0x0D, PCI_CARD_IDE, 1, 2, 0, 0); /* Onboard device */ + pci_register_slot(0x0E, PCI_CARD_SCSI, 1, 0, 0, 0); /* Onboard device */ + pci_register_slot(0x0F, PCI_CARD_NETWORK, 1, 0, 0, 0); /* Onboard device */ + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); /* Slot 03 */ + pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 2, 3, 1); /* Slot 04 */ + pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); /* Slot 05 */ + /* Per the machine's manual there was an option for AMD SCSI and/or LAN controllers */ device_add(&vl82c59x_wildcat_device); device_add(&intel_flash_bxt_device); diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index 11262ef4a..ea53e5fd4 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -61,6 +61,7 @@ machine_at_ap61_init(const machine_t *model) pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i450kx_device); device_add(&sio_zb_device); device_add(&ide_cmd646_device); @@ -94,6 +95,7 @@ machine_at_p6rp4_init(const machine_t *model) pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i450kx_device); device_add(&sio_zb_device); device_add(&ide_cmd646_device); @@ -108,20 +110,35 @@ machine_at_p6rp4_init(const machine_t *model) static const device_config_t ficpo6000_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "405F05C", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, /*W1*/ - .bios = { - { .name = "PhoenixBIOS 4.05 - Revision 405F03C (CD-ROM Boot support)", .internal_name = "405F03C", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/ficpo6000/405F03C.ROM", "" } }, - { .name = "PhoenixBIOS 4.05 - Revision 405F05C (No CD-ROM Boot support)", .internal_name = "405F05C", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/ficpo6000/405F05C.ROM", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS 4.05 - Revision 405F03C (CD-ROM Boot support)", + .internal_name = "405F03C", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ficpo6000/405F03C.ROM", "" } + }, + { + .name = "PhoenixBIOS 4.05 - Revision 405F05C (No CD-ROM Boot support)", + .internal_name = "405F05C", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ficpo6000/405F05C.ROM", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -135,7 +152,7 @@ const device_t ficpo6000_device = { .init = NULL, .close = NULL, .reset = NULL, - .available = NULL, + .available = NULL, .speed_changed = NULL, .force_redraw = NULL, .config = ficpo6000_config @@ -144,15 +161,15 @@ const device_t ficpo6000_device = { int machine_at_ficpo6000_init(const machine_t *model) { - int ret = 0; - const char* fn; + int ret = 0; + const char *fn; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000e0000, 131072, 0); device_context_restore(); @@ -167,6 +184,7 @@ machine_at_ficpo6000_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); pci_register_slot(0x0c, PCI_CARD_IDE, 0, 0, 0, 0); + device_add(&i450kx_device); device_add(&sio_zb_device); device_add(&ide_cmd646_device); @@ -189,7 +207,7 @@ machine_at_acerv60n_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init_ex(model,2 ); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -199,6 +217,7 @@ machine_at_acerv60n_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0C, PCI_CARD_NORMAL, 2, 3, 4, 1); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_NORMAL)); @@ -244,6 +263,7 @@ machine_at_8600ttc_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); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -273,6 +293,7 @@ machine_at_686nx_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); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -306,6 +327,7 @@ machine_at_ap440fx_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 2, 1, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(&pc87307_device, (void *) (PCX730X_AMI | PCX7307_PC87307)); @@ -323,28 +345,50 @@ machine_at_ap440fx_init(const machine_t *model) static const device_config_t vs440fx_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "vs440fx", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Intel AMIBIOS - Revision 1.00.06.CS1J (Dell Dimension XPS Pro___n)", .internal_name = "dellvenus", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/vs440fx/1006CS1J.BIO", "roms/machines/vs440fx/1006CS1J.BI1", - "roms/machines/vs440fx/1006CS1J.BI2", "roms/machines/vs440fx/1006CS1J.BI3", - "roms/machines/vs440fx/1006CS1J.RCV", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.11.CS1T (Gateway 2000)", .internal_name = "gw2kvenus", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/vs440fx/1011CS1T.BIO", "roms/machines/vs440fx/1011CS1T.BI1", - "roms/machines/vs440fx/1011CS1T.BI2", "roms/machines/vs440fx/1011CS1T.BI3", - "roms/machines/vs440fx/1011CS1T.RCV", "" } }, - { .name = "Intel AMIBIOS - Revision 1.00.18.CS1", .internal_name = "vs440fx", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "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", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Intel AMIBIOS - Revision 1.00.06.CS1J (Dell Dimension XPS Pro___n)", + .internal_name = "dellvenus", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/vs440fx/1006CS1J.BIO", "roms/machines/vs440fx/1006CS1J.BI1", + "roms/machines/vs440fx/1006CS1J.BI2", "roms/machines/vs440fx/1006CS1J.BI3", + "roms/machines/vs440fx/1006CS1J.RCV", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.11.CS1T (Gateway 2000)", + .internal_name = "gw2kvenus", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/vs440fx/1011CS1T.BIO", "roms/machines/vs440fx/1011CS1T.BI1", + "roms/machines/vs440fx/1011CS1T.BI2", "roms/machines/vs440fx/1011CS1T.BI3", + "roms/machines/vs440fx/1011CS1T.RCV", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.18.CS1", + .internal_name = "vs440fx", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "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", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -367,15 +411,15 @@ const device_t vs440fx_device = { int machine_at_vs440fx_init(const machine_t *model) { - int ret = 0; - const char* fn[5]; + int ret = 0; + const char *fn[5]; /* No ROMs available */ if (!device_available(model->device)) return ret; device_context(model->device); - for (int i = 0; i < 5; i++) + for (uint8_t i = 0; i < 5; i++) fn[i] = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), i); ret = bios_load_linear_combined2(fn[0], fn[1], fn[2], fn[3], fn[4], 0x3a000, 128); device_context_restore(); @@ -389,6 +433,7 @@ machine_at_vs440fx_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(&pc87307_device, (void *) (PCX730X_AMI | PCX7307_PC87307)); @@ -421,6 +466,7 @@ machine_at_lgibmx61_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); @@ -450,6 +496,7 @@ machine_at_m6mi_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(&fdc37c93x_device, (void *) (FDC37XXX5 | FDC37C93X_NORMAL)); @@ -478,6 +525,7 @@ machine_at_mb600n_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); + device_add(&i440fx_device); device_add(&piix3_device); device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index a39b2cef4..0c2e81e1f 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -53,18 +53,19 @@ machine_at_p5a_init(const machine_t *model) 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(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x03, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(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(&sst_flash_39sf020_device); @@ -88,15 +89,16 @@ machine_at_m579_init(const machine_t *model) 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(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x03, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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(&sst_flash_29ee010_device); @@ -119,16 +121,17 @@ machine_at_gwlucas_init(const machine_t *model) 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(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0E, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x03, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_SOUND, 1, 2, 3, 4); // ES1373 - pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0F, PCI_CARD_SOUND, 1, 2, 3, 4); // ES1373 + pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&ali1541_device); device_add(&ali1543c_device); /* +0 */ device_add(&sst_flash_39sf020_device); @@ -156,15 +159,16 @@ machine_at_5aa_init(const machine_t *model) 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(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x03, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE_USB, 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, 1, 2); + 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, 1, 2); + device_add(&ali1541_device); device_add(&ali1543c_device); /* +0 */ device_add(&sst_flash_29ee010_device); @@ -187,17 +191,18 @@ machine_at_5ax_init(const machine_t *model) 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(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 0, 0); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x03, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE_USB, 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, 1, 2); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0C, 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, 1, 2); + 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(&sst_flash_29ee010_device); @@ -392,6 +397,7 @@ machine_at_5sg100_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); + device_add(&sis_5591_1997_device); device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&sst_flash_29ee010_device); diff --git a/src/machine/m_elt.c b/src/machine/m_elt.c index 17775d430..b965486d1 100644 --- a/src/machine/m_elt.c +++ b/src/machine/m_elt.c @@ -92,8 +92,8 @@ sysstat_out(UNUSED(uint16_t port), uint8_t val, void *priv) static uint8_t sysstat_in(UNUSED(uint16_t port), void *priv) { - const cga_t *cga = priv; - uint8_t ret = 0x0a; /* No idea what these bits are */ + const cga_t *cga = priv; + uint8_t ret = 0x0a; /* No idea what these bits are */ /* External CRT. We don't emulate the LCD/CRT switching, let's just * frivolously use this bit to indicate we're using the LCD if the diff --git a/src/machine/m_europc.c b/src/machine/m_europc.c index c388e64e3..c9f03295f 100644 --- a/src/machine/m_europc.c +++ b/src/machine/m_europc.c @@ -675,23 +675,24 @@ europc_close(UNUSED(void *priv)) } static const device_config_t europc_config[] = { - // clang-format off + // clang-format off { - .name = "js9", - .description = "JS9 Jumper (JIM)", - .type = CONFIG_HEX16, - .default_string = "", - .default_int = 0x0250, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "js9", + .description = "JS9 Jumper (JIM)", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x0250, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "Disabled (250h)", .value = 0x0250 }, { .description = "Enabled (350h)", .value = 0x0350 }, - { .description = "" } + { .description = "" } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t europc_device = { diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 9d4df7528..519933b23 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -50,16 +50,14 @@ #include <86box/machine.h> #include <86box/plat_unused.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 static uint8_t key_queue[16]; static int key_queue_start = 0; @@ -68,7 +66,7 @@ static int key_queue_end = 0; /*PCjr keyboard has no escape scancodes, and no scancodes beyond 54 Map right alt to 54h (FN) */ const scancode scancode_pcjr[512] = { - // clang-format off + // clang-format off { .mk = { 0 }, .brk = { 0 } }, /* 000 */ { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ { .mk = { 0x02, 0 }, .brk = { 0x82, 0 } }, /* 002 */ @@ -581,10 +579,9 @@ const scancode scancode_pcjr[512] = { { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ { .mk = { 0 }, .brk = { 0 } } /* 1ff */ - // clang-format on + // clang-format on }; - static void kbd_write(uint16_t port, uint8_t val, void *priv) { @@ -770,7 +767,7 @@ pit_irq0_timer_pcjr(int new_out, int old_out, UNUSED(void *priv)) } static const device_config_t pcjr_config[] = { - // clang-format off + // clang-format off { .name = "display_type", .description = "Display type", @@ -785,7 +782,8 @@ static const device_config_t pcjr_config[] = { { .description = "RGB (no brown)", .value = PCJR_RGB_NO_BROWN }, { .description = "RGB (IBM 5153)", .value = PCJR_RGB_IBM_5153 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { .name = "double_type", @@ -809,10 +807,14 @@ static const device_config_t pcjr_config[] = { .description = "Apply overscan deltas", .type = CONFIG_BINARY, .default_string = NULL, - .default_int = 1 + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t pcjr_device = { diff --git a/src/machine/m_ps1.c b/src/machine/m_ps1.c index 534424609..b37abdaa8 100644 --- a/src/machine/m_ps1.c +++ b/src/machine/m_ps1.c @@ -245,34 +245,98 @@ ps1_read(uint16_t port, void *priv) static const device_config_t ps1_2011_config[] = { // clang-format off { - .name = "bios_language", - .description = "BIOS Language", - .type = CONFIG_BIOS, + .name = "bios_language", + .description = "BIOS Language", + .type = CONFIG_BIOS, .default_string = "english_us", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, .bios = { - { .name = "English (US)", .internal_name = "english_us", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ibmps1es/FC0000_US.BIN", "" } }, - { .name = "English (UK)", .internal_name = "english_uk", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 262144, .files = { "roms/machines/ibmps1es/F80000_UK.BIN", "roms/machines/ibmps1es/FC0000_UK.BIN", "" } }, - { .name = "English (Canada)", .internal_name = "english_ca", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 262144, .files = { "roms/machines/ibmps1es/F80000_CA.BIN", "roms/machines/ibmps1es/FC0000_CA.BIN", "" } }, - { .name = "Portuguese", .internal_name = "portuguese", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 262144, .files = { "roms/machines/ibmps1es/F80000_PT.BIN", "roms/machines/ibmps1es/FC0000_PT.BIN", "" } }, - { .name = "German", .internal_name = "german", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 262144, .files = { "roms/machines/ibmps1es/F80000_DE.BIN", "roms/machines/ibmps1es/FC0000_DE.BIN", "" } }, - { .name = "Swedish", .internal_name = "swedish", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 262144, .files = { "roms/machines/ibmps1es/F80000_SE.BIN", "roms/machines/ibmps1es/FC0000_SE.BIN", "" } }, - { .name = "French", .internal_name = "french", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 262144, .files = { "roms/machines/ibmps1es/F80000_FR.BIN", "roms/machines/ibmps1es/FC0000_FR.BIN", "" } }, - { .name = "Italian", .internal_name = "italian", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 524288, .files = { "roms/machines/ibmps1es/f80000.bin", "" } }, - { .name = "Spanish", .internal_name = "spanish", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 524288, .files = { "roms/machines/ibmps1es/F80000_ES.bin", "" } }, + { + .name = "English (US)", + .internal_name = "english_us", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ibmps1es/FC0000_US.BIN", "" } + }, + { + .name = "English (UK)", + .internal_name = "english_uk", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 262144, + .files = { "roms/machines/ibmps1es/F80000_UK.BIN", "roms/machines/ibmps1es/FC0000_UK.BIN", "" } + }, + { + .name = "English (Canada)", + .internal_name = "english_ca", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 262144, + .files = { "roms/machines/ibmps1es/F80000_CA.BIN", "roms/machines/ibmps1es/FC0000_CA.BIN", "" } + }, + { + .name = "Portuguese", + .internal_name = "portuguese", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 262144, + .files = { "roms/machines/ibmps1es/F80000_PT.BIN", "roms/machines/ibmps1es/FC0000_PT.BIN", "" } + }, + { + .name = "German", + .internal_name = "german", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 262144, + .files = { "roms/machines/ibmps1es/F80000_DE.BIN", "roms/machines/ibmps1es/FC0000_DE.BIN", "" } + }, + { + .name = "Swedish", + .internal_name = "swedish", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 262144, + .files = { "roms/machines/ibmps1es/F80000_SE.BIN", "roms/machines/ibmps1es/FC0000_SE.BIN", "" } + }, + { + .name = "French", + .internal_name = "french", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 262144, + .files = { "roms/machines/ibmps1es/F80000_FR.BIN", "roms/machines/ibmps1es/FC0000_FR.BIN", "" } + }, + { + .name = "Italian", + .internal_name = "italian", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 524288, + .files = { "roms/machines/ibmps1es/f80000.bin", "" } + }, + { + .name = "Spanish", + .internal_name = "spanish", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 524288, + .files = { "roms/machines/ibmps1es/F80000_ES.bin", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -298,7 +362,7 @@ ps1_setup(int model) ps1_t *ps; void *priv; - ps = (ps1_t *) calloc(1, sizeof(ps1_t)); + ps = (ps1_t *) calloc(1, sizeof(ps1_t)); ps->model = model; io_sethandler(0x0091, 1, @@ -323,25 +387,25 @@ ps1_setup(int model) if (model == 2011) { const device_t *d = device_context_get_device(); - const char * bios = device_get_config_bios("bios_language"); - const char * first = device_get_bios_file(d, bios, 0); - const char * second = device_get_bios_file(d, bios, 1); + const char *bios = device_get_config_bios("bios_language"); + const char *first = device_get_bios_file(d, bios, 0); + const char *second = device_get_bios_file(d, bios, 1); if (!strcmp(bios, "english_us")) { /* US English */ rom_init(&ps->high_rom, first, - 0xfc0000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); + 0xfc0000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); } else if (second == NULL) { /* Combined ROM. */ rom_init(&ps->high_rom, first, - 0xf80000, 0x80000, 0x7ffff, 0, MEM_MAPPING_EXTERNAL); + 0xf80000, 0x80000, 0x7ffff, 0, MEM_MAPPING_EXTERNAL); } else { /* Split ROM. */ rom_init(&ps->mid_rom, first, - 0xf80000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); + 0xf80000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); rom_init(&ps->high_rom, second, - 0xfc0000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); + 0xfc0000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); } lpt_set_next_inst(255); @@ -359,7 +423,9 @@ ps1_setup(int model) device_add(&ps1vga_device); } else if (model == 2121) { io_sethandler(0x00e0, 2, - ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); + ps1_read, NULL, NULL, + ps1_write, NULL, NULL, + ps); if (rom_present("roms/machines/ibmps1_2121/F80000.BIN")) { rom_init(&ps->mid_rom, @@ -412,9 +478,9 @@ machine_ps1_p1_handler(void) int machine_ps1_m2011_init(const machine_t *model) { - int ret; - const char* fn; - uint32_t offset; + int ret; + const char *fn; + uint32_t offset; if (!device_available(model->device)) { /* No ROMs available. */ @@ -424,7 +490,7 @@ machine_ps1_m2011_init(const machine_t *model) device_context(model->device); if ((fn = device_get_bios_file(model->device, device_get_config_bios("bios_language"), 1)) == NULL) { /* Combined ROM or US English. */ - fn = device_get_bios_file(model->device, device_get_config_bios("bios_language"), 0); + fn = device_get_bios_file(model->device, device_get_config_bios("bios_language"), 0); offset = (!strcmp("english_us", device_get_config_bios("bios_language"))) ? 0x20000 : 0x60000; } else { /* Separated ROM. */ @@ -432,7 +498,7 @@ machine_ps1_m2011_init(const machine_t *model) } if (!fn) { - fn = device_get_bios_file(model->device, "us_english", 0); + fn = device_get_bios_file(model->device, "us_english", 0); offset = 0x20000; } @@ -447,7 +513,7 @@ machine_ps1_m2011_init(const machine_t *model) device_context(model->device); - ps1_setup(2011); + ps1_setup(2011); device_context_restore(); diff --git a/src/machine/m_ps2_isa.c b/src/machine/m_ps2_isa.c index d768975d5..5754eee11 100644 --- a/src/machine/m_ps2_isa.c +++ b/src/machine/m_ps2_isa.c @@ -152,7 +152,7 @@ ps2_isa_setup(int model, int cpu_type) ps2_isa_t *ps2; void *priv; - ps2 = (ps2_isa_t *) calloc(1, sizeof(ps2_isa_t)); + ps2 = (ps2_isa_t *) calloc(1, sizeof(ps2_isa_t)); ps2->model = model; ps2->cpu_type = cpu_type; @@ -167,7 +167,7 @@ ps2_isa_setup(int model, int cpu_type) ps2->uart = device_add_inst(&ns16450_device, 1); - ps2->lpt = device_add_inst(&lpt_port_device, 1); + ps2->lpt = device_add_inst(&lpt_port_device, 1); lpt_set_ext(ps2->lpt, 1); lpt_port_remove(ps2->lpt); diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index d35a31451..e9f813f32 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -105,8 +105,8 @@ static struct ps2_t { serial_t *uart; lpt_t *lpt; - vga_t* mb_vga; - int has_e0000_hole; + vga_t *mb_vga; + int has_e0000_hole; } ps2; /*The model 70 type 3/4 BIOS performs cache testing. Since 86Box doesn't have any @@ -144,7 +144,7 @@ static struct ps2_t { static uint8_t ps2_cache[65536]; static int ps2_cache_valid[65536 / 8]; -static void mem_encoding_update(void); +static void mem_encoding_update(void); // #define ENABLE_PS2_MCA_LOG 1 #ifdef ENABLE_PS2_MCA_LOG int ps2_mca_do_log = ENABLE_PS2_MCA_LOG; @@ -374,45 +374,47 @@ ps55_model_50t_read(uint16_t port) return ps2.planar_id >> 8; case 0x102: return ps2.option[0]; - case 0x103: { - uint8_t val = 0xff; - /* - I/O 103h - Bit 7-4: Memory Card ID (Connector 1 or 3) - Bit 3-0: Memory Card ID (Connector 2) + case 0x103: + { + uint8_t val = 0xff; + /* + I/O 103h - Bit 7-4: Memory Card ID (Connector 1 or 3) + Bit 3-0: Memory Card ID (Connector 2) - Memory Card ID: 7h = 2 MB Memory Card 2 or 3 Installed - 5h = 4 MB Memory Card 2 Installed - */ - switch (mem_size / 1024) { - case 2: - if (ps2.option[1] & 0x04) - val = 0xff; - else - val = 0x7f; - break; - case 4: - if (ps2.option[1] & 0x04) - val = 0xff; - else - val = 0x77; - break; - case 6: - if (ps2.option[1] & 0x04) - val = 0x7f; - else - val = 0x77; - break; - case 8: - default: - if (ps2.option[1] & 0x04) - val = 0x5f; - else - val = 0x77; - break; + Memory Card ID: 7h = 2 MB Memory Card 2 or 3 Installed + 5h = 4 MB Memory Card 2 Installed + */ + switch (mem_size / 1024) { + case 2: + if (ps2.option[1] & 0x04) + val = 0xff; + else + val = 0x7f; + break; + case 4: + if (ps2.option[1] & 0x04) + val = 0xff; + else + val = 0x77; + break; + case 6: + if (ps2.option[1] & 0x04) + val = 0x7f; + else + val = 0x77; + break; + case 8: + default: + if (ps2.option[1] & 0x04) + val = 0x5f; + else + val = 0x77; + break; + } + ps2_mca_log(" Read MCA %04X %02X %04X:%04X mem_size = %d, ps2option1 = %2X\n", port, val, cs >> 4, cpu_state.pc, mem_size, ps2.option[1]); + return val; } - ps2_mca_log(" Read MCA %04X %02X %04X:%04X mem_size = %d, ps2option1 = %2X\n", port, val, cs >> 4, cpu_state.pc, mem_size, ps2.option[1]); - return val; - } case 0x104: + case 0x104: return ps2.option[2]; case 0x105: return ps2.option[3]; @@ -434,32 +436,34 @@ ps55_model_50v_read(uint16_t port) return ps2.planar_id >> 8; case 0x102: return ps2.option[0]; - case 0x103: { - uint8_t val = 0xff; - /* - I/O 103h - Bit 7-4: Reserved - Bit 3-0: Memory Card ID (Connector 3 or 1) + case 0x103: + { + uint8_t val = 0xff; + /* + I/O 103h - Bit 7-4: Reserved + Bit 3-0: Memory Card ID (Connector 3 or 1) - Memory Card ID: 8h = 4 MB Memory Card IV Installed - Fh = No Card Installed - */ - switch (mem_size / 1024) { - case 4: - if (ps2.option[1] & 0x04) - val = 0xff; - else - val = 0xf8; - break; - case 8: - default: - if (ps2.option[1] & 0x04) - val = 0xf8; - else - val = 0xf8; - break; + Memory Card ID: 8h = 4 MB Memory Card IV Installed + Fh = No Card Installed + */ + switch (mem_size / 1024) { + case 4: + if (ps2.option[1] & 0x04) + val = 0xff; + else + val = 0xf8; + break; + case 8: + default: + if (ps2.option[1] & 0x04) + val = 0xf8; + else + val = 0xf8; + break; + } + return val; } - return val; - } case 0x104: + case 0x104: /* Reading cache ID (bit 3-2) always returns zero */ return ps2.option[2] & 0xf3; case 0x105: @@ -530,10 +534,10 @@ model_55sx_mem_recalc(void) #ifdef ENABLE_PS2_MCA_LOG int enabled_mem = 0; #endif - int base = 0; - int remap_size = (ps2.option[3] & 0x10) ? 384 : 256; - int bit_mask = 0x00; - int max_rows = 4; + int base = 0; + int remap_size = (ps2.option[3] & 0x10) ? 384 : 256; + int bit_mask = 0x00; + int 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]); @@ -968,18 +972,15 @@ ps2_mca_write(uint16_t port, uint8_t val, UNUSED(void *priv)) case 0x102: if (!(ps2.setup & PS2_SETUP_IO)) ps2.planar_write(port, val); - else if (!(ps2.setup & PS2_SETUP_VGA)) - { - if (ps2.mb_vga) - { + else if (!(ps2.setup & PS2_SETUP_VGA)) { + if (ps2.mb_vga) { if (vga_isenabled(ps2.mb_vga)) vga_disable(ps2.mb_vga); if (val & 1) vga_enable(ps2.mb_vga); } ps2.pos_vga = val; - } - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + } else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) mca_write(port, val); break; case 0x103: @@ -1595,7 +1596,7 @@ machine_ps2_common_init(const machine_t *model) ps2.uart = device_add_inst(&ns16550_device, 1); - ps2.lpt = device_add_inst(&lpt_port_device, 1); + ps2.lpt = device_add_inst(&lpt_port_device, 1); lpt_set_ext(ps2.lpt, 1); ps2.has_e0000_hole = 0; @@ -1604,24 +1605,36 @@ machine_ps2_common_init(const machine_t *model) static const device_config_t ps2_model_50_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "ibmps2_m50", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "IBM PS/2 model 50", .internal_name = "ibmps2_m50", .bios_type = BIOS_NORMAL, - .files_no = 4, .local = 0, .size = 131072, .files = { "roms/machines/ibmps2_m50/90x7420.zm13", - "roms/machines/ibmps2_m50/90x7429.zm18", - "roms/machines/ibmps2_m50/90x7423.zm14", - "roms/machines/ibmps2_m50/90x7426.zm16", "" } }, - { .name = "IBM PS/2 model 50Z", .internal_name = "ibmps2_m50z", .bios_type = BIOS_NORMAL, - .files_no = 2, .local = 0, .size = 131072, .files = { "roms/machines/ibmps2_m50/15F8366.BIN", - "roms/machines/ibmps2_m50/15F8365.BIN", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "IBM PS/2 model 50", + .internal_name = "ibmps2_m50", + .bios_type = BIOS_NORMAL, + .files_no = 4, + .local = 0, + .size = 131072, + .files = { "roms/machines/ibmps2_m50/90x7420.zm13", "roms/machines/ibmps2_m50/90x7429.zm18", + "roms/machines/ibmps2_m50/90x7423.zm14", "roms/machines/ibmps2_m50/90x7426.zm16", "" } + }, + { + .name = "IBM PS/2 model 50Z", + .internal_name = "ibmps2_m50z", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/ibmps2_m50/15F8366.BIN", "roms/machines/ibmps2_m50/15F8365.BIN", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -1644,8 +1657,8 @@ const device_t ps2_model_50_device = { int machine_ps2_model_50_init(const machine_t *model) { - int ret = 0; - const char* fn[4]; + int ret = 0; + const char *fn[4]; /* No ROMs available */ if (!device_available(model->device)) @@ -1654,11 +1667,11 @@ machine_ps2_model_50_init(const machine_t *model) device_context(model->device); int is_50z = !strcmp(device_get_config_bios("bios"), "ibmps2_m50z"); if (is_50z) { - for (int i = 0; i < 2; i++) + for (uint8_t i = 0; i < 2; i++) fn[i] = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), i); ret = bios_load_interleaved(fn[0], fn[1], 0x000e0000, 131072, 0); } else { - for (int i = 0; i < 4; i++) + for (uint8_t i = 0; i < 4; i++) fn[i] = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), i); ret = bios_load_interleaved(fn[0], fn[1], 0x000f0000, 131072, 0); ret &= bios_load_aux_interleaved(fn[2], fn[3], 0x000e0000, 65536, 0); @@ -1841,7 +1854,7 @@ ps55_mca_board_model_50t_init(void) /* The slot 5 is reserved for the Integrated Fixed Disk II (an internal ESDI hard drive). */ mca_init(5); - ps2.planar_read = ps55_model_50t_read; + ps2.planar_read = ps55_model_50t_read; ps2.planar_write = ps55_model_50tv_write; device_add(&ps2_nvr_device); @@ -1853,26 +1866,26 @@ ps55_mca_board_model_50t_init(void) ps2.has_e0000_hole = 1; mem_mapping_add(&ps2.split_mapping, - (mem_size + 256) * 1024, - 256 * 1024, - ps2_read_split_ram, - ps2_read_split_ramw, - ps2_read_split_raml, - ps2_write_split_ram, - ps2_write_split_ramw, - ps2_write_split_raml, - &ram[0xa0000], - MEM_MAPPING_INTERNAL, - NULL); + (mem_size + 256) * 1024, + 256 * 1024, + ps2_read_split_ram, + ps2_read_split_ramw, + ps2_read_split_raml, + ps2_write_split_ram, + ps2_write_split_ramw, + ps2_write_split_raml, + &ram[0xa0000], + MEM_MAPPING_INTERNAL, + NULL); mem_mapping_disable(&ps2.split_mapping); if (mem_size > 8192) { /* Only 8 MB supported on planar, create a memory expansion card for the rest */ - ps2_mca_mem_fffc_init(8); + ps2_mca_mem_fffc_init(8); } if (gfxcard[0] == VID_INTERNAL) - ps2.mb_vga = (vga_t *)device_add(&ps1vga_mca_device); + ps2.mb_vga = (vga_t *) device_add(&ps1vga_mca_device); } static void @@ -1884,7 +1897,7 @@ ps55_mca_board_model_50v_init(void) /* The slot 5 is reserved for the Integrated Fixed Disk II (an internal ESDI hard drive). */ mca_init(5); - ps2.planar_read = ps55_model_50v_read; + ps2.planar_read = ps55_model_50v_read; ps2.planar_write = ps55_model_50tv_write; device_add(&ps2_nvr_device); @@ -1897,17 +1910,17 @@ ps55_mca_board_model_50v_init(void) ps2.has_e0000_hole = 1; mem_mapping_add(&ps2.split_mapping, - (mem_size + 256) * 1024, - 256 * 1024, - ps2_read_split_ram, - ps2_read_split_ramw, - ps2_read_split_raml, - ps2_write_split_ram, - ps2_write_split_ramw, - ps2_write_split_raml, - &ram[0xa0000], - MEM_MAPPING_INTERNAL, - NULL); + (mem_size + 256) * 1024, + 256 * 1024, + ps2_read_split_ram, + ps2_read_split_ramw, + ps2_read_split_raml, + ps2_write_split_ram, + ps2_write_split_ramw, + ps2_write_split_raml, + &ram[0xa0000], + MEM_MAPPING_INTERNAL, + NULL); mem_mapping_disable(&ps2.split_mapping); mem_mapping_add(&ps2.cache_mapping, @@ -1924,13 +1937,12 @@ ps55_mca_board_model_50v_init(void) NULL); mem_mapping_disable(&ps2.cache_mapping); - if (mem_size > 8192) { - /* Only 8 MB supported on planar, create a memory expansion card for the rest */ - ps2_mca_mem_fffc_init(8); - } + /* Only 8 MB supported on planar, create a memory expansion card for the rest */ + if (mem_size > 8192) + ps2_mca_mem_fffc_init(8); if (gfxcard[0] == VID_INTERNAL) - ps2.mb_vga = (vga_t *)device_add(&ps1vga_mca_device); + ps2.mb_vga = (vga_t *) device_add(&ps1vga_mca_device); } int @@ -1939,7 +1951,7 @@ machine_ps55_model_50t_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/ibmps55_m50t/38F6933.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) return ret; @@ -1947,15 +1959,15 @@ machine_ps55_model_50t_init(const machine_t *model) machine_ps2_common_init(model); /* - * Planar ID - * FFFAh - PS/55 model 5551-S0x, T0x (stage 1?) - * FFEEh - PS/55 model 5551-S1x, T1x (stage 2?) - * Verification in BIOS P/N 38F6933: FBxx -> 4 slots (error), xxEE -> 5 slots (ok), others -> 8 (error) - * - * The only difference between S and T models is the CPU speed (16 MHz vs 20 MHz). - * The POST measures the speed, and sets a flag in the BIOS Data Area to indicate the sub model. - * The VM in 86Box runs faster than the real, so the POST always determines it as the T model. - */ + * Planar ID + * FFFAh - PS/55 model 5551-S0x, T0x (stage 1?) + * FFEEh - PS/55 model 5551-S1x, T1x (stage 2?) + * Verification in BIOS P/N 38F6933: FBxx -> 4 slots (error), xxEE -> 5 slots (ok), others -> 8 (error) + * + * The only difference between S and T models is the CPU speed (16 MHz vs 20 MHz). + * The POST measures the speed, and sets a flag in the BIOS Data Area to indicate the sub model. + * The VM in 86Box runs faster than the real, so the POST always determines it as the T model. + */ ps2.planar_id = 0xffee; ps55_mca_board_model_50t_init(); @@ -1979,10 +1991,10 @@ machine_ps55_model_50v_init(const machine_t *model) machine_ps2_common_init(model); /* - * Planar ID - * F1FFh - PS/55 model 5551-V0x, V1x - * Verification in BIOS P/N 56F7416,56F7417: FBxx -> 5 slots (ok), F1xx -> 5 slots (ok), others -> 8 (error) - */ + * Planar ID + * F1FFh - PS/55 model 5551-V0x, V1x + * Verification in BIOS P/N 56F7416,56F7417: FBxx -> 5 slots (ok), F1xx -> 5 slots (ok), others -> 8 (error) + */ ps2.planar_id = 0xf1ff; ps55_mca_board_model_50v_init(); diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index 9ac254e44..5591f2cf0 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -45,7 +45,6 @@ #include <86box/m_tandy.h> #include <86box/plat_unused.h> - enum { TYPE_TANDY = 0, TYPE_TANDY1000SX, @@ -60,9 +59,8 @@ enum { EEPROM_WRITE }; - static const scancode scancode_tandy[512] = { - // clang-format off + // clang-format off { .mk = { 0 }, .brk = { 0 } }, /* 000 */ { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ { .mk = { 0x02, 0 }, .brk = { 0x82, 0 } }, /* 002 */ @@ -575,7 +573,7 @@ static const scancode scancode_tandy[512] = { { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ { .mk = { 0 }, .brk = { 0 } } /* 1ff */ - // clang-format on + // clang-format on }; static int eep_data_out; @@ -598,8 +596,6 @@ tandy_log(const char *fmt, ...) # define tandy_log(fmt, ...) #endif - - static void eep_write(UNUSED(uint16_t addr), uint8_t val, void *priv) { diff --git a/src/machine/m_v86p.c b/src/machine/m_v86p.c index fbe7296f8..0be44de53 100644 --- a/src/machine/m_v86p.c +++ b/src/machine/m_v86p.c @@ -61,16 +61,16 @@ machine_v86p_init(const machine_t *model) if (!ret) { /* Try an older version of the BIOS. */ rom_id = 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); + 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_id = 2; - ret = bios_load_linear("roms/machines/v86p/V86P.ROM", - 0x000f0000, 65536, 0); + ret = bios_load_linear("roms/machines/v86p/V86P.ROM", + 0x000f0000, 65536, 0); } if (bios_only || !ret) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 815045389..c59b4ef37 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -65,46 +65,106 @@ machine_xt_common_init(const machine_t *model, int fixed_floppy) static const device_config_t ibmpc_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "ibm5150_5700671", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "5700671 (10/19/81)", .internal_name = "ibm5150_5700671", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc/BIOS_IBM5150_19OCT81_5700671_U33.BIN", "" } }, - { .name = "5700051 (04/24/81)", .internal_name = "ibm5150_5700051", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc/BIOS_IBM5150_24APR81_5700051_U33.BIN", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "5700671 (10/19/81)", + .internal_name = "ibm5150_5700671", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/ibmpc/BIOS_IBM5150_19OCT81_5700671_U33.BIN", "" } + }, + { + .name = "5700051 (04/24/81)", + .internal_name = "ibm5150_5700051", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/ibmpc/BIOS_IBM5150_24APR81_5700051_U33.BIN", "" } + }, // GLaBIOS for IBM PC - { .name = "GLaBIOS 0.4.0 (8088)", .internal_name = "glabios_040_8088", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.4.0_8P.ROM", "" } }, - { .name = "GLaBIOS 0.4.0 (V20)", .internal_name = "glabios_040_v20", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.4.0_VP.ROM", "" } }, + { + .name = "GLaBIOS 0.4.0 (8088)", + .internal_name = "glabios_040_8088", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_8P.ROM", "" } + }, + { + .name = "GLaBIOS 0.4.0 (V20)", + .internal_name = "glabios_040_v20", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_VP.ROM", "" } + }, // The following are Diagnostic ROMs. - { .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } }, - { .name = "Ruud's Diagnostic Rom", .internal_name = "diag_ruuds", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/ruuds_diagnostic_rom_v5.4_8kb.bin", "" } }, - { .name = "XT RAM Test", .internal_name = "diag_xtramtest", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/xtramtest_8k.bin", "" } }, + { + .name = "Supersoft Diagnostics", + .internal_name = "diag_supersoft", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } + }, + { + .name = "Ruud's Diagnostic Rom", + .internal_name = "diag_ruuds", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/diagnostic/ruuds_diagnostic_rom_v5.4_8kb.bin", "" } + }, + { + .name = "XT RAM Test", + .internal_name = "diag_xtramtest", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/diagnostic/xtramtest_8k.bin", "" } + }, { .files_no = 0 } - }, + } }, { - .name = "enable_5161", - .description = "IBM 5161 Expansion Unit", - .type = CONFIG_BINARY, - .default_int = 0 + .name = "enable_5161", + .description = "IBM 5161 Expansion Unit", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { - .name = "enable_basic", - .description = "IBM Cassette Basic", - .type = CONFIG_BINARY, - .default_int = 1 + .name = "enable_basic", + .description = "IBM Cassette Basic", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -175,46 +235,106 @@ machine_ibmpc_init(const machine_t *model) static const device_config_t ibmpc82_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "ibm5150_1501476", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "1501476 (10/27/82)", .internal_name = "ibm5150_1501476", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc82/BIOS_5150_27OCT82_1501476_U33.BIN", "" } }, - { .name = "5000024 (08/16/82)", .internal_name = "ibm5150_5000024", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc82/BIOS_5150_16AUG82_5000024_U33.BIN", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "1501476 (10/27/82)", + .internal_name = "ibm5150_1501476", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/ibmpc82/BIOS_5150_27OCT82_1501476_U33.BIN", "" } + }, + { + .name = "5000024 (08/16/82)", + .internal_name = "ibm5150_5000024", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/ibmpc82/BIOS_5150_16AUG82_5000024_U33.BIN", "" } + }, // GLaBIOS for IBM PC - { .name = "GLaBIOS 0.4.0 (8088)", .internal_name = "glabios_040_8088", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.4.0_8P.ROM", "" } }, - { .name = "GLaBIOS 0.4.0 (V20)", .internal_name = "glabios_040_v20", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.4.0_VP.ROM", "" } }, + { + .name = "GLaBIOS 0.4.0 (8088)", + .internal_name = "glabios_040_8088", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_8P.ROM", "" } + }, + { + .name = "GLaBIOS 0.4.0 (V20)", + .internal_name = "glabios_040_v20", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_VP.ROM", "" } + }, // The following are Diagnostic ROMs. - { .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } }, - { .name = "Ruud's Diagnostic Rom", .internal_name = "diag_ruuds", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/ruuds_diagnostic_rom_v5.4_8kb.bin", "" } }, - { .name = "XT RAM Test", .internal_name = "diag_xtramtest", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/xtramtest_8k.bin", "" } }, + { + .name = "Supersoft Diagnostics", + .internal_name = "diag_supersoft", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } + }, + { + .name = "Ruud's Diagnostic Rom", + .internal_name = "diag_ruuds", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/diagnostic/ruuds_diagnostic_rom_v5.4_8kb.bin", "" } + }, + { + .name = "XT RAM Test", + .internal_name = "diag_xtramtest", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 40960, + .files = { "roms/machines/diagnostic/xtramtest_8k.bin", "" } + }, { .files_no = 0 } - }, + } }, { - .name = "enable_5161", - .description = "IBM 5161 Expansion Unit", - .type = CONFIG_BINARY, - .default_int = 1 + .name = "enable_5161", + .description = "IBM 5161 Expansion Unit", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { - .name = "enable_basic", - .description = "IBM Cassette Basic", - .type = CONFIG_BINARY, - .default_int = 1 + .name = "enable_basic", + .description = "IBM Cassette Basic", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -292,6 +412,7 @@ static const device_config_t ibmxt_config[] = { .default_int = 0, .file_filter = NULL, .spinner = { 0 }, + .selection = { { 0 } }, .bios = { { .name = "1501512 (11/08/82)", @@ -300,7 +421,8 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 0, .size = 65536, - .files = { "roms/machines/ibmxt/BIOS_5160_08NOV82_U18_1501512.BIN", "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } + .files = { "roms/machines/ibmxt/BIOS_5160_08NOV82_U18_1501512.BIN", + "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } }, { .name = "1501512 (11/08/82) (Alt)", @@ -309,7 +431,8 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 0, .size = 65536, - .files = { "roms/machines/ibmxt/BIOS_5160_08NOV82_U18_1501512.BIN", "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_6359116.BIN", "" } + .files = { "roms/machines/ibmxt/BIOS_5160_08NOV82_U18_1501512.BIN", + "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_6359116.BIN", "" } }, { .name = "5000026 (08/16/82)", @@ -318,7 +441,8 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 0, .size = 65536, - .files = { "roms/machines/ibmxt/BIOS_5160_16AUG82_U18_5000026.BIN", "roms/machines/ibmxt/BIOS_5160_16AUG82_U19_5000027.BIN", "" } + .files = { "roms/machines/ibmxt/BIOS_5160_16AUG82_U18_5000026.BIN", + "roms/machines/ibmxt/BIOS_5160_16AUG82_U19_5000027.BIN", "" } }, // GLaBIOS for IBM XT @@ -329,7 +453,8 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 1, .size = 40960, - .files = { "roms/machines/glabios/GLABIOS_0.4.0_8X.ROM", "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } + .files = { "roms/machines/glabios/GLABIOS_0.4.0_8X.ROM", + "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } }, { .name = "GLaBIOS 0.4.0 (V20)", @@ -338,7 +463,8 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 1, .size = 40960, - .files = { "roms/machines/glabios/GLABIOS_0.4.0_VX.ROM", "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } + .files = { "roms/machines/glabios/GLABIOS_0.4.0_VX.ROM", + "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } }, // The following are Diagnostic ROMs. @@ -349,7 +475,8 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 2, .size = 65536, - .files = { "roms/machines/diagnostic/Supersoft_PCXT_32KB.bin", "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } + .files = { "roms/machines/diagnostic/Supersoft_PCXT_32KB.bin", + "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } }, { .name = "Ruud's Diagnostic Rom", @@ -358,7 +485,8 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 2, .size = 65536, - .files = { "roms/machines/diagnostic/ruuds_diagnostic_rom_v5.4_32kb.bin", "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } + .files = { "roms/machines/diagnostic/ruuds_diagnostic_rom_v5.4_32kb.bin", + "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } }, { .name = "XT RAM Test", @@ -367,22 +495,33 @@ static const device_config_t ibmxt_config[] = { .files_no = 2, .local = 2, .size = 65536, - .files = { "roms/machines/diagnostic/xtramtest_32k.bin", "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } + .files = { "roms/machines/diagnostic/xtramtest_32k.bin", + "roms/machines/ibmxt/BIOS_5160_08NOV82_U19_5000027.BIN", "" } }, { .files_no = 0 } - }, + } }, { - .name = "enable_5161", - .description = "IBM 5161 Expansion Unit", - .type = CONFIG_BINARY, - .default_int = 1 + .name = "enable_5161", + .description = "IBM 5161 Expansion Unit", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { - .name = "enable_basic", - .description = "IBM Cassette Basic", - .type = CONFIG_BINARY, - .default_int = 1 + .name = "enable_basic", + .description = "IBM Cassette Basic", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -421,10 +560,10 @@ machine_ibmxt_init(const machine_t *model) enable_basic = machine_get_config_int("enable_basic"); fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); local = device_get_bios_local(model->device, device_get_config_bios("bios")); - + if (local == 0) // Offset for stock roms - offset = 0x6000; - ret = bios_load_linear(fn, 0x000fe000, 65536, offset); + offset = 0x6000; + ret = bios_load_linear(fn, 0x000fe000, 65536, offset); if (enable_basic && ret) { if (local == 0) { // needed for stock roms @@ -463,6 +602,7 @@ static const device_config_t ibmxt86_config[] = { .default_int = 0, .file_filter = NULL, .spinner = { 0 }, + .selection = { { 0 } }, .bios = { { .name = "1501512 (05/09/86)", @@ -471,7 +611,8 @@ static const device_config_t ibmxt86_config[] = { .files_no = 2, .local = 0, .size = 65536, - .files = { "roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN", "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } + .files = { "roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN", + "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } }, { .name = "5000026 (01/10/86)", @@ -480,7 +621,8 @@ static const device_config_t ibmxt86_config[] = { .files_no = 2, .local = 0, .size = 65536, - .files = { "roms/machines/ibmxt86/BIOS_5160_10JAN86_U18_62X0851_27256_F800.BIN", "roms/machines/ibmxt86/BIOS_5160_10JAN86_U19_62X0854_27256_F000.BIN", "" } + .files = { "roms/machines/ibmxt86/BIOS_5160_10JAN86_U18_62X0851_27256_F800.BIN", + "roms/machines/ibmxt86/BIOS_5160_10JAN86_U19_62X0854_27256_F000.BIN", "" } }, { .name = "1501512 (01/10/86) (Alt)", @@ -489,7 +631,8 @@ static const device_config_t ibmxt86_config[] = { .files_no = 2, .local = 0, .size = 65536, - .files = { "roms/machines/ibmxt86/BIOS_5160_10JAN86_U18_62X0852_27256_F800.BIN", "roms/machines/ibmxt86/BIOS_5160_10JAN86_U19_62X0853_27256_F000.BIN", "" } + .files = { "roms/machines/ibmxt86/BIOS_5160_10JAN86_U18_62X0852_27256_F800.BIN", + "roms/machines/ibmxt86/BIOS_5160_10JAN86_U19_62X0853_27256_F000.BIN", "" } }, // GLaBIOS for IBM XT @@ -500,7 +643,8 @@ static const device_config_t ibmxt86_config[] = { .files_no = 2, .local = 1, .size = 65536, - .files = { "roms/machines/glabios/GLABIOS_0.4.0_8X.ROM", "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } + .files = { "roms/machines/glabios/GLABIOS_0.4.0_8X.ROM", + "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } }, { .name = "GLaBIOS 0.4.0 (V20)", @@ -509,7 +653,8 @@ static const device_config_t ibmxt86_config[] = { .files_no = 2, .local = 1, .size = 65536, - .files = { "roms/machines/glabios/GLABIOS_0.4.0_VX.ROM", "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } + .files = { "roms/machines/glabios/GLABIOS_0.4.0_VX.ROM", + "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } }, // The following are Diagnostic ROMs. @@ -520,7 +665,8 @@ static const device_config_t ibmxt86_config[] = { .files_no = 2, .local = 2, .size = 65536, - .files = { "roms/machines/diagnostic/Supersoft_PCXT_32KB.bin", "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } + .files = { "roms/machines/diagnostic/Supersoft_PCXT_32KB.bin", + "roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", "" } }, { .name = "Ruud's Diagnostic Rom", @@ -545,10 +691,15 @@ static const device_config_t ibmxt86_config[] = { }, }, { - .name = "enable_5161", - .description = "IBM 5161 Expansion Unit", - .type = CONFIG_BINARY, - .default_int = 1 + .name = "enable_5161", + .description = "IBM 5161 Expansion Unit", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -575,20 +726,20 @@ machine_ibmxt86_init(const machine_t *model) uint8_t enable_5161; const char *fn; uint16_t offset = 0; - uint32_t local = 0; + uint32_t local = 0; /* No ROMs available. */ if (!device_available(model->device)) return ret; device_context(model->device); - enable_5161 = machine_get_config_int("enable_5161"); - fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); - local = device_get_bios_local(model->device, device_get_config_bios("bios")); + enable_5161 = machine_get_config_int("enable_5161"); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + local = device_get_bios_local(model->device, device_get_config_bios("bios")); if (local == 0) // Offset for stock roms - offset = 0x6000; - ret = bios_load_linear(fn, 0x000fe000, 65536, offset); + offset = 0x6000; + ret = bios_load_linear(fn, 0x000fe000, 65536, offset); if (ret) { if (local == 0) { // needed for stock roms @@ -881,23 +1032,47 @@ machine_xt_super16te_init(const machine_t *model) static const device_config_t jukopc_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "jukost", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Bios 2.30", .internal_name = "jukost", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 8192, .files = { "roms/machines/jukopc/000o001.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Bios 2.30", + .internal_name = "jukost", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 8192, + .files = { "roms/machines/jukopc/000o001.bin", "" } + }, + // GLaBIOS for Juko ST - { .name = "GLaBIOS 0.4.0 (8088)", .internal_name = "glabios_040_8088", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 8192, .files = { "roms/machines/glabios/GLABIOS_0.4.0_8S.ROM", "" } }, - { .name = "GLaBIOS 0.4.0 (V20)", .internal_name = "glabios_040_v20", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 8192, .files = { "roms/machines/glabios/GLABIOS_0.4.0_VS.ROM", "" } }, + { + .name = "GLaBIOS 0.4.0 (8088)", + .internal_name = "glabios_040_8088", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 8192, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_8S.ROM", "" } + }, + { + .name = "GLaBIOS 0.4.0 (V20)", + .internal_name = "glabios_040_v20", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 8192, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_VS.ROM", "" } + }, + { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -928,8 +1103,8 @@ machine_xt_jukopc_init(const machine_t *model) return ret; device_context(model->device); - fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); - ret = bios_load_linear(fn, 0x000fe000, 8192, 0); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000fe000, 8192, 0); device_context_restore(); if (bios_only || !ret) @@ -977,13 +1152,14 @@ machine_xt_micoms_xl7turbo_init(const machine_t *model) static const device_config_t pc500_config[] = { // clang-format off { - .name = "bios", + .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, .default_string = "pc500_330", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, + .selection = { { 0 } }, .bios = { { .name = "3.30", @@ -1004,7 +1180,7 @@ static const device_config_t pc500_config[] = { .files = { "roms/machines/pc500/rom310.bin", "" } }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -1035,8 +1211,8 @@ machine_xt_pc500_init(const machine_t *model) return ret; device_context(model->device); - fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); - ret = bios_load_linear(fn, 0x000fe000, 8192, 0); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000fe000, 8192, 0); device_context_restore(); if (bios_only || !ret) @@ -1280,23 +1456,47 @@ machine_xt_pcxt_init(const machine_t *model) static const device_config_t vendex_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "vendex", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "Bios 2.03C", .internal_name = "vendex", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 16384, .files = { "roms/machines/vendex/Vendex Turbo 888 XT - ROM BIOS - VER 2.03C.bin", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Bios 2.03C", + .internal_name = "vendex", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/machines/vendex/Vendex Turbo 888 XT - ROM BIOS - VER 2.03C.bin", "" } + }, + // GLaBIOS for Vendex - { .name = "GLaBIOS 0.4.0 (8088)", .internal_name = "glabios_040_8088", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 16384, .files = { "roms/machines/glabios/GLABIOS_0.4.0_8TV.ROM", "" } }, - { .name = "GLaBIOS 0.4.0 (V20)", .internal_name = "glabios_040_v20", .bios_type = BIOS_NORMAL, - .files_no = 1, .local = 0, .size = 16384, .files = { "roms/machines/glabios/GLABIOS_0.4.0_VTV.ROM", "" } }, + { + .name = "GLaBIOS 0.4.0 (8088)", + .internal_name = "glabios_040_8088", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_8TV.ROM", "" } + }, + { + .name = "GLaBIOS 0.4.0 (V20)", + .internal_name = "glabios_040_v20", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/machines/glabios/GLABIOS_0.4.0_VTV.ROM", "" } + }, + { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on @@ -1327,8 +1527,8 @@ machine_xt_vendex_init(const machine_t *model) return ret; device_context(model->device); - fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); - ret = bios_load_linear(fn, 0x000fc000, 16384, 0); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000fc000, 16384, 0); device_context_restore(); if (bios_only || !ret) @@ -1342,7 +1542,7 @@ machine_xt_vendex_init(const machine_t *model) } static void -machine_xt_laserxt_common_init(const machine_t *model,int is_lxt3) +machine_xt_laserxt_common_init(const machine_t *model, int is_lxt3) { machine_common_init(model); @@ -1593,7 +1793,7 @@ machine_xt_pc5086_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/pc5086/sys_rom.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) return ret; diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index 13d98e6f9..50a891e2c 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -132,8 +132,8 @@ typedef struct m24_kbd_t { uint8_t scan[7]; /* Mouse stuff. */ - int mouse_input_mode; - int b; + int mouse_input_mode; + int b; pc_timer_t send_delay_timer; } m24_kbd_t; @@ -553,20 +553,20 @@ m24_kbd_write(uint16_t port, uint8_t val, void *priv) switch (m24_kbd->command) { case 0x11: m24_kbd->mouse_input_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]; + 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_input_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]; + 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: @@ -722,7 +722,7 @@ m24_kbd_reset(void *priv) m24_kbd->wantirq = 0; keyboard_scan = 1; m24_kbd->param = m24_kbd->param_total = 0; - m24_kbd->mouse_input_mode = 0; + m24_kbd->mouse_input_mode = 0; m24_kbd->scan[0] = 0x1c; m24_kbd->scan[1] = 0x53; m24_kbd->scan[2] = 0x01; @@ -736,11 +736,11 @@ static int ms_poll(void *priv) { m24_kbd_t *m24_kbd = (m24_kbd_t *) priv; - int delta_x; - int delta_y; - int o_x; - int o_y; - int b = mouse_get_buttons_ex(); + int delta_x; + int delta_y; + int o_x; + int o_y; + int b = mouse_get_buttons_ex(); if (((key_queue_end - key_queue_start) & 0xf) > 14) return 0xff; @@ -847,7 +847,7 @@ ms_poll(void *priv) - Right Windows (E0 5C) -> F18 (67). */ const scancode scancode_olivetti_m24_deluxe[512] = { - // clang-format off + // clang-format off { .mk = { 0 }, .brk = { 0 } }, /* 000 */ { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ { .mk = { 0x02, 0 }, .brk = { 0x82, 0 } }, /* 002 */ @@ -1360,7 +1360,7 @@ const scancode scancode_olivetti_m24_deluxe[512] = { { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ { .mk = { 0 }, .brk = { 0 } } /* 1ff */ - // clang-format on + // clang-format on }; /* Remapping as follows: @@ -1370,7 +1370,7 @@ const scancode scancode_olivetti_m24_deluxe[512] = { - Menu (E0 5D) -> 5C. */ const scancode scancode_olivetti_m240[512] = { - // clang-format off + // clang-format off { .mk = { 0 }, .brk = { 0 } }, /* 000 */ { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ { .mk = { 0x02, 0 }, .brk = { 0x82, 0 } }, /* 002 */ @@ -1883,7 +1883,7 @@ const scancode scancode_olivetti_m240[512] = { { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ { .mk = { 0 }, .brk = { 0 } } /* 1ff */ - // clang-format on + // clang-format on }; static void @@ -2084,33 +2084,38 @@ const device_t m24_kbd_device = { }; const device_config_t m19_vid_config[] = { - // clang-format off + // clang-format off { /* Olivetti / ATT compatible displays */ - .name = "rgb_type", - .description = "RGB type", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = CGA_RGB, - .file_filter = "", - .spinner = { 0 }, - .selection = { + .name = "rgb_type", + .description = "RGB type", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = CGA_RGB, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { .description = "Color", .value = 0 }, { .description = "Green Monochrome", .value = 1 }, { .description = "Amber Monochrome", .value = 2 }, { .description = "Gray Monochrome", .value = 3 }, { .description = "" } - } + }, + .bios = { { 0 } } }, { - .name = "snow_enabled", - .description = "Snow emulation", - .type = CONFIG_BINARY, - .default_string = "", - .default_int = 1, + .name = "snow_enabled", + .description = "Snow emulation", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t m19_vid_device = { @@ -2243,7 +2248,7 @@ m24_read(uint16_t port, UNUSED(void *priv)) static uint8_t m240_read(uint16_t port, UNUSED(void *priv)) { - uint8_t ret = 0x00; + uint8_t ret = 0x00; int fdd_count = 0; switch (port) { diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c index 13407c535..87899e7c6 100644 --- a/src/machine/m_xt_t1000.c +++ b/src/machine/m_xt_t1000.c @@ -286,8 +286,8 @@ tc8521_write(uint16_t addr, uint8_t val, void *priv) static uint8_t tc8521_read(uint16_t addr, void *priv) { - const nvr_t *nvr = (nvr_t *) priv; - uint8_t page; + const nvr_t *nvr = (nvr_t *) priv; + uint8_t page; /* Get to the correct register page. */ addr &= 0x0f; @@ -340,7 +340,7 @@ ems_execaddr(t1000_t *sys, UNUSED(int pg), uint16_t val) return 0; /* Bit 7 reset => not mapped */ if (!sys->ems_pages) return 0; /* No EMS available: all used by - * HardRAM or conventional RAM */ + * HardRAM or conventional RAM */ val &= 0x7f; #if 0 @@ -466,7 +466,7 @@ static uint8_t ems_read_ram(uint32_t addr, void *priv) { const t1000_t *sys = (t1000_t *) priv; - int pg = addr_to_page(addr); + int pg = addr_to_page(addr); if (pg < 0) return 0xff; @@ -832,7 +832,7 @@ int machine_xt_t1000_init(const machine_t *model) { FILE *fp; - int ret; + int ret; ret = bios_load_linear("roms/machines/t1000/t1000.rom", 0x000f8000, 32768, 0); diff --git a/src/machine/m_xt_xi8088.c b/src/machine/m_xt_xi8088.c index 756432405..729cf48d5 100644 --- a/src/machine/m_xt_xi8088.c +++ b/src/machine/m_xt_xi8088.c @@ -87,77 +87,77 @@ xi8088_init(UNUSED(const device_t *info)) } static const device_config_t xi8088_config[] = { - // clang-format off + // clang-format off { - .name = "turbo_setting", + .name = "turbo_setting", .description = "Turbo", - .type = CONFIG_SELECTION, - .selection = { + .type = CONFIG_SELECTION, + .default_int = 0, + .selection = { { .description = "Always at selected speed", - .value = 0 + .value = 0 }, { .description = "BIOS setting + Hotkeys (off during POST)", - .value = 1 + .value = 1 } - }, - .default_int = 0 + } }, { - .name = "bios_128kb", + .name = "bios_128kb", .description = "BIOS size", - .type = CONFIG_SELECTION, - .selection = { + .type = CONFIG_SELECTION, + .default_int = 1, + .selection = { { .description = "64 KB starting from F0000", - .value = 0 + .value = 0 }, { .description = "128 KB starting from E0000 (address MSB inverted, last 64 KB first)", - .value = 1 + .value = 1 } - }, - .default_int = 1 + } }, { - .name = "umb_c0000h_c7fff", + .name = "umb_c0000h_c7fff", .description = "Map C0000-C7FFF as UMB", - .type = CONFIG_BINARY, + .type = CONFIG_BINARY, .default_int = 0 }, { - .name = "umb_c8000h_cffff", + .name = "umb_c8000h_cffff", .description = "Map C8000-CFFFF as UMB", - .type = CONFIG_BINARY, + .type = CONFIG_BINARY, .default_int = 0 }, { - .name = "umb_d0000h_d7fff", + .name = "umb_d0000h_d7fff", .description = "Map D0000-D7FFF as UMB", - .type = CONFIG_BINARY, + .type = CONFIG_BINARY, .default_int = 0 }, { - .name = "umb_d8000h_dffff", + .name = "umb_d8000h_dffff", .description = "Map D8000-DFFFF as UMB", - .type = CONFIG_BINARY, + .type = CONFIG_BINARY, .default_int = 0 }, { - .name = "umb_e0000h_e7fff", + .name = "umb_e0000h_e7fff", .description = "Map E0000-E7FFF as UMB", - .type = CONFIG_BINARY, + .type = CONFIG_BINARY, .default_int = 0 }, { - .name = "umb_e8000h_effff", + .name = "umb_e8000h_effff", .description = "Map E8000-EFFFF as UMB", - .type = CONFIG_BINARY, + .type = CONFIG_BINARY, .default_int = 0 }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on + // clang-format on }; const device_t xi8088_device = { diff --git a/src/machine/machine.c b/src/machine/machine.c index 55bc141c0..30f979fd4 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -76,9 +76,9 @@ machine_init_ex(int m) machine_init_gpio(); machine_init_gpio_acpi(); - machine_snd = NULL; + machine_snd = NULL; - is_vpc = 0; + is_vpc = 0; standalone_gameport_type = NULL; gameport_instance_id = 0; @@ -183,7 +183,7 @@ void machine_common_init(UNUSED(const machine_t *model)) { uint8_t cpu_requires_fast_pit = is486 || (!is286 && is8086 && (cpu_s->rspeed >= 8000000)); - cpu_requires_fast_pit = cpu_requires_fast_pit && !cpu_16bitbus; + cpu_requires_fast_pit = cpu_requires_fast_pit && !cpu_16bitbus; /* System devices first. */ pic_init(); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 9fa4ab81b..395379f28 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -191,7375 +191,7375 @@ const machine_filter_t machine_chipsets[] = { */ const machine_t machines[] = { - // clang-format off + // clang-format off /* 8088 Machines */ { - .name = "[8088] IBM PC (1981)", - .internal_name = "ibmpc", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_ibmpc_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] IBM PC (1981)", + .internal_name = "ibmpc", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_ibmpc_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC5150, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 16, - .max = 64, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 16, + .max = 64, .step = 16 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ibmpc_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ibmpc_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] IBM PC (1982)", - .internal_name = "ibmpc82", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_ibmpc82_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] IBM PC (1982)", + .internal_name = "ibmpc82", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_ibmpc82_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC5150, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 256, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 256, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc82_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ibmpc82_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc82_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ibmpc82_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] IBM PCjr", - .internal_name = "ibmpcjr", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_pcjr_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] IBM PCjr", + .internal_name = "ibmpcjr", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_pcjr_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 4772728, - .max_bus = 4772728, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 4772728, + .max_bus = 4772728, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCJR, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, /* TODO: No specific kbd_device yet */ - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &pcjr_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, /* TODO: No specific kbd_device yet */ + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &pcjr_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] IBM XT (1982)", - .internal_name = "ibmxt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_ibmxt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] IBM XT (1982)", + .internal_name = "ibmxt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_ibmxt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 256, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 256, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ibmxt_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ibmxt_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] IBM XT (1986)", - .internal_name = "ibmxt86", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_ibmxt86_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] IBM XT (1986)", + .internal_name = "ibmxt86", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_ibmxt86_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt86_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ibmxt86_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt86_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ibmxt86_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] American XT Computer", - .internal_name = "americxt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_americxt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] American XT Computer", + .internal_name = "americxt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_americxt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] AMI XT clone", - .internal_name = "amixt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_amixt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] AMI XT clone", + .internal_name = "amixt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_amixt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Atari PC 3", - .internal_name = "ataripc3", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_ataripc3_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Atari PC 3", + .internal_name = "ataripc3", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_ataripc3_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FDC, /* Machine has internal video: NSI EVC315-S EGA */ - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FDC, /* Machine has internal video: NSI EVC315-S EGA */ + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Bondwell BW230", - .internal_name = "bw230", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_bw230_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Bondwell BW230", + .internal_name = "bw230", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_bw230_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Columbia Data Products MPC-1600", - .internal_name = "mpc1600", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_mpc1600_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Columbia Data Products MPC-1600", + .internal_name = "mpc1600", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_mpc1600_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 512, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 512, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc82_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc82_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Compaq Portable", - .internal_name = "portable", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_compaq_portable_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Compaq Portable", + .internal_name = "portable", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_compaq_portable_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_KEYBOARD, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_KEYBOARD, + .ram = { + .min = 128, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_compaq_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_compaq_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] DTK PIM-TB10-Z", - .internal_name = "dtk", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_dtk_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] DTK PIM-TB10-Z", + .internal_name = "dtk", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_dtk_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Eagle PC Spirit", - .internal_name = "pcspirit", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pcspirit_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Eagle PC Spirit", + .internal_name = "pcspirit", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pcspirit_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc82_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc82_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Generic XT clone", - .internal_name = "genxt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_genxt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Generic XT clone", + .internal_name = "genxt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_genxt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] GLaBIOS", - .internal_name = "glabios", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_glabios_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] GLaBIOS", + .internal_name = "glabios", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_glabios_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Hyosung Topstar 88T", - .internal_name = "top88", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_top88_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Hyosung Topstar 88T", + .internal_name = "top88", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_top88_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FDC, /* Machine has internal video: Paradise PVC2 */ - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FDC, /* Machine has internal video: Paradise PVC2 */ + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = &fdc_xt_device, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = &fdc_xt_device, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Hyundai SUPER-16T", - .internal_name = "super16t", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_super16t_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Hyundai SUPER-16T", + .internal_name = "super16t", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_super16t_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 4772728, - .max_bus = 8000000, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 4772728, + .max_bus = 8000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FDC, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FDC, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = &fdc_xt_device, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = &fdc_xt_device, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Hyundai SUPER-16TE", - .internal_name = "super16te", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_super16te_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Hyundai SUPER-16TE", + .internal_name = "super16te", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_super16te_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FDC, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FDC, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = &fdc_xt_device, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = &fdc_xt_device, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Juko ST", - .internal_name = "jukopc", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_jukopc_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Juko ST", + .internal_name = "jukopc", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_jukopc_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &jukopc_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &jukopc_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Kaypro PC", - .internal_name = "kaypropc", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_kaypropc_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Kaypro PC", + .internal_name = "kaypropc", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_kaypropc_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Micoms XL-7 Turbo/Pravetz-16ES", - .internal_name = "mxl7t", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_micoms_xl7turbo_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Micoms XL-7 Turbo/Pravetz-16ES", + .internal_name = "mxl7t", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_micoms_xl7turbo_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Multitech PC-500", - .internal_name = "pc500", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pc500_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Multitech PC-500", + .internal_name = "pc500", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pc500_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &pc500_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &pc500_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Multitech PC-500 plus", - .internal_name = "pc500plus", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pc500plus_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Multitech PC-500 plus", + .internal_name = "pc500plus", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pc500plus_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Multitech PC-700", - .internal_name = "pc700", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pc700_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Multitech PC-700", + .internal_name = "pc700", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pc700_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] NCR PC4i", - .internal_name = "pc4i", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pc4i_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] NCR PC4i", + .internal_name = "pc4i", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pc4i_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Olivetti M19", - .internal_name = "m19", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_m19_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Olivetti M19", + .internal_name = "m19", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_m19_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 4772728, - .max_bus = 7159092, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 4772728, + .max_bus = 7159092, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, + .ram = { + .min = 256, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_olivetti_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &m19_vid_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_olivetti_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &m19_vid_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] OpenXT", - .internal_name = "openxt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_openxt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] OpenXT", + .internal_name = "openxt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_openxt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Philips P3105/NMS9100", - .internal_name = "p3105", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_p3105_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Philips P3105/NMS9100", + .internal_name = "p3105", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_p3105_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_XTA, - .ram = { - .min = 256, - .max = 768, + .flags = MACHINE_XTA, + .ram = { + .min = 256, + .max = 768, .step = 256 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Phoenix XT clone", - .internal_name = "pxxt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pxxt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Phoenix XT clone", + .internal_name = "pxxt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pxxt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Pravetz 16 / IMKO-4", - .internal_name = "pravetz16", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pravetz16_imko4_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Pravetz 16 / IMKO-4", + .internal_name = "pravetz16", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pravetz16_imko4_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pravetz_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pravetz_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Pravetz 16S / CPU12 Plus", - .internal_name = "pravetz16s", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pravetz16s_cpu12p_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Pravetz 16S / CPU12 Plus", + .internal_name = "pravetz16s", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pravetz16s_cpu12p_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 4772728, - .max_bus = 12000000, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 4772728, + .max_bus = 12000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 1024, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 1024, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Samsung SPC-3000V/Packard Bell PB500/PB8810", - .internal_name = "pb8810", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pb8810_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Samsung SPC-3000V/Packard Bell PB500/PB8810", + .internal_name = "pb8810", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pb8810_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Sanyo SX-16", - .internal_name = "sansx16", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_sansx16_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Sanyo SX-16", + .internal_name = "sansx16", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_sansx16_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FDC, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_FDC, + .ram = { + .min = 256, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = &fdc_xt_device, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = &fdc_xt_device, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Schneider EuroPC", - .internal_name = "europc", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_europc_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Schneider EuroPC", + .internal_name = "europc", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_europc_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088_EUROPC, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088_EUROPC, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_XTA | MACHINE_KEYBOARD | MACHINE_MOUSE, /* Machine has internal video: Paradise PVC4 */ - .ram = { - .min = 512, - .max = 640, + .flags = MACHINE_XTA | MACHINE_KEYBOARD | MACHINE_MOUSE, /* Machine has internal video: Paradise PVC4 */ + .ram = { + .min = 512, + .max = 640, .step = 128 }, - .nvrmask = 15, - .jumpered_ecp_dma = 0, + .nvrmask = 15, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Super PC/Turbo XT", - .internal_name = "pcxt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_pcxt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Super PC/Turbo XT", + .internal_name = "pcxt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_pcxt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Tandy 1000 SX", - .internal_name = "tandy1000sx", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_tandy1000sx_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Tandy 1000 SX", + .internal_name = "tandy1000sx", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_tandy1000sx_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, - .ram = { - .min = 384, - .max = 640, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, + .ram = { + .min = 384, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_tandy_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &tandy_1000_video_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_tandy_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &tandy_1000_video_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Tandy 1000 HX", - .internal_name = "tandy1000hx", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_tandy1000hx_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Tandy 1000 HX", + .internal_name = "tandy1000hx", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_tandy1000hx_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, + .ram = { + .min = 256, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_tandy_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &tandy_1000hx_video_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_tandy_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &tandy_1000hx_video_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Toshiba T1000", - .internal_name = "t1000", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_t1000_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Toshiba T1000", + .internal_name = "t1000", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_t1000_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD, - .ram = { - .min = 512, - .max = 1280, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD, + .ram = { + .min = 512, + .max = 1280, .step = 768 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_t1x00_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &t1000_video_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_t1x00_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &t1000_video_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Vendex HeadStart Turbo 888-XT", - .internal_name = "vendex", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_vendex_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Vendex HeadStart Turbo 888-XT", + .internal_name = "vendex", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_vendex_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FDC, - .ram = { - .min = 256, - .max = 768, + .flags = MACHINE_FDC, + .ram = { + .min = 256, + .max = 768, .step = 256 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &vendex_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = &fdc_xt_device, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &vendex_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = &fdc_xt_device, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] VTech Laser Turbo XT", - .internal_name = "ltxt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_laserxt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] VTech Laser Turbo XT", + .internal_name = "ltxt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_laserxt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088_VTECH, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088_VTECH, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &laserxt_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &laserxt_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a standard PS/2 KBC (so, use IBM PS/2 Type 1). */ { - .name = "[8088] Xi8088", - .internal_name = "xi8088", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_xi8088_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Xi8088", + .internal_name = "xi8088", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_xi8088_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 1024, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 1024, .step = 64 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_p1 = 0x00400cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &xi8088_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_p1 = 0x00400cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &xi8088_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Z-NIX PC-1600", - .internal_name = "znic", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_znic_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Z-NIX PC-1600", + .internal_name = "znic", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_znic_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Zenith Data Systems Z-151/152/161", - .internal_name = "zdsz151", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_z151_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Zenith Data Systems Z-151/152/161", + .internal_name = "zdsz151", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_z151_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_zenith_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_zenith_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Zenith Data Systems Z-159", - .internal_name = "zdsz159", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_z159_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Zenith Data Systems Z-159", + .internal_name = "zdsz159", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_z159_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_zenith_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_zenith_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8088] Zenith Data Systems SupersPort (Z-184)", - .internal_name = "zdsupers", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_z184_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8088] Zenith Data Systems SupersPort (Z-184)", + .internal_name = "zdsupers", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_z184_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO_FIXED, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_VIDEO_FIXED, + .ram = { + .min = 128, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_zenith_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &cga_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_zenith_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &cga_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[GC100A] Philips P3120", - .internal_name = "p3120", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_GC100A, - .init = machine_xt_p3120_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[GC100A] Philips P3120", + .internal_name = "p3120", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_GC100A, + .init = machine_xt_p3120_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_XTA, - .ram = { - .min = 256, - .max = 768, + .flags = MACHINE_XTA, + .ram = { + .min = 256, + .max = 768, .step = 256 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_pc_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[V20] PC-XT", - .internal_name = "v20xt", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_v20xt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[V20] PC-XT", + .internal_name = "v20xt", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_v20xt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK(CPU_8088), - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK(CPU_8088), + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[V20] Tulip PC Compact 2", - .internal_name = "tuliptc8", - .type = MACHINE_TYPE_8088, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_tuliptc8_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[V20] Tulip PC Compact 2", + .internal_name = "tuliptc8", + .type = MACHINE_TYPE_8088, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_tuliptc8_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8088, - .block = CPU_BLOCK(CPU_8088), - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8088, + .block = CPU_BLOCK(CPU_8088), + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 64, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 64, + .max = 640, .step = 64 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 8086 Machines */ { - .name = "[8086] Amstrad PC1512", - .internal_name = "pc1512", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_pc1512_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Amstrad PC1512", + .internal_name = "pc1512", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_pc1512_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 8000000, - .max_bus = 8000000, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 8000000, + .max_bus = 8000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_MOUSE, - .ram = { - .min = 512, - .max = 640, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_MOUSE, + .ram = { + .min = 512, + .max = 640, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &vid_1512_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &vid_1512_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Amstrad PC1640", - .internal_name = "pc1640", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_pc1640_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Amstrad PC1640", + .internal_name = "pc1640", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_pc1640_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, - .ram = { - .min = 640, - .max = 640, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, + .ram = { + .min = 640, + .max = 640, .step = 640 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &vid_1640_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &vid_1640_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Amstrad PC2086", - .internal_name = "pc2086", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_pc2086_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Amstrad PC2086", + .internal_name = "pc2086", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_pc2086_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_MOUSE, - .ram = { - .min = 640, - .max = 640, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_MOUSE, + .ram = { + .min = 640, + .max = 640, .step = 640 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &vid_pc2086_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &vid_pc2086_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Amstrad PC3086", - .internal_name = "pc3086", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_pc3086_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Amstrad PC3086", + .internal_name = "pc3086", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_pc3086_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_XTA | MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_MOUSE, - .ram = { - .min = 640, - .max = 640, + .flags = MACHINE_XTA | MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_MOUSE, + .ram = { + .min = 640, + .max = 640, .step = 640 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &vid_pc3086_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &vid_pc3086_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Amstrad PC5086", - .internal_name = "pc5086", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_pc5086_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Amstrad PC5086", + .internal_name = "pc5086", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_pc5086_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC | MACHINE_BUS_PS2, - .flags = MACHINE_XTA, - .ram = { - .min = 512, - .max = 640, + .flags = MACHINE_XTA, + .ram = { + .min = 512, + .max = 640, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &f82c710_pc5086_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &f82c710_pc5086_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Amstrad PC20(0)", - .internal_name = "pc200", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_pc200_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Amstrad PC20(0)", + .internal_name = "pc200", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_pc200_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, - .ram = { - .min = 512, - .max = 640, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, + .ram = { + .min = 512, + .max = 640, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &vid_200_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &vid_200_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Amstrad PPC512/640", - .internal_name = "ppc512", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ppc512_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Amstrad PPC512/640", + .internal_name = "ppc512", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ppc512_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, - .ram = { - .min = 512, - .max = 640, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE, + .ram = { + .min = 512, + .max = 640, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &vid_ppc512_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &vid_ppc512_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Compaq Deskpro", - .internal_name = "deskpro", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_compaq_deskpro_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Compaq Deskpro", + .internal_name = "deskpro", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_compaq_deskpro_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_compaq_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_compaq_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Epson Equity LT", - .internal_name = "elt", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_elt_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Epson Equity LT", + .internal_name = "elt", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_elt_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO, - .ram = { - .min = 640, - .max = 640, + .flags = MACHINE_VIDEO, + .ram = { + .min = 640, + .max = 640, .step = 640 }, - .nvrmask = 0x3f, - .jumpered_ecp_dma = 0, + .nvrmask = 0x3f, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Mazovia 1016", - .internal_name = "maz1016", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_maz1016_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Mazovia 1016", + .internal_name = "maz1016", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_maz1016_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086_MAZOVIA, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086_MAZOVIA, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 640, .step = 384 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Olivetti M21/24/24SP/AT&T PC 6300", - .internal_name = "m24", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_m24_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Olivetti M21/24/24SP/AT&T PC 6300", + .internal_name = "m24", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_m24_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE | MACHINE_MFM, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MOUSE | MACHINE_MFM, + .ram = { + .min = 128, + .max = 640, .step = 128 }, - .nvrmask = 15, - .jumpered_ecp_dma = 0, + .nvrmask = 15, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &ogc_m24_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &ogc_m24_device, + .snd_device = NULL, + .net_device = NULL }, /* Has Olivetti KBC firmware. */ { - .name = "[8086] Olivetti M240/AT&T PC 6300 WGS", - .internal_name = "m240", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_m240_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Olivetti M240/AT&T PC 6300 WGS", + .internal_name = "m240", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_m240_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_KEYBOARD | MACHINE_MFM, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_KEYBOARD | MACHINE_MFM, + .ram = { + .min = 128, + .max = 640, .step = 128 }, - .nvrmask = 15, - .jumpered_ecp_dma = 0, + .nvrmask = 15, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Schetmash Iskra-3104", - .internal_name = "iskra3104", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_iskra3104_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Schetmash Iskra-3104", + .internal_name = "iskra3104", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_iskra3104_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 128, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 128, + .max = 640, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xtclone_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xtclone_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Tandy 1000 SL/2", - .internal_name = "tandy1000sl2", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_tandy1000sl2_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Tandy 1000 SL/2", + .internal_name = "tandy1000sl2", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_tandy1000sl2_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, - .ram = { - .min = 512, - .max = 768, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, + .ram = { + .min = 512, + .max = 768, .step = 128 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL /* TODO: No specific kbd_device yet */, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &tandy_1000sl_video_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL /* TODO: No specific kbd_device yet */, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &tandy_1000sl_video_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Toshiba T1200", - .internal_name = "t1200", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_xt_t1200_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Toshiba T1200", + .internal_name = "t1200", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_xt_t1200_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MFM, - .ram = { - .min = 1024, - .max = 2048, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MFM, + .ram = { + .min = 1024, + .max = 2048, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_t1x00_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &t1200_video_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_t1x00_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &t1200_video_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] Victor V86P", - .internal_name = "v86p", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_v86p_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] Victor V86P", + .internal_name = "v86p", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_v86p_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MFM, - .ram = { - .min = 512, - .max = 1024, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD | MACHINE_MFM, + .ram = { + .min = 512, + .max = 1024, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[8086] VTech Laser XT3", - .internal_name = "lxt3", - .type = MACHINE_TYPE_8086, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_xt_lxt3_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[8086] VTech Laser XT3", + .internal_name = "lxt3", + .type = MACHINE_TYPE_8086, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_xt_lxt3_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_8086_VTECH, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_8086_VTECH, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 640, .step = 64 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_xt_lxt3_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &lxt3_device, - .kbd_device = &keyboard_pc_xt_device, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_xt_lxt3_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &lxt3_device, + .kbd_device = &keyboard_pc_xt_device, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 286 AT machines */ /* Has IBM AT KBC firmware. */ { - .name = "[ISA] IBM AT", - .internal_name = "ibmat", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_ibmat_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] IBM AT", + .internal_name = "ibmat", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_ibmat_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 8000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 8000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 512, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 512, .step = 256 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ibmat_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ibmat_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[ISA] IBM PS/1 model 2011", - .internal_name = "ibmps1es", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps1_m2011_init, - .p1_handler = machine_ps1_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] IBM PS/1 model 2011", + .internal_name = "ibmps1es", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps1_m2011_init, + .p1_handler = machine_ps1_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 10000000, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 10000000, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_XTA | MACHINE_VIDEO_FIXED, - .ram = { - .min = 512, - .max = 15360, + .flags = MACHINE_XTA | MACHINE_VIDEO_FIXED, + .ram = { + .min = 512, + .max = 15360, .step = 512 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ps1_2011_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ps1_2011_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[ISA] IBM PS/2 model 30-286", - .internal_name = "ibmps2_m30_286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_m30_286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] IBM PS/2 model 30-286", + .internal_name = "ibmps2_m30_286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_m30_286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286 | CPU_PKG_486SLC_IBM, - .block = CPU_BLOCK_NONE, - .min_bus = 10000000, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286 | CPU_PKG_486SLC_IBM, + .block = CPU_BLOCK_NONE, + .min_bus = 10000000, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_XTA | MACHINE_VIDEO_FIXED, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_XTA | MACHINE_VIDEO_FIXED, + .ram = { + .min = 512, + .max = 16384, .step = 512 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[ISA] IBM XT Model 286", - .internal_name = "ibmxt286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_ibmxt286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] IBM XT Model 286", + .internal_name = "ibmxt286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_ibmxt286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 6000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 6000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 640, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 640, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ibmxt286_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ibmxt286_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses Commodore (CBM) KBC firmware, to be implemented as identical to the IBM AT KBC firmware unless evidence emerges of any proprietary commands. */ { - .name = "[ISA] Commodore PC 30 III", - .internal_name = "cmdpc30", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, /* Machine has chipset: Faraday FE3400B */ - .init = machine_at_cmdpc_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Commodore PC 30 III", + .internal_name = "cmdpc30", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, /* Machine has chipset: Faraday FE3400B */ + .init = machine_at_cmdpc_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 12500000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 12500000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 640, - .max = 14912, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 640, + .max = 14912, .step = 64 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses Compaq KBC firmware. */ { - .name = "[ISA] Compaq Portable II", - .internal_name = "portableii", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_at_portableii_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Compaq Portable II", + .internal_name = "portableii", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_at_portableii_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 16000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 16000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_KEYBOARD, - .ram = { - .min = 640, - .max = 16384, + .flags = MACHINE_KEYBOARD, + .ram = { + .min = 640, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses Compaq KBC firmware. */ { - .name = "[ISA] Compaq Portable III", - .internal_name = "portableiii", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_at_portableiii_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Compaq Portable III", + .internal_name = "portableiii", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_at_portableiii_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 16000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 16000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_KEYBOARD, - .ram = { - .min = 640, - .max = 16384, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_KEYBOARD, + .ram = { + .min = 640, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &compaq_plasma_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &compaq_plasma_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[ISA] GRiD GRiDcase 1520", - .internal_name = "grid1520", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, /* Machine has chipset: Faraday FE3400B */ - .init = machine_at_grid1520_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] GRiD GRiDcase 1520", + .internal_name = "grid1520", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, /* Machine has chipset: Faraday FE3400B */ + .init = machine_at_grid1520_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE /*| MACHINE_VIDEO_FIXED*/ | MACHINE_KEYBOARD, - .ram = { - .min = 1024, - .max = 8192, + .flags = MACHINE_IDE /*| MACHINE_VIDEO_FIXED*/ | MACHINE_KEYBOARD, + .ram = { + .min = 1024, + .max = 8192, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[ISA] Multitech PC-900", - .internal_name = "pc900", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_pc900_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Multitech PC-900", + .internal_name = "pc900", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_pc900_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 10000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 10000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 1024, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 1024, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[ISA] MR BIOS 286 clone", - .internal_name = "mr286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_mr286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] MR BIOS 286 clone", + .internal_name = "mr286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_mr286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[ISA] NCR PC8/810/710/3390/3392", - .internal_name = "pc8", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_pc8_init, - .p1_handler = machine_ncr_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] NCR PC8/810/710/3390/3392", + .internal_name = "pc8", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_pc8_init, + .p1_handler = machine_ncr_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_NCR, - .kbc_p1 = 0x000004df, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_NCR, + .kbc_p1 = 0x000004df, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Olivetti KBC firmware. */ { - .name = "[ISA] Olivetti M290/AT&T 6286 WGS", - .internal_name = "m290", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, /* Yes, it's M290 with 98/86 gate array, not M290-30 with VLSI TOPCAT chipset. */ - .init = machine_at_m290_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Olivetti M290/AT&T 6286 WGS", + .internal_name = "m290", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, /* Yes, it's M290 with 98/86 gate array, not M290-30 with VLSI TOPCAT chipset. */ + .init = machine_at_m290_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_OLIVETTI, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_OLIVETTI, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ /* To configure the BIOS, use PB_2330a_diag.IMA from MS-DOS 3.30 Packard Bell OEM, GSETUP might work too*/ { - .name = "[ISA] Packard Bell PB286", - .internal_name = "pb286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_pb286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Packard Bell PB286", + .internal_name = "pb286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_pb286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 1024, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 1024, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[ISA] Phoenix AT clone", - .internal_name = "ibmatpx", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_pxat_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Phoenix AT clone", + .internal_name = "ibmatpx", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_pxat_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 1024, /* assumed; more can be added via memory expansions */ + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 1024, /* assumed; more can be added via memory expansions */ .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Quadtel KBC firmware. */ { - .name = "[ISA] Quadtel AT clone", - .internal_name = "ibmatquadtel", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_quadtat_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Quadtel AT clone", + .internal_name = "ibmatquadtel", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_quadtat_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 1024, /* assumed; more can be added via memory expansions */ + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 1024, /* assumed; more can be added via memory expansions */ .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_QUADTEL, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_QUADTEL, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has unknown KBC firmware. */ { - .name = "[ISA] Sanyo MBC-17PLUS", - .internal_name = "mbc17", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_mbc17_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Sanyo MBC-17PLUS", + .internal_name = "mbc17", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_mbc17_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 12000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 12000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has unknown KBC firmware. */ { - .name = "[ISA] Sharp AX286D", - .internal_name = "ax286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_ax286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Sharp AX286D", + .internal_name = "ax286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_ax286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, + .kbc_device = &kbc_at_device, /* The version number is a guess - we have no probe of this machine's controller. */ - .kbc_params = KBC_VEN_PHOENIX | 0x00010500, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_params = KBC_VEN_PHOENIX | 0x00010500, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a Siemens proprietary KBC which is completely undocumented. */ { - .name = "[ISA] Siemens PCD-2L", - .internal_name = "siemens", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_siemens_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Siemens PCD-2L", + .internal_name = "siemens", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_siemens_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 12500000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 12500000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 15872, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 15872, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_SIEMENS, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_SIEMENS, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has Toshiba's proprietary KBC, which is already implemented. */ { - .name = "[ISA] Toshiba T3100e", - .internal_name = "t3100e", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_at_t3100e_init, - .p1_handler = machine_t3100e_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Toshiba T3100e", + .internal_name = "t3100e", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_at_t3100e_init, + .p1_handler = machine_t3100e_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, - .ram = { - .min = 1024, - .max = 5120, + .flags = MACHINE_IDE | MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD, + .ram = { + .min = 1024, + .max = 5120, .step = 256 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_TOSHIBA, - .kbc_p1 = 0x0000bfff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_TOSHIBA, + .kbc_p1 = 0x0000bfff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* AMI BIOS for a chipset-less machine, most likely has AMI 'F' KBC firmware. */ { - .name = "[ISA] Trangg Bow Unknown 286", - .internal_name = "ibmatami", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_tbunk286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Trangg Bow Unknown 286", + .internal_name = "ibmatami", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_tbunk286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 256, - .max = 1024, /* assumed; more can be added via memory expansions */ + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 256, + .max = 1024, /* assumed; more can be added via memory expansions */ .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00003800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00003800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* No proper pictures of the KBC exist, though it seems to have the IBM AT KBC firmware. */ { - .name = "[C&T PC/AT] Dell System 200", - .internal_name = "dells200", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_CT_AT, - .init = machine_at_dells200_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T PC/AT] Dell System 200", + .internal_name = "dells200", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_CT_AT, + .init = machine_at_dells200_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 12000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 12000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 640, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 640, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* has an Award-branded KBC controller */ { - .name = "[C&T PC/AT] Hyundai Super-286C", - .internal_name = "super286c", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_CT_AT, - .init = machine_at_super286c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T PC/AT] Hyundai Super-286C", + .internal_name = "super286c", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_CT_AT, + .init = machine_at_super286c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 1024, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 1024, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AWARD | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AWARD | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* No proper pictures of the KBC exist, though it seems to have the IBM AT KBC firmware. */ { - .name = "[C&T PC/AT] PC's Limited (Dell) 28608L/AT122", - .internal_name = "at122", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_CT_AT, - .init = machine_at_at122_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T PC/AT] PC's Limited (Dell) 28608L/AT122", + .internal_name = "at122", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_CT_AT, + .init = machine_at_at122_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 12000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 12000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 640, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 640, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* No proper pictures of the KBC exist, though it seems to have the IBM AT KBC firmware. */ { - .name = "[C&T PC/AT] Tulip AT Compact", - .internal_name = "tuliptc7", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_CT_AT, - .init = machine_at_tuliptc7_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T PC/AT] Tulip AT Compact", + .internal_name = "tuliptc7", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_CT_AT, + .init = machine_at_tuliptc7_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 12000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 12000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 640, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 640, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Chips & Technologies KBC firmware. */ { - .name = "[C&T PC/AT] Wells American A*Star", - .internal_name = "wellamerastar", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_CT_AT, - .init = machine_at_wellamerastar_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T PC/AT] Wells American A*Star", + .internal_name = "wellamerastar", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_CT_AT, + .init = machine_at_wellamerastar_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 6000000, - .max_bus = 14000000, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 6000000, + .max_bus = 14000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 1024, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 1024, .step = 128 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_CHIPS | 0x0000a600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_CHIPS | 0x0000a600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Quadtel KBC firmware. */ { - .name = "[GC103] Quadtel 286 clone", - .internal_name = "quadt286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_GC103, - .init = machine_at_quadt286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[GC103] Quadtel 286 clone", + .internal_name = "quadt286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_GC103, + .init = machine_at_quadt286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_SOFTFLOAT_ONLY, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_SOFTFLOAT_ONLY, + .ram = { + .min = 512, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_QUADTEL, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_QUADTEL, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI 'B' KBC firmware. */ { - .name = "[GC103] TriGem 286M", - .internal_name = "tg286m", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_GC103, - .init = machine_at_tg286m_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[GC103] TriGem 286M", + .internal_name = "tg286m", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_GC103, + .init = machine_at_tg286m_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004200, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004200, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Phoenix MultiKey/42 KBC firmware. */ { - .name = "[NEAT] Arche AMA-2010", - .internal_name = "px286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_px286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[NEAT] Arche AMA-2010", + .internal_name = "px286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_px286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, + .kbc_device = &kbc_at_device, /* The version number is a guess - we have no probe of this machine's controller. */ - .kbc_params = KBC_VEN_PHOENIX | 0x00010500, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_params = KBC_VEN_PHOENIX | 0x00010500, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Most likely has Chips & Technologies KBC firmware. */ { - .name = "[NEAT] Atari PC 4", - .internal_name = "ataripc4", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_ataripc4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[NEAT] Atari PC 4", + .internal_name = "ataripc4", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_ataripc4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FDC, /* Machine has video: Paradise PVGA1A */ - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_FDC, /* Machine has video: Paradise PVGA1A */ + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_CHIPS | 0x0000a600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_CHIPS | 0x0000a600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is 'H'. */ { - .name = "[NEAT] DataExpert 286", - .internal_name = "ami286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_neat_ami_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[NEAT] DataExpert 286", + .internal_name = "ami286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_neat_ami_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has NCR KBC firmware. */ { - .name = "[NEAT] NCR 3302", - .internal_name = "3302", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_3302_init, - .p1_handler = machine_ncr_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[NEAT] NCR 3302", + .internal_name = "3302", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_3302_init, + .p1_handler = machine_ncr_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 512, - .max = 5120, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 512, + .max = 5120, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_NCR, - .kbc_p1 = 0x000004df, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = ¶dise_pvga1a_ncr3302_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_NCR, + .kbc_p1 = 0x000004df, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = ¶dise_pvga1a_ncr3302_device, + .snd_device = NULL, + .net_device = NULL }, /* Has the VLSI 82C113 with on-chip KBC. */ { - .name = "[SCAMP] Amstrad PC7286", - .internal_name = "pc7286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_VLSI_SCAMP, - .init = machine_at_pc7286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAMP] Amstrad PC7286", + .internal_name = "pc7286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_VLSI_SCAMP, + .init = machine_at_pc7286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has unknown KBC firmware. */ { - .name = "[SCAT] Amstrad PC5286", - .internal_name = "pc5286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_pc5286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Amstrad PC5286", + .internal_name = "pc5286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_pc5286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT | MACHINE_BUS_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &f82c710_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &f82c710_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Chips & Technologies KBC firmware. */ { - .name = "[SCAT] GW-286CT GEAR", - .internal_name = "gw286ct", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_gw286ct_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] GW-286CT GEAR", + .internal_name = "gw286ct", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_gw286ct_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_CHIPS | 0x0000a600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &f82c710_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_CHIPS | 0x0000a600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &f82c710_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware - that's actually a guess since we do not currently have a picture of the motherboard. In the code, we actually give it the AMI PS/2 controller. */ { - .name = "[SCAT] Goldstar GDC-212M", - .internal_name = "gdc212m", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_gdc212m_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Goldstar GDC-212M", + .internal_name = "gdc212m", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_gdc212m_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 4096, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 4096, .step = 512 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[SCAT] Hyundai Solomon 286KP", - .internal_name = "award286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_award286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Hyundai Solomon 286KP", + .internal_name = "award286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_award286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 640, - .max = 8192, + .flags = MACHINE_IDE, + .ram = { + .min = 640, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[SCAT] Hyundai Super-286TR", - .internal_name = "super286tr", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_super286tr_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Hyundai Super-286TR", + .internal_name = "super286tr", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_super286tr_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 640, - .max = 8192, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 640, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[SCAT] ICL DRS M35/286", - .internal_name = "drsm35286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_drsm35286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] ICL DRS M35/286", + .internal_name = "drsm35286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_drsm35286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, /* Machine has Super I/O: C&T F82C711 */ - .ram = { - .min = 512, - .max = 5120, + .flags = MACHINE_IDE | MACHINE_VIDEO, /* Machine has Super I/O: C&T F82C711 */ + .ram = { + .min = 512, + .max = 5120, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5401_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5401_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[SCAT] Samsung Deskmaster 286", - .internal_name = "deskmaster286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_deskmaster286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Samsung Deskmaster 286", + .internal_name = "deskmaster286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_deskmaster286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, /* Has internal video: C&T VGA 411 */ - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_IDE, /* Has internal video: C&T VGA 411 */ + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Samsung (SEC) V1.4 KBC firmware. */ /* TODO: Do kbc_at.c logging to see if the BIOS sends any proprietary commands. */ { - .name = "[SCAT] Samsung SPC-4200P", - .internal_name = "spc4200p", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_spc4200p_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Samsung SPC-4200P", + .internal_name = "spc4200p", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_spc4200p_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, /* Has internal video: C&T VGA 411 */ - .ram = { - .min = 512, - .max = 2048, + .flags = MACHINE_IDE, /* Has internal video: C&T VGA 411 */ + .ram = { + .min = 512, + .max = 2048, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Most likely has a Samsung (SEC) V1.4 KBC firmware like the SPC-4200P above. */ { - .name = "[SCAT] Samsung SPC-4216P", - .internal_name = "spc4216p", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_spc4216p_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Samsung SPC-4216P", + .internal_name = "spc4216p", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_spc4216p_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 5120, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 5120, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Most likely has a Samsung (SEC) V1.4 KBC firmware like the SPC-4200P above. */ { - .name = "[SCAT] Samsung SPC-4620P", - .internal_name = "spc4620p", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_spc4620p_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Samsung SPC-4620P", + .internal_name = "spc4620p", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_spc4620p_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 5120, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 5120, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI '8' KBC firmware. */ { - .name = "[SCAT] Senor Science Co. SCAT-286-003", - .internal_name = "senorscat286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_senor_scat286_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAT] Senor Science Co. SCAT-286-003", + .internal_name = "senorscat286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_senor_scat286_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 512, - .max = 4096, + .flags = MACHINE_IDE, + .ram = { + .min = 512, + .max = 4096, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00003800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00003800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 286 machines that utilize the MCA bus */ /* Has IBM PS/2 Type 2 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 50", - .internal_name = "ibmps2_m50", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_50_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 50", + .internal_name = "ibmps2_m50", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_50_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286 | CPU_PKG_486SLC_IBM, - .block = CPU_BLOCK_NONE, - .min_bus = 10000000, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286 | CPU_PKG_486SLC_IBM, + .block = CPU_BLOCK_NONE, + .min_bus = 10000000, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 10240, + .flags = MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 10240, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM | KBC_FLAG_IS_TYPE2, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ps2_model_50_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM | KBC_FLAG_IS_TYPE2, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ps2_model_50_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 2 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 60", - .internal_name = "ibmps2_m60", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_60_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 60", + .internal_name = "ibmps2_m60", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_60_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286 | CPU_PKG_486SLC_IBM, - .block = CPU_BLOCK_NONE, - .min_bus = 10000000, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_286 | CPU_PKG_486SLC_IBM, + .block = CPU_BLOCK_NONE, + .min_bus = 10000000, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 10240, + .flags = MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 10240, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM | KBC_FLAG_IS_TYPE2, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM | KBC_FLAG_IS_TYPE2, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 386SX machines */ /* ISA slots available because an official IBM expansion for that existed. */ /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[ISA] IBM PS/1 model 2121", - .internal_name = "ibmps1_2121", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps1_m2121_init, - .p1_handler = machine_ps1_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] IBM PS/1 model 2121", + .internal_name = "ibmps1_2121", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps1_m2121_init, + .p1_handler = machine_ps1_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 2048, - .max = 6144, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 2048, + .max = 6144, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has NCR KBC firmware. */ { - .name = "[ISA] NCR PC916SX", - .internal_name = "pc916sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_DISCRETE, /* Machine has chipset: TI TACT82000 */ - .init = machine_at_pc916sx_init, - .p1_handler = machine_ncr_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] NCR PC916SX", + .internal_name = "pc916sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_DISCRETE, /* Machine has chipset: TI TACT82000 */ + .init = machine_at_pc916sx_init, + .p1_handler = machine_ncr_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_NCR, - .kbc_p1 = 0x000004df, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_NCR, + .kbc_p1 = 0x000004df, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Quadtel KBC firmware. */ { - .name = "[ISA] QTC-SXM KT X20T02/HI", - .internal_name = "quadt386sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_DISCRETE, /* Machine has chipset: VLSI TOPCAT */ - .init = machine_at_quadt386sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] QTC-SXM KT X20T02/HI", + .internal_name = "quadt386sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_DISCRETE, /* Machine has chipset: VLSI TOPCAT */ + .init = machine_at_quadt386sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_QUADTEL, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_QUADTEL, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Most likely has Phonenix KBC firmware. */ { - .name = "[ACC 2036] Packard Bell Legend 300SX", - .internal_name = "pbl300sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ACC_2036, - .init = machine_at_pbl300sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ACC 2036] Packard Bell Legend 300SX", + .internal_name = "pbl300sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_ACC_2036, + .init = machine_at_pbl300sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, + .kbc_device = &kbc_at_device, /* The version number is a guess - we have no probe of this machine's controller. */ - .kbc_params = KBC_VEN_PHOENIX | 0x00010500, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &pbl300sx_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &oti037_pbl300sx_device, - .snd_device = NULL, - .net_device = NULL + .kbc_params = KBC_VEN_PHOENIX | 0x00010500, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &pbl300sx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &oti037_pbl300sx_device, + .snd_device = NULL, + .net_device = NULL }, /* Has the AMIKey-2 KBC - that's actually a guess since we do not currently have a picture of the motherboard. */ { - .name = "[ALi M1217] AAEON SBC-350A", - .internal_name = "sbc350a", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M1217, - .init = machine_at_sbc350a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1217] AAEON SBC-350A", + .internal_name = "sbc350a", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_ALI_M1217, + .init = machine_at_sbc350a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a Holtek keyboard controller which clones AMI 'H'. */ { - .name = "[ALi M1217] Acrosser AR-B1374", - .internal_name = "arb1374", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M1217, - .init = machine_at_arb1374_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1217] Acrosser AR-B1374", + .internal_name = "arb1374", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_ALI_M1217, + .init = machine_at_arb1374_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a JetKey KBC without version, which is a clone of AMI '8'. */ { - .name = "[ALi M1217] Chaintech 3xxAX/AXB", - .internal_name = "325ax", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M1217, - .init = machine_at_325ax_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1217] Chaintech 3xxAX/AXB", + .internal_name = "325ax", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_ALI_M1217, + .init = machine_at_325ax_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00003800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &c325ax_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00003800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &c325ax_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[ALi M1217] Flytech A36", - .internal_name = "flytech386", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M1217, - .init = machine_at_flytech386_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1217] Flytech A36", + .internal_name = "flytech386", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_ALI_M1217, + .init = machine_at_flytech386_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &tvga8900d_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &tvga8900d_device, + .snd_device = NULL, + .net_device = NULL }, /* Uses a NEC/Acer 90M002A. This is a strange one - it has command AF but it returns 0x00. */ { - .name = "[ALi M1409] Acer 100T", - .internal_name = "acer100t", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M1409, - .init = machine_at_acer100t_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1409] Acer 100T", + .internal_name = "acer100t", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_ALI_M1409, + .init = machine_at_acer100t_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 16000000, - .max_bus = 25000000, /* Limited to 25 due a inaccurate cpu speed */ + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 16000000, + .max_bus = 25000000, /* Limited to 25 due a inaccurate cpu speed */ .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0, + .min_multi = 0, + .max_multi = 0, }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO , /* Machine has internal OTI 077 Video card*/ - .ram = { - .min = 2048, - .max = 16256, + .flags = MACHINE_IDE | MACHINE_VIDEO , /* Machine has internal OTI 077 Video card*/ + .ram = { + .min = 2048, + .max = 16256, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ACER, - .kbc_p1 = 0x004008f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &oti077_acer100t_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ACER, + .kbc_p1 = 0x004008f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &oti077_acer100t_device, + .snd_device = NULL, + .net_device = NULL }, /* Has an AMI KBC firmware, the only photo of this is too low resolution for me to read what's on the KBC chip, so I'm going to assume AMI 'F' based on the other known HT18 AMI BIOS strings. */ { - .name = "[HT18] Arche AMA-932J", - .internal_name = "ama932j", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_HT18, - .init = machine_at_ama932j_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[HT18] Arche AMA-932J", + .internal_name = "ama932j", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_HT18, + .init = machine_at_ama932j_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &oti067_ama932j_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &oti067_ama932j_device, + .snd_device = NULL, + .net_device = NULL }, /* Most likely has a Phoenix MultiKey/42 keyboard controller. */ { - .name = "[Intel 82335] ADI 386SX", - .internal_name = "adi386sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_INTEL_82335, - .init = machine_at_adi386sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[Intel 82335] ADI 386SX", + .internal_name = "adi386sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_INTEL_82335, + .init = machine_at_adi386sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00010500, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00010500, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an AMI Keyboard BIOS PLUS KBC firmware ('8'). */ - { .name = "[Intel 82335] Shuttle 386SX", - .internal_name = "shuttle386sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_INTEL_82335, - .init = machine_at_shuttle386sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + { .name = "[Intel 82335] Shuttle 386SX", + .internal_name = "shuttle386sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_INTEL_82335, + .init = machine_at_shuttle386sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004400, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004400, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses Commodore (CBM) KBC firmware, to be implemented as identical to the IBM PS/2 Type 1 KBC firmware unless evidence emerges of any proprietary commands. */ { - .name = "[NEAT] Commodore SL386SX-16", - .internal_name = "cmdsl386sx16", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_cmdsl386sx16_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[NEAT] Commodore SL386SX-16", + .internal_name = "cmdsl386sx16", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_cmdsl386sx16_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 8192, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 8192, .step = 512 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[NEAT] DTK PM-1630C", - .internal_name = "dtk386", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_NEAT, - .init = machine_at_neat_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[NEAT] DTK PM-1630C", + .internal_name = "dtk386", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_NEAT, + .init = machine_at_neat_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, - { .name = "[NEATsx] OKI if386AX30L", - .internal_name = "if386sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_NEAT_SX, - .init = machine_at_if386sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + { .name = "[NEATsx] OKI if386AX30L", + .internal_name = "if386sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_NEAT_SX, + .init = machine_at_if386sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_KEYBOARD_JIS | MACHINE_AX, - .ram = { - .min = 1024, - .max = 4096, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_KEYBOARD_JIS | MACHINE_AX, + .ram = { + .min = 1024, + .max = 4096, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, + .kbc_device = &kbc_at_device, /* The version number is a guess - we have no probe of this machine's controller. */ - .kbc_params = KBC_VEN_PHOENIX | 0x00010500, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_params = KBC_VEN_PHOENIX | 0x00010500, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI KBC firmware of uknown revision, maybe '8'. */ { - .name = "[OPTi 283] Silicon Valley Computer SVC386SX/P1", - .internal_name = "svc386sxp1", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_OPTI_283, - .init = machine_at_svc386sxp1_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 283] Silicon Valley Computer SVC386SX/P1", + .internal_name = "svc386sxp1", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_OPTI_283, + .init = machine_at_svc386sxp1_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00003800, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00003800, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[OPTi 291] DTK PPM-3333P", - .internal_name = "awardsx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_OPTI_291, - .init = machine_at_awardsx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 291] DTK PPM-3333P", + .internal_name = "awardsx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_OPTI_291, + .init = machine_at_awardsx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses Commodore (CBM) KBC firmware, to be implemented as identical to the IBM PS/2 Type 1 KBC firmware unless evidence emerges of any proprietary commands. */ { - .name = "[SCAMP] Commodore SL386SX-25", - .internal_name = "cmdsl386sx25", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_VLSI_SCAMP, - .init = machine_at_cmdsl386sx25_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAMP] Commodore SL386SX-25", + .internal_name = "cmdsl386sx25", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_VLSI_SCAMP, + .init = machine_at_cmdsl386sx25_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 8192, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 8192, .step = 512 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, /* The keyboard controller is part of the VL82c113. */ - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5402_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, /* The keyboard controller is part of the VL82c113. */ + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5402_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* The closest BIOS string I find to this one's, differs only in one part, and ends in -8, so I'm going to assume that this, too, has an AMI '8' (AMI Keyboard BIOS Plus) KBC firmware. */ { - .name = "[SCAMP] DataExpert 386SX", - .internal_name = "dataexpert386sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_VLSI_SCAMP, - .init = machine_at_dataexpert386sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAMP] DataExpert 386SX", + .internal_name = "dataexpert386sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_VLSI_SCAMP, + .init = machine_at_dataexpert386sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 10000000, - .max_bus = 25000000, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 10000000, + .max_bus = 25000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004400, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004400, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* No proper pictures of the KBC exist, though it seems to have the IBM AT KBC firmware. */ { - .name = "[SCAMP] Dell System 333s/L", - .internal_name = "dells333sl", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_VLSI_SCAMP, - .init = machine_at_dells333sl_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAMP] Dell System 333s/L", + .internal_name = "dells333sl", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_VLSI_SCAMP, + .init = machine_at_dells333sl_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 10000000, - .max_bus = 33333333, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 10000000, + .max_bus = 33333333, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 16384, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00002020, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &dells333sl_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5420_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00002020, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &dells333sl_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5420_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* The only photo we have is too blurry to read the marking on the the keyboard controller, but it's possibly a Phoenix. */ { - .name = "[SCAMP] Samsung SPC-6033P", - .internal_name = "spc6033p", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_VLSI_SCAMP, - .init = machine_at_spc6033p_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCAMP] Samsung SPC-6033P", + .internal_name = "spc6033p", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_VLSI_SCAMP, + .init = machine_at_spc6033p_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 2048, - .max = 12288, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 2048, + .max = 12288, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, /* Possibly. */ - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &ati28800k_spc6033p_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, /* Possibly. */ + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &ati28800k_spc6033p_device, + .snd_device = NULL, + .net_device = NULL }, /* Has an unknown AMI KBC firmware, I'm going to assume 'F' until a photo or real hardware BIOS string is found. */ { - .name = "[SCATsx] Kaimei KMX-C-02", - .internal_name = "kmxc02", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_SCAT_SX, - .init = machine_at_kmxc02_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SCATsx] Kaimei KMX-C-02", + .internal_name = "kmxc02", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_SCAT_SX, + .init = machine_at_kmxc02_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 512, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 512, + .max = 16384, .step = 512 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, /* Possibly. */ - .kbc_params = KBC_VEN_AMI | 0x00004600, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, /* Possibly. */ + .kbc_params = KBC_VEN_AMI | 0x00004600, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Quadtel KBC firmware. */ { - .name = "[WD76C10] Amstrad MegaPC", - .internal_name = "megapc", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_WD76C10, - .init = machine_at_wd76c10_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[WD76C10] Amstrad MegaPC", + .internal_name = "megapc", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_WD76C10, + .init = machine_at_wd76c10_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 16000000, - .max_bus = 25000000, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 16000000, + .max_bus = 25000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_QUADTEL, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_QUADTEL, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 386SX machines which utilize the MCA bus */ /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 55SX", - .internal_name = "ibmps2_m55sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_55sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 55SX", + .internal_name = "ibmps2_m55sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_55sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 8192, + .flags = MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 8192, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 65SX", - .internal_name = "ibmps2_m65sx", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_65sx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 65SX", + .internal_name = "ibmps2_m65sx", + .type = MACHINE_TYPE_386SX, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_65sx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386SX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386SX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 8192, + .flags = MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 8192, .step = 1024 }, - .nvrmask = 63, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .nvrmask = 63, + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* ALi M6117 machines */ /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[ALi M6117] Acrosser PJ-A511M", - .internal_name = "pja511m", - .type = MACHINE_TYPE_M6117, - .chipset = MACHINE_CHIPSET_ALI_M6117, - .init = machine_at_pja511m_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M6117] Acrosser PJ-A511M", + .internal_name = "pja511m", + .type = MACHINE_TYPE_M6117, + .chipset = MACHINE_CHIPSET_ALI_M6117, + .init = machine_at_pja511m_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_M6117, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_M6117, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[ALi M6117] Protech ProX-1332", - .internal_name = "prox1332", - .type = MACHINE_TYPE_M6117, - .chipset = MACHINE_CHIPSET_ALI_M6117, - .init = machine_at_prox1332_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M6117] Protech ProX-1332", + .internal_name = "prox1332", + .type = MACHINE_TYPE_M6117, + .chipset = MACHINE_CHIPSET_ALI_M6117, + .init = machine_at_prox1332_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_M6117, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_M6117, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 486SLC machines */ /* 486SLC machines with just the ISA slot */ /* Has AMIKey H KBC firmware. */ { - .name = "[OPTi 283] RYC Leopard LX", - .internal_name = "rycleopardlx", - .type = MACHINE_TYPE_486SLC, - .chipset = MACHINE_CHIPSET_OPTI_283, - .init = machine_at_rycleopardlx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 283] RYC Leopard LX", + .internal_name = "rycleopardlx", + .type = MACHINE_TYPE_486SLC, + .chipset = MACHINE_CHIPSET_OPTI_283, + .init = machine_at_rycleopardlx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_486SLC_IBM, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_486SLC_IBM, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 386DX machines */ /* Uses Compaq KBC firmware. */ { - .name = "[ISA] Compaq Deskpro 386", - .internal_name = "deskpro386", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_deskpro386_init, - .p1_handler = machine_compaq_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Compaq Deskpro 386", + .internal_name = "deskpro386", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_deskpro386_init, + .p1_handler = machine_compaq_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX_DESKPRO386, - .block = CPU_BLOCK(CPU_486DLC, CPU_RAPIDCAD), - .min_bus = 16000000, - .max_bus = 25000000, + .cpu = { + .package = CPU_PKG_386DX_DESKPRO386, + .block = CPU_BLOCK(CPU_486DLC, CPU_RAPIDCAD), + .min_bus = 16000000, + .max_bus = 25000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_COMPAQ, - .kbc_p1 = 0x000000f4, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &deskpro386_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_COMPAQ, + .kbc_p1 = 0x000000f4, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &deskpro386_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses Compaq KBC firmware. */ { - .name = "[ISA] Compaq Portable III (386)", - .internal_name = "portableiii386", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_portableiii386_init, - .p1_handler = machine_compaq_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Compaq Portable III (386)", + .internal_name = "portableiii386", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_portableiii386_init, + .p1_handler = machine_compaq_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 20000000, - .max_bus = 20000000, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 20000000, + .max_bus = 20000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_KEYBOARD, - .ram = { - .min = 1024, - .max = 14336, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_KEYBOARD, + .ram = { + .min = 1024, + .max = 14336, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_COMPAQ, - .kbc_p1 = 0x000000f4, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &compaq_plasma_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_COMPAQ, + .kbc_p1 = 0x000000f4, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &compaq_plasma_device, + .snd_device = NULL, + .net_device = NULL }, /* Has Phoenix MultiKey/42 KBC firmware. */ { - .name = "[ISA] Micronics 09-00021 (Tandon BIOS)", - .internal_name = "micronics386", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_micronics386_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Micronics 09-00021 (Tandon BIOS)", + .internal_name = "micronics386", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_micronics386_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_APM, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM AT KBC firmware. */ { - .name = "[ISA] Micronics 09-00021 (Phoenix BIOS)", - .internal_name = "micronics386px", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_DISCRETE, - .init = machine_at_micronics386px_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ISA] Micronics 09-00021 (Phoenix BIOS)", + .internal_name = "micronics386px", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_DISCRETE, + .init = machine_at_micronics386px_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 512, - .max = 8192, + .flags = MACHINE_APM, + .ram = { + .min = 512, + .max = 8192, .step = 128 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Jetkey V3, which we currently lack a probe of, but an old test by Carlos showed it as being 'F'. */ { - .name = "[ACC 2168] Juko AT046DX3", - .internal_name = "acc386", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_ACC_2168, - .init = machine_at_acc386_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ACC 2168] Juko AT046DX3", + .internal_name = "acc386", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_ACC_2168, + .init = machine_at_acc386_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Lance LT38C41 that clones an AMIKEY ('F'). */ { - .name = "[ALi M1429] ECS Panda 386V", - .internal_name = "ecs386v", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_ALI_M1429, - .init = machine_at_ecs386v_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429] ECS Panda 386V", + .internal_name = "ecs386v", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_ALI_M1429, + .init = machine_at_ecs386v_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0, + .min_multi = 0, + .max_multi = 0, }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 32768, .step = 1024, }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, /* TODO: Lance LT38C41. */ - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, /* TODO: Lance LT38C41. */ + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an AMI Keyboard BIOS PLUS KBC firmware ('8'). */ { - .name = "[C&T 386/AT] ECS 386/32", - .internal_name = "ecs386", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_CT_386, - .init = machine_at_ecs386_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T 386/AT] ECS 386/32", + .internal_name = "ecs386", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_CT_386, + .init = machine_at_ecs386_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00003800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00003800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Unknown - we give it an AT Award keyboard controller. */ { - .name = "[C&T 386/AT] Samsung SPC-6000A", - .internal_name = "spc6000a", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_CT_386, - .init = machine_at_spc6000a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T 386/AT] Samsung SPC-6000A", + .internal_name = "spc6000a", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_CT_386, + .init = machine_at_spc6000a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AWARD | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AWARD | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* I found one board picture of it and I can't really read the keyboard controller markings from it, but it may be Phoenix. */ { - .name = "[C&T 386/AT] Tandy 4000", - .internal_name = "tandy4000", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_CT_386, - .init = machine_at_tandy4000_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[C&T 386/AT] Tandy 4000", + .internal_name = "tandy4000", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_CT_386, + .init = machine_at_tandy4000_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey 'F' KBC firmware. */ { - .name = "[OPTi 391] DataExpert 386WB", - .internal_name = "dataexpert386wb", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_OPTI_391, - .init = machine_at_dataexpert386wb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 391] DataExpert 386WB", + .internal_name = "dataexpert386wb", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_OPTI_391, + .init = machine_at_dataexpert386wb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, /* Actual machine only supports 386DXes */ - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, /* Actual machine only supports 386DXes */ + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The board has a "ASII KB-100" which I was not able to find any information about, but the BIOS sends commands C9 without a parameter and D5, both of which are Phoenix MultiKey commands. */ { - .name = "[OPTi 495SLC] U-Board OPTi 495SLC", - .internal_name = "award495", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_OPTI_495SLC, - .init = machine_at_opti495_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 495SLC] U-Board OPTi 495SLC", + .internal_name = "award495", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_OPTI_495SLC, + .init = machine_at_opti495_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, /* Actual machine only supports 386DXes */ - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, /* Actual machine only supports 386DXes */ + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Award KBC firmware. */ { - .name = "[SiS 310] ASUS 386/33-64K", - .internal_name = "asus3863364k", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_SIS_310, - .init = machine_at_asus3863364k_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 310] ASUS 386/33-64K", + .internal_name = "asus3863364k", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_SIS_310, + .init = machine_at_asus3863364k_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AWARD | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AWARD | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey F KBC firmware. */ { - .name = "[SiS 310] ASUS ISA-386C", - .internal_name = "asus386", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_SIS_310, - .init = machine_at_asus386_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 310] ASUS ISA-386C", + .internal_name = "asus386", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_SIS_310, + .init = machine_at_asus386_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 386DX machines which utilize the MCA bus */ /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 80 (type 2)", - .internal_name = "ibmps2_m80", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_80_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 80 (type 2)", + .internal_name = "ibmps2_m80", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_80_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_486BL, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_486BL, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/55 5551-Sxx, Txx stage 2 firmware. */ { - .name = "[MCA] IBM PS/55 model 5550-T", - .internal_name = "ibmps55_m50t", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps55_model_50t_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/55 model 5550-T", + .internal_name = "ibmps55_m50t", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps55_model_50t_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_486BL, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_486BL, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD_JIS | MACHINE_APM, - .ram = { - .min = 2048, - .max = 16384, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD_JIS | MACHINE_APM, + .ram = { + .min = 2048, + .max = 16384, .step = 2048 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/55 5551-V0x, V1x firmware. */ { - .name = "[MCA] IBM PS/55 model 5550-V", - .internal_name = "ibmps55_m50v", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps55_model_50v_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/55 model 5550-V", + .internal_name = "ibmps55_m50v", + .type = MACHINE_TYPE_386DX, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps55_model_50v_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_486BL, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_486BL, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD_JIS | MACHINE_APM, - .ram = { - .min = 4096, - .max = 16384, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD_JIS | MACHINE_APM, + .ram = { + .min = 4096, + .max = 16384, .step = 4096 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 386DX/486 machines */ /* Winbond W83C42 - ASIC that clones AMI 'F'. */ { - .name = "[ALi M1429G] DataExpert EXP4349", - .internal_name = "exp4349", - .type = MACHINE_TYPE_386DX_486, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_exp4349_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] DataExpert EXP4349", + .internal_name = "exp4349", + .type = MACHINE_TYPE_386DX_486, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_exp4349_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey F KBC firmware. The EFAR chipst is a rebrand of OPTi 495SX. */ { - .name = "[OPTi 495SX] CAF Technology C747", - .internal_name = "c747", - .type = MACHINE_TYPE_386DX_486, - .chipset = MACHINE_CHIPSET_OPTI_495SX, - .init = machine_at_c747_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 495SX] CAF Technology C747", + .internal_name = "c747", + .type = MACHINE_TYPE_386DX_486, + .chipset = MACHINE_CHIPSET_OPTI_495SX, + .init = machine_at_c747_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM | MACHINE_IDE, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_APM | MACHINE_IDE, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_SIEMENS, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_SIEMENS, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey 'F' or MR BIOS 'M' KBC firmware, we give it the latter for the sake of keyboard controller diversity. */ { - .name = "[OPTi 495SX] DataExpert SX495", - .internal_name = "ami495", - .type = MACHINE_TYPE_386DX_486, - .chipset = MACHINE_CHIPSET_OPTI_495SX, - .init = machine_at_opti495_ami_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 495SX] DataExpert SX495", + .internal_name = "ami495", + .type = MACHINE_TYPE_386DX_486, + .chipset = MACHINE_CHIPSET_OPTI_495SX, + .init = machine_at_opti495_ami_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004d00, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &opti495_ami_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004d00, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &opti495_ami_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 70 (type 3)", - .internal_name = "ibmps2_m70_type3", - .type = MACHINE_TYPE_386DX_486, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_70_type3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 70 (type 3)", + .internal_name = "ibmps2_m70_type3", + .type = MACHINE_TYPE_386DX_486, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_70_type3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_486BL | CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_486BL | CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 2048, - .max = 65536, + .flags = MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 2048, + .max = 65536, .step = 2048 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 80 (type 3)", - .internal_name = "ibmps2_m80_type3", - .type = MACHINE_TYPE_386DX_486, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_80_axx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 80 (type 3)", + .internal_name = "ibmps2_m80_type3", + .type = MACHINE_TYPE_386DX_486, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_80_axx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_486BL | CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_486BL | CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 2048, - .max = 65536, + .flags = MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 2048, + .max = 65536, .step = 2048 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 486 machines - Socket 1 */ /* Has JetKey V5 KBC Firmware - we now have a photo of the board and its POST screen, so we can match JetKey V5 to 'F'. */ { - .name = "[CS4031] AMI 486 CS4031", - .internal_name = "cs4031", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_CT_CS4031, - .init = machine_at_cs4031_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[CS4031] AMI 486 CS4031", + .internal_name = "cs4031", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_CT_CS4031, + .init = machine_at_cs4031_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI KF KBC firmware. */ { - .name = "[OPTi 381] Gigabyte GA-486L", - .internal_name = "ga486l", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_OPTI_381, - .init = machine_at_ga486l_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 381] Gigabyte GA-486L", + .internal_name = "ga486l", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_OPTI_381, + .init = machine_at_ga486l_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses the AMIKey 'F' keyboard controller firmware. */ { - .name = "[OPTi 493] Silicon Valley Computer 486WB", - .internal_name = "svc486wb", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_OPTI_493, - .init = machine_at_svc486wb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 493] Silicon Valley Computer 486WB", + .internal_name = "svc486wb", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_OPTI_493, + .init = machine_at_svc486wb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 20000000, - .max_bus = 33333333, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 20000000, + .max_bus = 33333333, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 2.0 + .min_multi = 0, + .max_multi = 2.0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses some variant of Phoenix MultiKey/42 as the Intel 8242 chip has a Phoenix copyright. */ { - .name = "[OPTi 498] Mylex MVI486", - .internal_name = "mvi486", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_OPTI_498, - .init = machine_at_mvi486_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 498] Mylex MVI486", + .internal_name = "mvi486", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_OPTI_498, + .init = machine_at_mvi486_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI KF KBC firmware. */ { - .name = "[SiS 401] ASUS ISA-486", - .internal_name = "isa486", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_SIS_401, - .init = machine_at_isa486_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 401] ASUS ISA-486", + .internal_name = "isa486", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_SIS_401, + .init = machine_at_isa486_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware, per the screenshot in "How computers & MS-DOS work". Also seen with an AMI 'F'. */ { - .name = "[SiS 401] Chaintech 4xxSX/SC", - .internal_name = "sis401", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_SIS_401, - .init = machine_at_sis401_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 401] Chaintech 4xxSX/SC", + .internal_name = "sis401", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_SIS_401, + .init = machine_at_sis401_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Seen with both AMIKey F and AMIKey-2 H KBC firmwares. */ { - .name = "[SiS 460] ABIT AB-AV4", - .internal_name = "av4", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_SIS_460, - .init = machine_at_av4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 460] ABIT AB-AV4", + .internal_name = "av4", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_SIS_460, + .init = machine_at_av4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Phoenix KBC firmware. */ { - .name = "[SiS 471] AST Advantage! 40xxd", - .internal_name = "advantage40xxd", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_advantage40xxd_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] AST Advantage! 40xxd", + .internal_name = "advantage40xxd", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_advantage40xxd_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 2 + .min_multi = 0, + .max_multi = 2 }, .bus_flags = MACHINE_PS2_VLB, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 4096, - .max = 36864, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 4096, + .max = 36864, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5424_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5424_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey F KBC firmware. */ { - .name = "[Symphony SL42C460] DTK PKM-0031Y", - .internal_name = "dtk461", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_SYMPHONY_SL82C460, - .init = machine_at_dtk461_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[Symphony SL42C460] DTK PKM-0031Y", + .internal_name = "dtk461", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_SYMPHONY_SL82C460, + .init = machine_at_dtk461_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The chip is a Lance LT38C41, a clone of the Intel 8041, and the BIOS sends commands BC, BD, and C9 which exist on both AMIKey and Phoenix MultiKey/42, @@ -7567,1555 +7567,1555 @@ const machine_t machines[] = { this must have some form of AMIKey. This is also seen with a genuine AMI 'F' (one of the photos on TheRetroWeb). */ { - .name = "[VIA VT82C495] FIC 486-VC-HD", - .internal_name = "486vchd", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_VIA_VT82C495, - .init = machine_at_486vchd_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA VT82C495] FIC 486-VC-HD", + .internal_name = "486vchd", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_VIA_VT82C495, + .init = machine_at_486vchd_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 64512, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 64512, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VLSI VL82C113A SCAMP Combination I/O which holds the KBC. */ { - .name = "[VLSI 82C480] HP Vectra 486VL", - .internal_name = "vect486vl", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_VLSI_VL82C480, - .init = machine_at_vect486vl_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI 82C480] HP Vectra 486VL", + .internal_name = "vect486vl", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_VLSI_VL82C480, + .init = machine_at_vect486vl_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 2048, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 2048, + .max = 32768, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, /* The keyboard controller is part of the VL82c113. */ - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, /*Has SIO (sorta): VLSI VL82C113A SCAMP Combination I/O*/ - .vid_device = &gd5428_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, /* The keyboard controller is part of the VL82c113. */ + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, /*Has SIO (sorta): VLSI VL82C113A SCAMP Combination I/O*/ + .vid_device = &gd5428_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a standard IBM PS/2 KBC firmware or a clone thereof. */ { - .name = "[VLSI 82C481] Siemens Nixdorf D824", - .internal_name = "d824", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_VLSI_VL82C481, - .init = machine_at_d824_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI 82C481] Siemens Nixdorf D824", + .internal_name = "d824", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_VLSI_VL82C481, + .init = machine_at_d824_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 2048, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 2048, + .max = 32768, .step = 2048 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5428_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5428_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a VLSI VL82C113A SCAMP Combination I/O which holds the KBC. */ { - .name = "[VLSI 82C486] Olivetti PCS 44/C", - .internal_name = "pcs44c", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_VLSI_VL82C486, - .init = machine_at_pcs44c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI 82C486] Olivetti PCS 44/C", + .internal_name = "pcs44c", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_VLSI_VL82C486, + .init = machine_at_pcs44c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 20480, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 20480, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &oti077_pcs44c_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &oti077_pcs44c_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a VLSI VL82C113A SCAMP Combination I/O which holds the KBC. */ { - .name = "[VLSI 82C486] Tulip 486 DC/DT", - .internal_name = "tuliptc38", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_VLSI_VL82C486, - .init = machine_at_tuliptc38_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI 82C486] Tulip 486 DC/DT", + .internal_name = "tuliptc38", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_VLSI_VL82C486, + .init = machine_at_tuliptc38_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 2048, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 2048, + .max = 32768, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, /*Has SIO (sorta): VLSI VL82C113A SCAMP Combination I/O*/ - .vid_device = &gd5426_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, /*Has SIO (sorta): VLSI VL82C113A SCAMP Combination I/O*/ + .vid_device = &gd5426_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has Award KBC firmware. */ { - .name = "[ZyMOS Poach] ASUS ISA-486C", - .internal_name = "isa486c", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_ZYMOS_POACH, - .init = machine_at_isa486c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ZyMOS Poach] ASUS ISA-486C", + .internal_name = "isa486c", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_ZYMOS_POACH, + .init = machine_at_isa486c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AWARD | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AWARD | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI KF KBC firmware. */ { - .name = "[ZyMOS Poach] Genoa Unknown 486", - .internal_name = "genoa486", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_ZYMOS_POACH, - .init = machine_at_genoa486_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ZyMOS Poach] Genoa Unknown 486", + .internal_name = "genoa486", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_ZYMOS_POACH, + .init = machine_at_genoa486_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 16384, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 16384, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[MCA] IBM PS/2 model 70 (type 4)", - .internal_name = "ibmps2_m70_type4", - .type = MACHINE_TYPE_486, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps2_model_70_type4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[MCA] IBM PS/2 model 70 (type 4)", + .internal_name = "ibmps2_m70_type4", + .type = MACHINE_TYPE_486, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps2_model_70_type4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET1, - .block = CPU_BLOCK(CPU_i486SX, CPU_i486SX_SLENH, CPU_Am486SX, CPU_Cx486S), - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET1, + .block = CPU_BLOCK(CPU_i486SX, CPU_i486SX_SLENH, CPU_Am486SX, CPU_Cx486S), + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO | MACHINE_SOFTFLOAT_ONLY, - .ram = { - .min = 2048, - .max = 65536, + .flags = MACHINE_VIDEO | MACHINE_SOFTFLOAT_ONLY, + .ram = { + .min = 2048, + .max = 65536, .step = 2048 }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, + .nvrmask = 63, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 486 machines - Socket 2 */ /* 486 machines with just the ISA slot */ /* Uses some variant of Phoenix MultiKey/42 as the BIOS sends keyboard controller command C7 (OR input byte with received data byte). */ { - .name = "[ACC 2168] Packard Bell PB410A", - .internal_name = "pb410a", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_ACC_2168, - .init = machine_at_pb410a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ACC 2168] Packard Bell PB410A", + .internal_name = "pb410a", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_ACC_2168, + .init = machine_at_pb410a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM | MACHINE_GAMEPORT, - .ram = { - .min = 4096, - .max = 36864, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM | MACHINE_GAMEPORT, + .ram = { + .min = 4096, + .max = 36864, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900 /* Guess. */, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &ht216_32_pb410a_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900 /* Guess. */, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &ht216_32_pb410a_device, + .snd_device = NULL, + .net_device = NULL }, /* Uses an ACER/NEC 90M002A (UPD82C42C, 8042 clone) with unknown firmware (V4.01H). */ { - .name = "[ALi M1429G] Acer A1G", - .internal_name = "acera1g", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_acera1g_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] Acer A1G", + .internal_name = "acera1g", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_acera1g_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 4096, - .max = 36864, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 4096, + .max = 36864, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ACER, - .kbc_p1 = 0x004008f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5428_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ACER, + .kbc_p1 = 0x004008f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5428_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[ALi M1429G] Kaimei SA-486 VL-BUS M.B.", - .internal_name = "win486", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_winbios1429_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] Kaimei SA-486 VL-BUS M.B.", + .internal_name = "win486", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_winbios1429_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has JetKey V5.0 KBC Firmware which clones an AMI 'H'. The board was also seen 2003 with a -F string. */ { - .name = "[ALi M1429] Olystar LIL1429", - .internal_name = "ali1429", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_ALI_M1429, - .init = machine_at_ali1429_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429] Olystar LIL1429", + .internal_name = "ali1429", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_ALI_M1429, + .init = machine_at_ali1429_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI 'H' KBC. */ { - .name = "[i420TX] J-Bond PCI400C-A", - .internal_name = "pci400ca", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_INTEL_420TX, - .init = machine_at_pci400ca_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420TX] J-Bond PCI400C-A", + .internal_name = "pci400ca", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_INTEL_420TX, + .init = machine_at_pci400ca_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_SCSI, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_SCSI, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a standalone AMI Megakey 1993, which is type 'P'. */ { - .name = "[IMS 8848] Tekram G486IP", - .internal_name = "g486ip", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_IMS_8848, - .init = machine_at_g486ip_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[IMS 8848] Tekram G486IP", + .internal_name = "g486ip", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_IMS_8848, + .init = machine_at_g486ip_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey-2 'H' KBC firmware. */ { - .name = "[OPTi 499] Alaris Cobalt LPX", - .internal_name = "cobalt", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_OPTI_499, - .init = machine_at_cobalt_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 499] Alaris Cobalt LPX", + .internal_name = "cobalt", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_OPTI_499, + .init = machine_at_cobalt_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3 | CPU_PKG_486BL, - .block = CPU_BLOCK(CPU_P24T), - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3 | CPU_PKG_486BL, + .block = CPU_BLOCK(CPU_P24T), + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_VLB, - .flags = MACHINE_APM | MACHINE_VIDEO | MACHINE_IDE_DUAL, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM | MACHINE_VIDEO | MACHINE_IDE_DUAL, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5428_vlb_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5428_vlb_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey-2 'H' KBC firmware. */ { - .name = "[OPTi 499] Alaris COUGAR 486BL", - .internal_name = "cougar", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_OPTI_499, - .init = machine_at_cougar_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 499] Alaris COUGAR 486BL", + .internal_name = "cougar", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_OPTI_499, + .init = machine_at_cougar_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3 | CPU_PKG_486BL, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3 | CPU_PKG_486BL, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, /* Machine has IDE with controller: Appian ADI/2 */ - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, /* Machine has IDE with controller: Appian ADI/2 */ + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses an Intel KBC with Phoenix MultiKey KBC firmware. */ { - .name = "[SiS 461] DEC DECpc LPV", - .internal_name = "decpclpv", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_SIS_461, - .init = machine_at_decpclpv_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 461] DEC DECpc LPV", + .internal_name = "decpclpv", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_SIS_461, + .init = machine_at_decpclpv_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_86c805_onboard_vlb_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_86c805_onboard_vlb_device, + .snd_device = NULL, + .net_device = NULL }, /* Uses a ???? KBC. */ { - .name = "[SiS 461] Dell System 4xx/NP", - .internal_name = "dell466np", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_SIS_461, - .init = machine_at_dell466np_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 461] Dell System 4xx/NP", + .internal_name = "dell466np", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_SIS_461, + .init = machine_at_dell466np_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 32768, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 32768, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x00002420, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5428_onboard_vlb_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x00002420, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5428_onboard_vlb_device, + .snd_device = NULL, + .net_device = NULL }, /* The BIOS does not send any non-standard keyboard controller commands and wants a PS/2 mouse, so it's an IBM PS/2 KBC (Type 1) firmware. */ { - .name = "[SiS 461] IBM PS/ValuePoint 433DX/Si", - .internal_name = "valuepoint433", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_SIS_461, - .init = machine_at_valuepoint433_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 461] IBM PS/ValuePoint 433DX/Si", + .internal_name = "valuepoint433", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_SIS_461, + .init = machine_at_valuepoint433_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VLSI VL82C113A SCAMP Combination I/O which holds the KBC. */ { - .name = "[VLSI 82C480] ZEOS Martin", - .internal_name = "martin", - .type = MACHINE_TYPE_486_S2, - .chipset = MACHINE_CHIPSET_VLSI_VL82C480, - .init = machine_at_martin_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI 82C480] ZEOS Martin", + .internal_name = "martin", + .type = MACHINE_TYPE_486_S2, + .chipset = MACHINE_CHIPSET_VLSI_VL82C480, + .init = machine_at_martin_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 2048, - .max = 65536, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 2048, + .max = 65536, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 486 machines - Socket 3 */ /* 486 machines with just the ISA slot */ /* JETKey V5.0 */ { - .name = "[ALi M1429G] A-Trend ATC-1762", - .internal_name = "atc1762", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_atc1762_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] A-Trend ATC-1762", + .internal_name = "atc1762", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_atc1762_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | KBC_FLAG_IS_ASIC | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | KBC_FLAG_IS_ASIC | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[ALi M1429G] ECS AL486", - .internal_name = "ecsal486", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_ecsal486_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] ECS AL486", + .internal_name = "ecsal486", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_ecsal486_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 98304, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 98304, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This uses a VIA VT82C42N KBC, which is a clone of type 'F' with additional commands. It's really an ASIC clone of the Award KBC, which is itself an extended clone of AMI 'F'. */ { - .name = "[ALi M1429G] Lanner Electronics AP-4100AA", - .internal_name = "ap4100aa", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_ap4100aa_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] Lanner Electronics AP-4100AA", + .internal_name = "ap4100aa", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_ap4100aa_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_AT, - .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Fujitsu MBL8042H KBC. */ { - .name = "[Contaq 82C596A] A-Trend 4GPV5", - .internal_name = "4gpv5", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_CONTAQ_82C596, - .init = machine_at_4gpv5_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[Contaq 82C596A] A-Trend 4GPV5", + .internal_name = "4gpv5", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_CONTAQ_82C596, + .init = machine_at_4gpv5_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI MegaKey 'P' KBC firmware. */ { - .name = "[Contaq 82C597] Visionex Green-B", - .internal_name = "greenb", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_CONTAQ_82C597, - .init = machine_at_greenb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[Contaq 82C597] Visionex Green-B", + .internal_name = "greenb", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_CONTAQ_82C597, + .init = machine_at_greenb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Version 1.0 has an AMIKEY-2, version 2.0 has a VIA VT82C42N KBC. */ { - .name = "[OPTi 895] Jetway J-403TG", - .internal_name = "403tg", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_OPTI_895_802G, - .init = machine_at_403tg_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 895] Jetway J-403TG", + .internal_name = "403tg", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_OPTI_895_802G, + .init = machine_at_403tg_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &j403tg_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &j403tg_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Uses an Acer 90M002A. This is a strange one - it has command AF but it returns 0x00. */ { - .name = "[SiS 461] Acer V10", - .internal_name = "acerv10", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_461, - .init = machine_at_acerv10_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 461] Acer V10", + .internal_name = "acerv10", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_461, + .init = machine_at_acerv10_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_VLB, - .flags = MACHINE_IDE | MACHINE_APM, /* Machine has internal SCSI: Adaptec AIC-6360 */ - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE | MACHINE_APM, /* Machine has internal SCSI: Adaptec AIC-6360 */ + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ACER, - .kbc_p1 = 0x004008f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ACER, + .kbc_p1 = 0x004008f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The BIOS string ends in -U, unless command 0xA1 (AMIKey get version) returns an 'F', in which case, it ends in -F, so it has an AMIKey F KBC firmware. The photo of the board shows an AMIKey KBC which is indeed F. */ { - .name = "[SiS 471] ABIT AB-AH4", - .internal_name = "win471", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_win471_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] ABIT AB-AH4", + .internal_name = "win471", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_win471_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey-2 'H' keyboard BIOS. */ { - .name = "[SiS 471] AOpen Vi15G", - .internal_name = "vi15g", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_vi15g_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] AOpen Vi15G", + .internal_name = "vi15g", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_vi15g_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[SiS 471] ASUS VL/I-486SV2GX4", - .internal_name = "vli486sv2g", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_vli486sv2g_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] ASUS VL/I-486SV2GX4", + .internal_name = "vli486sv2g", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_vli486sv2g_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an Intel 82C42PE with Phoenix MultiKey/C42 KBC firmware, copyrighted 1993. */ { - .name = "[SiS 471] DEC Venturis 4xx", - .internal_name = "dvent4xx", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_dvent4xx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] DEC Venturis 4xx", + .internal_name = "dvent4xx", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_dvent4xx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE_DUAL | MACHINE_SUPER_IO | MACHINE_APM | MACHINE_VIDEO, - .ram = { - .min = 4096, - .max = 69632, + .flags = MACHINE_IDE_DUAL | MACHINE_SUPER_IO | MACHINE_APM | MACHINE_VIDEO, + .ram = { + .min = 4096, + .max = 69632, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED, .default_jumpered_ecp_dma = 4, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio32_onboard_vlb_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio32_onboard_vlb_device, + .snd_device = NULL, + .net_device = NULL }, /* Has JetKey v5.0G KBC Firmware which is a clone of AMIKey type F. */ { - .name = "[SiS 471] DTK PKM-0038S E-2", - .internal_name = "dtk486", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_dtk486_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] DTK PKM-0038S E-2", + .internal_name = "dtk486", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_dtk486_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | KBC_FLAG_IS_ASIC | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | KBC_FLAG_IS_ASIC | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Lance LT38C41L with AMIKey F keyboard BIOS. */ { - .name = "[SiS 471] Epox GXA486SG", - .internal_name = "ami471", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_ami471_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] Epox GXA486SG", + .internal_name = "ami471", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_ami471_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | KBC_FLAG_IS_ASIC | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | KBC_FLAG_IS_ASIC | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has MR BIOS V307UT KBC firmware, which, bizarrely enough, is actually a genuine AMI 'H'. */ { - .name = "[SiS 471] SiS VL-BUS 471 REV. A1", - .internal_name = "px471", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_px471_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] SiS VL-BUS 471 REV. A1", + .internal_name = "px471", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_px471_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* TriGem AMIBIOS Pre-Color with TriGem AMI 'Z' keyboard controller */ { - .name = "[SiS 471] TriGem 486G (Olympia-K)", - .internal_name = "tg486g", - .type = MACHINE_TYPE_486_S3, - .chipset = MACHINE_CHIPSET_SIS_471, - .init = machine_at_tg486g_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 471] TriGem 486G (Olympia-K)", + .internal_name = "tg486g", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_tg486g_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_VLB, - .flags = MACHINE_IDE | MACHINE_APM, /* Has internal video: Western Digital WD90C33-ZZ */ - .ram = { - .min = 4096, - .max = 40960, + .flags = MACHINE_IDE | MACHINE_APM, /* Has internal video: Western Digital WD90C33-ZZ */ + .ram = { + .min = 4096, + .max = 40960, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 486 machines - Socket 3 PCI */ @@ -9123,224 +9123,224 @@ const machine_t machines[] = { /* Machine with ALi M1429G chipset and M1435 southbridge */ /* Has an AMIKEY-2 KBC which is type 'H'. */ { - .name = "[ALi M1429G] MSI MS-4134", - .internal_name = "ms4134", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_ms4134_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] MSI MS-4134", + .internal_name = "ms4134", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_ms4134_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCIV, - .flags = MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* TriGem machine with M1429G and PhoenixBIOS */ { - .name = "[ALi M1429G] TriGem 486GP (Talent)", - .internal_name = "tg486gp", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1429G, - .init = machine_at_tg486gp_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1429G] TriGem 486GP (Talent)", + .internal_name = "tg486gp", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_tg486gp_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[ALi M1489] AAEON SBC-490", - .internal_name = "sbc490", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1489, - .init = machine_at_sbc490_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1489] AAEON SBC-490", + .internal_name = "sbc490", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1489, + .init = machine_at_sbc490_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &tgui9440_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &tgui9440_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has the ALi M1487/9's on-chip keyboard controller which clones a standard AT KBC. */ { - .name = "[ALi M1489] ABIT AB-PB4", - .internal_name = "abpb4", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1489, - .init = machine_at_abpb4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1489] ABIT AB-PB4", + .internal_name = "abpb4", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1489, + .init = machine_at_abpb4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, /* Machine has a PISA slot */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ALI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ALI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an ALi M5042 with phoenix firmware like the ESA TF-486. */ { - .name = "[ALi M1489] Acrosser AR-B1476", - .internal_name = "arb1476", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1489, - .init = machine_at_arb1476_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1489] Acrosser AR-B1476", + .internal_name = "arb1476", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1489, + .init = machine_at_arb1476_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, /* Has onboard video: C&T F65545 */ - .ram = { - .min = 8192, - .max = 73728, + .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, /* Has onboard video: C&T F65545 */ + .ram = { + .min = 8192, + .max = 73728, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00014000, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00014000, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the ALi M1487/9's on-chip keyboard controller which clones a standard AT KBC. @@ -9348,91 +9348,91 @@ const machine_t machines[] = { and 0xCB if command 0xA1 returns a letter in the 0x5x or 0x7x ranges, so I'm going to give it an AMI 'U' KBC. */ { - .name = "[ALi M1489] AMI WinBIOS 486 PCI", - .internal_name = "win486pci", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1489, - .init = machine_at_win486pci_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1489] AMI WinBIOS 486 PCI", + .internal_name = "win486pci", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1489, + .init = machine_at_win486pci_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00005500, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00005500, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an ALi M5042 keyboard controller with Phoenix MultiKey/42 v1.40 firmware. */ { - .name = "[ALi M1489] ESA TF-486", - .internal_name = "tf486", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1489, - .init = machine_at_tf486_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1489] ESA TF-486", + .internal_name = "tf486", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1489, + .init = machine_at_tf486_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00014000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00014000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the ALi M1487/9's on-chip keyboard controller which clones a standard AT KBC. @@ -9440,1467 +9440,1467 @@ const machine_t machines[] = { returns (but only if command 0xA1 is instant response), so said ALi keyboard controller likely returns 'E'. */ { - .name = "[ALi M1489] MSI MS-4145", - .internal_name = "ms4145", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_ALI_M1489, - .init = machine_at_ms4145_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi M1489] MSI MS-4145", + .internal_name = "ms4145", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_ALI_M1489, + .init = machine_at_ms4145_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ALI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ALI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[i420EX] Advanced Integration Research 486PI", - .internal_name = "486pi", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420EX, - .init = machine_at_486pi_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420EX] Advanced Integration Research 486PI", + .internal_name = "486pi", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420EX, + .init = machine_at_486pi_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Phoenix Multikey/42 PS/2 KBC, but unknown version */ { - .name = "[i420EX] Anigma BAT4IP3e", - .internal_name = "bat4ip3e", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420EX, - .init = machine_at_bat4ip3e_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420EX] Anigma BAT4IP3e", + .internal_name = "bat4ip3e", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420EX, + .init = machine_at_bat4ip3e_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[i420EX] ASUS PVI-486AP4", - .internal_name = "486ap4", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420EX, - .init = machine_at_486ap4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420EX] ASUS PVI-486AP4", + .internal_name = "486ap4", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420EX, + .init = machine_at_486ap4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the Phoenix MultiKey KBC firmware. */ { - .name = "[i420EX] Intel Classic/PCI ED (Ninja)", - .internal_name = "ninja", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420EX, - .init = machine_at_ninja_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420EX] Intel Classic/PCI ED (Ninja)", + .internal_name = "ninja", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420EX, + .init = machine_at_ninja_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_PS2_KBC | MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED, .default_jumpered_ecp_dma = 4, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* absolutely no KBC info */ { - .name = "[i420EX] ICS SB486P", - .internal_name = "sb486p", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420EX, - .init = machine_at_sb486p_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420EX] ICS SB486P", + .internal_name = "sb486p", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420EX, + .init = machine_at_sb486p_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_SUPER_IO | MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* According to another string seen on the UH19 website, this has AMI 'H' KBC. */ { - .name = "[i420TX] AMI Super Voyager PCI", - .internal_name = "amis76", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420TX, - .init = machine_at_amis76_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420TX] AMI Super Voyager PCI", + .internal_name = "amis76", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420TX, + .init = machine_at_amis76_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey (and an on-board NCR 53C810 PCI SCSI controller), thanks, eBay! The keyboard port is AT. */ { - .name = "[i420TX] ASUS PCI/I-486SP3", - .internal_name = "486sp3", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420TX, - .init = machine_at_486sp3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420TX] ASUS PCI/I-486SP3", + .internal_name = "486sp3", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420TX, + .init = machine_at_486sp3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE | MACHINE_SCSI | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_SCSI | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the Phoenix MultiKey KBC firmware. */ { - .name = "[i420TX] Intel Classic/PCI (Alfredo)", - .internal_name = "alfredo", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420TX, - .init = machine_at_alfredo_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420TX] Intel Classic/PCI (Alfredo)", + .internal_name = "alfredo", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420TX, + .init = machine_at_alfredo_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x00000ce0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x00000ce0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. Also has a SST 29EE010 Flash chip. */ { - .name = "[i420ZX] ASUS PCI/I-486SP3G", - .internal_name = "486sp3g", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420ZX, - .init = machine_at_486sp3g_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420ZX] ASUS PCI/I-486SP3G", + .internal_name = "486sp3g", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420ZX, + .init = machine_at_486sp3g_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_SCSI | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_SCSI | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMI MEGAKey 'P' or 'R' keyboard controller. */ { - .name = "[i420ZX] ICS SB486PV", - .internal_name = "sb486pv", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_INTEL_420ZX, - .init = machine_at_sb486pv_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i420ZX] ICS SB486PV", + .internal_name = "sb486pv", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_INTEL_420ZX, + .init = machine_at_sb486pv_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, /* Has PCI but no user-facing slots. */ .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM | MACHINE_PCI_INTERNAL, - .ram = { - .min = 2048, - .max = 65536, + .flags = MACHINE_PS2_KBC | MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM | MACHINE_PCI_INTERNAL, + .ram = { + .min = 2048, + .max = 65536, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &sb486pv_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5436_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &sb486pv_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5436_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* This most likely has a standalone AMI Megakey 1993, which is type 'P', like the below Tekram board. */ { - .name = "[IMS 8848] J-Bond PCI400C-B", - .internal_name = "pci400cb", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_IMS_8848, - .init = machine_at_pci400cb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[IMS 8848] J-Bond PCI400C-B", + .internal_name = "pci400cb", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_IMS_8848, + .init = machine_at_pci400cb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCIV, - .flags = MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005000, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005000, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[OPTi 802G] IBM PC 330 (type 6573)", - .internal_name = "pc330_6573", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_OPTI_895_802G, - .init = machine_at_pc330_6573_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 802G] IBM PC 330 (type 6573)", + .internal_name = "pc330_6573", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_OPTI_895_802G, + .init = machine_at_pc330_6573_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3_PC330, - .block = CPU_BLOCK_NONE, - .min_bus = 25000000, - .max_bus = 33333333, + .cpu = { + .package = CPU_PKG_SOCKET3_PC330, + .block = CPU_BLOCK_NONE, + .min_bus = 25000000, + .max_bus = 33333333, .min_voltage = 0, .max_voltage = 0, - .min_multi = 2.0, - .max_multi = 3.0 + .min_multi = 2.0, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &pc330_6573_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5430_onboard_vlb_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &pc330_6573_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5430_onboard_vlb_device, + .snd_device = NULL, + .net_device = NULL }, /* has a Phoenix PLCC Multikey copyrighted 1993, version unknown. */ { - .name = "[OPTi 895] Packard Bell PB450", - .internal_name = "pb450", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_OPTI_895_802G, - .init = machine_at_pb450_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 895] Packard Bell PB450", + .internal_name = "pb450", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_OPTI_895_802G, + .init = machine_at_pb450_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &pb450_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5428_vlb_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &pb450_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5428_vlb_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has Acer KBC firmware. */ { - .name = "[SiS 496] Acer P3", - .internal_name = "acerp3", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_acerp3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] Acer P3", + .internal_name = "acerp3", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_acerp3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, + .ram = { + .min = 2048, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ACER | 0x00004200, - .kbc_p1 = 0x004008f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5434_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ACER | 0x00004200, + .kbc_p1 = 0x004008f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5434_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[SiS 496] ASUS PVI-486SP3C", - .internal_name = "486sp3c", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_486sp3c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] ASUS PVI-486SP3C", + .internal_name = "486sp3c", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_486sp3c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 261120, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 261120, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[SiS 496] Lucky Star LS-486E", - .internal_name = "ls486e", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_ls486e_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] Lucky Star LS-486E", + .internal_name = "ls486e", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_ls486e_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[SiS 496] Micronics M4Li", - .internal_name = "m4li", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_m4li_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] Micronics M4Li", + .internal_name = "m4li", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_m4li_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* AMIKEY-2 */ { - .name = "[SiS 496] MSI MS-4144", - .internal_name = "ms4144", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_ms4144_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] MSI MS-4144", + .internal_name = "ms4144", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_ms4144_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 5120, /* Hack: machine seems to break with less than 5 MBs of RAM */ - .max = 131072, + .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 5120, /* Hack: machine seems to break with less than 5 MBs of RAM */ + .max = 131072, .step = 1024 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Revision 1 has a Lance LT38C41L, revision 2 has a Holtek HT6542B. Another variant with a Bestkey KBC might exist as well. */ { - .name = "[SiS 496] Rise Computer R418", - .internal_name = "r418", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_r418_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] Rise Computer R418", + .internal_name = "r418", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_r418_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 261120, + .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 261120, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a Holtek HT6542B KBC and the BIOS does not send a single non-standard KBC command. The Holtek is an ASIC clone of AMI 'H' with a Holtek copyright string. */ { - .name = "[SiS 496] Soyo 4SAW2", - .internal_name = "4saw2", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_4saw2_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] Soyo 4SAW2", + .internal_name = "4saw2", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_4saw2_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK(CPU_i486SX, CPU_i486DX, CPU_Am486SX, CPU_Am486DX), - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK(CPU_i486SX, CPU_i486DX, CPU_Am486SX, CPU_Am486DX), + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 2048, - .max = 261120, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 2048, + .max = 261120, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* According to MrKsoft, his real 4DPS has an AMIKey-2, which is an updated version of type 'H'. There are other variants of the board with Holtek HT6542B KBCs. */ { - .name = "[SiS 496] Zida Tomato 4DP", - .internal_name = "4dps", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_SIS_496, - .init = machine_at_4dps_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 496] Zida Tomato 4DP", + .internal_name = "4dps", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_SIS_496, + .init = machine_at_4dps_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT, - .ram = { - .min = 2048, - .max = 261120, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT, + .ram = { + .min = 2048, + .max = 261120, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the UMC 88xx on-chip KBC. */ { - .name = "[UMC 8881] A-Trend ATC-1415", - .internal_name = "atc1415", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_atc1415_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] A-Trend ATC-1415", + .internal_name = "atc1415", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_atc1415_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, /* UMC UM8886 on-chip KBC. */ - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, /* UMC UM8886 on-chip KBC. */ + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the UMC 88xx on-chip KBC. All the copies of the BIOS string I can find, end in in -H, so the UMC on-chip KBC likely emulates the AMI 'H' KBC firmware. */ { - .name = "[UMC 8881] Biostar MB-84xxUUD-A", - .internal_name = "84xxuuda", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_84xxuuda_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] Biostar MB-84xxUUD-A", + .internal_name = "84xxuuda", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_84xxuuda_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Compaq Presario 7100 / 7200 Series, using MiTAC/Trigon PL4600C (486). */ /* Has a VIA VT82C42N KBC. */ { - .name = "[UMC 8881] Compaq Presario 7100/7200 Series 486", - .internal_name = "pl4600c", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_pl4600c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] Compaq Presario 7100/7200 Series 486", + .internal_name = "pl4600c", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_pl4600c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_APM, - .ram = { - .min = 1024, - .max = 65536, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_APM, + .ram = { + .min = 1024, + .max = 65536, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5430_onboard_pci_device, - .snd_device = &ess_1688_device, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5430_onboard_pci_device, + .snd_device = &ess_1688_device, + .net_device = NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { - .name = "[UMC 8881] ECS Elite UM8810P-AIO", - .internal_name = "ecs486", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_ecs486_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] ECS Elite UM8810P-AIO", + .internal_name = "ecs486", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_ecs486_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_PS2_KBC | MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey Z(!) KBC firmware. */ { - .name = "[UMC 8881] Epson ActionPC 2600", - .internal_name = "actionpc2600", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_actionpc2600_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] Epson ActionPC 2600", + .internal_name = "actionpc2600", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_actionpc2600_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 262144, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &tgui9440_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &tgui9440_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* This has the UMC 88xx on-chip KBC. All the copies of the BIOS string I can find, end in in -H, so the UMC on-chip KBC likely emulates the AMI 'H' KBC firmware. */ { - .name = "[UMC 8881] Epson ActionTower 8400", - .internal_name = "actiontower8400", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_actiontower8400_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] Epson ActionTower 8400", + .internal_name = "actiontower8400", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_actiontower8400_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, - .ram = { - .min = 1024, - .max = 262144, + .flags = MACHINE_SUPER_IO | MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, + .ram = { + .min = 1024, + .max = 262144, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5430_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5430_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* This has the UMC 88xx on-chip KBC. All the copies of the BIOS string I can find, end in in -H, so the UMC on-chip KBC likely emulates the AMI 'H' KBC firmware. */ { - .name = "[UMC 8881] PCChips M919", - .internal_name = "m919", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_m919_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] PCChips M919", + .internal_name = "m919", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_m919_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PCIV, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, /* UMC UM8886 on-chip KBC. */ - .kbc_params = 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, /* UMC UM8886 on-chip KBC. */ + .kbc_params = 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. Uses a mysterious I/O port C05. */ { - .name = "[UMC 8881] Samsung SPC7700P-LW", - .internal_name = "spc7700plw", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_spc7700plw_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] Samsung SPC7700P-LW", + .internal_name = "spc7700plw", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_spc7700plw_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, /* UMC UM8886 on-chip KBC. */ - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, /* UMC UM8886 on-chip KBC. */ + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a Holtek KBC. */ { - .name = "[UMC 8881] Shuttle HOT-433A", - .internal_name = "hot433a", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_UMC_UM8881, - .init = machine_at_hot433a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 8881] Shuttle HOT-433A", + .internal_name = "hot433a", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_UMC_UM8881, + .init = machine_at_hot433a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 262144, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &hot433a_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &hot433a_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C406 KBC+RTC that likely has identical commands to the VT82C42N. */ { - .name = "[VIA VT82C496G] DFI G486VPA", - .internal_name = "g486vpa", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_VIA_VT82C496G, - .init = machine_at_g486vpa_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA VT82C496G] DFI G486VPA", + .internal_name = "g486vpa", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_VIA_VT82C496G, + .init = machine_at_g486vpa_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[VIA VT82C496G] FIC VIP-IO2", - .internal_name = "486vipio2", - .type = MACHINE_TYPE_486_S3_PCI, - .chipset = MACHINE_CHIPSET_VIA_VT82C496G, - .init = machine_at_486vipio2_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA VT82C496G] FIC VIP-IO2", + .internal_name = "486vipio2", + .type = MACHINE_TYPE_486_S3_PCI, + .chipset = MACHINE_CHIPSET_VIA_VT82C496G, + .init = machine_at_486vipio2_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT, - .ram = { - .min = 1024, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT, + .ram = { + .min = 1024, + .max = 131072, .step = 1024 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 486 machines - Miscellaneous */ @@ -10908,319 +10908,319 @@ const machine_t machines[] = { /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[STPC Client] ITOX STAR", - .internal_name = "itoxstar", - .type = MACHINE_TYPE_486_MISC, - .chipset = MACHINE_CHIPSET_STPC_CLIENT, - .init = machine_at_itoxstar_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[STPC Client] ITOX STAR", + .internal_name = "itoxstar", + .type = MACHINE_TYPE_486_MISC, + .chipset = MACHINE_CHIPSET_STPC_CLIENT, + .init = machine_at_itoxstar_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_STPC, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_STPC, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 75000000, .min_voltage = 0, .max_voltage = 0, - .min_multi = 1.0, - .max_multi = 1.0 + .min_multi = 1.0, + .max_multi = 1.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, /* Machine has internal video: ST STPC Atlas */ - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, /* Machine has internal video: ST STPC Atlas */ + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[STPC Consumer-II] Acrosser AR-B1423C", - .internal_name = "arb1423c", - .type = MACHINE_TYPE_486_MISC, - .chipset = MACHINE_CHIPSET_STPC_CONSUMER_II, - .init = machine_at_arb1423c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[STPC Consumer-II] Acrosser AR-B1423C", + .internal_name = "arb1423c", + .type = MACHINE_TYPE_486_MISC, + .chipset = MACHINE_CHIPSET_STPC_CONSUMER_II, + .init = machine_at_arb1423c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_STPC, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_STPC, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 0, .max_voltage = 0, - .min_multi = 2.0, - .max_multi = 2.0 + .min_multi = 2.0, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: ST STPC Atlas */ - .ram = { - .min = 32768, - .max = 163840, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: ST STPC Atlas */ + .ram = { + .min = 32768, + .max = 163840, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[STPC Consumer-II] Acrosser AR-B1479", - .internal_name = "arb1479", - .type = MACHINE_TYPE_486_MISC, - .chipset = MACHINE_CHIPSET_STPC_CONSUMER_II, - .init = machine_at_arb1479_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[STPC Consumer-II] Acrosser AR-B1479", + .internal_name = "arb1479", + .type = MACHINE_TYPE_486_MISC, + .chipset = MACHINE_CHIPSET_STPC_CONSUMER_II, + .init = machine_at_arb1479_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_STPC, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_STPC, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 0, .max_voltage = 0, - .min_multi = 2.0, - .max_multi = 2.0 + .min_multi = 2.0, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL | MACHINE_USB, /* Machine has internal video: ST STPC Atlas */ - .ram = { - .min = 32768, - .max = 163840, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL | MACHINE_USB, /* Machine has internal video: ST STPC Atlas */ + .ram = { + .min = 32768, + .max = 163840, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[STPC Consumer-II] Lanner Electronics IAC-H488", - .internal_name = "iach488", - .type = MACHINE_TYPE_486_MISC, - .chipset = MACHINE_CHIPSET_STPC_CONSUMER_II, - .init = machine_at_iach488_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[STPC Consumer-II] Lanner Electronics IAC-H488", + .internal_name = "iach488", + .type = MACHINE_TYPE_486_MISC, + .chipset = MACHINE_CHIPSET_STPC_CONSUMER_II, + .init = machine_at_iach488_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_STPC, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_STPC, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 0, .max_voltage = 0, - .min_multi = 2.0, - .max_multi = 2.0 + .min_multi = 2.0, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: ST STPC Atlas and NIC: Realtek RTL8139C+ */ - .ram = { - .min = 32768, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: ST STPC Atlas and NIC: Realtek RTL8139C+ */ + .ram = { + .min = 32768, + .max = 131072, .step = 32768 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[STPC Elite] Advantech PCM-9340", - .internal_name = "pcm9340", - .type = MACHINE_TYPE_486_MISC, - .chipset = MACHINE_CHIPSET_STPC_ELITE, - .init = machine_at_pcm9340_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[STPC Elite] Advantech PCM-9340", + .internal_name = "pcm9340", + .type = MACHINE_TYPE_486_MISC, + .chipset = MACHINE_CHIPSET_STPC_ELITE, + .init = machine_at_pcm9340_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_STPC, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_STPC, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 0, .max_voltage = 0, - .min_multi = 2.0, - .max_multi = 2.0 + .min_multi = 2.0, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: SMI LynxEM+ 712 */ - .ram = { - .min = 32768, - .max = 98304, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: SMI LynxEM+ 712 */ + .ram = { + .min = 32768, + .max = 98304, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[STPC Atlas] AAEON PCM-5330", - .internal_name = "pcm5330", - .type = MACHINE_TYPE_486_MISC, - .chipset = MACHINE_CHIPSET_STPC_ATLAS, - .init = machine_at_pcm5330_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[STPC Atlas] AAEON PCM-5330", + .internal_name = "pcm5330", + .type = MACHINE_TYPE_486_MISC, + .chipset = MACHINE_CHIPSET_STPC_ATLAS, + .init = machine_at_pcm5330_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_STPC, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_STPC, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 0, .max_voltage = 0, - .min_multi = 2.0, - .max_multi = 2.0 + .min_multi = 2.0, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: ST STPC Atlas */ - .ram = { - .min = 32768, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_PCI_INTERNAL, /* Machine has internal video: ST STPC Atlas */ + .ram = { + .min = 32768, + .max = 131072, .step = 32768 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Socket 4 machines */ /* 430LX */ /* Hacer Acer 90M002A V4.10H KBC. */ { - .name = "[i430LX] Acer V12P", - .internal_name = "v12p", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_v12p_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] Acer V12P", + .internal_name = "v12p", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_v12p_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 2048, - .max = 196608, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 2048, + .max = 196608, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ACER | 0x00000000, - .kbc_p1 = 0x004008f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &v12p_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ACER | 0x00000000, + .kbc_p1 = 0x004008f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &v12p_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware (AMIKey-2), per POST screen with BIOS string shown in the manual. Has PS/2 mouse support with serial-style (DB9) @@ -11228,399 +11228,399 @@ const machine_t machines[] = { The boot block for BIOS recovery requires an unknown bit on port 805h to be clear. */ { - .name = "[i430LX] AMI Excalibur PCI Pentium", - .internal_name = "excaliburpci", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_excaliburpci_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] AMI Excalibur PCI Pentium", + .internal_name = "excaliburpci", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_excaliburpci_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_APM, /* Machine has internal SCSI */ - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM, /* Machine has internal SCSI */ + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey F KBC firmware (AMIKey). */ { - .name = "[i430LX] ASUS P/I-P5MP3", - .internal_name = "p5mp3", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_p5mp3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] ASUS P/I-P5MP3", + .internal_name = "p5mp3", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_p5mp3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_APM, - .ram = { - .min = 2048, - .max = 196608, + .flags = MACHINE_PS2_KBC | MACHINE_APM, + .ram = { + .min = 2048, + .max = 196608, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[i430LX] Dell OptiPlex 560/L", - .internal_name = "opti560l", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_opti560l_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] Dell OptiPlex 560/L", + .internal_name = "opti560l", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_opti560l_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI MegaKey 'H' KBC firmware. */ { - .name = "[i430LX] Gigabyte GA-586IS", - .internal_name = "586is", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_586is_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] Gigabyte GA-586IS", + .internal_name = "586is", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_586is_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[i430LX] IBM PS/ValuePoint P60", - .internal_name = "valuepointp60", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_valuepointp60_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] IBM PS/ValuePoint P60", + .internal_name = "valuepointp60", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_valuepointp60_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_VIDEO_8514A | MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_VIDEO_8514A | MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &mach32_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &mach32_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* This has the Phoenix MultiKey KBC firmware. */ { - .name = "[i430LX] Intel Premiere/PCI (Batman)", - .internal_name = "batman", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_batman_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] Intel Premiere/PCI (Batman)", + .internal_name = "batman", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_batman_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, - .kbc_p1 = 0x00001030, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &batman_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, + .kbc_p1 = 0x00001030, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &batman_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the Phoenix MultiKey KBC firmware. */ { - .name = "[i430LX] Intel Premiere/PCI (Batman's Revenge)", - .internal_name = "revenge", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_revenge_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] Intel Premiere/PCI (Batman's Revenge)", + .internal_name = "revenge", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_revenge_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The M5Pi appears to have a Phoenix MultiKey KBC firmware according to photos. */ { - .name = "[i430LX] Micronics M5Pi", - .internal_name = "m5pi", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_m5pi_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] Micronics M5Pi", + .internal_name = "m5pi", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_m5pi_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the Phoenix MultiKey KBC firmware. */ { - .name = "[i430LX] Packard Bell PB520R", - .internal_name = "pb520r", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_INTEL_430LX, - .init = machine_at_pb520r_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430LX] Packard Bell PB520R", + .internal_name = "pb520r", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_INTEL_430LX, + .init = machine_at_pb520r_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 139264, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 139264, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5434_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5434_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* OPTi 596/597 */ @@ -11628,1332 +11628,1332 @@ const machine_t machines[] = { PS/2 "Load Security" meaning), most likely MegaKey as it sends command AF (Set Extended Controller RAM) just like the later Intel AMI BIOS'es. */ { - .name = "[OPTi 597] AMI Excalibur VLB", - .internal_name = "excalibur", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_OPTI_547_597, - .init = machine_at_excalibur_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 597] AMI Excalibur VLB", + .internal_name = "excalibur", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_OPTI_547_597, + .init = machine_at_excalibur_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 60000000, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 60000000, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_VLB, - .flags = MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 2048, - .max = 65536, + .flags = MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 2048, + .max = 65536, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005000, /* Guess. */ - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005000, /* Guess. */ + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* OPTi 596/597/822 */ /* Has a VIA VT82C42N KBC with AMI 'F' firmware */ { - .name = "[OPTi 597] AT&T Globalyst 330 (Pentium)", - .internal_name = "globalyst330_p5", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_OPTI_547_597, - .init = machine_at_globalyst330_p5_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 597] AT&T Globalyst 330 (Pentium)", + .internal_name = "globalyst330_p5", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_OPTI_547_597, + .init = machine_at_globalyst330_p5_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PCIV, - .flags = MACHINE_APM, - .ram = { - .min = 8192, - .max = 65536, + .flags = MACHINE_APM, + .ram = { + .min = 8192, + .max = 65536, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has AMIKey 'F' KBC firmware. */ { - .name = "[OPTi 597] Supermicro P5VL-PCI", - .internal_name = "p5vl", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_OPTI_547_597, - .init = machine_at_p5vl_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 597] Supermicro P5VL-PCI", + .internal_name = "p5vl", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_OPTI_547_597, + .init = machine_at_p5vl_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PCIV, - .flags = MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS 50x */ /* This has some form of AMI MegaKey as it uses keyboard controller command 0xCC. */ { - .name = "[SiS 501] AMI Excalibur PCI-II Pentium ISA", - .internal_name = "excaliburpci2", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_SIS_501, - .init = machine_at_excaliburpci2_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 501] AMI Excalibur PCI-II Pentium ISA", + .internal_name = "excaliburpci2", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_SIS_501, + .init = machine_at_excaliburpci2_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[SiS 501] ASUS PCI/I-P5SP4", - .internal_name = "p5sp4", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_SIS_501, - .init = machine_at_p5sp4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 501] ASUS PCI/I-P5SP4", + .internal_name = "p5sp4", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_SIS_501, + .init = machine_at_p5sp4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[SiS 501] ECS SI5PI AIO", - .internal_name = "ecs50x", - .type = MACHINE_TYPE_SOCKET4, - .chipset = MACHINE_CHIPSET_SIS_501, - .init = machine_at_ecs50x_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 501] ECS SI5PI AIO", + .internal_name = "ecs50x", + .type = MACHINE_TYPE_SOCKET4, + .chipset = MACHINE_CHIPSET_SIS_501, + .init = machine_at_ecs50x_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 5000, .max_voltage = 5000, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Socket 4/5 machines */ /* OPTi 596/597 */ /* This has AMIKey-2 'H' KBC firmware. */ { - .name = "[OPTi 597] Taken PCI560-01", - .internal_name = "pci56001", - .type = MACHINE_TYPE_SOCKET4_5, - .chipset = MACHINE_CHIPSET_OPTI_547_597, - .init = machine_at_pci56001_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 597] Taken PCI560-01", + .internal_name = "pci56001", + .type = MACHINE_TYPE_SOCKET4_5, + .chipset = MACHINE_CHIPSET_OPTI_547_597, + .init = machine_at_pci56001_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4 | CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4 | CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 5000, - .min_multi = 1.0, - .max_multi = 1.5 + .min_multi = 1.0, + .max_multi = 1.5 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* VLSI SuperCore */ /* This has Phoenix KBC firmware. */ { - .name = "[VLSI SuperCore] DEC Celebris 5xx", - .internal_name = "celebris5xx", - .type = MACHINE_TYPE_SOCKET4_5, - .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, - .init = machine_at_celebris5xx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI SuperCore] DEC Celebris 5xx", + .internal_name = "celebris5xx", + .type = MACHINE_TYPE_SOCKET4_5, + .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, + .init = machine_at_celebris5xx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET4 | CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET4 | CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 5000, - .min_multi = 1.0, - .max_multi = 2.0 + .min_multi = 1.0, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_vision864_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_vision864_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Socket 5 machines */ /* 430NX */ /* Has AMI 'H' KBC firmware. */ { - .name = "[i430NX] ASUS PCI/I-P54NP4", - .internal_name = "p54np4", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430NX, - .init = machine_at_p54np4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430NX] ASUS PCI/I-P54NP4", + .internal_name = "p54np4", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430NX, + .init = machine_at_p54np4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE /*| MACHINE_SCSI */ | MACHINE_APM, - .ram = { - .min = 2048, - .max = 524288, + .flags = MACHINE_IDE /*| MACHINE_SCSI */ | MACHINE_APM, + .ram = { + .min = 2048, + .max = 524288, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI 'H' KBC firmware. */ { - .name = "[i430NX] Gigabyte GA-586IP", - .internal_name = "586ip", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430NX, - .init = machine_at_586ip_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430NX] Gigabyte GA-586IP", + .internal_name = "586ip", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430NX, + .init = machine_at_586ip_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_APM, - .ram = { - .min = 2048, - .max = 262144, + .flags = MACHINE_APM, + .ram = { + .min = 2048, + .max = 262144, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the Phoenix MultiKey KBC firmware. */ { - .name = "[i430NX] Intel Premiere/PCI II (Plato)", - .internal_name = "plato", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430NX, - .init = machine_at_plato_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430NX] Intel Premiere/PCI II (Plato)", + .internal_name = "plato", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430NX, + .init = machine_at_plato_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, - .kbc_p1 = 0x00001030, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &plato_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, + .kbc_p1 = 0x00001030, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &plato_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has unknown KBC firmware. */ { - .name = "[i430NX] Siemens-Nixdorf D842", - .internal_name = "d842", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430NX, - .init = machine_at_d842_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430NX] Siemens-Nixdorf D842", + .internal_name = "d842", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430NX, + .init = machine_at_d842_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, /* Machine has onboard video: TLI ET4000/w32p */ - .ram = { - .min = 2048, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, /* Machine has onboard video: TLI ET4000/w32p */ + .ram = { + .min = 2048, + .max = 131072, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &d842_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &d842_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMI MegaKey KBC firmware. */ { - .name = "[i430NX] Teknor TEK-932", - .internal_name = "tek932", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430NX, - .init = machine_at_tek932_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430NX] Teknor TEK-932", + .internal_name = "tek932", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430NX, + .init = machine_at_tek932_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_PS2_KBC | MACHINE_IDE | MACHINE_APM, - .ram = { - .min = 2048, - .max = 262144, + .flags = MACHINE_PS2_KBC | MACHINE_IDE | MACHINE_APM, + .ram = { + .min = 2048, + .max = 262144, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 430FX */ /* Uses an ACER/NEC 90M002A (UPD82C42C, 8042 clone) with unknown firmware (V5.0). */ { - .name = "[i430FX] Acer V30", - .internal_name = "acerv30", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_acerv30_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] Acer V30", + .internal_name = "acerv30", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_acerv30_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_ACER | 0x00000000, - .kbc_p1 = 0x004008f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_ACER | 0x00000000, + .kbc_p1 = 0x004008f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey F KBC firmware. */ { - .name = "[i430FX] AMI Apollo", - .internal_name = "apollo", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_apollo_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] AMI Apollo", + .internal_name = "apollo", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_apollo_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has Dell KBC firmware. */ { - .name = "[i430FX] Dell OptiPlex GXL/GXM", - .internal_name = "optiplexgxl", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_optiplexgxl_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] Dell OptiPlex GXL/GXM", + .internal_name = "optiplexgxl", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_optiplexgxl_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86), - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86), + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_APM, /* Video: S3 Trio64V+ (86C765), Sound: Creative ViBRA 16S (CT2504), Network: 3Com ETHERLINK III (3C509B) */ - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_APM, /* Video: S3 Trio64V+ (86C765), Sound: Creative ViBRA 16S (CT2504), Network: 3Com ETHERLINK III (3C509B) */ + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64vplus_onboard_pci_device, - .snd_device = &sb_vibra16s_onboard_device, - .net_device = NULL /* not yet emulated */ + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64vplus_onboard_pci_device, + .snd_device = &sb_vibra16s_onboard_device, + .net_device = NULL /* not yet emulated */ }, /* KBC On-Chip the VT82C406MV. */ { - .name = "[i430FX] FIC PT-2000", - .internal_name = "pt2000", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_pt2000_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] FIC PT-2000", + .internal_name = "pt2000", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_pt2000_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i430FX] Intel Advanced/ZP (Zappa)", - .internal_name = "zappa", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_zappa_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] Intel Advanced/ZP (Zappa)", + .internal_name = "zappa", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_zappa_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The BIOS sends KBC command B3 which indicates an AMI (or VIA VT82C42N) KBC. */ { - .name = "[i430FX] NEC PowerMate Vxxx", - .internal_name = "powermatev", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_powermatev_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] NEC PowerMate Vxxx", + .internal_name = "powermatev", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_powermatev_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey Z(!) KBC firmware. */ { - .name = "[i430FX] TriGem Hawk", - .internal_name = "hawk", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_hawk_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] TriGem Hawk", + .internal_name = "hawk", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_hawk_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI_TRIGEM | KBC_FLAG_IS_GREEN | 0x00005a00, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI_TRIGEM | KBC_FLAG_IS_GREEN | 0x00005a00, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* OPTi 596/597 */ /* Has unknown KBC firmware. */ { - .name = "[OPTi 597] Northgate Computer Systems Elegance Pentium 90", - .internal_name = "ncselp90", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_OPTI_547_597, - .init = machine_at_ncselp90_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 597] Northgate Computer Systems Elegance Pentium 90", + .internal_name = "ncselp90", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_OPTI_547_597, + .init = machine_at_ncselp90_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCIV, - .flags = MACHINE_APM | MACHINE_IDE_DUAL | MACHINE_SUPER_IO, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_APM | MACHINE_IDE_DUAL | MACHINE_SUPER_IO, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004d00, /* Guess */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004d00, /* Guess */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has unknown KBC firmware. */ { - .name = "[OPTi 597] Shuttle HOT-543", - .internal_name = "hot543", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_OPTI_547_597, - .init = machine_at_hot543_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 597] Shuttle HOT-543", + .internal_name = "hot543", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_OPTI_547_597, + .init = machine_at_hot543_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PCIV, - .flags = MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This uses an AMI KBC firmware in PS/2 mode (it sends command A5 with the PS/2 "Load Security" meaning), most likely MegaKey as it sends command AF (Set Extended Controller RAM) just like the later Intel AMI BIOS'es. */ { - .name = "[OPTi 597] TMC PAT54PV", - .internal_name = "pat54pv", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_OPTI_547_597, - .init = machine_at_pat54pv_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[OPTi 597] TMC PAT54PV", + .internal_name = "pat54pv", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_OPTI_547_597, + .init = machine_at_pat54pv_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_PS2_KBC | MACHINE_APM, - .ram = { - .min = 2048, - .max = 65536, + .flags = MACHINE_PS2_KBC | MACHINE_APM, + .ram = { + .min = 2048, + .max = 65536, .step = 2048 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005000, /* Guess. */ - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005000, /* Guess. */ + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS 85C50x */ /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[SiS 501] ASUS PCI/I-P54SP4", - .internal_name = "p54sp4", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_SIS_501, - .init = machine_at_p54sp4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 501] ASUS PCI/I-P54SP4", + .internal_name = "p54sp4", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_SIS_501, + .init = machine_at_p54sp4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86), - .min_bus = 40000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86), + .min_bus = 40000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[SiS 501] BCM SQ-588", - .internal_name = "sq588", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_SIS_501, - .init = machine_at_sq588_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 501] BCM SQ-588", + .internal_name = "sq588", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_SIS_501, + .init = machine_at_sq588_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_PENTIUMMMX), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_PENTIUMMMX), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This machine has a Winbond W83C842 KBC */ { - .name = "[SiS 501] Gemlight GMB-P54SPS", - .internal_name = "p54sps", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_SIS_501, - .init = machine_at_p54sps_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 501] Gemlight GMB-P54SPS", + .internal_name = "p54sps", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_SIS_501, + .init = machine_at_p54sps_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, + .cpu = { + .package = CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_PENTIUMMMX), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess. */ + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[SiS 5501] MSI MS-5109", - .internal_name = "ms5109", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_SIS_5501, - .init = machine_at_ms5109_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5501] MSI MS-5109", + .internal_name = "ms5109", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_SIS_5501, + .init = machine_at_ms5109_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, + .cpu = { + .package = CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_PENTIUMMMX), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey Z(!) KBC firmware. */ { - .name = "[SiS 5501] Olivetti (TriGem) Torino", - .internal_name = "torino", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_SIS_5501, - .init = machine_at_torino_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5501] Olivetti (TriGem) Torino", + .internal_name = "torino", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_SIS_5501, + .init = machine_at_torino_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, + .cpu = { + .package = CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_PENTIUMMMX), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 1.5 + .min_multi = 1.5, + .max_multi = 1.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI_TRIGEM | KBC_FLAG_IS_GREEN | 0x00005a00, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &tgui9660_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI_TRIGEM | KBC_FLAG_IS_GREEN | 0x00005a00, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &tgui9660_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* UMC 889x */ /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[UMC 889x] Shuttle HOT-539", - .internal_name = "hot539", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_UMC_UM8890BF, - .init = machine_at_hot539_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[UMC 889x] Shuttle HOT-539", + .internal_name = "hot539", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_UMC_UM8890BF, + .init = machine_at_hot539_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86), - .min_bus = 40000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86), + .min_bus = 40000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3600, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* VLSI SuperCore */ /* This has AST KBC firmware, likely a Phoenix variant since the BIOS */ /* calls KBC command D5h to read the KBC revision. */ { - .name = "[VLSI SuperCore] AST Bravo MS P/90", - .internal_name = "bravoms586", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, - .init = machine_at_bravoms586_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI SuperCore] AST Bravo MS P/90", + .internal_name = "bravoms586", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, + .init = machine_at_bravoms586_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, .ram = { - .min = 4096, - .max = 131072, + .min = 4096, + .max = 131072, .step = 4096 }, .nvrmask = 127, @@ -12974,30 +12974,30 @@ const machine_t machines[] = { }, /* Has a VIA KBC chip */ { - .name = "[VLSI SuperCore] DFI G586VPM Rev C", - .internal_name = "g586vpmc", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, - .init = machine_at_g586vpmc_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI SuperCore] DFI G586VPM Rev C", + .internal_name = "g586vpmc", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, + .init = machine_at_g586vpmc_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, .flags = MACHINE_IDE_DUAL | MACHINE_APM, .ram = { - .min = 4096, - .max = 262144, + .min = 4096, + .max = 262144, .step = 4096 }, .nvrmask = 127, @@ -13019,30 +13019,30 @@ const machine_t machines[] = { /* KBC firmware is unknown. No commands outside of the base PS/2 */ /* KBC command set are used. */ { - .name = "[VLSI SuperCore] Micronics M54Si", - .internal_name = "m54si", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, - .init = machine_at_m54si_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI SuperCore] Micronics M54Si", + .internal_name = "m54si", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, + .init = machine_at_m54si_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, .flags = MACHINE_IDE_DUAL | MACHINE_APM, .ram = { - .min = 4096, - .max = 131072, + .min = 4096, + .max = 131072, .step = 4096 }, .nvrmask = 127, @@ -13063,30 +13063,30 @@ const machine_t machines[] = { }, /* This has Phoenix KBC firmware. */ { - .name = "[VLSI SuperCore] Packard Bell PB600", - .internal_name = "pb600", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, - .init = machine_at_pb600_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI SuperCore] Packard Bell PB600", + .internal_name = "pb600", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, + .init = machine_at_pb600_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, .ram = { - .min = 8192, - .max = 139264, + .min = 8192, + .max = 139264, .step = 4096 }, .nvrmask = 127, @@ -13109,30 +13109,30 @@ const machine_t machines[] = { /* VLSI Wildcat */ /* This has Phoenix KBC firmware. */ { - .name = "[VLSI Wildcat] AT&T Globalyst 620/630 (NCR 3248/3348)", - .internal_name = "globalyst620", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_VLSI_WILDCAT, - .init = machine_at_globalyst620_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI Wildcat] AT&T Globalyst 620/630 (NCR 3248/3348)", + .internal_name = "globalyst620", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_VLSI_WILDCAT, + .init = machine_at_globalyst620_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, .ram = { - .min = 4096, - .max = 196608, + .min = 4096, + .max = 196608, .step = 4096 }, .nvrmask = 127, @@ -13157,405 +13157,405 @@ const machine_t machines[] = { /* This has an AMIKey-2, which is type 'H'. This also seems to be revision 2.1 with the FDC37C665 SIO. */ { - .name = "[i430FX] ASUS P/I-P55TP4XE", - .internal_name = "p54tp4xe", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_p54tp4xe_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] ASUS P/I-P55TP4XE", + .internal_name = "p54tp4xe", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_p54tp4xe_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3600, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &p54tp4xe_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &p54tp4xe_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware. The KBC itself seems to differ between an AMIKEY-2 and a Winbond W83C42. */ { - .name = "[i430FX] DataExpert EXP8551", - .internal_name = "exp8551", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_exp8551_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] DataExpert EXP8551", + .internal_name = "exp8551", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_exp8551_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C932 Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { - .name = "[i430FX] HP Vectra VL 5/xxx Series 4 (Chimay)", - .internal_name = "vectra54", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_vectra54_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] HP Vectra VL 5/xxx Series 4 (Chimay)", + .internal_name = "vectra54", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_vectra54_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i430FX] Intel Advanced/ATX (Thor)", - .internal_name = "thor", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_thor_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] Intel Advanced/ATX (Thor)", + .internal_name = "thor", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_thor_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_GAMEPORT, /* Machine has optional onboard sound: Crystal CS4232-KQ */ - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_GAMEPORT, /* Machine has optional onboard sound: Crystal CS4232-KQ */ + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &thor_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64vplus_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &thor_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64vplus_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i430FX] Intel Advanced/EV (Endeavor)", - .internal_name = "endeavor", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_endeavor_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = machine_at_endeavor_gpio_handler, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] Intel Advanced/EV (Endeavor)", + .internal_name = "endeavor", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_endeavor_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = machine_at_endeavor_gpio_handler, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64_onboard_pci_device, - .snd_device = &sb_vibra16s_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64_onboard_pci_device, + .snd_device = &sb_vibra16s_onboard_device, + .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[i430FX] MSI MS-5119", - .internal_name = "ms5119", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_ms5119_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] MSI MS-5119", + .internal_name = "ms5119", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_ms5119_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This most likely uses AMI MegaKey KBC firmware as well due to having the same Super I/O chip (that has the KBC firmware on it) as eg. the Advanced/EV. */ { - .name = "[i430FX] Packard Bell PB640", - .internal_name = "pb640", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_pb640_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] Packard Bell PB640", + .internal_name = "pb640", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_pb640_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5440_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5440_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[i430FX] PCPartner MB500N", - .internal_name = "mb500n", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_mb500n_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] PCPartner MB500N", + .internal_name = "mb500n", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_mb500n_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_0 | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an AMIKEY-2 'H' KBC firmware (1992). */ { - .name = "[i430FX] QDI FMB", - .internal_name = "fmb", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_fmb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] QDI FMB", + .internal_name = "fmb", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_fmb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_WINCHIP, CPU_WINCHIP2, CPU_Cx6x86, CPU_Cx6x86L, CPU_Cx6x86MX), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_WINCHIP, CPU_WINCHIP2, CPU_Cx6x86, CPU_Cx6x86L, CPU_Cx6x86MX), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 430HX */ @@ -13563,1852 +13563,1852 @@ const machine_t machines[] = { /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i430HX] Acer V35N", - .internal_name = "acerv35n", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_acerv35n_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Acer V35N", + .internal_name = "acerv35n", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_acerv35n_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3450, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey-2 or VIA VT82C42N KBC (depending on the revision) with AMIKEY 'F' KBC firmware. */ { - .name = "[i430HX] AOpen AP53", - .internal_name = "ap53", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_ap53_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] AOpen AP53", + .internal_name = "ap53", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_ap53_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3450, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.5 + .min_multi = 1.5, + .max_multi = 2.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* [TEST] Has a VIA 82C42N KBC that emulates the AMIKey F KBC firmware. */ { - .name = "[i430HX] Biostar MB-8500TUC", - .internal_name = "8500tuc", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_8500tuc_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Biostar MB-8500TUC", + .internal_name = "8500tuc", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_8500tuc_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* It possible has AMIKEY-2 'H' KBC firmware. */ { - .name = "[i430HX] Siemens-Nixdorf D943", - .internal_name = "d943", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_d943_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Siemens-Nixdorf D943", + .internal_name = "d943", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_d943_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_AV | MACHINE_GAMEPORT | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_AV | MACHINE_GAMEPORT | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &d943_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5436_onboard_pci_device, - .snd_device = &sb_vibra16c_onboard_device, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &d943_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5436_onboard_pci_device, + .snd_device = &sb_vibra16c_onboard_device, + .net_device = NULL }, /* 430VX */ /* Has a SM(S)C FDC37C932FR Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { - .name = "[i430VX] Gateway 2000 Mailman", - .internal_name = "gw2kma", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_gw2kma_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Gateway 2000 Mailman", + .internal_name = "gw2kma", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_gw2kma_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ + .ram = { + .min = 8192, + .max = 131072, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &sb_vibra16c_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &sb_vibra16c_onboard_device, + .net_device = NULL }, /* SiS 5501 */ /* Has the Lance LT38C41 KBC. */ { - .name = "[SiS 5501] Chaintech 5SBM/5SBM2 (M103)", - .internal_name = "5sbm2", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_SIS_5501, - .init = machine_at_5sbm2_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5501] Chaintech 5SBM/5SBM2 (M103)", + .internal_name = "5sbm2", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_SIS_5501, + .init = machine_at_5sbm2_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &c5sbm2_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &c5sbm2_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS 5511 */ /* Has Megakey 'R' KBC */ { - .name = "[SiS 5511] AMI Atlas PCI-II", - .internal_name = "amis727", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_SIS_5511, - .init = machine_at_amis727_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5511] AMI Atlas PCI-II", + .internal_name = "amis727", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_SIS_5511, + .init = machine_at_amis727_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005200, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005200, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware (AMIKey-2). */ { - .name = "[SiS 5511] AOpen AP5S", - .internal_name = "ap5s", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_SIS_5511, - .init = machine_at_ap5s_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5511] AOpen AP5S", + .internal_name = "ap5s", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_SIS_5511, + .init = machine_at_ap5s_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ap5s_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ap5s_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an SMC FDC37C669QF Super I/O. */ { - .name = "[SiS 5511] IBM PC 140 (type 6260)", - .internal_name = "pc140_6260", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_SIS_5511, - .init = machine_at_pc140_6260_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5511] IBM PC 140 (type 6260)", + .internal_name = "pc140_6260", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_SIS_5511, + .init = machine_at_pc140_6260_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_WINCHIP, CPU_WINCHIP2, CPU_Cx6x86, CPU_Cx6x86L, CPU_Cx6x86MX, CPU_PENTIUMMMX), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_WINCHIP, CPU_WINCHIP2, CPU_Cx6x86, CPU_Cx6x86L, CPU_Cx6x86MX, CPU_PENTIUMMMX), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5436_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5436_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware (AMIKey-2). */ { - .name = "[SiS 5511] MSI MS-5124", - .internal_name = "ms5124", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_SIS_5511, - .init = machine_at_ms5124_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5511] MSI MS-5124", + .internal_name = "ms5124", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_SIS_5511, + .init = machine_at_ms5124_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* VLSI Wildcat */ /* KBC firmware is unknown. No PS/2 port is present and no commands outside */ /* of the base AT KBC command set are used. */ { - .name = "[VLSI Wildcat] Zeos Pantera Wildcat", - .internal_name = "zeoswildcat", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_VLSI_WILDCAT, - .init = machine_at_zeoswildcat_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VLSI Wildcat] Zeos Pantera Wildcat", + .internal_name = "zeoswildcat", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_VLSI_WILDCAT, + .init = machine_at_zeoswildcat_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86, CPU_PENTIUMMMX), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86, CPU_PENTIUMMMX), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3520, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.5 + .min_multi = 1.5, + .max_multi = 2.5 }, .bus_flags = MACHINE_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 4096, - .max = 393216, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 4096, + .max = 393216, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000004f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000004f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Socket 7 (Dual Voltage) machines */ /* ALi ALADDiN IV+ */ /* Has the ALi M1543 southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN IV+] Biostar M5ATA", - .internal_name = "m5ata", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, - .init = machine_at_m5ata_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN IV+] Biostar M5ATA", + .internal_name = "m5ata", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, + .init = machine_at_m5ata_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 4.5 + .min_multi = 1.5, + .max_multi = 4.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &m5ata_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &m5ata_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the ALi M1543 southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN IV+] MSI MS-5164", - .internal_name = "ms5164", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, - .init = machine_at_ms5164_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN IV+] MSI MS-5164", + .internal_name = "ms5164", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, + .init = machine_at_ms5164_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 83333333, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 83333333, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the ALi M1543 southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN IV+] PCChips M560", - .internal_name = "m560", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, - .init = machine_at_m560_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN IV+] PCChips M560", + .internal_name = "m560", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, + .init = machine_at_m560_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 83333333, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 83333333, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 430HX */ /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i430HX] Acer AcerPower Ultima", - .internal_name = "acerm3a", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_acerm3a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Acer AcerPower Ultima", + .internal_name = "acerm3a", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_acerm3a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86MX), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86MX), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal SCSI */ - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal SCSI */ + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware (AMIKey-2). */ { - .name = "[i430HX] ASUS P/I-P55T2P4", - .internal_name = "p55t2p4", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_p55t2p4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] ASUS P/I-P55T2P4", + .internal_name = "p55t2p4", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_p55t2p4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 4.0 + .min_multi = 1.5, + .max_multi = 4.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The base board has a Holtek HT6542B which emulates the AMIKey-2 ('H') KBC firmware. */ { - .name = "[i430HX] ASUS P/I-P65UP5 (C-P55T2D)", - .internal_name = "p65up5_cp55t2d", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_p65up5_cp55t2d_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] ASUS P/I-P65UP5 (C-P55T2D)", + .internal_name = "p65up5_cp55t2d", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_p65up5_cp55t2d_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Machine has AMB */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* OEM-only Intel CU430HX, has AMI MegaKey KBC firmware on the PC87306 Super I/O chip. */ { - .name = "[i430HX] Intel CU430HX (Cumberland)", - .internal_name = "cu430hx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_cu430hx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Intel CU430HX (Cumberland)", + .internal_name = "cu430hx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_cu430hx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_USB, /* Machine has internal video: ATI Mach64GT 3D Rage and internal NIC: Intel 82557 */ - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_USB, /* Machine has internal video: ATI Mach64GT 3D Rage and internal NIC: Intel 82557 */ + .ram = { + .min = 8192, + .max = 524288, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &cu430hx_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &sb_vibra16c_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &cu430hx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &sb_vibra16c_onboard_device, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i430HX] Intel TC430HX (Tucson)", - .internal_name = "tc430hx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_tc430hx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Intel TC430HX (Tucson)", + .internal_name = "tc430hx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_tc430hx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_VIDEO | MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_USB, /* Has internal sound: Yamaha YMF701-S */ - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_VIDEO | MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_USB, /* Has internal sound: Yamaha YMF701-S */ + .ram = { + .min = 8192, + .max = 524288, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &tc430hx_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_virge_375_pci_device, - .snd_device = &ymf701_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &tc430hx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_virge_375_pci_device, + .snd_device = &ymf701_device, + .net_device = NULL }, /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i430HX] Micronics M7S-Hi", - .internal_name = "m7shi", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_m7shi_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Micronics M7S-Hi", + .internal_name = "m7shi", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_m7shi_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &m7shi_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &m7shi_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Unknown PS/2 KBC. */ { - .name = "[i430HX] Radisys EPC-2102", - .internal_name = "epc2102", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_epc2102_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Radisys EPC-2102", + .internal_name = "epc2102", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_epc2102_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_CONFIG, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_CONFIG, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00005200, /* Guess. */ + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . Yes, this is an Intel AMI BIOS with a fancy splash screen. */ { - .name = "[i430HX] Sony Vaio PCV-90", - .internal_name = "pcv90", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_pcv90_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Sony Vaio PCV-90", + .internal_name = "pcv90", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_pcv90_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ + .ram = { + .min = 8192, + .max = 524288, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &ymf701_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &ymf701_device, + .net_device = NULL }, /* [TEST] The board doesn't seem to have a KBC at all, which probably means it's an on-chip one on the PC87306 SIO. A list on a Danish site shows the BIOS as having a -0 string, indicating non-AMI KBC firmware. */ { - .name = "[i430HX] Supermicro P55T2S", - .internal_name = "p55t2s", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430HX, - .init = machine_at_p55t2s_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430HX] Supermicro P55T2S", + .internal_name = "p55t2s", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430HX, + .init = machine_at_p55t2s_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 524288, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 430VX */ /* This has the VIA VT82C42N or Holtek HT6542B KBC. */ { - .name = "[i430VX] AOpen AP5VM", - .internal_name = "ap5vm", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_ap5vm_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] AOpen AP5VM", + .internal_name = "ap5vm", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_ap5vm_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2600, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SCSI | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_SCSI | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware (AMIKey-2) on a BestKey KBC. */ { - .name = "[i430VX] ASUS P/I-P55TVP4", - .internal_name = "p55tvp4", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_p55tvp4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] ASUS P/I-P55TVP4", + .internal_name = "p55tvp4", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_p55tvp4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Machine has AMB */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The BIOS does not send a single non-standard KBC command, so it must have a standard IBM PS/2 KBC firmware or a clone thereof. */ { - .name = "[i430VX] Azza PT-5IV", - .internal_name = "5ivg", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_5ivg_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Azza PT-5IV", + .internal_name = "5ivg", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_5ivg_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, /* Guess. */ - .kbc_params = KBC_VEN_AMI | 0x00004800, /* Guess. */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, /* Guess. */ + .kbc_params = KBC_VEN_AMI | 0x00004800, /* Guess. */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* [TEST] Has a VIA VT82C42N KBC. */ { - .name = "[i430VX] Biostar MB-8500TVX-A", - .internal_name = "8500tvxa", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_8500tvxa_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Biostar MB-8500TVX-A", + .internal_name = "8500tvxa", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_8500tvxa_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2600, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C932QF Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { - .name = "[i430VX] Compaq Presario 224x", - .internal_name = "presario2240", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_presario2240_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Compaq Presario 224x", + .internal_name = "presario2240", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_presario2240_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI, - .ram = { - .min = 16384, - .max = 49152, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI, + .ram = { + .min = 16384, + .max = 49152, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_trio64v2_dx_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_trio64v2_dx_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C931APM Super I/O chip with on-chip KBC with Compaq KBC firmware. */ { - .name = "[i430VX] Compaq Presario 45xx", - .internal_name = "presario4500", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_presario4500_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Compaq Presario 45xx", + .internal_name = "presario4500", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_presario4500_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI, - .ram = { - .min = 16384, - .max = 49152, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI, + .ram = { + .min = 16384, + .max = 49152, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_trio64v2_dx_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_trio64v2_dx_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C932FR Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { - .name = "[i430VX] Dell Dimension XPS Pxxxa/Mxxxa", - .internal_name = "dellhannibalp", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_dellhannibalp_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Dell Dimension XPS Pxxxa/Mxxxa", + .internal_name = "dellhannibalp", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_dellhannibalp_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal video: S3 Trio64V+ */ - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal video: S3 Trio64V+ */ + .ram = { + .min = 8192, + .max = 131072, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has AMIKey H KBC firmware (AMIKey-2). */ { - .name = "[i430VX] ECS P5VX-B", - .internal_name = "p5vxb", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_p5vxb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] ECS P5VX-B", + .internal_name = "p5vxb", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_p5vxb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C932FR Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { - .name = "[i430VX] Epox P55-VA", - .internal_name = "p55va", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_p55va_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Epox P55-VA", + .internal_name = "p55va", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_p55va_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C932FR Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { - .name = "[i430VX] Gateway 2000 Hitman", - .internal_name = "gw2kte", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_gw2kte_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Gateway 2000 Hitman", + .internal_name = "gw2kte", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_gw2kte_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2200, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 8192, + .max = 131072, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &sb_vibra16c_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &sb_vibra16c_onboard_device, + .net_device = NULL }, /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i430VX] HP Brio 80xx", - .internal_name = "brio80xx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_brio80xx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] HP Brio 80xx", + .internal_name = "brio80xx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_brio80xx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 2200, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, /* Machine has internal video: S3 Trio64V2/DX */ - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, /* Machine has internal video: S3 Trio64V2/DX */ + .ram = { + .min = 8192, + .max = 131072, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the AMIKey-2 ('H') KBC firmware. */ { - .name = "[i430VX] LG IBM Multinet x52 (MSI MS-5136)", - .internal_name = "lgibmx52", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_lgibmx52_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] LG IBM Multinet x52 (MSI MS-5136)", + .internal_name = "lgibmx52", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_lgibmx52_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 4.0 + .min_multi = 1.5, + .max_multi = 4.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &lgibmx52_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &lgibmx52_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i430VX] Packard Bell Multimedia C110 (PB680/PB682/PB685)", - .internal_name = "pb680", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_pb680_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Packard Bell Multimedia C110 (PB680/PB682/PB685)", + .internal_name = "pb680", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_pb680_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 50000000, - .max_bus = 66666667, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_VIDEO | MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_VIDEO | MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 131072, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64vplus_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64vplus_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i430VX] Packard Bell Multimedia M415 (PB810)", - .internal_name = "pb810", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_pb810_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Packard Bell Multimedia M415 (PB810)", + .internal_name = "pb810", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_pb810_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 4.0 + .min_multi = 1.5, + .max_multi = 4.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM, /* Machine has internal video: S3 Trio64V2/DX */ - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM, /* Machine has internal video: S3 Trio64V2/DX */ + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the AMIKey 'H' firmware, possibly AMIKey-2. Photos show it with a BestKey, so it likely clones the behavior of AMIKey 'H'. */ { - .name = "[i430VX] PCPartner MB520N", - .internal_name = "mb520n", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_mb520n_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] PCPartner MB520N", + .internal_name = "mb520n", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_mb520n_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2600, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a Holtek KBC and the BIOS does not send a single non-standard KBC command, so it must be an ASIC that clones the standard IBM PS/2 KBC. */ { - .name = "[i430VX] Shuttle HOT-557", - .internal_name = "430vx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430VX, - .init = machine_at_i430vx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430VX] Shuttle HOT-557", + .internal_name = "430vx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430VX, + .init = machine_at_i430vx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_GAMEPORT | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 4096, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_GAMEPORT | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 4096, + .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 430TX */ /* The BIOS sends KBC command B8, CA, and CB, so it has an AMI KBC firmware. */ { - .name = "[i430TX] ADLink NuPRO-591/592", - .internal_name = "nupro592", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_nupro592_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] ADLink NuPRO-591/592", + .internal_name = "nupro592", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_nupro592_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 1900, .max_voltage = 2800, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_VIDEO, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_VIDEO, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &chips_69000_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &chips_69000_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* This has the AMIKey KBC firmware, which is type 'F' (YM430TX is based on the TX97). */ { - .name = "[i430TX] ASUS TX97", - .internal_name = "tx97", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_tx97_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] ASUS TX97", + .internal_name = "tx97", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_tx97_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* According to Dell specifications, it can have either National Semiconductor @@ -15420,138 +15420,138 @@ const machine_t machines[] = { MultiKey/42i 4.16. */ { - .name = "[i430TX] Dell OptiPlex GN+", - .internal_name = "optiplexgn", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_optiplexgn_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] Dell OptiPlex GN+", + .internal_name = "optiplexgn", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_optiplexgn_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, /* Video: S3 86C785 (Trio64V2/GX), ethernet: 3C905. */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_VIDEO | MACHINE_SOUND, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_VIDEO | MACHINE_SOUND, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, /* Stop-gap measure until the Trio64V2/GX is emulated, as both use the same VBIOS. */ - .vid_device = &s3_trio64v2_dx_onboard_pci_device, - .snd_device = &sb_vibra16xv_onboard_device, - .net_device = NULL + .vid_device = &s3_trio64v2_dx_onboard_pci_device, + .snd_device = &sb_vibra16xv_onboard_device, + .net_device = NULL }, /* [TEST] Has AMI Megakey '5' KBC firmware on the SM(S)C FDC37C67x Super I/O chip. */ { - .name = "[i430TX] Gateway E-1000", - .internal_name = "tomahawk", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_tomahawk_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] Gateway E-1000", + .internal_name = "tomahawk", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_tomahawk_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_NIC | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_NIC | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_trio64v2_dx_onboard_pci_device, - .snd_device = &cs4236b_device, - .net_device = &pcnet_am79c973_onboard_device + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_trio64v2_dx_onboard_pci_device, + .snd_device = &cs4236b_device, + .net_device = &pcnet_am79c973_onboard_device }, /* This has the Winbond W83977 Super I/O Chip with AMIKey-2 KBC firmware, which is type 'H'. */ { - .name = "[i430TX] Intel YM430TX (Yamamoto)", - .internal_name = "ym430tx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_ym430tx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] Intel YM430TX (Yamamoto)", + .internal_name = "ym430tx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_ym430tx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 60000000, - .max_bus = 66666667, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 4096, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 4096, + .max = 262144, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* PhoenixBIOS 4.0 Rel 6.0 for 430TX, has onboard Yamaha YMF701 which @@ -15561,3033 +15561,3033 @@ const machine_t machines[] = { MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i430TX] Micronics Thunderbolt", - .internal_name = "thunderbolt", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_thunderbolt_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] Micronics Thunderbolt", + .internal_name = "thunderbolt", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_thunderbolt_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_WINCHIP, CPU_WINCHIP2), - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_WINCHIP, CPU_WINCHIP2), + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Machine has internal sound: Yamaha YMF701-S */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C67x Super I/O chip with on-chip KBC with Phoenix or AMI MEGAKEY '5' KBC firmware. */ { - .name = "[i430TX] NEC Mate NX MA23C", - .internal_name = "ma23c", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_ma23c_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] NEC Mate NX MA23C", + .internal_name = "ma23c", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_ma23c_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2700, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCIONLY | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal video: Cirrus Logic CL-GD5465 and internal sound: Yamaha YMF715 */ - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal video: Cirrus Logic CL-GD5465 and internal sound: Yamaha YMF715 */ + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has the Phoenix MultiKey KBC firmware on the NSC Super I/O chip. */ { - .name = "[i430TX] Packard Bell PB790", - .internal_name = "an430tx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_an430tx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] Packard Bell PB790", + .internal_name = "an430tx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_an430tx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 60000000, - .max_bus = 66666667, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &ymf715_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &ymf715_onboard_device, + .net_device = NULL }, /* The BIOS sends KBC command BB and expects it to output a byte, which is AMI KBC behavior. A picture shows a VIA VT82C42N KBC though, so it could be a case of that KBC with AMI firmware. */ { - .name = "[i430TX] PCPartner MB540N", - .internal_name = "mb540n", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_mb540n_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] PCPartner MB540N", + .internal_name = "mb540n", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_mb540n_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2700, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 4096, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 4096, + .max = 262144, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Award BIOS, PS2, EDO, SDRAM, 4 PCI, 4 ISA, VIA VT82C42N KBC */ { - .name = "[i430TX] Soltek SL-56A5", - .internal_name = "56a5", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_56a5_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] Soltek SL-56A5", + .internal_name = "56a5", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_56a5_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 4096, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 4096, + .max = 262144, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* [TEST] Has AMIKey 'H' KBC firmware on the Winbond W83967 Super I/O chip. */ { - .name = "[i430TX] Supermicro P5MMS98", - .internal_name = "p5mms98", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_p5mms98_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] Supermicro P5MMS98", + .internal_name = "p5mms98", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_p5mms98_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86MX), - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86MX), + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 4096, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 4096, + .max = 262144, .step = 4096 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* [TEST] Has AMIKey 'H' KBC firmware. */ { - .name = "[i430TX] TriGem RD535 (Richmond)", - .internal_name = "richmond", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_richmond_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430TX] TriGem RD535 (Richmond)", + .internal_name = "richmond", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_richmond_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS 5571 */ /* Has the SiS 5571 chipset with on-chip KBC. */ { - .name = "[SiS 5571] Daewoo CD520", - .internal_name = "cb52xsi", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_SIS_5571, - .init = machine_at_cb52xsi_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5571] Daewoo CD520", + .internal_name = "cb52xsi", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_SIS_5571, + .init = machine_at_cb52xsi_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the SiS 5571 chipset with on-chip KBC. */ { - .name = "[SiS 5571] MSI MS-5146", - .internal_name = "ms5146", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_SIS_5571, - .init = machine_at_ms5146_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5571] MSI MS-5146", + .internal_name = "ms5146", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_SIS_5571, + .init = machine_at_ms5146_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the SiS 5571 chipset with on-chip KBC. */ { - .name = "[SiS 5571] Rise R534F", - .internal_name = "r534f", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_SIS_5571, - .init = machine_at_r534f_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5571] Rise R534F", + .internal_name = "r534f", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_SIS_5571, + .init = machine_at_r534f_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 55000000, - .max_bus = 83333333, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 55000000, + .max_bus = 83333333, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 393216, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 393216, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &r534f_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &r534f_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS 5581 */ /* Has the SiS 5581 chipset with on-chip KBC. */ { - .name = "[SiS 5581] ASUS SP97-XV", - .internal_name = "sp97xv", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_SIS_5581, - .init = machine_at_sp97xv_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5581] ASUS SP97-XV", + .internal_name = "sp97xv", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_SIS_5581, + .init = machine_at_sp97xv_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the SiS 5581 chipset with on-chip KBC. */ { - .name = "[SiS 5581] BCM SQ-578", - .internal_name = "sq578", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_SIS_5581, - .init = machine_at_sq578_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5581] BCM SQ-578", + .internal_name = "sq578", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_SIS_5581, + .init = machine_at_sq578_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS 5591 */ /* Has the SiS 5591 chipset with on-chip KBC. */ { - .name = "[SiS 5591] MSI MS-5172", - .internal_name = "ms5172", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_SIS_5591, - .init = machine_at_ms5172_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5591] MSI MS-5172", + .internal_name = "ms5172", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_SIS_5591, + .init = machine_at_ms5172_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2500, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Apollo VPX */ /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA VPX] FIC VA-502", - .internal_name = "ficva502", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_VPX, - .init = machine_at_ficva502_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA VPX] FIC VA-502", + .internal_name = "ficva502", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_VPX, + .init = machine_at_ficva502_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Apollo VP3 */ /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA VP3] FIC PA-2012", - .internal_name = "ficpa2012", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, - .init = machine_at_ficpa2012_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA VP3] FIC PA-2012", + .internal_name = "ficpa2012", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, + .init = machine_at_ficpa2012_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 55000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 55000000, + .max_bus = 75000000, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA VP3] PCPartner VIA809DS", - .internal_name = "via809ds", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, - .init = machine_at_via809ds_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA VP3] PCPartner VIA809DS", + .internal_name = "via809ds", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, + .init = machine_at_via809ds_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 75000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 75000000, .min_voltage = 2100, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Super Socket 7 machines */ /* ALi ALADDiN V */ /* Has the ALi M1543C southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN V] ASUS P5A", - .internal_name = "p5a", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, - .init = machine_at_p5a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN V] ASUS P5A", + .internal_name = "p5a", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, + .init = machine_at_p5a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 120000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 120000000, .min_voltage = 2000, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: ESS Solo-1 */ - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: ESS Solo-1 */ + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* M1534c kbc */ { - .name = "[ALi ALADDiN V] Gateway Lucas (MSI MS-5185)", - .internal_name = "gwlucas", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, - .init = machine_at_gwlucas_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN V] Gateway Lucas (MSI MS-5185)", + .internal_name = "gwlucas", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, + .init = machine_at_gwlucas_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 2000, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCIONLY | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Has internal video: ATI 3D Rage Pro Turbo AGP and sound: Ensoniq ES1373 */ - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Has internal video: ATI 3D Rage Pro Turbo AGP and sound: Ensoniq ES1373 */ + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &es1373_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &es1373_onboard_device, + .net_device = NULL }, /* Has the ALi M1543C southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN V] Gigabyte GA-5AA", - .internal_name = "5aa", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, - .init = machine_at_5aa_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN V] Gigabyte GA-5AA", + .internal_name = "5aa", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, + .init = machine_at_5aa_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 140000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 140000000, .min_voltage = 1300, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the ALi M1543C southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN V] Gigabyte GA-5AX", - .internal_name = "5ax", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, - .init = machine_at_5ax_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN V] Gigabyte GA-5AX", + .internal_name = "5ax", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, + .init = machine_at_5ax_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 140000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 140000000, .min_voltage = 1300, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Is the exact same as the Matsonic MS6260S. Has the ALi M1543C southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN V] PCChips M579", - .internal_name = "m579", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, - .init = machine_at_m579_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN V] PCChips M579", + .internal_name = "m579", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, + .init = machine_at_m579_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 2000, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */ - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */ + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS 5591 */ /* Has the SiS 5591 chipset with on-chip KBC. */ { - .name = "[SiS 5591] Gigabyte GA-5SG100", - .internal_name = "5sg100", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_SIS_5591, - .init = machine_at_5sg100_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5591] Gigabyte GA-5SG100", + .internal_name = "5sg100", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_SIS_5591, + .init = machine_at_5sg100_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 100000000, .min_voltage = 2000, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Apollo MVP3 */ /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA MVP3] AOpen AX59 Pro", - .internal_name = "ax59pro", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, - .init = machine_at_ax59pro_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA MVP3] AOpen AX59 Pro", + .internal_name = "ax59pro", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_ax59pro_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 124242424, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 124242424, .min_voltage = 1300, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the VIA VT82C596A southbridge with on-chip KBC identical to the VIA VT82C42N. Sadly likely abuses cache on Cyrix 6x86MX and MII CPUs (Cyrix MII being what most socket 7 eMachines PCs used) , so they are blocked and it's thus named after the only known eMachines with an AMD K6-2 CPU here */ { - .name = "[VIA MVP3] eMachines eTower 300k", - .internal_name = "delhi3", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, - .init = machine_at_delhi3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA MVP3] eMachines eTower 300k", + .internal_name = "delhi3", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_delhi3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86MX), - .min_bus = 66666667, - .max_bus = 124242424, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86MX), + .min_bus = 66666667, + .max_bus = 124242424, .min_voltage = 2000, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Has internal video: ATI 3D Rage IIc AGP (Rage 2) */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cs4235_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cs4235_onboard_device, + .net_device = NULL }, /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA MVP3] FIC VA-503+", - .internal_name = "ficva503p", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, - .init = machine_at_mvp3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA MVP3] FIC VA-503+", + .internal_name = "ficva503p", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_mvp3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 124242424, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 124242424, .min_voltage = 2000, .max_voltage = 3200, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the VIA VT82C686A southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA MVP3] FIC VA-503A", - .internal_name = "ficva503a", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, - .init = machine_at_ficva503a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA MVP3] FIC VA-503A", + .internal_name = "ficva503a", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_ficva503a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 124242424, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 124242424, .min_voltage = 1800, .max_voltage = 3100, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_A97 | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the VIA VT82C686A southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA MVP3] Soyo 5EMA PRO", - .internal_name = "5emapro", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, - .init = machine_at_5emapro_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA MVP3] Soyo 5EMA PRO", + .internal_name = "5emapro", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_5emapro_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 124242424, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 124242424, .min_voltage = 2000, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 + .min_multi = 1.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Socket 8 machines */ /* 450KX */ /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[i450KX] AOpen AP61", - .internal_name = "ap61", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_450KX, - .init = machine_at_ap61_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i450KX] AOpen AP61", + .internal_name = "ap61", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_450KX, + .init = machine_at_ap61_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x000008f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x000008f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ { - .name = "[i450KX] ASUS P/I-P6RP4", - .internal_name = "p6rp4", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_450KX, - .init = machine_at_p6rp4_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i450KX] ASUS P/I-P6RP4", + .internal_name = "p6rp4", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_450KX, + .init = machine_at_p6rp4_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI, /* Machine has AMB */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_1, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_1, .default_jumpered_ecp_dma = 1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a PC87306 with unknown keyboard controller firmware (Phoenix?). */ { - .name = "[i450KX] FIC PO-6000", - .internal_name = "ficpo6000", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_450KX, - .init = machine_at_ficpo6000_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i450KX] FIC PO-6000", + .internal_name = "ficpo6000", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_450KX, + .init = machine_at_ficpo6000_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI, /* Machine has AMB */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_1, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_1, .default_jumpered_ecp_dma = 1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ficpo6000_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ficpo6000_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 440FX */ /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i440FX] Acer V60N", - .internal_name = "acerv60n", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_acerv60n_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] Acer V60N", + .internal_name = "acerv60n", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_acerv60n_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 393216, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 393216, .step = 8192 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The base board has a Holtek HT6542B with AMIKey-2 ('H') KBC firmware. */ { - .name = "[i440FX] ASUS P/I-P65UP5 (C-P6ND)", - .internal_name = "p65up5_cp6nd", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_p65up5_cp6nd_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] ASUS P/I-P65UP5 (C-P6ND)", + .internal_name = "p65up5_cp6nd", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_p65up5_cp6nd_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Machine has AMB */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[i440FX] Biostar MB-8600TTC", - .internal_name = "8600ttc", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_8600ttc_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] Biostar MB-8600TTC", + .internal_name = "8600ttc", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_8600ttc_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 2900, .max_voltage = 3300, - .min_multi = 2.0, - .max_multi = 5.5 + .min_multi = 2.0, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the AMIKey-2 ('H') KBC firmware. */ { - .name = "[i440FX] Gigabyte GA-686NX", - .internal_name = "686nx", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_686nx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] Gigabyte GA-686NX", + .internal_name = "686nx", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_686nx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 2.0, - .max_multi = 5.5 + .min_multi = 2.0, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i440FX] Intel AP440FX (Apollo)", - .internal_name = "ap440fx", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_ap440fx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] Intel AP440FX (Apollo)", + .internal_name = "ap440fx", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_ap440fx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 2.0, - .max_multi = 3.5 + .min_multi = 2.0, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_VIDEO | MACHINE_USB, /* Machine has internal video: S3 ViRGE/DX and sound: Crystal CS4236B */ - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_VIDEO | MACHINE_USB, /* Machine has internal video: S3 ViRGE/DX and sound: Crystal CS4236B */ + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_virge_325_onboard_pci_device, - .snd_device = &cs4236b_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_virge_325_onboard_pci_device, + .snd_device = &cs4236b_onboard_device, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i440FX] Intel VS440FX (Venus)", - .internal_name = "vs440fx", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_vs440fx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] Intel VS440FX (Venus)", + .internal_name = "vs440fx", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_vs440fx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 2.0, - .max_multi = 3.5 + .min_multi = 2.0, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &vs440fx_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cs4236_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &vs440fx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cs4236_onboard_device, + .net_device = NULL }, /* Has the AMIKey-2 ('H') KBC firmware. */ { - .name = "[i440FX] LG IBM Multinet x61 (MSI MS-6106)", - .internal_name = "lgibmx61", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_lgibmx61_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] LG IBM Multinet x61 (MSI MS-6106)", + .internal_name = "lgibmx61", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_lgibmx61_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2500, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal SCSI: Adaptec AIC-7880U */ - .ram = { - .min = 40960, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal SCSI: Adaptec AIC-7880U */ + .ram = { + .min = 40960, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i440FX] Micronics M6Mi", - .internal_name = "m6mi", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_m6mi_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] Micronics M6Mi", + .internal_name = "m6mi", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_m6mi_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2900, .max_voltage = 3300, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Creative Vibra 16C */ - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Creative Vibra 16C */ + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA VT82C42N KBC. */ { - .name = "[i440FX] PCPartner MB600N", - .internal_name = "mb600n", - .type = MACHINE_TYPE_SOCKET8, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_mb600n_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] PCPartner MB600N", + .internal_name = "mb600n", + .type = MACHINE_TYPE_SOCKET8, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_mb600n_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET8, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET8, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2100, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Slot 1 machines */ /* ALi ALADDiN-PRO II */ /* Has the ALi M1543C southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN-PRO II] PCChips M729", - .internal_name = "m729", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_ALI_ALADDIN_PRO_II, - .init = machine_at_m729_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[ALi ALADDiN-PRO II] PCChips M729", + .internal_name = "m729", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_ALI_ALADDIN_PRO_II, + .init = machine_at_m729_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */ - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */ + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 440FX */ /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i440FX] Acer V62X", - .internal_name = "acerv62x", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_acerv62x_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] Acer V62X", + .internal_name = "acerv62x", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_acerv62x_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 83333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 83333333, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 393216, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 393216, .step = 8192 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* The base board has a Holtek HT6542B KBC which emulates the AMIKEY-2 'H' KBC firmware. */ { - .name = "[i440FX] ASUS P/I-P65UP5 (C-PKND)", - .internal_name = "p65up5_cpknd", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_p65up5_cpknd_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] ASUS P/I-P65UP5 (C-PKND)", + .internal_name = "p65up5_cpknd", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_p65up5_cpknd_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has a Holtek KBC. */ { - .name = "[i440FX] ASUS KN97", - .internal_name = "kn97", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440FX, - .init = machine_at_kn97_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440FX] ASUS KN97", + .internal_name = "kn97", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440FX, + .init = machine_at_kn97_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 83333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 83333333, .min_voltage = 2800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 127, - .jumpered_ecp_dma = 0, + .nvrmask = 127, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_HOLTEK | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_HOLTEK | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 440LX */ /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440LX] ABIT AB-LX6", - .internal_name = "lx6", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440LX, - .init = machine_at_lx6_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440LX] ABIT AB-LX6", + .internal_name = "lx6", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440LX, + .init = machine_at_lx6_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 60000000, - .max_bus = 83333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 60000000, + .max_bus = 83333333, .min_voltage = 1500, .max_voltage = 3500, - .min_multi = 2.0, - .max_multi = 5.5 + .min_multi = 2.0, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &lx6_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &lx6_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a National Semiconductor PC87307 Super I/O with on-chip KBC, which has one of these firmwares: AMI '5' MegaKey, Phoenix MultiKey/42 1.37, or Phoenix MultiKey/42i 4.16. */ { - .name = "[i440LX] Dell OptiPlex GXa", - .internal_name = "optiplexgxa", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440LX, - .init = machine_at_optiplexgxa_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440LX] Dell OptiPlex GXa", + .internal_name = "optiplexgxa", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440LX, + .init = machine_at_optiplexgxa_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_CYRIX3S), - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_CYRIX3S), + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 5.0 + .min_multi = 1.5, + .max_multi = 5.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Video: ATi 3D Rage Pro, Network: 3Com 3C905, Sound: Crystal CS4236B */ - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Video: ATi 3D Rage Pro, Network: 3Com 3C905, Sound: Crystal CS4236B */ + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, /* not yet emulated */ - .snd_device = &cs4236b_device, - .net_device = NULL /* not yet emulated */ + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, /* not yet emulated */ + .snd_device = &cs4236b_device, + .net_device = NULL /* not yet emulated */ }, /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i440LX] Micronics Spitfire", - .internal_name = "spitfire", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440LX, - .init = machine_at_spitfire_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440LX] Micronics Spitfire", + .internal_name = "spitfire", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440LX, + .init = machine_at_spitfire_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: Yamaha YMF701 */ - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: Yamaha YMF701 */ + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C67x Super I/O chip with on-chip KBC with Phoenix or AMIKey-2 KBC firmware. */ { - .name = "[i440LX] NEC Mate NX MA30D/23D", - .internal_name = "ma30d", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440LX, - .init = machine_at_ma30d_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440LX] NEC Mate NX MA30D/23D", + .internal_name = "ma30d", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440LX, + .init = machine_at_ma30d_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 66666667, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCIONLY | MACHINE_BUS_USB, /* Has internal video: SGS Thompson Riva 128 AGP, network: NEC PK-UG-X006 (Intel 82558B chip) and sound: OAK Audia 3D (OTI-610) for MA23D or YAMAHA YMF724 for MA30D */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x0000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x0000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 440EX */ /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440EX] QDI EXCELLENT II", - .internal_name = "p6i440e2", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440EX, - .init = machine_at_p6i440e2_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440EX] QDI EXCELLENT II", + .internal_name = "p6i440e2", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440EX, + .init = machine_at_p6i440e2_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 83333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 83333333, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 3.0, - .max_multi = 8.0 + .min_multi = 3.0, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 440BX */ /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] ABIT AB-BF6", - .internal_name = "bf6", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_bf6_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] ABIT AB-BF6", + .internal_name = "bf6", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_bf6_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] ABIT AB-BX6", - .internal_name = "bx6", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_bx6_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] ABIT AB-BX6", + .internal_name = "bx6", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_bx6_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1500, .max_voltage = 3500, - .min_multi = 2.0, - .max_multi = 5.5 + .min_multi = 2.0, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &bx6_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &bx6_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] AOpen AX6BC", - .internal_name = "ax6bc", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_ax6bc_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] AOpen AX6BC", + .internal_name = "ax6bc", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_ax6bc_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 112121212, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 112121212, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] ASUS P2B-LS", - .internal_name = "p2bls", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_p2bls_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] ASUS P2B-LS", + .internal_name = "p2bls", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_p2bls_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 112121212, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 112121212, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal SCSI: Adaptec AIC-7890AB */ - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal SCSI: Adaptec AIC-7890AB */ + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] ASUS P3B-F", - .internal_name = "p3bf", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_p3bf_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] ASUS P3B-F", + .internal_name = "p3bf", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_p3bf_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 150000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] Gigabyte GA-686BX", - .internal_name = "686bx", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_686bx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] Gigabyte GA-686BX", + .internal_name = "686bx", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_686bx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 (updated 'H') KBC firmware. */ { - .name = "[i440BX] MSI MS-6119", - .internal_name = "ms6119", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_ms6119_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] MSI MS-6119", + .internal_name = "ms6119", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_ms6119_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &ms6119_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ms6119_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] Supermicro P6SBA", - .internal_name = "p6sba", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_p6sba_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] Supermicro P6SBA", + .internal_name = "p6sba", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_p6sba_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a National Semiconductors PC87309 Super I/O chip with on-chip KBC with most likely AMIKey-2 KBC firmware. */ { - .name = "[i440BX] Tyan Tsunami ATX", - .internal_name = "s1846", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_s1846_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] Tyan Tsunami ATX", + .internal_name = "s1846", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_s1846_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 112121212, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 112121212, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1371 */ - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1371 */ + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &es1371_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &es1371_onboard_device, + .net_device = NULL }, /* 440ZX */ /* Has a SM(S)C FDC37M60x Super I/O chip with on-chip KBC with most likely AMIKey-2 KBC firmware. */ { - .name = "[i440ZX] HP Vectra VEi 8", - .internal_name = "vei8", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440ZX, - .init = machine_at_vei8_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440ZX] HP Vectra VEi 8", + .internal_name = "vei8", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440ZX, + .init = machine_at_vei8_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: Matrox MGA-G200 and sound: Crystal CS4820 */ - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: Matrox MGA-G200 and sound: Crystal CS4820 */ + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440ZX] MSI MS-6168", - .internal_name = "ms6168", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440ZX, - .init = machine_at_ms6168_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440ZX] MSI MS-6168", + .internal_name = "ms6168", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440ZX, + .init = machine_at_ms6168_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* AGP is reserved for the internal video */ - .flags = MACHINE_IDE_DUAL | MACHINE_AV | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_AV | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &voodoo_3_2000_agp_onboard_8m_device, - .snd_device = &es1373_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &voodoo_3_2000_agp_onboard_8m_device, + .snd_device = &es1373_onboard_device, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440ZX] Packard Bell Bora Pro (MSI MS-6168)", - .internal_name = "borapro", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_INTEL_440ZX, - .init = machine_at_borapro_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440ZX] Packard Bell Bora Pro (MSI MS-6168)", + .internal_name = "borapro", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440ZX, + .init = machine_at_borapro_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* AGP is reserved for the internal video */ - .flags = MACHINE_IDE_DUAL | MACHINE_AV | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_AV | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &voodoo_3_2000_agp_onboard_8m_device, - .snd_device = &es1373_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &voodoo_3_2000_agp_onboard_8m_device, + .snd_device = &es1373_onboard_device, + .net_device = NULL }, /* SiS (5)600 */ /* Has the SiS (5)600 chipset with on-chip KBC. */ { - .name = "[SiS 5600] Freetech/Flexus P6F99", - .internal_name = "p6f99", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_SIS_5600, - .init = machine_at_p6f99_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5600] Freetech/Flexus P6F99", + .internal_name = "p6f99", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_SIS_5600, + .init = machine_at_p6f99_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1373 */ - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1373 */ + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &es1373_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &es1373_onboard_device, + .net_device = NULL }, /* Has the SiS (5)600 chipset with on-chip KBC. */ { - .name = "[SiS 5600] PCChips M747", - .internal_name = "m747", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_SIS_5600, - .init = machine_at_m747_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 5600] PCChips M747", + .internal_name = "m747", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_SIS_5600, + .init = machine_at_m747_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: SiS 6326 and internal sound: C-Media CMI8330 */ - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal video: SiS 6326 and internal sound: C-Media CMI8330 */ + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SMSC VictoryBX-66 */ /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[SMSC VictoryBX-66] A-Trend ATC6310BXII", - .internal_name = "atc6310bxii", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66, - .init = machine_at_atc6310bxii_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SMSC VictoryBX-66] A-Trend ATC6310BXII", + .internal_name = "atc6310bxii", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66, + .init = machine_at_atc6310bxii_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* VIA Apollo Pro */ /* Has the VIA VT82C596B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA Apollo Pro] FIC KA-6130", - .internal_name = "ficka6130", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO, - .init = machine_at_ficka6130_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro] FIC KA-6130", + .internal_name = "ficka6130", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO, + .init = machine_at_ficka6130_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: ESS ES1938S */ - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: ESS ES1938S */ + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[VIA Apollo Pro 133] ASUS P3V133", - .internal_name = "p3v133", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, - .init = machine_at_p3v133_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro 133] ASUS P3V133", + .internal_name = "p3v133", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, + .init = machine_at_p3v133_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 150000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[VIA Apollo Pro 133A] ASUS P3V4X", - .internal_name = "p3v4x", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, - .init = machine_at_p3v4x_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro 133A] ASUS P3V4X", + .internal_name = "p3v4x", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, + .init = machine_at_p3v4x_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK(CPU_PENTIUMPRO), - .min_bus = 66666667, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK(CPU_PENTIUMPRO), + .min_bus = 66666667, + .max_bus = 150000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 2097152, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 2097152, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[VIA Apollo Pro 133A] BCM GT694VA", - .internal_name = "gt694va", - .type = MACHINE_TYPE_SLOT1, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, - .init = machine_at_gt694va_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro 133A] BCM GT694VA", + .internal_name = "gt694va", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, + .init = machine_at_gt694va_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1373 */ - .ram = { - .min = 8192, - .max = 3145728, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Machine has internal sound: Ensoniq ES1373 */ + .ram = { + .min = 8192, + .max = 3145728, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_AMI | 0x00004800, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &es1373_onboard_device, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &es1373_onboard_device, + .net_device = NULL }, /* Slot 1/2 machines */ @@ -18595,47 +18595,47 @@ const machine_t machines[] = { /* Has a National Semiconductors PC87309 Super I/O chip with on-chip KBC with most likely AMIKey-2 KBC firmware. */ { - .name = "[i440GX] Freeway FW-6400GX", - .internal_name = "fw6400gx", - .type = MACHINE_TYPE_SLOT1_2, - .chipset = MACHINE_CHIPSET_INTEL_440GX, - .init = machine_at_fw6400gx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440GX] Freeway FW-6400GX", + .internal_name = "fw6400gx", + .type = MACHINE_TYPE_SLOT1_2, + .chipset = MACHINE_CHIPSET_INTEL_440GX, + .init = machine_at_fw6400gx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1 | CPU_PKG_SLOT2, - .block = CPU_BLOCK_NONE, - .min_bus = 100000000, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SLOT1 | CPU_PKG_SLOT2, + .block = CPU_BLOCK_NONE, + .min_bus = 100000000, + .max_bus = 150000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 3.0, - .max_multi = 8.0 + .min_multi = 3.0, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_NOISA | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 16384, - .max = 2097152, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 16384, + .max = 2097152, .step = 16384 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Slot 1/Socket 370 machines */ @@ -18643,138 +18643,138 @@ const machine_t machines[] = { /* OEM version of ECS P6BXT-A+ REV 1.3x/2.2x. Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware.*/ { - .name = "[i440BX] Compaq ProSignia S316/318 (Intel)", - .internal_name = "prosignias31x_bx", - .type = MACHINE_TYPE_SLOT1_370, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, - .init = machine_at_prosignias31x_bx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] Compaq ProSignia S316/318 (Intel)", + .internal_name = "prosignias31x_bx", + .type = MACHINE_TYPE_SLOT1_370, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, + .init = machine_at_prosignias31x_bx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370, - .block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_CYRIX3S), /* Instability issues with PPro, and garbled text in POST with Cyrix */ - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370, + .block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_CYRIX3S), /* Instability issues with PPro, and garbled text in POST with Cyrix */ + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cmi8738_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cmi8738_onboard_device, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] Tyan Trinity 371", - .internal_name = "s1857", - .type = MACHINE_TYPE_SLOT1_370, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_s1857_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] Tyan Trinity 371", + .internal_name = "s1857", + .type = MACHINE_TYPE_SLOT1_370, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_s1857_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &es1373_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &es1373_onboard_device, + .net_device = NULL }, /* VIA Apollo Pro */ /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[VIA Apollo Pro 133] ECS P6BAT-A+", - .internal_name = "p6bat", - .type = MACHINE_TYPE_SLOT1_370, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, - .init = machine_at_p6bat_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro 133] ECS P6BAT-A+", + .internal_name = "p6bat", + .type = MACHINE_TYPE_SLOT1_370, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, + .init = machine_at_p6bat_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cmi8738_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cmi8738_onboard_device, + .net_device = NULL }, /* Slot 2 machines */ @@ -18782,92 +18782,92 @@ const machine_t machines[] = { /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440GX] Gigabyte GA-6GXU", - .internal_name = "6gxu", - .type = MACHINE_TYPE_SLOT2, - .chipset = MACHINE_CHIPSET_INTEL_440GX, - .init = machine_at_6gxu_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440GX] Gigabyte GA-6GXU", + .internal_name = "6gxu", + .type = MACHINE_TYPE_SLOT2, + .chipset = MACHINE_CHIPSET_INTEL_440GX, + .init = machine_at_6gxu_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT2, - .block = CPU_BLOCK_NONE, - .min_bus = 100000000, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT2, + .block = CPU_BLOCK_NONE, + .min_bus = 100000000, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal SCSI */ - .ram = { - .min = 16384, - .max = 2097152, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal SCSI */ + .ram = { + .min = 16384, + .max = 2097152, .step = 16384 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440GX] Supermicro S2DGE", - .internal_name = "s2dge", - .type = MACHINE_TYPE_SLOT2, - .chipset = MACHINE_CHIPSET_INTEL_440GX, - .init = machine_at_s2dge_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440GX] Supermicro S2DGE", + .internal_name = "s2dge", + .type = MACHINE_TYPE_SLOT2, + .chipset = MACHINE_CHIPSET_INTEL_440GX, + .init = machine_at_s2dge_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT2, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SLOT2, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 16384, - .max = 2097152, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 16384, + .max = 2097152, .step = 16384 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* PGA370 machines */ @@ -18875,646 +18875,646 @@ const machine_t machines[] = { /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440LX] Supermicro 370SLM", - .internal_name = "s370slm", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_INTEL_440LX, - .init = machine_at_s370slm_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440LX] Supermicro 370SLM", + .internal_name = "s370slm", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_INTEL_440LX, + .init = machine_at_s370slm_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED, + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED, }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 440BX */ /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] AEWIN AW-O671R", - .internal_name = "awo671r", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_awo671r_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] AEWIN AW-O671R", + .internal_name = "awo671r", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_awo671r_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 /* limits assumed */ + .min_multi = 1.5, + .max_multi = 8.0 /* limits assumed */ }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Machine has EISA, possibly for a riser? */ /* Yes, that's a rise slot, not EISA. */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB | MACHINE_VIDEO, /* Machine has internal video: C&T B69000, sound: ESS ES1938S and NIC: Realtek RTL8139C */ - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB | MACHINE_VIDEO, /* Machine has internal video: C&T B69000, sound: ESS ES1938S and NIC: Realtek RTL8139C */ + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &chips_69000_onboard_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &chips_69000_onboard_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] AmazePC AM-BX133", - .internal_name = "ambx133", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_ambx133_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] AmazePC AM-BX133", + .internal_name = "ambx133", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_ambx133_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 /* limits assumed */ + .min_multi = 1.5, + .max_multi = 8.0 /* limits assumed */ }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] ASUS CUBX", - .internal_name = "cubx", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_cubx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] ASUS CUBX", + .internal_name = "cubx", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_cubx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 150000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_QUAD | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has quad channel IDE with internal controller: CMD PCI-0648 */ - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_QUAD | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has quad channel IDE with internal controller: CMD PCI-0648 */ + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* 440ZX */ /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440ZX] Soltek SL-63A1", - .internal_name = "63a1", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_INTEL_440ZX, - .init = machine_at_63a1_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440ZX] Soltek SL-63A1", + .internal_name = "63a1", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_INTEL_440ZX, + .init = machine_at_63a1_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SiS (5)600 */ /* Has the SiS 600 chipset, which is a re-brand of the 5600, with on-chip KBC. */ { - .name = "[SiS 600] Soyo SY-7SBB", - .internal_name = "7sbb", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_SIS_5600, - .init = machine_at_7sbb_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SiS 600] Soyo SY-7SBB", + .internal_name = "7sbb", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_SIS_5600, + .init = machine_at_7sbb_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK(CPU_CYRIX3S), - .min_bus = 60000000, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK(CPU_CYRIX3S), + .min_bus = 60000000, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* SMSC VictoryBX-66 */ /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[SMSC VictoryBX-66] A-Trend ATC7020BXII", - .internal_name = "atc7020bxii", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66, - .init = machine_at_atc7020bxii_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SMSC VictoryBX-66] A-Trend ATC7020BXII", + .internal_name = "atc7020bxii", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66, + .init = machine_at_atc7020bxii_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has an ITE IT8671F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[SMSC VictoryBX-66] PCChips M773", - .internal_name = "m773", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66, - .init = machine_at_m773_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[SMSC VictoryBX-66] PCChips M773", + .internal_name = "m773", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66, + .init = machine_at_m773_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 133333333, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 133333333, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cmi8738_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cmi8738_onboard_device, + .net_device = NULL }, /* VIA Apollo Pro */ /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA Apollo Pro] PCPartner APAS3", - .internal_name = "apas3", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO, - .init = machine_at_apas3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro] PCPartner APAS3", + .internal_name = "apas3", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO, + .init = machine_at_apas3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, .min_voltage = 1800, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal video: Creative Vibra 16XV */ - .ram = { - .min = 8192, - .max = 786432, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal video: Creative Vibra 16XV */ + .ram = { + .min = 8192, + .max = 786432, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[VIA Apollo Pro 133] ECS P6BAP-A+", - .internal_name = "p6bap", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, - .init = machine_at_p6bap_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro 133] ECS P6BAP-A+", + .internal_name = "p6bap", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, + .init = machine_at_p6bap_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 150000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB | MACHINE_SOUND, - .ram = { - .min = 8192, - .max = 1572864, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB | MACHINE_SOUND, + .ram = { + .min = 8192, + .max = 1572864, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cmi8738_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cmi8738_onboard_device, + .net_device = NULL }, /* Has the VIA VT82C686B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA Apollo Pro 133A] Acorp 6VIA90AP", - .internal_name = "6via90ap", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, - .init = machine_at_6via90ap_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro 133A] Acorp 6VIA90AP", + .internal_name = "6via90ap", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, + .init = machine_at_6via90ap_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 150000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED + .min_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_A97 | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_AG | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 16384, - .max = 3145728, + .flags = MACHINE_IDE_DUAL | MACHINE_AG | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 16384, + .max = 3145728, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* Has the VIA VT82C686B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA Apollo Pro 133A] ASUS CUV4X-LS", - .internal_name = "cuv4xls", - .type = MACHINE_TYPE_SOCKET370, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, - .init = machine_at_cuv4xls_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[VIA Apollo Pro 133A] ASUS CUV4X-LS", + .internal_name = "cuv4xls", + .type = MACHINE_TYPE_SOCKET370, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A, + .init = machine_at_cuv4xls_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET370, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 150000000, + .cpu = { + .package = CPU_PKG_SOCKET370, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 150000000, .min_voltage = 1300, .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 8.0 + .min_multi = 1.5, + .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_NOI97 | MACHINE_BUS_USB, /* Has Asus-proprietary LAN/SCSI slot */ - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, - .ram = { - .min = 16384, - .max = 4194304, + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 16384, + .max = 4194304, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cmi8738_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cmi8738_onboard_device, + .net_device = NULL }, /* Miscellaneous/Fake/Hypervisor machines */ /* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440BX] Microsoft Virtual PC 2007", - .internal_name = "vpc2007", - .type = MACHINE_TYPE_MISC, - .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_vpc2007_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i440BX] Microsoft Virtual PC 2007", + .internal_name = "vpc2007", + .type = MACHINE_TYPE_MISC, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_vpc2007_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SLOT1, - .block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_PENTIUM2, CPU_CYRIX3S), - .min_bus = 0, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_PENTIUM2, CPU_CYRIX3S), + .min_bus = 0, + .max_bus = 66666667, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 8192, - .max = 1048576, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 8192, + .max = 1048576, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, { - .name = NULL, - .internal_name = NULL, - .type = MACHINE_TYPE_NONE, - .chipset = MACHINE_CHIPSET_NONE, - .init = NULL, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = NULL, + .internal_name = NULL, + .type = MACHINE_TYPE_NONE, + .chipset = MACHINE_CHIPSET_NONE, + .init = NULL, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = 0, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, + .cpu = { + .package = 0, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, .min_voltage = 0, .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 + .min_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_BUS_NONE, - .flags = MACHINE_FLAGS_NONE, - .ram = { - .min = 0, - .max = 0, + .flags = MACHINE_FLAGS_NONE, + .ram = { + .min = 0, + .max = 0, .step = 0 }, - .nvrmask = 0, - .jumpered_ecp_dma = 0, + .nvrmask = 0, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000000, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000000, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL } - // clang-format on + // clang-format on }; /* This is so Disabled comes first. */ @@ -19532,7 +19532,7 @@ static uint32_t machine_gpio; static uint32_t machine_gpio_acpi_default; static uint32_t machine_gpio_acpi; -static int machine_is_ps2 = 0; +static int machine_is_ps2 = 0; void *machine_snd = NULL; From 4525a356efebbee8f357db323a021fcee1f1f089 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 30 Sep 2025 05:44:54 +0200 Subject: [PATCH 026/233] TriGem Hawk: Set bit 3 of KBC P1, now it correctly says TriGem and not Epson. --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 9fa4ab81b..ea61c97ef 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12510,7 +12510,7 @@ const machine_t machines[] = { .default_jumpered_ecp_dma = -1, .kbc_device = &kbc_at_device, .kbc_params = KBC_VEN_AMI_TRIGEM | KBC_FLAG_IS_GREEN | 0x00005a00, - .kbc_p1 = 0x000004f0, + .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, .device = NULL, From acbd046de89544fd1f0887ab7e5345a1022fc31f Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 30 Sep 2025 05:48:50 +0200 Subject: [PATCH 027/233] Temporarily revert the change. --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index ea61c97ef..9fa4ab81b 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12510,7 +12510,7 @@ const machine_t machines[] = { .default_jumpered_ecp_dma = -1, .kbc_device = &kbc_at_device, .kbc_params = KBC_VEN_AMI_TRIGEM | KBC_FLAG_IS_GREEN | 0x00005a00, - .kbc_p1 = 0x00000cf0, + .kbc_p1 = 0x000004f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, .device = NULL, From 9141ff80a4b1300c614f70df316cb4987577b77a Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 30 Sep 2025 05:49:23 +0200 Subject: [PATCH 028/233] And apply it again. --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 395379f28..bef04fe51 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12510,7 +12510,7 @@ const machine_t machines[] = { .default_jumpered_ecp_dma = -1, .kbc_device = &kbc_at_device, .kbc_params = KBC_VEN_AMI_TRIGEM | KBC_FLAG_IS_GREEN | 0x00005a00, - .kbc_p1 = 0x000004f0, + .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, .device = NULL, From b4ce4b8575383b7956d8c6a9cad03540d6627381 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 30 Sep 2025 05:51:13 +0200 Subject: [PATCH 029/233] And fix the Epson Action PC as well. --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index bef04fe51..72f742600 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -10625,7 +10625,7 @@ const machine_t machines[] = { .default_jumpered_ecp_dma = 3, .kbc_device = &kbc_at_device, .kbc_params = KBC_VEN_AMI_TRIGEM | 0x00005a00, - .kbc_p1 = 0x00000cf0, + .kbc_p1 = 0x000004f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, .device = NULL, From c35bb9749fac28a0652c5b9e324f1c475a92b1d5 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Tue, 30 Sep 2025 10:59:11 +0700 Subject: [PATCH 030/233] Added more BIOSes for GA-5AX and GA-686BX (#6256) --- src/include/86box/machine.h | 10 ++++-- src/machine/m_at_slot1.c | 67 +++++++++++++++++++++++++++++++++---- src/machine/m_at_sockets7.c | 67 +++++++++++++++++++++++++++++++++---- src/machine/machine_table.c | 8 ++--- 4 files changed, 134 insertions(+), 18 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 00562d455..3daba325f 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1089,7 +1089,10 @@ extern int machine_at_p5a_init(const machine_t *); extern int machine_at_m579_init(const machine_t *); extern int machine_at_gwlucas_init(const machine_t *); extern int machine_at_5aa_init(const machine_t *); -extern int machine_at_5ax_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t g5x_device; +#endif +extern int machine_at_g5x_init(const machine_t *); /* VIA MVP3 */ extern int machine_at_ax59pro_init(const machine_t *); @@ -1154,7 +1157,10 @@ extern int machine_at_bx6_init(const machine_t *); extern int machine_at_ax6bc_init(const machine_t *); extern int machine_at_p2bls_init(const machine_t *); extern int machine_at_p3bf_init(const machine_t *); -extern int machine_at_686bx_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t ga686_device; +#endif +extern int machine_at_ga686_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t ms6119_device; #endif diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 6a34b564a..c9fd9b6fb 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -604,17 +604,72 @@ machine_at_ax6bc_init(const machine_t *model) return ret; } +static const device_config_t ga686_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "686bx", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision 5/11/1998 (Amptron PII-3100)", + .internal_name = "pii3100", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/686bx/31nologo.bin", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision F2a", + .internal_name = "686bx", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/686bx/6BX.F2a", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t ga686_device = { + .name = "Gigabyte GA-686BX", + .internal_name = "ga686_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = ga686_config +}; + int -machine_at_686bx_init(const machine_t *model) +machine_at_ga686_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/686bx/6BX.F2a", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 0c2e81e1f..7aaffb6ba 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -177,17 +177,72 @@ machine_at_5aa_init(const machine_t *model) return ret; } +static const device_config_t g5x_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "5ax", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision F4", + .internal_name = "5ax", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/5ax/5AX.F4", "" } + }, + { + .name = "Phoenix - AwardBIOS v6.00PG - Release 4.1 (by eSupport)", + .internal_name = "5ax_esupport", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/5ax/6Z5KKG09.bin", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t g5x_device = { + .name = "Gigabyte GA-5AX", + .internal_name = "g5x_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = g5x_config +}; + int -machine_at_5ax_init(const machine_t *model) +machine_at_g5x_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/5ax/5AX.F4", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 72f742600..be70b897a 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -16421,7 +16421,7 @@ const machine_t machines[] = { .internal_name = "5ax", .type = MACHINE_TYPE_SOCKETS7, .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, - .init = machine_at_5ax_init, + .init = machine_at_g5x_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, @@ -16451,7 +16451,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &g5x_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -17961,7 +17961,7 @@ const machine_t machines[] = { .internal_name = "686bx", .type = MACHINE_TYPE_SLOT1, .chipset = MACHINE_CHIPSET_INTEL_440BX, - .init = machine_at_686bx_init, + .init = machine_at_ga686_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, @@ -17991,7 +17991,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &ga686_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From 3e7b3d32e85d7626d28a7929c9be214b4e3b1499 Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Tue, 30 Sep 2025 12:57:10 +0300 Subject: [PATCH 031/233] Separate baseline calibration trigger from display offset updates, clamp crtc[7] position to valid range and use calibrated baseline_vsyncpos for vsync comparison to avoid display issues when overscan in enabled --- src/video/vid_tandy.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 978a03c8d..d680aba17 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -191,11 +191,6 @@ vid_update_display_offset(t1kvid_t *vid, uint8_t reg) int hsync_scale = (vid->mode & 1) ? 8 : 16; int vsync_scale = vid->crtc[9] + 1; - if (reg == 1 || reg == 6) { - baseline_calib_start(vid); - return; - } - if (!vid->baseline_ready) { vid->hsync_offset = 0; vid->vsync_offset = 0; @@ -206,6 +201,10 @@ vid_update_display_offset(t1kvid_t *vid, uint8_t reg) vid->hsync_offset = ((int)vid->baseline_hsyncpos - (int)vid->crtc[2]) * hsync_scale; break; case 7: + if (vid->crtc[7] < vid->crtc[6]) + vid->crtc[7] = vid->crtc[6]; + else if (vid->crtc[7] > vid->crtc[4]) + vid->crtc[7] = vid->crtc[4]; vid->vsync_offset = ((int)vid->baseline_vsyncpos - (int)vid->crtc[7]) * vsync_scale; break; } @@ -238,10 +237,10 @@ tandy_vid_out(uint16_t addr, uint8_t val, void *priv) vid->fullchange = changeframecount; recalc_timings(dev); } - if ((vid->crtcreg >= 0x01 && vid->crtcreg <= 0x02) || - (vid->crtcreg >= 0x06 && vid->crtcreg <= 0x07)) { + if (vid->crtcreg == 0x01 || vid->crtcreg == 0x06) + baseline_calib_start(vid); + if (vid->crtcreg == 0x02 || vid->crtcreg == 0x07) vid_update_display_offset(vid, vid->crtcreg); - } } break; @@ -771,7 +770,7 @@ vid_poll(void *priv) else vid->cursoron = vid->blink & 16; } - if (vid->vc == vid->crtc[7]) { + if (vid->vc == vid->baseline_vsyncpos) { vid->dispon = 0; vid->displine = 0; vid->vsynctime = 16; From 9deecc3c4af2c6c7b8b30de19d03c858039f0fb6 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 1 Oct 2025 05:14:31 +0200 Subject: [PATCH 032/233] VLSI VL82c59x: Bring in line with code style. --- src/chipset/vl82c59x.c | 380 ++++++++++++++++++----------------------- 1 file changed, 164 insertions(+), 216 deletions(-) diff --git a/src/chipset/vl82c59x.c b/src/chipset/vl82c59x.c index 468978718..69b6ebf1d 100644 --- a/src/chipset/vl82c59x.c +++ b/src/chipset/vl82c59x.c @@ -8,25 +8,23 @@ * * Implementation of the VLSI SuperCore and Wildcat chipsets. * - * - * * Authors: Miran Grca, * win2kgamer * * Copyright 2020-2025 Miran Grca. * Copyright 2025 win2kgamer */ - #ifdef ENABLE_VL82C59X_LOG #include #endif - #include #include #include #include #include +#ifdef ENABLE_VL82C59X_LOG #define HAVE_STDARG_H +#endif #include <86box/86box.h> #include "cpu.h" #include <86box/device.h> @@ -138,21 +136,21 @@ vl82c59x_smram(vl82c59x_t *dev) /* A/B region SMRAM seems to not be controlled by 591 reg 0x7C/SMRAM enable */ /* Dell Dimension BIOS breaks if A0000 region is controlled by SMRAM enable */ - if (dev->pci_conf[0x64] & 0x55) { + if (dev->pci_conf[0x64] & 0x55) smram_enable(dev->smram[0], 0x000a0000, 0x000a0000, 0x10000, dev->pci_conf[0x64] & 0xAA, dev->pci_conf[0x64] & 0x55); - } - if (dev->pci_conf[0x65] & 0x55) { + + if (dev->pci_conf[0x65] & 0x55) smram_enable(dev->smram[1], 0x000b0000, 0x000b0000, 0x10000, dev->pci_conf[0x65] & 0xAA, dev->pci_conf[0x65] & 0x55); - } /* Handle E region SMRAM */ if (dev->pci_conf[0x7C] & 0x80) { - if (dev->pci_conf[0x68] & 0x05) { - smram_enable(dev->smram[2], 0x000e0000, 0x000e0000, 0x8000, dev->pci_conf[0x68] & 0x0A, dev->pci_conf[0x68] & 0x05); - } - if (dev->pci_conf[0x68] & 0x50) { - smram_enable(dev->smram[3], 0x000e8000, 0x000e8000, 0x8000, dev->pci_conf[0x68] & 0xA0, dev->pci_conf[0x68] & 0x50); - } + if (dev->pci_conf[0x68] & 0x05) + smram_enable(dev->smram[2], 0x000e0000, 0x000e0000, 0x8000, + dev->pci_conf[0x68] & 0x0a, dev->pci_conf[0x68] & 0x05); + + if (dev->pci_conf[0x68] & 0x50) + smram_enable(dev->smram[3], 0x000e8000, 0x000e8000, 0x8000, + dev->pci_conf[0x68] & 0xa0, dev->pci_conf[0x68] & 0x50); } flushmmucache(); @@ -216,82 +214,62 @@ vl82c59x_write(int func, int addr, uint8_t val, void *priv) vl82c59x_log(dev->log, "[%04X:%08X] VL82c591: [W] (%02X, %02X) = %02X\n", CS, cpu_state.pc, func, addr, val); - if (func == 0x00) - switch (addr) { - case 0x04: - case 0x05: /* PCI Command Register */ + if (func == 0x00) switch (addr) { + case 0x04: case 0x05: /* PCI Command Register */ + dev->pci_conf[addr] = val; + break; + case 0x54: /* Cache Control Register 1 */ + dev->pci_conf[addr] = val; + cpu_cache_ext_enabled = (val & 0xc0); + cpu_update_waitstates(); + break; + case 0x55: /* Cache Control Register 2 */ + dev->pci_conf[addr] = val; + cpu_cache_int_enabled = (val & 0x40); + cpu_update_waitstates(); + break; + case 0x58: /* RAMCFG0 */ + case 0x59: /* RAMCFG1 */ + dev->pci_conf[addr] = val; + break; + case 0x5a: /* Wildcat EDO RAM control */ + if (dev->type == 0x01) dev->pci_conf[addr] = val; - break; - case 0x54: /* Cache Control Register 1 */ - dev->pci_conf[addr] = val; - cpu_cache_ext_enabled = (val & 0xc0); - cpu_update_waitstates(); - break; - case 0x55: /* Cache Control Register 2 */ - dev->pci_conf[addr] = val; - cpu_cache_int_enabled = (val & 0x40); - cpu_update_waitstates(); - break; - case 0x58: /* RAMCFG0 */ - case 0x59: /* RAMCFG1 */ - dev->pci_conf[addr] = val; - break; - case 0x5A: /* Wildcat EDO RAM control */ - if (dev->type == 0x01) { - dev->pci_conf[addr] = val; - } - break; - case 0x5C: /* RAMCTL0 */ - case 0x5D: /* RAMCTL1 */ - case 0x5E: /* RAMCTL2 */ - case 0x5F: - case 0x60: - case 0x62: - /* Apricot XEN-PC Ruby/Jade BIOS requires bit 2 to be set or */ - /* CMOS setup hangs on subsequent runs after NVRAM is initialized */ - dev->pci_conf[addr] = val; - break; - case 0x64: /* A-B SMRAM regs */ - case 0x65: - dev->pci_conf[addr] = val; - vl82c59x_smram(dev); - break; - case 0x66: /* Shadow RAM */ - case 0x67: - case 0x68: - case 0x69: - dev->pci_conf[addr] = val; - vl82c59x_recalc(dev); - vl82c59x_smram(dev); - break; - case 0x6C: /* L2 Cacheability registers */ - case 0x6D: - case 0x6E: - case 0x6F: - case 0x70: - case 0x71: - case 0x74: /* Suspected PMRA registers */ - case 0x75: - case 0x76: - case 0x78: - case 0x79: - case 0x7A: - dev->pci_conf[addr] = val; - break; - case 0x7C: /* MISCSSET, bit 7 is SMRAM enable (for the E region) */ - /* io.c logging shows BIOSes setting Bit 7 here */ - dev->pci_conf[addr] = val; - vl82c59x_smram(dev); - break; - case 0x7D: /* Unknown but seems Wildcat-specific, Zeos and PB600 BIOSes hang if bit 3 is writable */ - if (dev->type == 0x01) { - dev->pci_conf[addr] = val & 0xf7; - } - break; - default: - if (addr > 0x3F) - vl82c59x_log(dev->log, "VL82c591: Unknown reg [W] (%02X, %02X) = %02X\n", func, addr, val); - break; + break; + case 0x5c ... 0x5e: /* RAMCTL0-RAMCTL2 */ + case 0x5f ... 0x60: + case 0x62: + /* Apricot XEN-PC Ruby/Jade BIOS requires bit 2 to be set or */ + /* CMOS setup hangs on subsequent runs after NVRAM is initialized */ + dev->pci_conf[addr] = val; + break; + case 0x64 ... 0x65: /* A-B SMRAM regs */ + dev->pci_conf[addr] = val; + vl82c59x_smram(dev); + break; + case 0x66 ... 0x69: /* Shadow RAM */ + dev->pci_conf[addr] = val; + vl82c59x_recalc(dev); + vl82c59x_smram(dev); + break; + case 0x6c ... 0x71: /* L2 Cacheability registers */ + case 0x74 ... 0x76: /* Suspected PMRA registers */ + case 0x78 ... 0x7a: + dev->pci_conf[addr] = val; + break; + case 0x7c: /* MISCSSET, bit 7 is SMRAM enable (for the E region) */ + /* io.c logging shows BIOSes setting Bit 7 here */ + dev->pci_conf[addr] = val; + vl82c59x_smram(dev); + break; + case 0x7d: /* Unknown but seems Wildcat-specific, Zeos and PB600 BIOSes hang if bit 3 is writable */ + if (dev->type == 0x01) + dev->pci_conf[addr] = val & 0xf7; + break; + default: + if (addr > 0x3f) + vl82c59x_log(dev->log, "VL82c591: Unknown reg [W] (%02X, %02X) = %02X\n", func, addr, val); + break; } } @@ -302,12 +280,10 @@ vl82c59x_read(int func, int addr, void *priv) const vl82c59x_t *dev = (vl82c59x_t *) priv; uint8_t ret = 0xff; - if (func == 0x00) { - switch (addr) { - default: - ret = dev->pci_conf[addr]; - break; - } + if (func == 0x00) switch (addr) { + default: + ret = dev->pci_conf[addr]; + break; } vl82c59x_log(dev->log, "[%04X:%08X] VL82c591: [R] (%02X, %02X) = %02X\n", CS, cpu_state.pc, func, addr, ret); @@ -324,110 +300,83 @@ vl82c59x_sb_write(int func, int addr, uint8_t val, void *priv) vl82c59x_log(dev->log, "[%04X:%08X] VL82c593: [W] (%02X, %02X) = %02X\n", CS, cpu_state.pc, func, addr, val); - if (func == 0x00) - switch (addr) { - case 0x04: - case 0x05: /* PCI Command Register */ + if (func == 0x00) switch (addr) { + case 0x04 ... 0x05: /* PCI Command Register */ dev->pci_conf_sb[addr] = val; break; - case 0x50: /* MISCSETC */ - case 0x51: /* MISCSETB */ - case 0x52: /* MISCSETA */ - case 0x53: - case 0x54: - case 0x55: - case 0x56: - case 0x57: - case 0x58: - case 0x59: - case 0x5A: - /* Has at least one GPIO bit. Compaq Presario 700/900 586 BIOS */ - /* uses bit 2 as an output to set the onboard ES688's base I/O */ - /* address. Bit 2 cleared = 220, bit 2 set = 240 */ - case 0x5C: /* Interrupt Assertion Level Register */ - case 0x5D: + case 0x50 ... 0x52: /* MISCSETC-MISCSETA */ + case 0x53 ... 0x5a: + /* Has at least one GPIO bit. Compaq Presario 700/900 586 BIOS */ + /* uses bit 2 as an output to set the onboard ES688's base I/O */ + /* address. Bit 2 cleared = 220, bit 2 set = 240 */ + case 0x5c ... 0x5d: /* Interrupt Assertion Level Register */ + dev->pci_conf_sb[addr] = val; + break; + case 0x60: /* SMI Enable Register */ + dev->pci_conf_sb[addr] = val; + break; + case 0x61: /* SMI Status Register */ + dev->pci_conf_sb[addr] = 0x00; + break; + case 0x62: /* SMI I/O port high byte */ + case 0x63: /* SMI I/O port low byte */ + dev->pci_conf_sb[addr] = val; + vl82c59x_set_pm_io(dev); + break; + case 0x64: /* System Event Enable Register 1 */ + case 0x66: /* System Event Enable Register 2 */ + case 0x68: /* System Event Enable Register 3 */ + dev->pci_conf_sb[addr] = val; + break; + case 0x65: /* System Event Status Register 1 */ + case 0x67: /* System Event Status Register 2 */ + case 0x69: /* System Event Status Register 3 */ + dev->pci_conf_sb[addr] = 0x00; + break; + case 0x6a: /* PCI Activity Control Register */ + /* Top 4 bits are Read/Clear */ + dev->pci_conf_sb[addr] = val & 0x0f; + break; + case 0x6b: /* Programmable I/O Range Register High Byte */ + dev->pci_conf_sb[addr] = val; + break; + case 0x6c: /* Programmable I/O Range Register Low Byte */ + case 0x6d: /* System Event Control Register/SMI Global Enable */ dev->pci_conf_sb[addr] = val; break; - case 0x60: /* SMI Enable Register */ - dev->pci_conf_sb[addr] = val; - break; - case 0x61: /* SMI Status Register */ - dev->pci_conf_sb[addr] = 0x00; - break; - case 0x62: /* SMI I/O port high byte */ - case 0x63: /* SMI I/O port low byte */ - dev->pci_conf_sb[addr] = val; - vl82c59x_set_pm_io(dev); - break; - case 0x64: /* System Event Enable Register 1 */ - dev->pci_conf_sb[addr] = val; - break; - case 0x65: /* System Event Status Register 1 */ - dev->pci_conf_sb[addr] = 0x00; - break; - case 0x66: /* System Event Enable Register 2 */ - dev->pci_conf_sb[addr] = val; - break; - case 0x67: /* System Event Status Register 2 */ - dev->pci_conf_sb[addr] = 0x00; - break; - case 0x68: /* System Event Enable Register 3 */ - dev->pci_conf_sb[addr] = val; - break; - case 0x69: /* System Event Status Register 3 */ - dev->pci_conf_sb[addr] = 0x00; - break; - case 0x6A: /* PCI Activity Control Register */ - dev->pci_conf_sb[addr] = val & 0x0f; /* Top 4 bits are Read/Clear */ - break; - case 0x6B: /* Programmable I/O Range Register High Byte */ - dev->pci_conf_sb[addr] = val; - break; - case 0x6C: /* Programmable I/O Range Register Low Byte */ - dev->pci_conf_sb[addr] = val; - break; - case 0x6D: /* System Event Control Register/SMI Global Enable */ - dev->pci_conf_sb[addr] = val; - break; - case 0x6E: - case 0x6F: - case 0x70: - case 0x71: - case 0x72: /* GPIO */ - /* Compaq Presario and Prolinea use bits 6-4 for setting ECP DMA */ - /* 011 (0x03) = DMA 3 (Default) */ - /* 100 (0x04) = DMA 0 */ - /* 111 (0x07) = DMA disabled */ - case 0x73: /* GPIO */ - dev->pci_conf_sb[addr] = val; - break; - case 0x74: /* PCI Interrupt Connection Register (PCIINT0/1) */ - dev->pci_conf_sb[addr] = val; - irq = irq_array[val & 0x07]; - pci_set_irq_routing(PCI_INTA, (irq != 0) ? irq : PCI_IRQ_DISABLED); - irq = irq_array[(val & 0x70) >> 4]; - pci_set_irq_routing(PCI_INTB, (irq != 0) ? irq : PCI_IRQ_DISABLED); - break; - case 0x75: /* PCI Interrupt Connection Register (PCIINT2/3) */ - dev->pci_conf_sb[addr] = val; - irq = irq_array[val & 0x07]; - pci_set_irq_routing(PCI_INTC, (irq != 0) ? irq : PCI_IRQ_DISABLED); - irq = irq_array[(val & 0x70) >> 4]; - pci_set_irq_routing(PCI_INTD, (irq != 0) ? irq : PCI_IRQ_DISABLED); - break; - case 0x76: /* PCI Interrupt Connection Register (ISA/PCIINT) */ - dev->pci_conf_sb[addr] = val; - break; - case 0x77: - case 0x78: - dev->pci_conf_sb[addr] = val; - break; - default: - if (addr > 0x3F) - vl82c59x_log(dev->log, "VL82c593: Unknown reg [W] (%02X, %02X) = %02X\n", func, addr, val); - break; + case 0x6e ... 0x72: /* GPIO */ + /* Compaq Presario and Prolinea use bits 6-4 for setting ECP DMA */ + /* 011 (0x03) = DMA 3 (Default) */ + /* 100 (0x04) = DMA 0 */ + /* 111 (0x07) = DMA disabled */ + case 0x73: /* GPIO */ + dev->pci_conf_sb[addr] = val; + break; + case 0x74: /* PCI Interrupt Connection Register (PCIINT0/1) */ + dev->pci_conf_sb[addr] = val; + irq = irq_array[val & 0x07]; + pci_set_irq_routing(PCI_INTA, (irq != 0) ? irq : PCI_IRQ_DISABLED); + irq = irq_array[(val & 0x70) >> 4]; + pci_set_irq_routing(PCI_INTB, (irq != 0) ? irq : PCI_IRQ_DISABLED); + break; + case 0x75: /* PCI Interrupt Connection Register (PCIINT2/3) */ + dev->pci_conf_sb[addr] = val; + irq = irq_array[val & 0x07]; + pci_set_irq_routing(PCI_INTC, (irq != 0) ? irq : PCI_IRQ_DISABLED); + irq = irq_array[(val & 0x70) >> 4]; + pci_set_irq_routing(PCI_INTD, (irq != 0) ? irq : PCI_IRQ_DISABLED); + break; + case 0x76: /* PCI Interrupt Connection Register (ISA/PCIINT) */ + dev->pci_conf_sb[addr] = val; + break; + case 0x77 ... 0x78: + dev->pci_conf_sb[addr] = val; + break; + default: + if (addr > 0x3f) + vl82c59x_log(dev->log, "VL82c593: Unknown reg [W] (%02X, %02X) = %02X\n", func, addr, val); + break; } - } static uint8_t @@ -436,30 +385,29 @@ vl82c59x_sb_read(int func, int addr, void *priv) const vl82c59x_t *dev = (vl82c59x_t *) priv; uint8_t ret = 0xff; - if (func == 0x00) - switch (addr) { - case 0x69: /* Lower two bits are a CPU speed readout per Compaq's Prolinea E series TRG */ - /* Per the Prolinea TRG bits 5/3/1 of 593 reg 0x73 must be set to 1 to read the jumpers */ - if (dev->is_compaq && (dev->pci_conf_sb[0x73] & 0x2A)) { - /* Set bit 2 to 1 as this is required for the Prolinea E to be properly identified - in Compaq Computer Setup. */ - ret = (dev->pci_conf_sb[addr] | 0x04); - if (cpu_busspeed <= 50000000) - ret = (ret & 0xfd); /* 50MHz: Bit 1 = 0 */ - else - ret = (ret | 0x02); /* 60MHz: Bit 1 = 1 */ + if (func == 0x00) switch (addr) { + case 0x69: + /* Lower two bits are a CPU speed readout per Compaq's Prolinea E series TRG */ + /* Per the Prolinea TRG bits 5/3/1 of 593 reg 0x73 must be set to 1 to read the jumpers */ + if (dev->is_compaq && (dev->pci_conf_sb[0x73] & 0x2A)) { + /* Set bit 2 to 1 as this is required for the Prolinea E to be properly identified + in Compaq Computer Setup. */ + ret = (dev->pci_conf_sb[addr] | 0x04); + if (cpu_busspeed <= 50000000) + ret = (ret & 0xfd); /* 50MHz: Bit 1 = 0 */ + else + ret = (ret | 0x02); /* 60MHz: Bit 1 = 1 */ - if (cpu_dmulti <= 1.5) - ret = (ret | 0x01); /* 1.5x mult: Bit 0 = 1 */ - else - ret = (ret & 0xfe); /* 2.0x mult: Bit 0 = 0 */ - } else { - ret = dev->pci_conf_sb[addr]; - } - break; - default: + if (cpu_dmulti <= 1.5) + ret = (ret | 0x01); /* 1.5x mult: Bit 0 = 1 */ + else + ret = (ret & 0xfe); /* 2.0x mult: Bit 0 = 0 */ + } else ret = dev->pci_conf_sb[addr]; - break; + break; + default: + ret = dev->pci_conf_sb[addr]; + break; } vl82c59x_log(dev->log, "[%04X:%08X] VL82c593: [R] (%02X, %02X) = %02X\n", CS, cpu_state.pc, func, addr, ret); From 8e482db009467dc7b9519c67d4576cd223f3a9ae Mon Sep 17 00:00:00 2001 From: WNT50 <173389620+WNT50@users.noreply.github.com> Date: Wed, 1 Oct 2025 22:11:42 +0800 Subject: [PATCH 033/233] Fix BIOS loading address of IBM PS/2 ESDI adapter (#6262) --- src/disk/hdc_esdi_mca.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/disk/hdc_esdi_mca.c b/src/disk/hdc_esdi_mca.c index 78a2f3183..b3c33675a 100644 --- a/src/disk/hdc_esdi_mca.c +++ b/src/disk/hdc_esdi_mca.c @@ -1220,6 +1220,12 @@ esdi_mca_write(int port, uint8_t val, void *priv) if (!(dev->pos_regs[3] & 8)) { switch (dev->pos_regs[3] & 7) { + case 0: + dev->bios = 0xc0000; + break; + case 1: + dev->bios = 0xc4000; + break; case 2: dev->bios = 0xc8000; break; From fc506d02e13ba365547eae77742055ed6fe48105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Wed, 1 Oct 2025 17:45:48 +0200 Subject: [PATCH 034/233] S3 ViRGE: Fix the LFB mappigs to operate in accordance with the documentation. Fix certain UVCONFIG-using games at 16 or 32 MB of machine RAM. --- src/video/vid_s3_virge.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index 8a139793c..edb276401 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1114,11 +1114,7 @@ s3_virge_updatemapping(virge_t *virge) mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); mem_mapping_disable(&virge->linear_mapping); } else { - if ((virge->chip == S3_VIRGEVX) || (virge->chip == S3_TRIO3D2X)) - virge->linear_base &= 0xfe000000; - else - virge->linear_base &= 0xfc000000; - + virge->linear_base &= ~(virge->linear_size - 1); mem_mapping_set_addr(&virge->linear_mapping, virge->linear_base, virge->linear_size); } svga->fb_only = 1; @@ -5190,7 +5186,10 @@ s3_virge_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) return; case 0x13: - svga->crtc[0x59] = (virge->chip == S3_VIRGEVX || virge->chip == S3_TRIO3D2X) ? (val & 0xfe) : (val & 0xfc); + if (virge->chip == S3_VIRGEVX || virge->chip == S3_TRIO3D2X) + svga->crtc[0x59] = (svga->crtc[0x59] & 0x01) | (val & 0xfe); + else + svga->crtc[0x59] = (svga->crtc[0x59] & 0x03) | (val & 0xfc); s3_virge_updatemapping(virge); return; From 430fa409ce5e0c475edf88def5b2ca4a30ef90ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Wed, 1 Oct 2025 17:52:29 +0200 Subject: [PATCH 035/233] S3 ViRGE: Remove an excess masking line. --- src/video/vid_s3_virge.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index edb276401..daf59aea6 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1113,10 +1113,8 @@ s3_virge_updatemapping(virge_t *virge) if (virge->linear_base == 0xa0000) { mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); mem_mapping_disable(&virge->linear_mapping); - } else { - virge->linear_base &= ~(virge->linear_size - 1); + } else mem_mapping_set_addr(&virge->linear_mapping, virge->linear_base, virge->linear_size); - } svga->fb_only = 1; } else { mem_mapping_disable(&virge->linear_mapping); From 5d194d8e8062c8553f56f68991ec18511d08b596 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 1 Oct 2025 18:36:00 +0200 Subject: [PATCH 036/233] Added AMD K6_2 570 MHz. --- src/cpu/cpu_table.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index 3adbc7202..9b01258ed 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -5319,6 +5319,23 @@ const cpu_family_t cpu_families[] = { .cache_write_cycles = 17, .atclk_div = 66 }, + { + .name = "570", + .cpu_type = CPU_K6_2C, + .fpus = fpus_internal, + .rspeed = 570000000, + .multi = 6.0, + .voltage = 2300, + .edx_reset = 0x58c, + .cpuid_model = 0x58c, + .cyrix_id = 0, + .cpu_flags = CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, + .mem_read_cycles = 52, + .mem_write_cycles = 52, + .cache_read_cycles = 18, + .cache_write_cycles = 18, + .atclk_div = 68 + }, { .name = "", 0 } } }, { From 4af766092f8cb7470d000246cbdcd979e1fc4338 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 1 Oct 2025 19:14:50 +0200 Subject: [PATCH 037/233] Also add the 600 MHz overclocked version of the 570 MHz. --- src/cpu/cpu_table.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index 9b01258ed..cb337b405 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -5336,6 +5336,23 @@ const cpu_family_t cpu_families[] = { .cache_write_cycles = 18, .atclk_div = 68 }, + { + .name = "600 (570 OC)", + .cpu_type = CPU_K6_2C, + .fpus = fpus_internal, + .rspeed = 600000000, + .multi = 6.0, + .voltage = 2300, + .edx_reset = 0x58c, + .cpuid_model = 0x58c, + .cyrix_id = 0, + .cpu_flags = CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, + .mem_read_cycles = 54, + .mem_write_cycles = 54, + .cache_read_cycles = 18, + .cache_write_cycles = 18, + .atclk_div = 72 + }, { .name = "", 0 } } }, { From 0beb22722a56022dccbbda04d9d881c268c24648 Mon Sep 17 00:00:00 2001 From: Toni Riikonen Date: Wed, 1 Oct 2025 22:07:23 +0300 Subject: [PATCH 038/233] Configurable FDD sound emulation timings (#6263) * Initial spindle emulation working for windows atleast * Spingle motor spin-up, spin-down implemented with smooth transitions to motor-on loop. * Moved fdd audio emulation to a separate file * Multiple drives sound emulation * Single sector movement sound emulations implemented * Rename project to Immersive86Box and update details Updated README to reflect the new project name and added details about the Immersive86Box features and future plans. * Revise contribution guidelines in CONTRIBUTING.md * Update vulnerability reporting instructions * System fan-sound next feature after basic fdd sound emulation is ready * v0.5 multitrack audio seek sfx * Removed unnecessary stuff * no .vs folder for git * Added currently used fdd sound effects and readme.txt for source of the files and intallation instructions * Add audio emulation installation instructions Added instructions for audio emulation installation. * Code and audio samples merged * Simplify audio emulation installation instructions * FDC seeking fixed, not instant anymore drive is set to busy during the operation and when it's finished at call fdc to set the appropriate fdc flags. Also added time logic to fdd to calculate seek duration and a callback function for it. * FDD sound samples volume control * Menu options to enable / disable fdd sound for all drives. DISABLE_FDD_AUDIO definition added, to disable the feature via cmake/build. * Revert readme etc. changes * Revert "Revise contribution guidelines in CONTRIBUTING.md" This reverts commit 98a0478225bbf8bf0fb0e7edfd5c00636ecc0eed. * Revert "Update vulnerability reporting instructions" This reverts commit 7d32cb659b018b26bdaa4a1e06ee9c3d09278aac. * Fixed merge issue * Removed excess files * Fixed PCJr seeking not to break the FDC implementation. Now seeking will take the "correct" amount of time for each system and the seek time is based on the track count. E.g. 40 track FDD system causes 40 track seek time to be 80/40 * 6ms * 40 tracks + 50ms = 480ms + 50ms -> 530ms. 80 track system full seek is 80/80 * 6ms * 80 + 50ms = 530ms, 40 track seek would take 240 + 50 = 290ms. * Fixed PS/1, PS/2 and PS/55 FDD issues. * FDD_AUDIO: Updating samples looked in executablePath/samples and if now found there, looks in the executable directory * Updated installation instructions * Removed samples path strcat use * fdd_audio 5.25 samples and support added * FDD audio timing/volume tunings * Timing fixes for authentity and special longer timings for PCJr * Fixed second drive motor keeps running when first drive is only accessed. * Fixed PCJr random failure issue, timings * CodeQL fix for load_wav-function. Check the filename to be proper filename * Revert "Fixed second drive motor keeps running when first drive is only accessed." This reverts commit 307b173ae7d40c9efafed8d432e01cce9808b111. * Teac 5.25" drive samples added. Added per drive audio selection to FDD settings. * Fixed merge issue * Fixed readme to include only Mitsumi samples under CC-BY license * Fixes merge problem * Fixes #6220: OS/2 Warp 3.0 install disk issue and NT 3.1 floppy disk issues. Changed the fdc->stat bit to 0x10 which states fdc busy. Previous implementation with seek time 0, set the ready flag 0x80 immediadely - which was correct for that time, but now as the drive is busy during seek, the value should 0x10. Implemented a backup for fdd commands during fdd seek to be processes after the seek is completed. * Fixed FDD reset * Floppy disk audio now gets settings from fdd_audio_profiles.cfg stored in roms/floppy -directory. Floppy settings audio seledtions are also populated by the settings from this config. * Changed samples per track, not seek_duration_per_track * Removed commented code. Returned total_track in configration * Fixed CodeQL errors --------- Co-authored-by: Toni Riikonen --- src/86box.c | 6 + src/config.c | 35 +- src/floppy/fdd.c | 6 +- src/floppy/fdd_audio.c | 793 ++++++++++++++++++++---------- src/include/86box/fdd.h | 7 - src/include/86box/fdd_audio.h | 46 +- src/qt/qt_settingsfloppycdrom.cpp | 73 ++- 7 files changed, 636 insertions(+), 330 deletions(-) diff --git a/src/86box.c b/src/86box.c index 591772458..4baed45f5 100644 --- a/src/86box.c +++ b/src/86box.c @@ -79,6 +79,7 @@ #include <86box/mouse.h> #include <86box/gameport.h> #include <86box/fdd.h> +#include <86box/fdd_audio.h> #include <86box/fdc.h> #include <86box/fdc_ext.h> #include <86box/hdd.h> @@ -1380,6 +1381,11 @@ pc_init_modules(void) video_init(); fdd_init(); + + if (fdd_sounds_enabled) { + fdd_audio_load_profiles(); + fdd_audio_init(); + } sound_init(); diff --git a/src/config.c b/src/config.c index d4afe9d81..102f9de97 100644 --- a/src/config.c +++ b/src/config.c @@ -54,6 +54,7 @@ #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/fdd.h> +#include <86box/fdd_audio.h> #include <86box/fdc_ext.h> #include <86box/gameport.h> #include <86box/keyboard.h> @@ -1379,10 +1380,15 @@ load_floppy_and_cdrom_drives(void) int c; int d; int count = cdrom_get_type_count(); + +#ifndef DISABLE_FDD_AUDIO + fdd_audio_load_profiles(); +#endif memset(temp, 0x00, sizeof(temp)); for (c = 0; c < FDD_NUM; c++) { sprintf(temp, "fdd_%02i_type", c + 1); + p = ini_section_get_string(cat, temp, (c < 2) ? "525_2dd" : "none"); if (!strcmp(p, "525_2hd_ps2")) d = fdd_get_from_internal_name("525_2hd"); @@ -1437,14 +1443,14 @@ load_floppy_and_cdrom_drives(void) sprintf(temp, "fdd_%02i_check_bpb", c + 1); ini_section_delete_var(cat, temp); } - sprintf(temp, "fdd_%02i_audio", c + 1); - int def_prof = FDD_AUDIO_PROFILE_NONE; - int prof = ini_section_get_int(cat, temp, def_prof); - if (prof < 0 || prof >= FDD_AUDIO_PROFILE_MAX) - prof = def_prof; + sprintf(temp, "fdd_%02i_audio", c + 1); +#ifndef DISABLE_FDD_AUDIO + p = ini_section_get_string(cat, temp, "none"); + int prof = fdd_audio_get_profile_by_internal_name(p); fdd_set_audio_profile(c, prof); - if (prof == def_prof) - ini_section_delete_var(cat, temp); +#else + fdd_set_audio_profile(c, 0); +#endif for (int i = 0; i < MAX_PREV_IMAGES; i++) { fdd_image_history[c][i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char)); @@ -3433,12 +3439,17 @@ save_floppy_and_cdrom_drives(void) } sprintf(temp, "fdd_%02i_audio", c + 1); - int def_prof = FDD_AUDIO_PROFILE_NONE; - int prof = fdd_get_audio_profile(c); - if (prof == def_prof) +#ifndef DISABLE_FDD_AUDIO + int prof = fdd_get_audio_profile(c); + const char *internal_name = fdd_audio_get_profile_internal_name(prof); + if (internal_name && strcmp(internal_name, "none") != 0) { + ini_section_set_string(cat, temp, internal_name); + } else { ini_section_delete_var(cat, temp); - else - ini_section_set_int(cat, temp, prof); + } +#else + ini_section_delete_var(cat, temp); +#endif } for (c = 0; c < CDROM_NUM; c++) { diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index d4d9d4476..e36b2ac30 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -409,8 +409,10 @@ fdd_seek(int drive, int track_diff) timer_add(&(fdd_seek_timer[drive]), fdd_seek_complete_callback, &drives[drive], 0); } - double initial_seek_time = FDC_FLAG_PCJR & fdd_fdc->flags ? 40000.0 : 15000.0; - double track_seek_time = FDC_FLAG_PCJR & fdd_fdc->flags ? 10000.0 : 6000.0; + /* Get seek timings from audio profile configuration */ + double initial_seek_time = fdd_audio_get_seek_time(drive, 1, actual_track_diff); + double track_seek_time = fdd_audio_get_seek_time(drive, 0, actual_track_diff); + fdd_log("Seek timing for drive %d: initial %.2f ms, per track %.2f ms\n", drive, initial_seek_time, track_seek_time); uint64_t seek_time_us = (initial_seek_time + (abs(actual_track_diff) * track_seek_time)) * TIMER_USEC; timer_set_delay_u64(&fdd_seek_timer[drive], seek_time_us); } diff --git a/src/floppy/fdd_audio.c b/src/floppy/fdd_audio.c index afa78002f..14ea6f9f2 100644 --- a/src/floppy/fdd_audio.c +++ b/src/floppy/fdd_audio.c @@ -24,23 +24,28 @@ #include <86box/timer.h> #include <86box/fdd.h> #include <86box/fdd_audio.h> +#include <86box/fdc.h> #include <86box/mem.h> #include <86box/rom.h> #include <86box/sound.h> #include <86box/plat.h> #include <86box/path.h> +#include <86box/ini.h> #ifndef DISABLE_FDD_AUDIO +/* Global audio profile configurations */ +static fdd_audio_profile_config_t audio_profiles[FDD_AUDIO_PROFILE_MAX]; +static int audio_profile_count = 0; + /* Audio sample structure */ typedef struct { - const char *filename; - int16_t *buffer; - int samples; - float volume; + char filename[512]; + int16_t *buffer; + int samples; + float volume; } audio_sample_t; -/* Single step audio state */ typedef struct { int position; int active; @@ -64,77 +69,8 @@ typedef struct { audio_sample_t multi_track_seek; } drive_audio_samples_t; -/* 5.25" Teac FD-55GFR sample set */ -static drive_audio_samples_t samples_teac = { - .spindlemotor_start = { - .filename = "roms/floppy/samples/TeacFD-55GFR_5.25_1.2MB_motor_start_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 3.0f - }, - .spindlemotor_loop = { - .filename = "roms/floppy/samples/TeacFD-55GFR_5.25_1.2MB_motor_loop_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 3.0f - }, - .spindlemotor_stop = { - .filename = "roms/floppy/samples/TeacFD-55GFR_5.25_1.2MB_motor_stop_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 3.0f - }, - .single_track_step = { - .filename = "roms/floppy/samples/TeacFD-55GFR_5.25_1.2MB_track_step_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 2.0f - }, - .multi_track_seek = { - .filename = "roms/floppy/samples/TeacFD_55GFR_5.25_1.2MB_seekupdown_80_tracks1100ms_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 2.0f - } -}; - -/* 3.5" drive audio samples (Mitsumi) */ -static drive_audio_samples_t samples_35 = { - .spindlemotor_start = { - .filename = "roms/floppy/samples/mitsumi_spindle_motor_start_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 0.2f - }, - .spindlemotor_loop = { - .filename = "roms/floppy/samples/mitsumi_spindle_motor_loop_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 0.2f - }, - .spindlemotor_stop = { - .filename = "roms/floppy/samples/mitsumi_spindle_motor_stop_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 0.2f - }, - .single_track_step = { - .filename = "roms/floppy/samples/mitsumi_track_step_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 1.0f - }, - .multi_track_seek = { - .filename = "roms/floppy/samples/mitsumi_seek_80_tracks_495ms_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 1.0f - } -}; - -/* 5.25" drive audio samples (Panasonic) */ -static drive_audio_samples_t samples_525 = { - .spindlemotor_start = { - .filename = "roms/floppy/samples/Panasonic_JU-475-5_5.25_1.2MB_motor_start_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 1.0f - }, - .spindlemotor_loop = { - .filename = "roms/floppy/samples/Panasonic_JU-475-5_5.25_1.2MB_motor_loop_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 1.0f - }, - .spindlemotor_stop = { - .filename = "roms/floppy/samples/Panasonic_JU-475-5_5.25_1.2MB_motor_stop_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 1.0f - }, - .single_track_step = { - .filename = "roms/floppy/samples/Panasonic_JU-475-5_5.25_1.2MB_track_step_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 2.0f - }, - .multi_track_seek = { - .filename = "roms/floppy/samples/Panasonic_JU-475-5_5.25_1.2MB_seekup_40_tracks_285ms_5ms_per_track_48000_16_1_PCM.wav", - .buffer = NULL, .samples = 0, .volume = 2.0f - } -}; +/* Dynamic sample storage for each profile */ +static drive_audio_samples_t profile_samples[FDD_AUDIO_PROFILE_MAX]; /* Audio state for each drive */ static int spindlemotor_pos[FDD_NUM] = {}; @@ -149,132 +85,376 @@ static single_step_state_t single_step_state[FDD_NUM] = {}; static multi_seek_state_t multi_seek_state[FDD_NUM] = {}; extern uint64_t motoron[FDD_NUM]; -extern char exe_path[2048]; /* path (dir) of executable */ +extern char exe_path[2048]; -extern int fdd_get_audio_profile(int drive); /* from fdd.h */ +extern int fdd_get_audio_profile(int drive); /* Forward declaration */ static int16_t *load_wav(const char *filename, int *sample_count); +#ifdef ENABLE_FDD_LOG +int fdc_do_log = ENABLE_FDD_LOG; + +static void +fdd_log(const char *fmt, ...) +{ + va_list ap; + + if (fdc_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +# else +# define fdd_log(fmt, ...) +# endif + +/* Logging function for audio profile parameters */ +static void +fdd_audio_log_profile_params(int drive, const fdd_audio_profile_config_t* profile) +{ + if (!profile) { + fdd_log("FDD Audio Drive %d: No profile assigned\n", drive); + return; + } + + fdd_log("FDD Audio Drive %d Profile Parameters:\n", drive); + fdd_log(" Profile ID: %d\n", profile->id); + fdd_log(" Profile Name: %s\n", profile->name); + fdd_log(" Internal Name: %s\n", profile->internal_name); + + fdd_log(" Sample Files:\n"); + fdd_log(" Spindle Start: %s (volume: %.2f)\n", + profile->spindlemotor_start.filename, profile->spindlemotor_start.volume); + fdd_log(" Spindle Loop: %s (volume: %.2f)\n", + profile->spindlemotor_loop.filename, profile->spindlemotor_loop.volume); + fdd_log(" Spindle Stop: %s (volume: %.2f)\n", + profile->spindlemotor_stop.filename, profile->spindlemotor_stop.volume); + fdd_log(" Single Step: %s (volume: %.2f)\n", + profile->single_track_step.filename, profile->single_track_step.volume); + fdd_log(" Multi Seek: %s (volume: %.2f)\n", + profile->multi_track_seek.filename, profile->multi_track_seek.volume); + + fdd_log(" Timing Parameters:\n"); + fdd_log(" Samples Per Track: %d samples\n", profile->samples_per_track); + fdd_log(" Total Tracks: %d\n", profile->total_tracks); + fdd_log(" Initial Seek Time: %.1f µs\n", profile->initial_seek_time); + fdd_log(" Initial Seek Time (PCjr): %.1f µs\n", profile->initial_seek_time_pcjr); + fdd_log(" Track Seek Time: %.1f µs\n", profile->track_seek_time); + fdd_log(" Track Seek Time (PCjr): %.1f µs\n", profile->track_seek_time_pcjr); +} + +/* Log audio profile parameters for a specific drive */ +void +fdd_audio_log_drive_profile(int drive) +{ + if (drive < 0 || drive >= FDD_NUM) { + fdd_log("FDD Audio: Invalid drive number %d\n", drive); + return; + } + + int profile_id = fdd_get_audio_profile(drive); + const fdd_audio_profile_config_t* profile = fdd_audio_get_profile(profile_id); + + fdd_log("FDD Audio Drive %d: Using profile %d\n", drive, profile_id); + fdd_audio_log_profile_params(drive, profile); +} + +/* Log only the audio profiles that are actually used by configured drives */ +static void +fdd_audio_log_active_profiles(void) +{ + fdd_log("FDD Audio: Checking active drive configurations...\n"); + int active_drive_count = 0; + + for (int drive = 0; drive < FDD_NUM; drive++) { + if (fdd_get_type(drive) == 0) + continue; + + active_drive_count++; + int profile_id = fdd_get_audio_profile(drive); + if (profile_id >= 0 && profile_id < audio_profile_count) { + fdd_log("FDD Audio: Drive %d (configured) uses profile %d\n", drive, profile_id); + fdd_audio_log_profile_params(drive, &audio_profiles[profile_id]); + } + } + + if (active_drive_count == 0) { + fdd_log("FDD Audio: No drives configured - no audio profiles to log\n"); + return; + } + + fdd_log("FDD Audio: Active audio profiles for %d configured drive(s):\n", active_drive_count); +} + +void +fdd_audio_load_profiles(void) +{ + char config_path[2048]; + ini_t profiles_ini; + + /* Validate exe_path to prevent directory traversal attacks */ + if (exe_path == NULL || strlen(exe_path) == 0) { + fdd_log("FDD Audio: Invalid exe_path\n"); + return; + } + + /* Check for directory traversal sequences */ + if (strstr(exe_path, "..") != NULL) { + fdd_log("FDD Audio: Directory traversal detected in exe_path\n"); + return; + } + + path_append_filename(config_path, exe_path, "roms/floppy/fdd_audio_profiles.cfg"); + + /* Additional validation of the final path */ + if (strstr(config_path, "..") != NULL) { + fdd_log("FDD Audio: Directory traversal detected in config path: %s\n", config_path); + return; + } + + profiles_ini = ini_read(config_path); + if (profiles_ini == NULL) { + fdd_log("FDD Audio: Could not load profiles from %s\n", config_path); + return; + } + + audio_profile_count = 0; + + /* Load profiles by trying known profile section names */ + for (int i = 0; i < FDD_AUDIO_PROFILE_MAX && audio_profile_count < FDD_AUDIO_PROFILE_MAX; i++) { + char section_name[64]; + snprintf(section_name, sizeof(section_name), "Profile \"%d\"", i); + + ini_section_t section = ini_find_section(profiles_ini, section_name); + if (section) { + fdd_audio_profile_config_t *profile = &audio_profiles[audio_profile_count]; + + /* Load profile configuration */ + profile->id = ini_section_get_int(section, "id", audio_profile_count); + + const char *name = ini_section_get_string(section, "name", "Unknown"); + strncpy(profile->name, name, sizeof(profile->name) - 1); + profile->name[sizeof(profile->name) - 1] = '\0'; + + const char *internal_name = ini_section_get_string(section, "internal_name", "unknown"); + strncpy(profile->internal_name, internal_name, sizeof(profile->internal_name) - 1); + profile->internal_name[sizeof(profile->internal_name) - 1] = '\0'; + + /* Load sample configurations */ + const char *filename = ini_section_get_string(section, "spindlemotor_start_file", ""); + strncpy(profile->spindlemotor_start.filename, filename, sizeof(profile->spindlemotor_start.filename) - 1); + profile->spindlemotor_start.filename[sizeof(profile->spindlemotor_start.filename) - 1] = '\0'; + profile->spindlemotor_start.volume = ini_section_get_double(section, "spindlemotor_start_volume", 1.0); + + filename = ini_section_get_string(section, "spindlemotor_loop_file", ""); + strncpy(profile->spindlemotor_loop.filename, filename, sizeof(profile->spindlemotor_loop.filename) - 1); + profile->spindlemotor_loop.filename[sizeof(profile->spindlemotor_loop.filename) - 1] = '\0'; + profile->spindlemotor_loop.volume = ini_section_get_double(section, "spindlemotor_loop_volume", 1.0); + + filename = ini_section_get_string(section, "spindlemotor_stop_file", ""); + strncpy(profile->spindlemotor_stop.filename, filename, sizeof(profile->spindlemotor_stop.filename) - 1); + profile->spindlemotor_stop.filename[sizeof(profile->spindlemotor_stop.filename) - 1] = '\0'; + profile->spindlemotor_stop.volume = ini_section_get_double(section, "spindlemotor_stop_volume", 1.0); + + filename = ini_section_get_string(section, "single_track_step_file", ""); + strncpy(profile->single_track_step.filename, filename, sizeof(profile->single_track_step.filename) - 1); + profile->single_track_step.filename[sizeof(profile->single_track_step.filename) - 1] = '\0'; + profile->single_track_step.volume = ini_section_get_double(section, "single_track_step_volume", 1.0); + + filename = ini_section_get_string(section, "multi_track_seek_file", ""); + strncpy(profile->multi_track_seek.filename, filename, sizeof(profile->multi_track_seek.filename) - 1); + profile->multi_track_seek.filename[sizeof(profile->multi_track_seek.filename) - 1] = '\0'; + profile->multi_track_seek.volume = ini_section_get_double(section, "multi_track_seek_volume", 1.0); + + /* Load timing configurations */ + profile->samples_per_track = ini_section_get_int(section, "samples_per_track", 297); + profile->total_tracks = ini_section_get_int(section, "total_tracks", 80); + profile->initial_seek_time = ini_section_get_double(section, "initial_seek_time", 15000.0); + profile->initial_seek_time_pcjr = ini_section_get_double(section, "initial_seek_time_pcjr", 40000.0); + profile->track_seek_time = ini_section_get_double(section, "track_seek_time", 6000.0); + profile->track_seek_time_pcjr = ini_section_get_double(section, "track_seek_time_pcjr", 10000.0); + + audio_profile_count++; + } + } + + ini_close(profiles_ini); + + fdd_log("FDD Audio: Loaded %d audio profiles from %s\n", audio_profile_count, config_path); +} + +static void load_profile_samples(int profile_id) { + if (profile_id <= 0 || profile_id >= audio_profile_count) + return; + + fdd_audio_profile_config_t *config = &audio_profiles[profile_id]; + drive_audio_samples_t *samples = &profile_samples[profile_id]; + + fdd_log("FDD Audio: Loading samples for profile %d (%s)\n", + profile_id, config->name); + + /* Load samples if not already loaded */ + if (samples->spindlemotor_start.buffer == NULL && config->spindlemotor_start.filename[0]) { + strcpy(samples->spindlemotor_start.filename, config->spindlemotor_start.filename); + samples->spindlemotor_start.volume = config->spindlemotor_start.volume; + samples->spindlemotor_start.buffer = load_wav(config->spindlemotor_start.filename, + &samples->spindlemotor_start.samples); + if (samples->spindlemotor_start.buffer) { + fdd_log(" Loaded spindlemotor_start: %s (%d samples, volume %.2f)\n", + config->spindlemotor_start.filename, + samples->spindlemotor_start.samples, + config->spindlemotor_start.volume); + } else { + fdd_log(" Failed to load spindlemotor_start: %s\n", + config->spindlemotor_start.filename); + } + } + + if (samples->spindlemotor_loop.buffer == NULL && config->spindlemotor_loop.filename[0]) { + strcpy(samples->spindlemotor_loop.filename, config->spindlemotor_loop.filename); + samples->spindlemotor_loop.volume = config->spindlemotor_loop.volume; + samples->spindlemotor_loop.buffer = load_wav(config->spindlemotor_loop.filename, + &samples->spindlemotor_loop.samples); + if (samples->spindlemotor_loop.buffer) { + fdd_log(" Loaded spindlemotor_loop: %s (%d samples, volume %.2f)\n", + config->spindlemotor_loop.filename, + samples->spindlemotor_loop.samples, + config->spindlemotor_loop.volume); + } else { + fdd_log(" Failed to load spindlemotor_loop: %s\n", + config->spindlemotor_loop.filename); + } + } + + if (samples->spindlemotor_stop.buffer == NULL && config->spindlemotor_stop.filename[0]) { + strcpy(samples->spindlemotor_stop.filename, config->spindlemotor_stop.filename); + samples->spindlemotor_stop.volume = config->spindlemotor_stop.volume; + samples->spindlemotor_stop.buffer = load_wav(config->spindlemotor_stop.filename, + &samples->spindlemotor_stop.samples); + if (samples->spindlemotor_stop.buffer) { + fdd_log(" Loaded spindlemotor_stop: %s (%d samples, volume %.2f)\n", + config->spindlemotor_stop.filename, + samples->spindlemotor_stop.samples, + config->spindlemotor_stop.volume); + } else { + fdd_log(" Failed to load spindlemotor_stop: %s\n", + config->spindlemotor_stop.filename); + } + } + + if (samples->single_track_step.buffer == NULL && config->single_track_step.filename[0]) { + strcpy(samples->single_track_step.filename, config->single_track_step.filename); + samples->single_track_step.volume = config->single_track_step.volume; + samples->single_track_step.buffer = load_wav(config->single_track_step.filename, + &samples->single_track_step.samples); + if (samples->single_track_step.buffer) { + fdd_log(" Loaded single_track_step: %s (%d samples, volume %.2f)\n", + config->single_track_step.filename, + samples->single_track_step.samples, + config->single_track_step.volume); + } else { + fdd_log(" Failed to load single_track_step: %s\n", + config->single_track_step.filename); + } + } + + if (samples->multi_track_seek.buffer == NULL && config->multi_track_seek.filename[0]) { + strcpy(samples->multi_track_seek.filename, config->multi_track_seek.filename); + samples->multi_track_seek.volume = config->multi_track_seek.volume; + samples->multi_track_seek.buffer = load_wav(config->multi_track_seek.filename, + &samples->multi_track_seek.samples); + if (samples->multi_track_seek.buffer) { + fdd_log(" Loaded multi_track_seek: %s (%d samples, volume %.2f)\n", + config->multi_track_seek.filename, + samples->multi_track_seek.samples, + config->multi_track_seek.volume); + } else { + fdd_log(" Failed to load multi_track_seek: %s\n", + config->multi_track_seek.filename); + } + } +} static drive_audio_samples_t * get_drive_samples(int drive) { - switch (fdd_get_audio_profile(drive)) { - case FDD_AUDIO_PROFILE_PANASONIC: - return &samples_525; - case FDD_AUDIO_PROFILE_TEAC: - return &samples_teac; - case FDD_AUDIO_PROFILE_MITSUMI: - return &samples_35; - default: - return NULL; - } + int profile_id = fdd_get_audio_profile(drive); + if (profile_id <= 0 || profile_id >= audio_profile_count) + return NULL; + + /* Samples are preloaded during fdd_audio_init */ + return &profile_samples[profile_id]; } -static int16_t * -load_wav(const char *filename, int *sample_count) +/* Public API functions */ +int fdd_audio_get_profile_count(void) { + return audio_profile_count; +} + +const fdd_audio_profile_config_t* fdd_audio_get_profile(int id) { + if (id < 0 || id >= audio_profile_count) + return NULL; + return &audio_profiles[id]; +} + +const char* fdd_audio_get_profile_name(int id) { + if (id < 0 || id >= audio_profile_count) + return NULL; + return audio_profiles[id].name; +} + +const char* fdd_audio_get_profile_internal_name(int id) { + if (id < 0 || id >= audio_profile_count) + return NULL; + return audio_profiles[id].internal_name; +} + +int +fdd_audio_get_profile_by_internal_name(const char *internal_name) { - FILE *f = NULL; + if (!internal_name || !*internal_name) + return 0; - if ((filename == NULL) || (strlen(filename) == 0)) - return NULL; + if (audio_profile_count == 0) + fdd_audio_load_profiles(); - if (strstr(filename, "..") != NULL) - return NULL; - - f = rom_fopen(filename, "rb"); - if (f == NULL) - return NULL; - - wav_header_t hdr; - if (fread(&hdr, sizeof(hdr), 1, f) != 1) { - fclose(f); - return NULL; + for (int i = 0; i < audio_profile_count; i++) { + if (!strcmp(audio_profiles[i].internal_name, internal_name)) + return i; } + return 0; +} - if (memcmp(hdr.riff, "RIFF", 4) || memcmp(hdr.wave, "WAVE", 4) || memcmp(hdr.fmt, "fmt ", 4) || memcmp(hdr.data, "data", 4)) { - fclose(f); - return NULL; +double fdd_audio_get_seek_time(int drive, int is_initial, int track_count) { + int profile_id = fdd_get_audio_profile(drive); + if (profile_id <= 0 || profile_id >= audio_profile_count) { + /* Return default values */ + return is_initial ? 15000.0 : 6000.0; } - - /* Accept both mono and stereo, 16-bit PCM */ - if (hdr.audio_format != 1 || hdr.bits_per_sample != 16 || (hdr.num_channels != 1 && hdr.num_channels != 2)) { - fclose(f); - return NULL; - } - - int input_samples = hdr.data_size / 2; /* 2 bytes per sample */ - int16_t *input_data = malloc(hdr.data_size); - if (!input_data) { - fclose(f); - return NULL; - } - - if (fread(input_data, 1, hdr.data_size, f) != hdr.data_size) { - free(input_data); - fclose(f); - return NULL; - } - fclose(f); - - int16_t *output_data; - int output_samples; - - if (hdr.num_channels == 1) { - /* Convert mono to stereo */ - output_samples = input_samples; /* Number of stereo sample pairs */ - output_data = malloc(input_samples * 2 * sizeof(int16_t)); /* Allocate for stereo */ - if (!output_data) { - free(input_data); - return NULL; - } - - /* Convert mono to stereo by duplicating each sample */ - for (int i = 0; i < input_samples; i++) { - output_data[i * 2] = input_data[i]; /* Left channel */ - output_data[i * 2 + 1] = input_data[i]; /* Right channel */ - } - - free(input_data); + + fdd_audio_profile_config_t *profile = &audio_profiles[profile_id]; + + /* Check if using PCjr timing */ + extern fdc_t *fdd_fdc; + int is_pcjr = (fdd_fdc && (fdd_fdc->flags & FDC_FLAG_PCJR)); + + if (is_initial) { + return is_pcjr ? profile->initial_seek_time_pcjr : profile->initial_seek_time; } else { - /* Already stereo */ - output_data = input_data; - output_samples = input_samples / 2; /* Number of stereo sample pairs */ + return is_pcjr ? profile->track_seek_time_pcjr : profile->track_seek_time; } - - if (sample_count) - *sample_count = output_samples; - - return output_data; } void fdd_audio_init(void) { - int i; - - /* Load audio samples for both drive types */ - samples_35.spindlemotor_start.buffer = load_wav(samples_35.spindlemotor_start.filename, &samples_35.spindlemotor_start.samples); - samples_35.spindlemotor_loop.buffer = load_wav(samples_35.spindlemotor_loop.filename, &samples_35.spindlemotor_loop.samples); - samples_35.spindlemotor_stop.buffer = load_wav(samples_35.spindlemotor_stop.filename, &samples_35.spindlemotor_stop.samples); - samples_35.single_track_step.buffer = load_wav(samples_35.single_track_step.filename, &samples_35.single_track_step.samples); - samples_35.multi_track_seek.buffer = load_wav(samples_35.multi_track_seek.filename, &samples_35.multi_track_seek.samples); - - samples_525.spindlemotor_start.buffer = load_wav(samples_525.spindlemotor_start.filename, &samples_525.spindlemotor_start.samples); - samples_525.spindlemotor_loop.buffer = load_wav(samples_525.spindlemotor_loop.filename, &samples_525.spindlemotor_loop.samples); - samples_525.spindlemotor_stop.buffer = load_wav(samples_525.spindlemotor_stop.filename, &samples_525.spindlemotor_stop.samples); - samples_525.single_track_step.buffer = load_wav(samples_525.single_track_step.filename, &samples_525.single_track_step.samples); - samples_525.multi_track_seek.buffer = load_wav(samples_525.multi_track_seek.filename, &samples_525.multi_track_seek.samples); - - samples_teac.spindlemotor_start.buffer = load_wav(samples_teac.spindlemotor_start.filename, &samples_teac.spindlemotor_start.samples); - samples_teac.spindlemotor_loop.buffer = load_wav(samples_teac.spindlemotor_loop.filename, &samples_teac.spindlemotor_loop.samples); - samples_teac.spindlemotor_stop.buffer = load_wav(samples_teac.spindlemotor_stop.filename, &samples_teac.spindlemotor_stop.samples); - samples_teac.single_track_step.buffer = load_wav(samples_teac.single_track_step.filename, &samples_teac.single_track_step.samples); - samples_teac.multi_track_seek.buffer = load_wav(samples_teac.multi_track_seek.filename, &samples_teac.multi_track_seek.samples); + /* Load audio profiles configuration */ + fdd_audio_load_profiles(); /* Initialize audio state for all drives */ - for (i = 0; i < FDD_NUM; i++) { + for (int i = 0; i < FDD_NUM; i++) { spindlemotor_pos[i] = 0; spindlemotor_state[i] = MOTOR_STATE_STOPPED; spindlemotor_fade_volume[i] = 1.0f; @@ -292,95 +472,62 @@ fdd_audio_init(void) multi_seek_state[i].to_track = -1; } + /* Preload audio samples for each drive's selected profile */ + for (int drive = 0; drive < FDD_NUM; drive++) { + int profile_id = fdd_get_audio_profile(drive); + if (profile_id > 0 && profile_id < audio_profile_count) { + load_profile_samples(profile_id); + } + } + + /* Log only the active profiles used by configured drives */ + fdd_audio_log_active_profiles(); + /* Initialize sound thread */ sound_fdd_thread_init(); + + fdd_log("FDD Audio: Initialization complete\n"); } void fdd_audio_close(void) { - /* Free 3.5" samples */ - if (samples_35.spindlemotor_start.buffer) { - free(samples_35.spindlemotor_start.buffer); - samples_35.spindlemotor_start.buffer = NULL; - samples_35.spindlemotor_start.samples = 0; - } - if (samples_35.spindlemotor_loop.buffer) { - free(samples_35.spindlemotor_loop.buffer); - samples_35.spindlemotor_loop.buffer = NULL; - samples_35.spindlemotor_loop.samples = 0; - } - if (samples_35.spindlemotor_stop.buffer) { - free(samples_35.spindlemotor_stop.buffer); - samples_35.spindlemotor_stop.buffer = NULL; - samples_35.spindlemotor_stop.samples = 0; - } - if (samples_35.single_track_step.buffer) { - free(samples_35.single_track_step.buffer); - samples_35.single_track_step.buffer = NULL; - samples_35.single_track_step.samples = 0; - } - if (samples_35.multi_track_seek.buffer) { - free(samples_35.multi_track_seek.buffer); - samples_35.multi_track_seek.buffer = NULL; - samples_35.multi_track_seek.samples = 0; + fdd_log("FDD Audio: Shutting down audio system\n"); + + /* Free loaded profile samples */ + for (int profile_id = 0; profile_id < audio_profile_count; profile_id++) { + drive_audio_samples_t *samples = &profile_samples[profile_id]; + + if (samples->spindlemotor_start.buffer) { + free(samples->spindlemotor_start.buffer); + samples->spindlemotor_start.buffer = NULL; + samples->spindlemotor_start.samples = 0; + } + if (samples->spindlemotor_loop.buffer) { + free(samples->spindlemotor_loop.buffer); + samples->spindlemotor_loop.buffer = NULL; + samples->spindlemotor_loop.samples = 0; + } + if (samples->spindlemotor_stop.buffer) { + free(samples->spindlemotor_stop.buffer); + samples->spindlemotor_stop.buffer = NULL; + samples->spindlemotor_stop.samples = 0; + } + if (samples->single_track_step.buffer) { + free(samples->single_track_step.buffer); + samples->single_track_step.buffer = NULL; + samples->single_track_step.samples = 0; + } + if (samples->multi_track_seek.buffer) { + free(samples->multi_track_seek.buffer); + samples->multi_track_seek.buffer = NULL; + samples->multi_track_seek.samples = 0; + } } - /* Free 5.25" samples */ - if (samples_525.spindlemotor_start.buffer) { - free(samples_525.spindlemotor_start.buffer); - samples_525.spindlemotor_start.buffer = NULL; - samples_525.spindlemotor_start.samples = 0; - } - if (samples_525.spindlemotor_loop.buffer) { - free(samples_525.spindlemotor_loop.buffer); - samples_525.spindlemotor_loop.buffer = NULL; - samples_525.spindlemotor_loop.samples = 0; - } - if (samples_525.spindlemotor_stop.buffer) { - free(samples_525.spindlemotor_stop.buffer); - samples_525.spindlemotor_stop.buffer = NULL; - samples_525.spindlemotor_stop.samples = 0; - } - if (samples_525.single_track_step.buffer) { - free(samples_525.single_track_step.buffer); - samples_525.single_track_step.buffer = NULL; - samples_525.single_track_step.samples = 0; - } - if (samples_525.multi_track_seek.buffer) { - free(samples_525.multi_track_seek.buffer); - samples_525.multi_track_seek.buffer = NULL; - samples_525.multi_track_seek.samples = 0; - } - - if (samples_teac.spindlemotor_start.buffer) { - free(samples_teac.spindlemotor_start.buffer); - samples_teac.spindlemotor_start.buffer = NULL; - samples_teac.spindlemotor_start.samples = 0; - } - if (samples_teac.spindlemotor_loop.buffer) { - free(samples_teac.spindlemotor_loop.buffer); - samples_teac.spindlemotor_loop.buffer = NULL; - samples_teac.spindlemotor_loop.samples = 0; - } - if (samples_teac.spindlemotor_stop.buffer) { - free(samples_teac.spindlemotor_stop.buffer); - samples_teac.spindlemotor_stop.buffer = NULL; - samples_teac.spindlemotor_stop.samples = 0; - } - if (samples_teac.single_track_step.buffer) { - free(samples_teac.single_track_step.buffer); - samples_teac.single_track_step.buffer = NULL; - samples_teac.single_track_step.samples = 0; - } - if (samples_teac.multi_track_seek.buffer) { - free(samples_teac.multi_track_seek.buffer); - samples_teac.multi_track_seek.buffer = NULL; - samples_teac.multi_track_seek.samples = 0; - } - - /* End sound thread */ sound_fdd_thread_end(); + + fdd_log("FDD Audio: Shutdown complete\n"); } void @@ -393,16 +540,20 @@ fdd_audio_set_motor_enable(int drive, int motor_enable) if (!samples) return; + fdd_log("FDD Audio Drive %d: Motor %s\n", drive, motor_enable ? "ON" : "OFF"); + if (motor_enable && !motoron[drive]) { /* Motor starting up */ if (spindlemotor_state[drive] == MOTOR_STATE_STOPPING) { /* Interrupt stop sequence and transition back to loop */ + fdd_log("FDD Audio Drive %d: Interrupting stop sequence, returning to loop\n", drive); spindlemotor_state[drive] = MOTOR_STATE_RUNNING; spindlemotor_pos[drive] = 0; spindlemotor_fade_volume[drive] = 1.0f; spindlemotor_fade_samples_remaining[drive] = 0; } else { /* Normal startup */ + fdd_log("FDD Audio Drive %d: Starting motor (normal startup)\n", drive); spindlemotor_state[drive] = MOTOR_STATE_STARTING; spindlemotor_pos[drive] = 0; spindlemotor_fade_volume[drive] = 1.0f; @@ -410,6 +561,7 @@ fdd_audio_set_motor_enable(int drive, int motor_enable) } } else if (!motor_enable && motoron[drive]) { /* Motor stopping */ + fdd_log("FDD Audio Drive %d: Stopping motor\n", drive); spindlemotor_state[drive] = MOTOR_STATE_STOPPING; spindlemotor_pos[drive] = 0; spindlemotor_fade_volume[drive] = 1.0f; @@ -428,6 +580,8 @@ fdd_audio_play_single_track_step(int drive, int from_track, int to_track) if (abs(from_track - to_track) != 1) return; /* Only single track movements */ + fdd_log("FDD Audio Drive %d: Single track step %d -> %d\n", drive, from_track, to_track); + single_step_state[drive].position = 0; single_step_state[drive].active = 1; } @@ -456,18 +610,20 @@ fdd_audio_play_multi_track_seek(int drive, int from_track, int to_track) return; } - /* Calculate duration based on drive type */ - int duration_samples; - if (fdd_is_525(drive)) { - /* 5.25": 285ms for 40 tracks = 7.125ms per track at 48kHz sample rate */ - /* 7.125ms = 0.007125s, at 48000 Hz = 342 samples per track */ - duration_samples = track_diff * 342; - } else { - /* 3.5": 495ms for 80 tracks = 6.1875ms per track at 48kHz sample rate */ - /* 6.1875ms = 0.0061875s, at 48000 Hz = 297 samples per track */ - duration_samples = track_diff * 297; - } + fdd_log("FDD Audio Drive %d: Multi-track seek %d -> %d (%d tracks)\n", + drive, from_track, to_track, track_diff); + /* Get timing from configuration */ + int profile_id = fdd_get_audio_profile(drive); + int duration_samples; + + if (profile_id < 1 || profile_id >= audio_profile_count) + return; + + /* Use configured timing */ + duration_samples = track_diff * audio_profiles[profile_id].samples_per_track; + fdd_log("FDD Audio Drive %d: Seek duration %d samples (%d tracks * %d samples/track)\n", + drive, duration_samples, track_diff, audio_profiles[profile_id].samples_per_track); /* Clamp to maximum available sample length */ if (duration_samples > samples->multi_track_seek.samples) duration_samples = samples->multi_track_seek.samples; @@ -480,6 +636,92 @@ fdd_audio_play_multi_track_seek(int drive, int from_track, int to_track) multi_seek_state[drive].to_track = to_track; } +static int16_t * +load_wav(const char *filename, int *sample_count) +{ + if ((filename == NULL) || (strlen(filename) == 0)) + return NULL; + + if (strstr(filename, "..") != NULL) + return NULL; + + FILE *f = rom_fopen(filename, "rb"); + if (f == NULL) { + fdd_log("FDD Audio: Failed to open WAV file: %s\n", filename); + return NULL; + } + + wav_header_t hdr; + if (fread(&hdr, sizeof(hdr), 1, f) != 1) { + fdd_log("FDD Audio: Failed to read WAV header from: %s\n", filename); + fclose(f); + return NULL; + } + + if (memcmp(hdr.riff, "RIFF", 4) || memcmp(hdr.wave, "WAVE", 4) || memcmp(hdr.fmt, "fmt ", 4) || memcmp(hdr.data, "data", 4)) { + fdd_log("FDD Audio: Invalid WAV format in file: %s\n", filename); + fclose(f); + return NULL; + } + + /* Accept both mono and stereo, 16-bit PCM */ + if (hdr.audio_format != 1 || hdr.bits_per_sample != 16 || (hdr.num_channels != 1 && hdr.num_channels != 2)) { + fdd_log("FDD Audio: Unsupported WAV format in %s (format: %d, bits: %d, channels: %d)\n", + filename, hdr.audio_format, hdr.bits_per_sample, hdr.num_channels); + fclose(f); + return NULL; + } + + int input_samples = hdr.data_size / 2; /* 2 bytes per sample */ + int16_t *input_data = malloc(hdr.data_size); + if (!input_data) { + fdd_log("FDD Audio: Failed to allocate memory for WAV data: %s\n", filename); + fclose(f); + return NULL; + } + + if (fread(input_data, 1, hdr.data_size, f) != hdr.data_size) { + fdd_log("FDD Audio: Failed to read WAV data from: %s\n", filename); + free(input_data); + fclose(f); + return NULL; + } + fclose(f); + + int16_t *output_data; + int output_samples; + + if (hdr.num_channels == 1) { + /* Convert mono to stereo */ + output_samples = input_samples; /* Number of stereo sample pairs */ + output_data = malloc(input_samples * 2 * sizeof(int16_t)); /* Allocate for stereo */ + if (!output_data) { + fdd_log("FDD Audio: Failed to allocate stereo conversion buffer for: %s\n", filename); + free(input_data); + return NULL; + } + + /* Convert mono to stereo by duplicating each sample */ + for (int i = 0; i < input_samples; i++) { + output_data[i * 2] = input_data[i]; /* Left channel */ + output_data[i * 2 + 1] = input_data[i]; /* Right channel */ + } + + free(input_data); + fdd_log("FDD Audio: Loaded %s (mono->stereo, %d samples)\n", filename, output_samples); + } else { + /* Already stereo */ + output_data = input_data; + output_samples = input_samples / 2; /* Number of stereo sample pairs */ + fdd_log("FDD Audio: Loaded %s (stereo, %d samples)\n", filename, output_samples); + } + + if (sample_count) + *sample_count = output_samples; + + return output_data; +} + void fdd_audio_callback(int16_t *buffer, int length) { @@ -776,11 +1018,24 @@ fdd_audio_callback(int16_t *buffer, int length) } #else +/* Stub implementations when audio is disabled */ +void fdd_audio_load_profiles(void) {} +int fdd_audio_get_profile_count(void) { return 1; } +const fdd_audio_profile_config_t* fdd_audio_get_profile(int id) { + static fdd_audio_profile_config_t none_profile = {0, "None", "none"}; + return (id == 0) ? &none_profile : NULL; +} +const char* fdd_audio_get_profile_name(int id) { return (id == 0) ? "None" : NULL; } +const char* fdd_audio_get_profile_internal_name(int id) { return (id == 0) ? "none" : NULL; } +int fdd_audio_get_profile_by_internal_name(const char* internal_name) { return 0; } +double fdd_audio_get_seek_time(int drive, int is_initial, int track_count) { + return is_initial ? 15000.0 : 6000.0; +} void fdd_audio_init(void) {} void fdd_audio_close(void) {} -void fdd_audio_set_motor_enable(int drive, int motor_enable) { (void) drive; (void) motor_enable; } -void fdd_audio_play_single_track_step(int drive, int from_track, int to_track) { (void) drive; (void) from_track; (void) to_track; } -void fdd_audio_play_multi_track_seek(int drive, int from_track, int to_track) { (void) drive; (void) from_track; (void) to_track; } +void fdd_audio_set_motor_enable(int drive, int motor_enable) {} +void fdd_audio_play_single_track_step(int drive, int from_track, int to_track) {} +void fdd_audio_play_multi_track_seek(int drive, int from_track, int to_track) {} void fdd_audio_callback(int16_t *buffer, int length) { memset(buffer, 0, length * sizeof(int16_t)); } #endif /* DISABLE_FDD_AUDIO */ \ No newline at end of file diff --git a/src/include/86box/fdd.h b/src/include/86box/fdd.h index b73365de2..81ab4dd15 100644 --- a/src/include/86box/fdd.h +++ b/src/include/86box/fdd.h @@ -25,13 +25,6 @@ #define FLOPPY_IMAGE_HISTORY 10 #define SEEK_RECALIBRATE -999 -/* Per-drive audio profiles */ -#define FDD_AUDIO_PROFILE_NONE 0 -#define FDD_AUDIO_PROFILE_MITSUMI 1 -#define FDD_AUDIO_PROFILE_PANASONIC 2 -#define FDD_AUDIO_PROFILE_TEAC 3 -#define FDD_AUDIO_PROFILE_MAX 4 - #ifdef __cplusplus extern "C" { #endif diff --git a/src/include/86box/fdd_audio.h b/src/include/86box/fdd_audio.h index acd4e9350..8e8b50f06 100644 --- a/src/include/86box/fdd_audio.h +++ b/src/include/86box/fdd_audio.h @@ -23,6 +23,32 @@ extern "C" { #ifndef DISABLE_FDD_AUDIO +/* Audio sample configuration structure */ +typedef struct { + char filename[512]; + float volume; +} audio_sample_config_t; + +/* Drive type specific audio configuration */ +typedef struct { + int id; + char name[128]; + char internal_name[64]; + audio_sample_config_t spindlemotor_start; + audio_sample_config_t spindlemotor_loop; + audio_sample_config_t spindlemotor_stop; + audio_sample_config_t single_track_step; + audio_sample_config_t multi_track_seek; + int total_tracks; + int samples_per_track; + double initial_seek_time; + double initial_seek_time_pcjr; + double track_seek_time; + double track_seek_time_pcjr; +} fdd_audio_profile_config_t; + +#define FDD_AUDIO_PROFILE_MAX 64 + /* Motor sound states */ typedef enum { MOTOR_STATE_STOPPED = 0, @@ -52,12 +78,29 @@ typedef struct { #define FADE_DURATION_MS 75 #define FADE_SAMPLES (48000 * FADE_DURATION_MS / 1000) +/* Functions for configuration management */ +extern void fdd_audio_load_profiles(void); +extern int fdd_audio_get_profile_count(void); +extern const fdd_audio_profile_config_t* fdd_audio_get_profile(int id); +extern const char* fdd_audio_get_profile_name(int id); +extern const char* fdd_audio_get_profile_internal_name(int id); +extern int fdd_audio_get_profile_by_internal_name(const char* internal_name); +extern double fdd_audio_get_seek_time(int drive, int is_initial, int track_count); + #else typedef enum { MOTOR_STATE_STOPPED = 0 } motor_state_t; +typedef struct { + int id; + char name[128]; + char internal_name[64]; +} fdd_audio_profile_config_t; + +#define FDD_AUDIO_PROFILE_MAX 1 + #endif /* DISABLE_FDD_AUDIO */ /* FDD audio initialization and cleanup */ @@ -76,9 +119,6 @@ extern void fdd_audio_play_multi_track_seek(int drive, int from_track, int to_tr /* Audio callback function */ extern void fdd_audio_callback(int16_t *buffer, int length); -/* State name helper function */ -extern const char *fdd_audio_motor_state_name(motor_state_t state); - #ifdef __cplusplus } #endif diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 6ec130044..8ba860e0f 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -32,6 +32,7 @@ extern "C" { #include <86box/timer.h> #include <86box/fdd.h> #include <86box/cdrom.h> +#include <86box/fdd_audio.h> } #include "qt_models_common.hpp" @@ -136,7 +137,7 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) model->setHeaderData(2, Qt::Horizontal, tr("Check BPB")); model->setHeaderData(3, Qt::Horizontal, tr("Audio")); - model->insertRows(0, FDD_NUM); +model->insertRows(0, FDD_NUM); /* Floppy drives category */ for (int i = 0; i < FDD_NUM; i++) { auto idx = model->index(i, 0); @@ -145,22 +146,21 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) model->setData(idx.siblingAtColumn(1), fdd_get_turbo(i) > 0 ? tr("On") : tr("Off")); model->setData(idx.siblingAtColumn(2), fdd_get_check_bpb(i) > 0 ? tr("On") : tr("Off")); - int prof = fdd_get_audio_profile(i); + int prof = fdd_get_audio_profile(i); QString profName; - switch (prof) { - case FDD_AUDIO_PROFILE_PANASONIC: - profName = tr("Panasonic"); - break; - case FDD_AUDIO_PROFILE_TEAC: - profName = tr("Teac"); - break; - case FDD_AUDIO_PROFILE_MITSUMI: - profName = tr("Mitsumi"); - break; - default: - profName = tr("None"); - break; + +#ifndef DISABLE_FDD_AUDIO + // Get the profile name from the configuration system + const char *name = fdd_audio_get_profile_internal_name(prof); + if (name) { + profName = QString(name); + } else { + profName = tr("None"); } +#else + profName = tr("None"); +#endif + auto audioIdx = model->index(i, 3); model->setData(audioIdx, profName); model->setData(audioIdx, prof, Qt::UserRole); @@ -174,10 +174,13 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) #ifndef DISABLE_FDD_AUDIO ui->comboBoxFloppyAudio->setVisible(true); - ui->comboBoxFloppyAudio->addItem(tr("None"), FDD_AUDIO_PROFILE_NONE); - ui->comboBoxFloppyAudio->addItem(tr("Generic Mitsumi 3.5\" 1.44MB"), FDD_AUDIO_PROFILE_MITSUMI); - ui->comboBoxFloppyAudio->addItem(tr("Panasonic JU-475-5 5.25\" 1.2MB"), FDD_AUDIO_PROFILE_PANASONIC); - ui->comboBoxFloppyAudio->addItem(tr("Teac FD-55GFR 5.25\" 1.2MB"), FDD_AUDIO_PROFILE_TEAC); + int profile_count = fdd_audio_get_profile_count(); + for (int i = 0; i < profile_count; i++) { + const char *name = fdd_audio_get_profile_name(i); + if (name) { + ui->comboBoxFloppyAudio->addItem(name, i); + } + } ui->comboBoxFloppyAudio->setSizeAdjustPolicy(QComboBox::AdjustToContents); #else ui->comboBoxFloppyAudio->setVisible(false); @@ -390,26 +393,22 @@ SettingsFloppyCDROM::on_comboBoxFloppyType_activated(int index) void SettingsFloppyCDROM::on_comboBoxFloppyAudio_activated(int) { - auto idx = ui->tableViewFloppy->selectionModel()->currentIndex(); - int prof = ui->comboBoxFloppyAudio->currentData().toInt(); + auto idx = ui->tableViewFloppy->selectionModel()->currentIndex(); + int prof = ui->comboBoxFloppyAudio->currentData().toInt(); QString profName; - switch (prof) { - case FDD_AUDIO_PROFILE_NONE: - profName = tr("None"); - break; - case FDD_AUDIO_PROFILE_PANASONIC: - profName = tr("Panasonic"); - break; - case FDD_AUDIO_PROFILE_TEAC: - profName = tr("Teac"); - break; - case FDD_AUDIO_PROFILE_MITSUMI: - profName = tr("Mitsumi"); - break; - default: - profName = tr("None"); - break; + +#ifndef DISABLE_FDD_AUDIO + // Get the profile name from the configuration system + const char *name = fdd_audio_get_profile_internal_name(prof); + if (name) { + profName = name; + } else { + profName = tr("None"); } +#else + profName = tr("None"); +#endif + auto audioIdx = idx.siblingAtColumn(3); ui->tableViewFloppy->model()->setData(audioIdx, profName); ui->tableViewFloppy->model()->setData(audioIdx, prof, Qt::UserRole); From ee86991f958b48c7484417182a4902222f4a0015 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 2 Oct 2025 02:20:50 +0600 Subject: [PATCH 039/233] Implement Force 4:3 option for resizable windows with fullscreen behaviour (#6264) * Revert "Fix remember size and position regression in which vertical size could grow when reopening the VM (#6239)" This reverts commit 74aa15644d177d0b16df075885fb5ef808d55105. * Revert "Change window resizing logic when using 4:3 aspect ratio (#6233)" This reverts commit bc085ac02f5481cd0d4df344340fadf2384d9636. * Revert "Run more iterations and retested" This reverts commit ca429dd4930ff5878ea4ed79ef4708188844a88d. * Revert "Fix Force 4:3 Aspect Ratio not working if Resizable window is enabled #6062" This reverts commit 717b66c6602a1a59bb2de02b997d21935f424a51. * Implement Force 4:3 option for resizable windows with fullscreen behaviour --- src/qt/qt_mainwindow.cpp | 115 ++++++++++------------------------- src/qt/qt_mainwindow.hpp | 3 - src/qt/qt_renderercommon.cpp | 14 +++-- 3 files changed, 41 insertions(+), 91 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e88bedd90..e9e32bae0 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -84,7 +84,6 @@ extern bool cpu_thread_running; #include #include #include -#include #include #include #include @@ -932,18 +931,11 @@ MainWindow::closeEvent(QCloseEvent *event) } } if (window_remember) { - // If maximized, persist the normal (restorable) geometry - const bool wasMax = isMaximized(); - QRect normal = wasMax ? this->normalGeometry() : this->geometry(); - // Save WINDOW size (not the content widget’s 4:3 box) - const int chromeHeight = geometry().height() - ui->stackedWidget->height(); - window_w = normal.width(); - window_h = normal.height() - chromeHeight; - if (window_h < 0) - window_h = 0; + window_w = ui->stackedWidget->width(); + window_h = ui->stackedWidget->height(); if (!QApplication::platformName().contains("wayland")) { - window_x = normal.x(); - window_y = normal.y(); + window_x = this->geometry().x(); + window_y = this->geometry().y(); } for (int i = 1; i < MONITORS_NUM; i++) { if (renderers[i]) { @@ -1027,68 +1019,29 @@ void MainWindow::updateShortcuts() seq = QKeySequence::fromString(acc_keys[accID].seq); ui->actionMute_Unmute->setShortcut(seq); } - -void -MainWindow::applyContentLayoutForCurrentState() -{ - auto applyFill = [this](const QRect& r){ - ui->stackedWidget->setGeometry(r); - ui->stackedWidget->onResize(r.width(), r.height()); - if (monitors[0].mon_scrnsz_x != r.width() || monitors[0].mon_scrnsz_y != r.height()) { - monitors[0].mon_scrnsz_x = r.width(); - monitors[0].mon_scrnsz_y = r.height(); - plat_resize_request(r.width(), r.height(), 0); - } - }; - - auto apply43 = [this](const QRect& area){ - int areaW = area.width(); - int areaH = area.height(); - if (areaW <= 0 || areaH <= 0) return; - - int targetW = areaW; - int targetH = (areaW * 3) / 4; - if (targetH > areaH) { - targetH = areaH; - targetW = (areaH * 4) / 3; - } - - const int x = area.x() + (areaW - targetW) / 2; - const int y = area.y() + (areaH - targetH) / 2; - - ui->stackedWidget->setGeometry(x, y, targetW, targetH); - ui->stackedWidget->onResize(targetW, targetH); - - if (monitors[0].mon_scrnsz_x != targetW || monitors[0].mon_scrnsz_y != targetH) { - monitors[0].mon_scrnsz_x = targetW; - monitors[0].mon_scrnsz_y = targetH; - plat_resize_request(targetW, targetH, 0); - } - }; - - QWidget *cw = this->centralWidget(); - if (!cw) return; - - const QRect area = cw->contentsRect(); - - // Fullscreen always fills (legacy behavior) - if (video_fullscreen) { applyFill(area); return; } - - // Windowed: enforce 4:3 only when requested, otherwise fill - if (force_43 > 0) apply43(area); - else applyFill(area); -} - + void MainWindow::resizeEvent(QResizeEvent *event) { //qDebug() << pos().x() + event->size().width(); //qDebug() << pos().y() + event->size().height(); - - // Always let QMainWindow do its layout first - QMainWindow::resizeEvent(event); + if (vid_resize == 1 || video_fullscreen) + return; - applyContentLayoutForCurrentState(); + int newX = pos().x(); + int newY = pos().y(); + + if (((frameGeometry().x() + event->size().width() + 1) > util::screenOfWidget(this)->availableGeometry().right())) { + //move(util::screenOfWidget(this)->availableGeometry().right() - size().width() - 1, pos().y()); + newX = util::screenOfWidget(this)->availableGeometry().right() - frameGeometry().width() - 1; + if (newX < 1) newX = 1; + } + + if (((frameGeometry().y() + event->size().height() + 1) > util::screenOfWidget(this)->availableGeometry().bottom())) { + newY = util::screenOfWidget(this)->availableGeometry().bottom() - frameGeometry().height() - 1; + if (newY < 1) newY = 1; + } + move(newX, newY); } void @@ -1182,25 +1135,12 @@ MainWindow::showEvent(QShowEvent *event) monitors[0].mon_scrnsz_y = fixed_size_y; } if (window_remember && vid_resize == 1) { - const QSize target(window_w, window_h); - const QSize prevMin = ui->stackedWidget->minimumSize(); - const QSize prevMax = ui->stackedWidget->maximumSize(); - - ui->stackedWidget->setMinimumSize(target); - ui->stackedWidget->setMaximumSize(target); + ui->stackedWidget->setFixedSize(window_w, window_h); #ifndef Q_OS_MACOS QApplication::processEvents(); #endif this->adjustSize(); - - ui->stackedWidget->setMinimumSize(prevMin); - ui->stackedWidget->setMaximumSize(prevMax); - ui->stackedWidget->resize(target); } - - QTimer::singleShot(0, this, [this]{ - applyContentLayoutForCurrentState(); - }); } void @@ -1503,7 +1443,6 @@ MainWindow::on_actionFullscreen_triggered() { if (video_fullscreen > 0) { showNormal(); - QTimer::singleShot(0, this, [this]{ applyContentLayoutForCurrentState(); }); ui->menubar->show(); if (!hide_status_bar) ui->statusbar->show(); @@ -2140,8 +2079,15 @@ void MainWindow::on_actionForce_4_3_display_ratio_triggered() { video_toggle_option(ui->actionForce_4_3_display_ratio, &force_43); + if (vid_resize) { + const auto widget = ui->stackedWidget->currentWidget(); + ui->stackedWidget->onResize(widget->width(), widget->height()); - QTimer::singleShot(0, this, [this]{ applyContentLayoutForCurrentState(); }); + for (int i = 1; i < MONITORS_NUM; i++) { + if (renderers[i]) + renderers[i]->onResize(renderers[i]->width(), renderers[i]->height()); + } + } } void @@ -2510,3 +2456,4 @@ void MainWindow::on_actionCGA_composite_settings_triggered() isNonPause = false; config_save(); } + diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 77e8fe7c4..26585ddaf 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -178,9 +178,6 @@ private: std::unique_ptr status; std::shared_ptr mm; - static bool s_adjustingForce43; // guard against recursion - void applyContentLayoutForCurrentState(); - void updateShortcuts(); void processKeyboardInput(bool down, uint32_t keycode); #ifdef Q_OS_MACOS diff --git a/src/qt/qt_renderercommon.cpp b/src/qt/qt_renderercommon.cpp index b71e19e75..b802f5124 100644 --- a/src/qt/qt_renderercommon.cpp +++ b/src/qt/qt_renderercommon.cpp @@ -129,9 +129,10 @@ RendererCommon::onResize(int width, int height) width = round(pixelRatio * width); height = round(pixelRatio * height); - if (is_fs && (video_fullscreen_scale_maximized ? (parent_max && main_is_max) : 1)) + if (is_fs && (video_fullscreen_scale_maximized ? (parent_max && main_is_max) : 1) && !(force_43 && vid_resize)) destination.setRect(0, 0, width, height); else { + auto temp_fullscreen_scale = video_fullscreen_scale; double dx; double dy; double dw; @@ -144,13 +145,18 @@ RendererCommon::onResize(int width, int height) double gh = source.height(); double hsr = hw / hh; double r43 = 4.0 / 3.0; + + if (force_43 && is_fs && vid_resize) { + if (!video_fullscreen_scale_maximized || (video_fullscreen_scale_maximized && parent_max && main_is_max)) + temp_fullscreen_scale = FULLSCR_SCALE_43; + } - switch (video_fullscreen_scale) { + switch (temp_fullscreen_scale) { case FULLSCR_SCALE_INT: case FULLSCR_SCALE_INT43: gsr = gw / gh; - if (video_fullscreen_scale == FULLSCR_SCALE_INT43) { + if (temp_fullscreen_scale == FULLSCR_SCALE_INT43) { gh = gw / r43; // gw = gw; @@ -174,7 +180,7 @@ RendererCommon::onResize(int width, int height) break; case FULLSCR_SCALE_43: case FULLSCR_SCALE_KEEPRATIO: - if (video_fullscreen_scale == FULLSCR_SCALE_43) + if (temp_fullscreen_scale == FULLSCR_SCALE_43) gsr = r43; else gsr = gw / gh; From 2a41ed657d21c084f75aa7fd5631185deced375a Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 1 Oct 2025 23:21:58 +0200 Subject: [PATCH 040/233] Introduce a way to open a configuration file from the ROMs directory using rom_fopen and switch the FDD Audio configuration reader to it. --- src/floppy/fdd_audio.c | 23 +------------------ src/include/86box/ini.h | 2 ++ src/utils/ini.c | 49 ++++++++++++++++++++++++++++++++++------- 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/src/floppy/fdd_audio.c b/src/floppy/fdd_audio.c index 14ea6f9f2..b248eb8bc 100644 --- a/src/floppy/fdd_audio.c +++ b/src/floppy/fdd_audio.c @@ -191,30 +191,9 @@ fdd_audio_log_active_profiles(void) void fdd_audio_load_profiles(void) { - char config_path[2048]; ini_t profiles_ini; - /* Validate exe_path to prevent directory traversal attacks */ - if (exe_path == NULL || strlen(exe_path) == 0) { - fdd_log("FDD Audio: Invalid exe_path\n"); - return; - } - - /* Check for directory traversal sequences */ - if (strstr(exe_path, "..") != NULL) { - fdd_log("FDD Audio: Directory traversal detected in exe_path\n"); - return; - } - - path_append_filename(config_path, exe_path, "roms/floppy/fdd_audio_profiles.cfg"); - - /* Additional validation of the final path */ - if (strstr(config_path, "..") != NULL) { - fdd_log("FDD Audio: Directory traversal detected in config path: %s\n", config_path); - return; - } - - profiles_ini = ini_read(config_path); + profiles_ini = ini_read_ex("roms/floppy/fdd_audio_profiles.cfg", 1); if (profiles_ini == NULL) { fdd_log("FDD Audio: Could not load profiles from %s\n", config_path); return; diff --git a/src/include/86box/ini.h b/src/include/86box/ini.h index 4dd8387bc..c73faaa61 100644 --- a/src/include/86box/ini.h +++ b/src/include/86box/ini.h @@ -30,8 +30,10 @@ typedef void *ini_t; typedef void *ini_section_t; extern ini_t ini_new(void); +extern ini_t ini_read_ex(const char *fn, int is_rom); extern ini_t ini_read(const char *fn); extern void ini_strip_quotes(ini_t ini); +extern void ini_write_ex(ini_t ini, const char *fn, int is_rom); extern void ini_write(ini_t ini, const char *fn); extern void ini_dump(ini_t ini); extern void ini_close(ini_t ini); diff --git a/src/utils/ini.c b/src/utils/ini.c index 3ca4c7943..e2a4c93bc 100644 --- a/src/utils/ini.c +++ b/src/utils/ini.c @@ -34,6 +34,8 @@ #define HAVE_STDARG_H #include <86box/86box.h> #include <86box/ini.h> +#include <86box/mem.h> +#include <86box/rom.h> #include <86box/plat.h> typedef struct _list_ { @@ -360,9 +362,9 @@ ini_fgetws(wchar_t *str, int count, FILE *stream) } #endif -/* Read and parse the configuration file into memory. */ +/* Read and parse the configuration file into memory, with open type selection. */ ini_t -ini_read(const char *fn) +ini_read_ex(const char *fn, int is_rom) { char sname[128]; char ename[128]; @@ -377,11 +379,20 @@ ini_read(const char *fn) list_t *head; bom = ini_detect_bom(fn); + + if (is_rom) #if defined(ANSI_CFG) || !defined(_WIN32) - fp = plat_fopen(fn, "rt"); + fp = rom_fopen(fn, "rt"); #else - fp = plat_fopen(fn, "rt, ccs=UTF-8"); + fp = rom_fopen(fn, "rt, ccs=UTF-8"); #endif + else +#if defined(ANSI_CFG) || !defined(_WIN32) + fp = plat_fopen(fn, "rt"); +#else + fp = plat_fopen(fn, "rt, ccs=UTF-8"); +#endif + if (fp == NULL) return NULL; @@ -488,9 +499,16 @@ ini_read(const char *fn) return (ini_t) head; } -/* Write the in-memory configuration to disk. */ +/* Read and parse the configuration file into memory. */ +ini_t +ini_read(const char *fn) +{ + return ini_read_ex(fn, 0); +} + +/* Write the in-memory configuration to disk, with open type selection. */ void -ini_write(ini_t ini, const char *fn) +ini_write_ex(ini_t ini, const char *fn, int is_rom) { wchar_t wtemp[512]; list_t *list = (list_t *) ini; @@ -503,11 +521,19 @@ ini_write(ini_t ini, const char *fn) sec = (section_t *) list->next; + if (is_rom) #if defined(ANSI_CFG) || !defined(_WIN32) - fp = plat_fopen(fn, "wt"); + fp = rom_fopen(fn, "wt"); #else - fp = plat_fopen(fn, "wt, ccs=UTF-8"); + fp = rom_fopen(fn, "wt, ccs=UTF-8"); #endif + else +#if defined(ANSI_CFG) || !defined(_WIN32) + fp = plat_fopen(fn, "wt"); +#else + fp = plat_fopen(fn, "wt, ccs=UTF-8"); +#endif + if (fp == NULL) return; @@ -543,6 +569,13 @@ ini_write(ini_t ini, const char *fn) (void) fclose(fp); } +/* Write the in-memory configuration to disk. */ +void +ini_write(ini_t ini, const char *fn) +{ + ini_write_ex(ini, fn, 0); +} + /* Wide-character version of "trim" */ wchar_t * trim_w(wchar_t *str) From 375033c5b05ee3ca3287e2267611c895666c9503 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 2 Oct 2025 05:13:21 +0200 Subject: [PATCH 041/233] FDD Audio: Remove the exe_path extern. --- src/floppy/fdd_audio.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/floppy/fdd_audio.c b/src/floppy/fdd_audio.c index b248eb8bc..19d4cb0d9 100644 --- a/src/floppy/fdd_audio.c +++ b/src/floppy/fdd_audio.c @@ -85,7 +85,6 @@ static single_step_state_t single_step_state[FDD_NUM] = {}; static multi_seek_state_t multi_seek_state[FDD_NUM] = {}; extern uint64_t motoron[FDD_NUM]; -extern char exe_path[2048]; extern int fdd_get_audio_profile(int drive); From b45452d43470be7fe5256b3dffbd5568ddcf5218 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 3 Oct 2025 02:48:49 +0600 Subject: [PATCH 042/233] Add ability to search for machines in machine settings (#6268) --- src/qt/languages/86box.pot | 3 + src/qt/languages/cs-CZ.po | 3 + src/qt/languages/de-DE.po | 3 + src/qt/languages/es-ES.po | 3 + src/qt/languages/fi-FI.po | 3 + src/qt/languages/fr-FR.po | 3 + src/qt/languages/hr-HR.po | 3 + src/qt/languages/it-IT.po | 3 + src/qt/languages/ja-JP.po | 3 + src/qt/languages/ko-KR.po | 3 + src/qt/languages/nb-NO.po | 3 + src/qt/languages/nl-NL.po | 3 + src/qt/languages/pl-PL.po | 3 + src/qt/languages/pt-BR.po | 3 + src/qt/languages/pt-PT.po | 3 + src/qt/languages/ru-RU.po | 3 + src/qt/languages/sk-SK.po | 3 + src/qt/languages/sl-SI.po | 3 + src/qt/languages/sv-SE.po | 3 + src/qt/languages/tr-TR.po | 3 + src/qt/languages/uk-UA.po | 3 + src/qt/languages/vi-VN.po | 3 + src/qt/languages/zh-CN.po | 3 + src/qt/languages/zh-TW.po | 3 + src/qt/qt_settingsmachine.cpp | 41 ++++++- src/qt/qt_settingsmachine.ui | 199 ++++++++++++++++++---------------- 26 files changed, 217 insertions(+), 95 deletions(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 41b84f5b0..9b6ce9399 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -2996,3 +2996,6 @@ msgstr "" msgid "Dark" msgstr "" + +msgid "Search:" +msgstr "" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index b1864c5c2..03103a3e3 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -2993,3 +2993,6 @@ msgstr "SvÄ›tlĂ©" msgid "Dark" msgstr "TmavĂ©" + +msgid "Search:" +msgstr "Hledat:" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 4984af9fd..bdcddfe8d 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -2993,3 +2993,6 @@ msgstr "Licht" msgid "Dark" msgstr "Dunkel" + +msgid "Search:" +msgstr "Suche:" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 5516b7b6d..2bf3f5181 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -2993,3 +2993,6 @@ msgstr "Luz" msgid "Dark" msgstr "Oscuro" + +msgid "Search:" +msgstr "Buscar:" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 996762a2d..65a3debbb 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -2993,3 +2993,6 @@ msgstr "Vaalea" msgid "Dark" msgstr "Tumma" + +msgid "Search:" +msgstr "Haku:" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 17fdcb1be..500911bf5 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -2993,3 +2993,6 @@ msgstr "Lumière" msgid "Dark" msgstr "Sombre" + +msgid "Search:" +msgstr "Recherche:" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 3a2c239b2..b32a887ad 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -2993,3 +2993,6 @@ msgstr "Svjetlo" msgid "Dark" msgstr "Tamno" + +msgid "Search:" +msgstr "Pretraživanje:" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 65c4d83dd..77b57dd37 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -2993,3 +2993,6 @@ msgstr "Chiara" msgid "Dark" msgstr "Scura" + +msgid "Search:" +msgstr "Ricerca:" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 5c1973295..5c6aa485c 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -2993,3 +2993,6 @@ msgstr "å…‰" msgid "Dark" msgstr "æ—é—‡" + +msgid "Search:" +msgstr "検索:" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index caa87823a..43d3b6b10 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -2993,3 +2993,6 @@ msgstr "ë¹›" msgid "Dark" msgstr "́–´ë‘ " + +msgid "Search:" +msgstr "́°¾ê¸°:" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index f883b3fac..06b7a4f25 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -2993,3 +2993,6 @@ msgstr "Lys" msgid "Dark" msgstr "Mørk" + +msgid "Search:" +msgstr "Søk:" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 763a9192d..50f22e2a4 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -2993,3 +2993,6 @@ msgstr "Licht" msgid "Dark" msgstr "Donker" + +msgid "Search:" +msgstr "Zoekopdracht:" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index a46abb6ce..5bd026ca6 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -2993,3 +2993,6 @@ msgstr "ÅwiatÅ‚o" msgid "Dark" msgstr "Ciemny" + +msgid "Search:" +msgstr "Szukaj:" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 1a49ace23..834f676e5 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -2993,3 +2993,6 @@ msgstr "Claro" msgid "Dark" msgstr "Escuro" + +msgid "Search:" +msgstr "Busca:" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index cdbf065f6..bd5078409 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -2993,3 +2993,6 @@ msgstr "Claro" msgid "Dark" msgstr "Escuro" + +msgid "Search:" +msgstr "Pesquisa:" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 20a25371f..2d71499dc 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -2993,3 +2993,6 @@ msgstr "Đ¡Đ²ĐµÑ‚Đ»Đ°Ñ" msgid "Dark" msgstr "Đ¢Ñ‘Đ¼Đ½Đ°Ñ" + +msgid "Search:" +msgstr "ĐŸĐ¾Đ¸ÑĐº:" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 399bee502..436c8c674 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -2993,3 +2993,6 @@ msgstr "Svetlo" msgid "Dark" msgstr "TmavĂ¡" + +msgid "Search:" +msgstr "HľadaÅ¥:" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 31cb1e303..2b70c37a4 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -2993,3 +2993,6 @@ msgstr "Svetloba" msgid "Dark" msgstr "Temno" + +msgid "Search:" +msgstr "Iskanje:" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index 890bc18eb..ddc7493e1 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -2993,3 +2993,6 @@ msgstr "Ljus" msgid "Dark" msgstr "Mörk" + +msgid "Search:" +msgstr "Söka:" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 3df51363c..34d679fe0 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -2993,3 +2993,6 @@ msgstr "Işık" msgid "Dark" msgstr "Karanlık" + +msgid "Search:" +msgstr "Aramak:" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 5e2dc7a1e..8228b7ae4 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -2993,3 +2993,6 @@ msgstr "Đ¡Đ²Ñ–Ñ‚Đ»Đ¾" msgid "Dark" msgstr "Đ¢ĐµĐ¼Đ½Đ¸Đ¹" + +msgid "Search:" +msgstr "ĐŸĐ¾ÑˆÑƒĐº:" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 632c43c12..6c8958bd6 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -2993,3 +2993,6 @@ msgstr "Ănh sĂ¡ng" msgid "Dark" msgstr "Tối" + +msgid "Search:" +msgstr "Tìm kiếm:" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 7e92f9aee..557323f6c 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -2993,3 +2993,6 @@ msgstr "亮色" msgid "Dark" msgstr "æ—色" + +msgid "Search:" +msgstr "æœç´¢:" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index fff385f34..ad570b830 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -2993,3 +2993,6 @@ msgstr "å…‰" msgid "Dark" msgstr "黑æ—" + +msgid "Search:" +msgstr "æœå°‹:" diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index e52553196..a0e37259c 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -22,6 +22,10 @@ #include #include #include +#include +#include +#include +#include #include @@ -57,6 +61,16 @@ SettingsMachine::SettingsMachine(QWidget *parent) break; } + auto machineListCompleter = new QCompleter(ui->lineEditSearch); + auto machineListModel = new QStandardItemModel(machineListCompleter); + machineListCompleter->setModel(machineListModel); + ui->lineEditSearch->setCompleter(machineListCompleter); + connect(ui->lineEditSearch, &QLineEdit::editingFinished, this, [this] () { ui->lineEditSearch->setText("");} ); + machineListCompleter->setCompletionMode(QCompleter::PopupCompletion); + machineListCompleter->setFilterMode(Qt::MatchContains); + machineListCompleter->setCompletionRole(Qt::DisplayRole); + machineListCompleter->setCaseSensitivity(Qt::CaseInsensitive); + auto warning_icon = QIcon(":/misc/qt/icons/warning.ico"); ui->softFloatWarningIcon->setPixmap(warning_icon.pixmap(warning_icon.actualSize(QSize(16, 16)))); ui->softFloatWarningIcon->setVisible(false); @@ -108,8 +122,13 @@ SettingsMachine::SettingsMachine(QWidget *parent) cur_j = 0; } - if (machine_available(j)) + if (machine_available(j)) { + QStandardItem* item = new QStandardItem(machines[j].name); + item->setData(machine_types[machine_get_type(j)].id); + machineListModel->appendRow(item); + cur_j++; + } j++; } while (miname != nullptr); @@ -120,6 +139,26 @@ SettingsMachine::SettingsMachine(QWidget *parent) ui->radioButtonLargerFrames->setChecked(force_10ms); ui->radioButtonSmallerFrames->setChecked(!force_10ms); + connect(machineListCompleter, QOverload::of(&QCompleter::activated), this, [this] (const QModelIndex& idx) { + ui->lineEditSearch->setText(""); + int machineIdType = idx.model()->data(idx, Qt::UserRole + 1).toInt(); + auto name = idx.model()->data(idx, Qt::DisplayRole).toString(); + for (int i = 0; i < ui->comboBoxMachineType->model()->rowCount(); i++) { + if (ui->comboBoxMachineType->model()->data(ui->comboBoxMachineType->model()->index(i, 0), Qt::UserRole).toInt() == machineIdType) { + ui->comboBoxMachineType->setCurrentIndex(i); + + for (int j = 0; j < ui->comboBoxMachine->model()->rowCount(); j++) { + if (ui->comboBoxMachine->model()->data(ui->comboBoxMachine->model()->index(j, 0), Qt::DisplayRole).toString() == name) { + ui->comboBoxMachine->setCurrentIndex(j); + break; + } + } + break; + } + } + QTimer::singleShot(0, ui->lineEditSearch, &QLineEdit::clear); + }); + #ifndef USE_DYNAREC ui->checkBoxDynamicRecompiler->setEnabled(false); ui->checkBoxDynamicRecompiler->setVisible(false); diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui index 7ed70a5cf..34f0b6160 100644 --- a/src/qt/qt_settingsmachine.ui +++ b/src/qt/qt_settingsmachine.ui @@ -7,7 +7,7 @@ 0 0 458 - 459 + 492 @@ -41,73 +41,38 @@ 0 - - - - Machine type: - - - - - - - 30 - - - - + Machine: - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 30 - - - - - - - - 0 - 0 - - - - Configure - - - - - - - + CPU type: - + + + + + 0 + 0 + + + + + + + + Memory: + + + + @@ -141,7 +106,7 @@ Frequency: - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter @@ -161,28 +126,7 @@ - - - - FPU: - - - - - - - 30 - - - - - - - Wait states: - - - - + @@ -233,23 +177,89 @@ - - + + - Memory: + Machine type: - - - - - 0 - 0 - + + + + 30 + + + + 30 + + + + + + + Wait states: + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 30 + + + + + + + + 0 + 0 + + + + Configure + + + + + + + + + + FPU: + + + + + + + Search: + + + + + + @@ -302,7 +312,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -328,7 +338,7 @@ CPU frame size - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop @@ -351,7 +361,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -400,7 +410,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -415,7 +425,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -428,6 +438,7 @@ + lineEditSearch comboBoxMachineType comboBoxMachine pushButtonConfigure From 85bfc79a6e532c513909d1f7404cf248fff6bff9 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Thu, 2 Oct 2025 23:49:24 -0500 Subject: [PATCH 043/233] Use the correct onboard ViRGE device for the TC430HX (#6269) --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index be70b897a..5264b1cf8 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -14413,7 +14413,7 @@ const machine_t machines[] = { .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, - .vid_device = &s3_virge_375_pci_device, + .vid_device = &s3_virge_375_onboard_pci_device, .snd_device = &ymf701_device, .net_device = NULL }, From beb373375795bda97d8531c1d56cb4633fe76b82 Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Fri, 3 Oct 2025 16:44:53 +0300 Subject: [PATCH 044/233] Defer vsync_offset application - Apply vsync_offset only during the vertical retrace period for a more accurate result - Change the calculation of displine_offs and remove redundant checks around rendering calls - Remove unnecessary clamping logic for crtc[7] - Remove a hack from the previous commit by correctly triggering VSYNC processing when the vertical counter matches the actual crtc[7] --- src/include/86box/m_tandy.h | 1 + src/video/vid_tandy.c | 54 ++++++++++++++----------------------- 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/src/include/86box/m_tandy.h b/src/include/86box/m_tandy.h index e8cfbae15..550801687 100644 --- a/src/include/86box/m_tandy.h +++ b/src/include/86box/m_tandy.h @@ -41,6 +41,7 @@ typedef struct t1kvid_t { bool baseline_ready; int hsync_offset; int vsync_offset; + int vsync_offset_pending; int linepos; int displine; diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 09fec5052..4244c3309 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -199,11 +199,7 @@ vid_update_display_offset(t1kvid_t *vid, uint8_t reg) vid->hsync_offset = ((int)vid->baseline_hsyncpos - (int)vid->crtc[2]) * hsync_scale; break; case 7: - if (vid->crtc[7] < vid->crtc[6]) - vid->crtc[7] = vid->crtc[6]; - else if (vid->crtc[7] > vid->crtc[4]) - vid->crtc[7] = vid->crtc[4]; - vid->vsync_offset = ((int)vid->baseline_vsyncpos - (int)vid->crtc[7]) * vsync_scale; + vid->vsync_offset_pending = ((int)vid->baseline_vsyncpos - (int)vid->crtc[7]) * vsync_scale; break; } } @@ -643,8 +639,8 @@ vid_poll(void *priv) int scanline_old; int old_ma; int hos_offs = 8 + vid->hsync_offset; - int displine_offs = vid->displine - vid->vsync_offset; - int displine_offs_double = (vid->displine << 1) - (vid->vsync_offset << 1); + int displine_offs = (vid->displine + vid->vsync_offset < 0) ? 0 : vid->displine + vid->vsync_offset; + int displine_offs_double = displine_offs << 1; if (!vid->linepos) { timer_advance_u64(&vid->timer, vid->dispofftime); @@ -661,51 +657,39 @@ vid_poll(void *priv) vid->lastline = vid->displine; switch (vid->double_type) { default: - if (displine_offs_double >= 0) { - vid_render(dev, displine_offs_double, hos_offs); - vid_render_blank(dev, displine_offs_double + 1); - } + vid_render(dev, displine_offs_double, hos_offs); + vid_render_blank(dev, displine_offs_double + 1); break; case DOUBLE_NONE: - if (displine_offs >= 0) - vid_render(dev, displine_offs, hos_offs); + vid_render(dev, displine_offs, hos_offs); break; case DOUBLE_SIMPLE: - if (displine_offs_double >= 0) { - old_ma = vid->memaddr; - vid_render(dev, displine_offs_double, hos_offs); - vid->memaddr = old_ma; - vid_render(dev, displine_offs_double + 1, hos_offs); - } + old_ma = vid->memaddr; + vid_render(dev, displine_offs_double, hos_offs); + vid->memaddr = old_ma; + vid_render(dev, displine_offs_double + 1, hos_offs); break; } } else switch (vid->double_type) { default: - if (displine_offs_double >= 0) - vid_render_blank(dev, displine_offs_double); + vid_render_blank(dev, displine_offs_double); break; case DOUBLE_NONE: - if (displine_offs >= 0) - vid_render_blank(dev, displine_offs); + vid_render_blank(dev, displine_offs); break; case DOUBLE_SIMPLE: - if (displine_offs_double >= 0) { - vid_render_blank(dev, displine_offs_double); - vid_render_blank(dev, displine_offs_double + 1); - } + vid_render_blank(dev, displine_offs_double); + vid_render_blank(dev, displine_offs_double + 1); break; } switch (vid->double_type) { default: - if (displine_offs_double >= 0) { - vid_render_process(dev, displine_offs_double); - vid_render_process(dev, displine_offs_double + 1); - } + vid_render_process(dev, displine_offs_double); + vid_render_process(dev, displine_offs_double + 1); break; case DOUBLE_NONE: - if (displine_offs >= 0) - vid_render_process(dev, displine_offs); + vid_render_process(dev, displine_offs); break; } @@ -768,7 +752,8 @@ vid_poll(void *priv) else vid->cursoron = vid->blink & 16; } - if (vid->vc == vid->baseline_vsyncpos) { + if (vid->vc == vid->crtc[7]) { + vid->vsync_offset = vid->vsync_offset_pending; vid->dispon = 0; vid->displine = 0; vid->vsynctime = 16; @@ -875,6 +860,7 @@ tandy_vid_init(tandy_t *dev) vid->baseline_ready = false; vid->hsync_offset = 0; vid->vsync_offset = 0; + vid->vsync_offset_pending = 0; vid->memctrl = -1; video_inform(VIDEO_FLAG_TYPE_CGA, &timing_dram); From 3ac394549989041c6a216f9261982730bce243fe Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 3 Oct 2025 19:53:59 +0600 Subject: [PATCH 045/233] Qt: revert native window behaviour for Windows (#6271) --- src/qt/qt_main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index d667cfdb9..2ad744131 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -562,7 +562,6 @@ main(int argc, char *argv[]) if (QFile(QApplication::applicationDirPath() + "/opengl32.dll").exists()) { qputenv("QT_OPENGL_DLL", QFileInfo(QApplication::applicationDirPath() + "/opengl32.dll").absoluteFilePath().toUtf8()); } - QApplication::setAttribute(Qt::AA_NativeWindows); if (!util::isWindowsLightTheme()) { QFile f(":qdarkstyle/dark/darkstyle.qss"); From cf7dd1376a56ec3f692485eaea3d658edd7ca23e Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 3 Oct 2025 17:02:44 +0200 Subject: [PATCH 046/233] Fix some translations. --- src/qt/languages/fr-FR.po | 2 +- src/qt/languages/hr-HR.po | 2 +- src/qt/languages/it-IT.po | 2 +- src/qt/languages/pt-BR.po | 2 +- src/qt/languages/pt-PT.po | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 500911bf5..c98280f3b 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Sombre" msgid "Search:" -msgstr "Recherche:" +msgstr "Rechercher:" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index b32a887ad..0ea717dce 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Tamno" msgid "Search:" -msgstr "Pretraživanje:" +msgstr "Pretrag:" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 77b57dd37..a399c59e6 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Scura" msgid "Search:" -msgstr "Ricerca:" +msgstr "Cerca:" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 834f676e5..4ec5e0d51 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Escuro" msgid "Search:" -msgstr "Busca:" +msgstr "Pesquisar:" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index bd5078409..a33ba0119 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Escuro" msgid "Search:" -msgstr "Pesquisa:" +msgstr "Procurar:" From 0d1a7dd6ad5a2e823628df7804f24228dac98b3f Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 3 Oct 2025 17:12:49 +0200 Subject: [PATCH 047/233] Bring the two search strings in line. --- src/qt/languages/fi-FI.po | 2 +- src/qt/languages/ko-KR.po | 2 +- src/qt/languages/nl-NL.po | 2 +- src/qt/languages/pl-PL.po | 2 +- src/qt/languages/pt-BR.po | 2 +- src/qt/languages/sl-SI.po | 2 +- src/qt/languages/sv-SE.po | 2 +- src/qt/languages/tr-TR.po | 2 +- src/qt/languages/vi-VN.po | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 65a3debbb..24102f071 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Tumma" msgid "Search:" -msgstr "Haku:" +msgstr "Hae:" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 43d3b6b10..4474138b2 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "́–´ë‘ " msgid "Search:" -msgstr "́°¾ê¸°:" +msgstr "ê²€́ƒ‰:" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 50f22e2a4..68bcbc2bf 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Donker" msgid "Search:" -msgstr "Zoekopdracht:" +msgstr "Zoeken:" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 5bd026ca6..4398dcafb 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Ciemny" msgid "Search:" -msgstr "Szukaj:" +msgstr "Szukanie:" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 4ec5e0d51..010005780 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -1318,7 +1318,7 @@ msgid "No screenshot" msgstr "Nenhuma captura de tela" msgid "Search" -msgstr "Procurar" +msgstr "Pesquisar" msgid "Searching for VMs..." msgstr "Procurando por MVs..." diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 2b70c37a4..8ef710a15 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Temno" msgid "Search:" -msgstr "Iskanje:" +msgstr "IÅ¡Äi:" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index ddc7493e1..6f014e2dd 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Mörk" msgid "Search:" -msgstr "Söka:" +msgstr "Sök:" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 34d679fe0..073572e1b 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Karanlık" msgid "Search:" -msgstr "Aramak:" +msgstr "Ara:" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 6c8958bd6..24decb522 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -2995,4 +2995,4 @@ msgid "Dark" msgstr "Tối" msgid "Search:" -msgstr "Tìm kiếm:" +msgstr "Tìm:" From e44dfd08f5fcf8ccde9d9e113c8aedf891bf1d8e Mon Sep 17 00:00:00 2001 From: richardg867 Date: Fri, 3 Oct 2025 16:34:12 -0300 Subject: [PATCH 048/233] Add thread name to the qt event loop thread [skip ci] --- src/qt/qt_main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 2ad744131..8fbcfe7d3 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -442,7 +442,7 @@ main_thread_fn() int frames; QThread::currentThread()->setPriority(QThread::HighestPriority); - plat_set_thread_name(nullptr, "main_thread_fn"); + plat_set_thread_name(nullptr, "main_thread"); framecountx = 0; // title_update = 1; uint64_t old_time = elapsed_timer.elapsed(); @@ -893,6 +893,8 @@ main(int argc, char *argv[]) /* Initialize the rendering window, or fullscreen. */ QTimer::singleShot(0, &app, [] { + plat_set_thread_name(nullptr, "qt_thread"); + #ifdef Q_OS_WINDOWS extern bool NewDarkMode; NewDarkMode = util::isWindowsLightTheme(); From da018531e082ba48c1b9fc8f76a027f100eb26d1 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Fri, 3 Oct 2025 16:35:02 -0300 Subject: [PATCH 049/233] Add naming support to Win32 threads --- src/qt/win_thread.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/win_thread.c b/src/qt/win_thread.c index 9a4f046b3..a4509892b 100644 --- a/src/qt/win_thread.c +++ b/src/qt/win_thread.c @@ -35,11 +35,11 @@ typedef struct { HANDLE handle; } win_event_t; -/* For compatibility with thread.h, but Win32 does not allow named threads. */ thread_t * -thread_create_named(void (*func)(void *param), void *param, UNUSED(const char *name)) +thread_create_named(void (*func)(void *param), void *param, const char *name) { uintptr_t bt = _beginthread(func, 0, param); + plat_set_thread_name((void *) bt, name); return ((thread_t *) bt); } From 37edcce1fa3f87cf982dd166cb441787d9ec0e2d Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 4 Oct 2025 02:03:11 +0600 Subject: [PATCH 050/233] Call timeBeginPeriod only once on startup (#6273) Use SetProcessInformation to make the OS better handle our threads on big/small cores --- src/qt/qt_main.cpp | 9 +++++ src/qt/qt_platform.cpp | 78 ++++++++++++++++++++++++++++++++++++------ src/qt/qt_ui.cpp | 4 --- 3 files changed, 77 insertions(+), 14 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 8fbcfe7d3..5f9101d47 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -98,6 +98,7 @@ extern "C" { #include <86box/timer.h> #include <86box/nvr.h> extern int qt_nvr_save(void); +extern void exit_pause(void); bool cpu_thread_running = false; } @@ -753,6 +754,14 @@ main(int argc, char *argv[]) discord_load(); #endif +#ifdef Q_OS_WINDOWS + // On Win32 the accuracy of Sleep() depends on the timer resolution, which can be set by calling timeBeginPeriod + // https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timebeginperiod + exit_pause(); + timeBeginPeriod(1); + atexit([] () -> void { timeEndPeriod(1); }); +#endif + main_window = new MainWindow(); if (startMaximized) { main_window->showMaximized(); diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index ad49e5e7c..6b60adffa 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -453,6 +453,65 @@ plat_munmap(void *ptr, size_t size) } extern bool cpu_thread_running; + +#ifdef Q_OS_WINDOWS +/* SetThreadDescription was added in 14393 and SetProcessInformation in 8. Revisit if we ever start requiring 10. */ +static void *kernel32_handle = NULL; +static HRESULT(WINAPI *pSetThreadDescription)(HANDLE hThread, PCWSTR lpThreadDescription) = NULL; +static HRESULT(WINAPI *pSetProcessInformation)(HANDLE hProcess, PROCESS_INFORMATION_CLASS ProcessInformationClass, LPVOID ProcessInformation, DWORD ProcessInformationSize) = NULL; +static dllimp_t kernel32_imports[] = { + // clang-format off + { "SetThreadDescription", &pSetThreadDescription }, + { "SetProcessInformation", &pSetProcessInformation }, + { NULL, NULL } + // clang-format on +}; + +static void +enter_pause(void) +{ + PROCESS_POWER_THROTTLING_STATE state{}; + state.Version = PROCESS_POWER_THROTTLING_CURRENT_VERSION; + state.ControlMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED | PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION; + state.StateMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED | PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION; + + if (!kernel32_handle) { + kernel32_handle = dynld_module("kernel32.dll", kernel32_imports); + if (!kernel32_handle) { + kernel32_handle = kernel32_imports; /* store dummy pointer to avoid trying again */ + pSetThreadDescription = NULL; + pSetProcessInformation = NULL; + } + } + + if (pSetProcessInformation) { + pSetProcessInformation(GetCurrentProcess(), ProcessPowerThrottling, (LPVOID)&state, sizeof(state)); + } +} + +void +exit_pause(void) +{ + PROCESS_POWER_THROTTLING_STATE state{}; + state.Version = PROCESS_POWER_THROTTLING_CURRENT_VERSION; + state.ControlMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED | PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION; + state.StateMask = 0; + + if (!kernel32_handle) { + kernel32_handle = dynld_module("kernel32.dll", kernel32_imports); + if (!kernel32_handle) { + kernel32_handle = kernel32_imports; /* store dummy pointer to avoid trying again */ + pSetThreadDescription = NULL; + pSetProcessInformation = NULL; + } + } + + if (pSetProcessInformation) { + pSetProcessInformation(GetCurrentProcess(), ProcessPowerThrottling, (LPVOID)&state, sizeof(state)); + } +} +#endif + void plat_pause(int p) { @@ -477,6 +536,14 @@ plat_pause(int p) if ((p == 0) && (time_sync & TIME_SYNC_ENABLED)) nvr_time_sync(); +#ifdef Q_OS_WINDOWS + if (p) { + enter_pause(); + } else { + exit_pause(); + } +#endif + do_pause(p); if (p) { if (mouse_capture) @@ -842,21 +909,12 @@ void plat_set_thread_name(void *thread, const char *name) { #ifdef Q_OS_WINDOWS - /* SetThreadDescription was added in 14393. Revisit if we ever start requiring 10. */ - static void *kernel32_handle = NULL; - static HRESULT(WINAPI *pSetThreadDescription)(HANDLE hThread, PCWSTR lpThreadDescription) = NULL; - static dllimp_t kernel32_imports[] = { - // clang-format off - { "SetThreadDescription", &pSetThreadDescription }, - { NULL, NULL } - // clang-format on - }; - if (!kernel32_handle) { kernel32_handle = dynld_module("kernel32.dll", kernel32_imports); if (!kernel32_handle) { kernel32_handle = kernel32_imports; /* store dummy pointer to avoid trying again */ pSetThreadDescription = NULL; + pSetProcessInformation = NULL; } } diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index d4a257887..e93ed9786 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -65,11 +65,7 @@ void plat_delay_ms(uint32_t count) { #ifdef Q_OS_WINDOWS - // On Win32 the accuracy of Sleep() depends on the timer resolution, which can be set by calling timeBeginPeriod - // https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timebeginperiod - timeBeginPeriod(1); Sleep(count); - timeEndPeriod(1); #else QThread::msleep(count); #endif From 8d5b56311bdee54b4b2ee56c17b811c10abae347 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 4 Oct 2025 02:58:54 +0600 Subject: [PATCH 051/233] Make renderer window a native widget (#6274) Remove QStackedWidget usage, switch to normal QWidget --- src/qt/qt_mainwindow.ui | 2 +- src/qt/qt_rendererstack.cpp | 21 ++++++++++++++------- src/qt/qt_rendererstack.hpp | 9 +++++++-- src/qt/qt_rendererstack.ui | 4 ++-- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index ca7aca2ca..38aba061f 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -1053,7 +1053,7 @@ RendererStack - QStackedWidget + QWidget
qt_rendererstack.hpp
1
diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 4a2e39bbe..cefd00901 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -88,10 +88,16 @@ HWND rw_hwnd; #endif RendererStack::RendererStack(QWidget *parent, int monitor_index) - : QStackedWidget(parent) + : QWidget(parent) + , boxLayout(new QBoxLayout(QBoxLayout::TopToBottom, this)) , ui(new Ui::RendererStack) { + boxLayout->setContentsMargins(0, 0, 0, 0); setAttribute(Qt::WA_AcceptTouchEvents, true); +#ifdef Q_OS_WINDOWS + setAttribute(Qt::WA_NativeWindow, true); + (void)winId(); +#endif rendererTakesScreenshots = false; #ifdef Q_OS_WINDOWS int raw = 1; @@ -187,6 +193,7 @@ RendererStack::mouseReleaseEvent(QMouseEvent *event) rw_hwnd = (HWND) this->winId(); #endif + event->accept(); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if (!dopause && this->geometry().contains(m_monitor_index >= 1 ? event->globalPosition().toPoint() : event->position().toPoint()) && #else @@ -346,7 +353,7 @@ RendererStack::switchRenderer(Renderer renderer) switchInProgress = true; if (current) { rendererWindow->finalize(); - removeWidget(current.get()); + boxLayout->removeWidget(current.get()); disconnect(this, &RendererStack::blitToRenderer, nullptr, nullptr); /* Create new renderer only after previous is destroyed! */ @@ -442,9 +449,9 @@ RendererStack::createRenderer(Renderer renderer) current->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); current->setStyleSheet("background-color: black"); current->setAttribute(Qt::WA_AlwaysStackOnTop); - addWidget(current.get()); this->setStyleSheet("background-color: black"); + boxLayout->addWidget(current.get()); rendererWindow->r_monitor_index = m_monitor_index; @@ -536,7 +543,7 @@ RendererStack::event(QEvent* event) if (mouse_x_abs > 1) mouse_x_abs = 1; if (mouse_y_abs > 1) mouse_y_abs = 1; } - return QStackedWidget::event(event); + return QWidget::event(event); } #ifdef Q_OS_WINDOWS @@ -559,7 +566,7 @@ RendererStack::event(QEvent* event) if (mouse_x_abs > 1) mouse_x_abs = 1; if (mouse_y_abs > 1) mouse_y_abs = 1; - return QStackedWidget::event(event); + return QWidget::event(event); } #endif @@ -679,10 +686,10 @@ RendererStack::event(QEvent* event) } default: - return QStackedWidget::event(event); + return QWidget::event(event); } - return QStackedWidget::event(event); + return QWidget::event(event); } void diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 99de85c99..6a7169393 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -4,7 +4,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -29,7 +30,7 @@ extern "C" } class RendererCommon; -class RendererStack : public QStackedWidget { +class RendererStack : public QWidget { Q_OBJECT public: @@ -98,6 +99,8 @@ public: void setFocusRenderer(); void onResize(int width, int height); + QWidget* currentWidget() { return current.get(); } + void (*mouse_capture_func)(QWindow *window) = nullptr; void (*mouse_uncapture_func)() = nullptr; @@ -136,6 +139,8 @@ private: std::atomic_bool rendererTakesScreenshots; std::atomic_bool switchInProgress{false}; + QBoxLayout* boxLayout = nullptr; + char auto_mouse_type[16]; }; diff --git a/src/qt/qt_rendererstack.ui b/src/qt/qt_rendererstack.ui index 634784714..2b47af25a 100644 --- a/src/qt/qt_rendererstack.ui +++ b/src/qt/qt_rendererstack.ui @@ -1,7 +1,7 @@ RendererStack - + 0 @@ -11,7 +11,7 @@ - StackedWidget + RendererWidget From d1b29d7a4f91d475c181efbf744455d4a3fad354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 3 Oct 2025 23:03:26 +0200 Subject: [PATCH 052/233] Update qt_rendererstack.hpp: reorder some things to fix a warning. --- src/qt/qt_rendererstack.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 6a7169393..a3a8d47f7 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -116,6 +116,8 @@ public slots: private: void createRenderer(Renderer renderer); + QBoxLayout* boxLayout = nullptr; + Ui::RendererStack *ui; int x; @@ -139,8 +141,6 @@ private: std::atomic_bool rendererTakesScreenshots; std::atomic_bool switchInProgress{false}; - QBoxLayout* boxLayout = nullptr; - char auto_mouse_type[16]; }; From 8ac8461dd319f7f6856b36bbe74afce0be5d7d9e Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 3 Oct 2025 21:40:32 -0400 Subject: [PATCH 053/233] Header cleanups (2/2) (#6275) --- src/include/86box/acpi.h | 2 -- src/include/86box/agpgart.h | 3 -- src/include/86box/apm.h | 2 -- src/include/86box/bswap.h | 3 -- src/include/86box/bugger.h | 2 -- src/include/86box/cartridge.h | 2 -- src/include/86box/cdrom_interface.h | 2 -- src/include/86box/cdrom_mke.h | 1 - src/include/86box/chipset.h | 2 -- src/include/86box/clock.h | 2 -- src/include/86box/ddma.h | 2 -- src/include/86box/device.h | 2 -- src/include/86box/discord.h | 2 -- src/include/86box/disksizes.h | 5 +-- src/include/86box/dma.h | 2 -- src/include/86box/fdc.h | 2 -- src/include/86box/fdc_ext.h | 2 -- src/include/86box/fdd_common.h | 2 -- src/include/86box/fdd_fdi.h | 2 -- src/include/86box/fdd_imd.h | 2 -- src/include/86box/fdd_img.h | 2 -- src/include/86box/fdd_mfm.h | 2 -- src/include/86box/fdd_pcjs.h | 1 - src/include/86box/fdd_td0.h | 2 -- src/include/86box/flash.h | 3 -- src/include/86box/gdbstub.h | 2 -- src/include/86box/hdc.h | 2 -- src/include/86box/hdc_ide.h | 2 -- src/include/86box/hdc_ide_sff8038i.h | 9 ++--- src/include/86box/hdd.h | 2 -- src/include/86box/hwm.h | 2 -- src/include/86box/i2c.h | 2 -- src/include/86box/ibm_5161.h | 3 -- src/include/86box/ini.h | 2 -- src/include/86box/io.h | 2 -- src/include/86box/isamem.h | 2 -- src/include/86box/isapnp.h | 3 -- src/include/86box/isartc.h | 2 -- src/include/86box/keyboard.h | 3 -- src/include/86box/log.h | 1 - src/include/86box/m_amstrad.h | 3 -- src/include/86box/m_at_t3100e.h | 3 -- src/include/86box/m_pcjr.h | 12 +++---- src/include/86box/m_tandy.h | 3 -- src/include/86box/m_xt_t1000.h | 3 -- src/include/86box/machine.h | 1 - src/include/86box/machine_status.h | 2 +- src/include/86box/mem.h | 3 -- src/include/86box/mo.h | 1 - src/include/86box/mouse.h | 3 -- src/include/86box/net_dp8390.h | 3 -- src/include/86box/net_event.h | 6 ++-- src/include/86box/net_ne2000.h | 2 -- src/include/86box/net_pcnet.h | 3 -- src/include/86box/net_wd8003.h | 3 -- src/include/86box/network.h | 3 -- src/include/86box/nmc93cxx.h | 6 ++-- src/include/86box/nmi.h | 1 - src/include/86box/novell_cardkey.h | 3 +- src/include/86box/nvr.h | 3 -- src/include/86box/nvr_ps2.h | 3 -- src/include/86box/opl4_defines.h | 1 - src/include/86box/pci.h | 2 -- src/include/86box/pic.h | 9 +++-- src/include/86box/pit.h | 3 -- src/include/86box/pit_fast.h | 7 ++-- src/include/86box/plat.h | 3 -- src/include/86box/plat_cdrom_ioctl.h | 4 +-- src/include/86box/plat_dir.h | 3 -- src/include/86box/plat_dynld.h | 3 -- src/include/86box/plat_fallthrough.h | 3 -- src/include/86box/plat_serial_passthrough.h | 5 ++- src/include/86box/plat_unused.h | 3 -- src/include/86box/png_struct.h | 3 -- src/include/86box/port_6x.h | 3 -- src/include/86box/port_92.h | 3 -- src/include/86box/postcard.h | 3 -- src/include/86box/printer.h | 3 -- src/include/86box/random.h | 3 -- src/include/86box/rdisk.h | 3 -- src/include/86box/rom.h | 3 -- src/include/86box/row.h | 3 -- src/include/86box/scsi.h | 2 -- src/include/86box/scsi_buslogic.h | 3 -- src/include/86box/scsi_cdrom.h | 3 -- src/include/86box/scsi_device.h | 3 -- src/include/86box/scsi_disk.h | 13 +++---- src/include/86box/scsi_ncr5380.h | 3 -- src/include/86box/scsi_ncr53c8xx.h | 3 -- src/include/86box/scsi_pcscsi.h | 6 +--- src/include/86box/scsi_spock.h | 3 -- src/include/86box/scsi_t128.h | 20 +++++------ src/include/86box/scsi_x54x.h | 5 +-- src/include/86box/serial.h | 3 -- src/include/86box/serial_passthrough.h | 4 +-- src/include/86box/sio.h | 1 - src/include/86box/smbus.h | 3 -- src/include/86box/smram.h | 3 -- src/include/86box/snd_ac97.h | 2 -- src/include/86box/snd_ad1848.h | 3 -- src/include/86box/snd_akm4531.h | 2 +- src/include/86box/snd_mpu401.h | 3 -- src/include/86box/snd_opl_nuked.h | 1 - src/include/86box/snd_sb.h | 1 - src/include/86box/snd_speaker.h | 3 -- src/include/86box/sound.h | 3 -- src/include/86box/spd.h | 3 -- src/include/86box/thread.h | 2 -- src/include/86box/ui.h | 2 -- src/include/86box/unittester.h | 3 -- src/include/86box/usb.h | 18 +++++----- src/include/86box/version.h.in | 2 -- src/include/86box/vfio.h | 2 +- src/include/86box/vid_8514a.h | 2 -- src/include/86box/vid_8514a_device.h | 2 -- src/include/86box/vid_ati_mach8.h | 2 -- src/include/86box/vid_cga.h | 1 - src/include/86box/vid_cga_comp.h | 8 ++--- src/include/86box/vid_clockgen_icd2061.h | 4 +-- src/include/86box/vid_colorplus.h | 2 +- src/include/86box/vid_ddc.h | 3 -- src/include/86box/vid_ega.h | 3 -- src/include/86box/vid_hercules.h | 3 -- src/include/86box/vid_mda.h | 13 +++---- src/include/86box/vid_nga.h | 3 -- src/include/86box/vid_ogc.h | 3 -- src/include/86box/vid_pgc.h | 2 -- src/include/86box/vid_pgc_palette.h | 3 -- src/include/86box/vid_ps55da2.h | 3 -- src/include/86box/vid_quadcolor.h | 7 ++-- src/include/86box/vid_svga.h | 2 -- src/include/86box/vid_svga_render.h | 3 -- src/include/86box/vid_v6355.h | 1 - src/include/86box/vid_vga.h | 3 -- src/include/86box/vid_voodoo_banshee.h | 3 -- .../86box/vid_voodoo_banshee_blitter.h | 3 -- src/include/86box/vid_voodoo_blitter.h | 3 -- src/include/86box/vid_voodoo_common.h | 3 -- src/include/86box/vid_voodoo_display.h | 3 -- src/include/86box/vid_voodoo_dither.h | 3 -- src/include/86box/vid_voodoo_fb.h | 3 -- src/include/86box/vid_voodoo_fifo.h | 3 -- src/include/86box/vid_voodoo_reg.h | 3 -- src/include/86box/vid_voodoo_setup.h | 3 -- src/include/86box/vid_voodoo_texture.h | 3 -- src/include/86box/vid_xga.h | 2 -- src/include/86box/vid_xga_device.h | 3 -- src/include/86box/video.h | 3 -- src/include/86box/vnc.h | 3 -- src/include/86box/win.h | 3 -- src/qt/86Box-qt.rc | 2 -- src/qt/dummy_cdrom_ioctl.c | 2 -- src/qt/evdev_keyboard.cpp | 2 -- src/qt/evdev_keyboard.hpp | 2 -- src/qt/evdev_mouse.cpp | 2 -- src/qt/qt.c | 2 -- src/qt/qt_about.cpp | 2 -- src/qt/qt_deviceconfig.cpp | 2 -- src/qt/qt_downloader.cpp | 3 -- src/qt/qt_downloader.hpp | 3 -- src/qt/qt_filefield.cpp | 2 -- src/qt/qt_harddiskdialog.cpp | 2 -- src/qt/qt_harddrive_common.cpp | 2 -- src/qt/qt_joystickconfiguration.cpp | 2 -- src/qt/qt_keybind.cpp | 2 -- src/qt/qt_machinestatus.cpp | 2 -- src/qt/qt_main.cpp | 1 - src/qt/qt_mainwindow.cpp | 2 -- src/qt/qt_mediahistorymanager.cpp | 3 -- src/qt/qt_mediahistorymanager.hpp | 3 -- src/qt/qt_mediamenu.cpp | 2 -- src/qt/qt_midi.cpp | 7 ++++ src/qt/qt_models_common.cpp | 2 -- src/qt/qt_models_common.hpp | 2 +- src/qt/qt_newfloppydialog.cpp | 2 -- src/qt/qt_openglrenderer.cpp | 3 -- src/qt/qt_openglrenderer.hpp | 3 -- src/qt/qt_openglshaderconfig.cpp | 1 - src/qt/qt_openglshadermanagerdialog.cpp | 1 - src/qt/qt_platform.cpp | 3 -- src/qt/qt_progsettings.cpp | 2 -- src/qt/qt_renderercommon.cpp | 3 -- src/qt/qt_rendererstack.cpp | 6 ++-- src/qt/qt_settings.cpp | 2 -- src/qt/qt_settings_bus_tracking.cpp | 2 -- src/qt/qt_settingsdisplay.cpp | 2 -- src/qt/qt_settingsfloppycdrom.cpp | 2 -- src/qt/qt_settingsharddisks.cpp | 2 -- src/qt/qt_settingsmachine.cpp | 3 -- src/qt/qt_settingsnetwork.cpp | 2 -- src/qt/qt_settingsotherperipherals.cpp | 2 -- src/qt/qt_settingsotherremovable.cpp | 2 -- src/qt/qt_settingsports.cpp | 2 -- src/qt/qt_settingssound.cpp | 2 -- src/qt/qt_settingsstoragecontrollers.cpp | 2 -- src/qt/qt_softwarerenderer.cpp | 2 -- src/qt/qt_soundgain.cpp | 2 -- src/qt/qt_specifydimensions.cpp | 2 -- src/qt/qt_styleoverride.cpp | 2 -- src/qt/qt_ui.cpp | 2 -- src/qt/qt_unixmanagerfilter.cpp | 2 -- src/qt/qt_unixmanagerfilter.hpp | 5 +-- src/qt/qt_updatecheck.cpp | 3 -- src/qt/qt_updatecheck.hpp | 3 -- src/qt/qt_updatecheckdialog.cpp | 3 -- src/qt/qt_updatecheckdialog.hpp | 3 -- src/qt/qt_updatedetails.cpp | 3 -- src/qt/qt_updatedetails.hpp | 3 -- src/qt/qt_util.cpp | 2 -- src/qt/qt_vmmanager_addmachine.cpp | 29 +++++++--------- src/qt/qt_vmmanager_addmachine.hpp | 31 ++++++++--------- src/qt/qt_vmmanager_clientsocket.cpp | 29 +++++++--------- src/qt/qt_vmmanager_clientsocket.hpp | 29 +++++++--------- src/qt/qt_vmmanager_config.cpp | 29 +++++++--------- src/qt/qt_vmmanager_config.hpp | 29 +++++++--------- src/qt/qt_vmmanager_details.cpp | 29 +++++++--------- src/qt/qt_vmmanager_details.hpp | 31 +++++++---------- src/qt/qt_vmmanager_detailsection.cpp | 30 +++++++--------- src/qt/qt_vmmanager_detailsection.hpp | 27 +++++++-------- src/qt/qt_vmmanager_listviewdelegate.cpp | 24 +++++-------- src/qt/qt_vmmanager_listviewdelegate.hpp | 31 ++++++++--------- src/qt/qt_vmmanager_main.cpp | 29 +++++++--------- src/qt/qt_vmmanager_main.hpp | 29 +++++++--------- src/qt/qt_vmmanager_mainwindow.cpp | 30 +++++++--------- src/qt/qt_vmmanager_mainwindow.hpp | 29 +++++++--------- src/qt/qt_vmmanager_model.cpp | 27 +++++++-------- src/qt/qt_vmmanager_model.hpp | 28 +++++++-------- src/qt/qt_vmmanager_preferences.cpp | 29 +++++++--------- src/qt/qt_vmmanager_preferences.hpp | 19 +++++------ src/qt/qt_vmmanager_protocol.cpp | 32 +++++++++-------- src/qt/qt_vmmanager_protocol.hpp | 27 +++++++-------- src/qt/qt_vmmanager_serversocket.cpp | 33 ++++++++---------- src/qt/qt_vmmanager_serversocket.hpp | 27 +++++++-------- src/qt/qt_vmmanager_system.cpp | 31 +++++++---------- src/qt/qt_vmmanager_system.hpp | 34 ++++++++----------- src/qt/qt_vmmanager_windarkmodefilter.cpp | 3 -- src/qt/qt_winmanagerfilter.cpp | 3 -- src/qt/qt_winmanagerfilter.hpp | 3 -- src/qt/qt_winrawinputfilter.cpp | 4 +-- src/qt/qt_winrawinputfilter.hpp | 3 -- src/qt/win_cdrom_ioctl.c | 18 +++++----- src/qt/win_dynld.c | 2 -- src/qt/win_opendir.c | 2 -- src/qt/win_serial_passthrough.c | 21 ++++++------ src/qt/win_thread.c | 2 -- src/qt/wl_mouse.cpp | 2 -- src/qt/xinput2_mouse.cpp | 3 -- src/qt/xkbcommon_keyboard.cpp | 2 -- src/qt/xkbcommon_keyboard.hpp | 2 -- src/qt/xkbcommon_wl_keyboard.cpp | 2 -- src/qt/xkbcommon_wl_keyboard.hpp | 2 -- src/qt/xkbcommon_x11_keyboard.cpp | 2 -- src/qt/xkbcommon_x11_keyboard.hpp | 2 -- 253 files changed, 428 insertions(+), 1028 deletions(-) diff --git a/src/include/86box/acpi.h b/src/include/86box/acpi.h index 5a3eb39ec..2287b3d56 100644 --- a/src/include/86box/acpi.h +++ b/src/include/86box/acpi.h @@ -8,8 +8,6 @@ * * Definitions for the ACPI emulation. * - * - * * Authors: Miran Grca, * * Copyright 2020 Miran Grca. diff --git a/src/include/86box/agpgart.h b/src/include/86box/agpgart.h index d3ed35c88..abb0a0e07 100644 --- a/src/include/86box/agpgart.h +++ b/src/include/86box/agpgart.h @@ -8,13 +8,10 @@ * * AGP Graphics Address Remapping Table remapping emulation. * - * - * * Authors: RichardG, * * Copyright 2021 RichardG. */ - #ifndef EMU_AGPGART_H #define EMU_AGPGART_H diff --git a/src/include/86box/apm.h b/src/include/86box/apm.h index 2d5f0f117..cff17fa57 100644 --- a/src/include/86box/apm.h +++ b/src/include/86box/apm.h @@ -8,8 +8,6 @@ * * Definitions for the Advanced Power Management emulation. * - * - * * Authors: Miran Grca, * * Copyright 2019 Miran Grca. diff --git a/src/include/86box/bswap.h b/src/include/86box/bswap.h index 0c32a7887..a2802d920 100644 --- a/src/include/86box/bswap.h +++ b/src/include/86box/bswap.h @@ -8,8 +8,6 @@ * * Various definitions for portable byte-swapping. * - * - * * Authors: Fred N. van Kempen, * neozeed, * @@ -34,7 +32,6 @@ * Boston, MA 02111-1307 * USA. */ - #ifndef BSWAP_H #define BSWAP_H diff --git a/src/include/86box/bugger.h b/src/include/86box/bugger.h index 57dabd172..99f73ac3f 100644 --- a/src/include/86box/bugger.h +++ b/src/include/86box/bugger.h @@ -15,8 +15,6 @@ * * Definitions for the BUGGER card. * - * - * * Authors: Fred N. van Kempen, * * Copyright 1989-2018 Fred N. van Kempen. diff --git a/src/include/86box/cartridge.h b/src/include/86box/cartridge.h index 2b0662703..3afe1c3fc 100644 --- a/src/include/86box/cartridge.h +++ b/src/include/86box/cartridge.h @@ -8,8 +8,6 @@ * * Definitions for the PCjr cartridge emulation. * - * - * * Authors: Miran Grca, * * Copyright 2021 Miran Grca. diff --git a/src/include/86box/cdrom_interface.h b/src/include/86box/cdrom_interface.h index ba4d0581b..2d68346ca 100644 --- a/src/include/86box/cdrom_interface.h +++ b/src/include/86box/cdrom_interface.h @@ -8,8 +8,6 @@ * * Definitions for the common CD-ROM interface controller handler. * - * - * * Authors: TheCollector1995 * * Copyright 2022 TheCollector1995. diff --git a/src/include/86box/cdrom_mke.h b/src/include/86box/cdrom_mke.h index 659e084e3..e47fc651a 100644 --- a/src/include/86box/cdrom_mke.h +++ b/src/include/86box/cdrom_mke.h @@ -14,7 +14,6 @@ * Copyright 2022-2025 Miran Grca. * Copyright 2025 Cacodemon345. */ - #ifndef CDROM_MKE_H #define CDROM_MKE_H diff --git a/src/include/86box/chipset.h b/src/include/86box/chipset.h index 66ae082ef..64b5bd88f 100644 --- a/src/include/86box/chipset.h +++ b/src/include/86box/chipset.h @@ -8,8 +8,6 @@ * * Handling of the emulated chipsets. * - * - * * Authors: Miran Grca, * * Copyright 2019-2020 Miran Grca. diff --git a/src/include/86box/clock.h b/src/include/86box/clock.h index 10155eabc..e0d2d9c09 100644 --- a/src/include/86box/clock.h +++ b/src/include/86box/clock.h @@ -8,8 +8,6 @@ * * Definitions for clock generator chips. * - * - * * Authors: RichardG, * * Copyright 2020 RichardG. diff --git a/src/include/86box/ddma.h b/src/include/86box/ddma.h index 01c2e980d..c7c44bb17 100644 --- a/src/include/86box/ddma.h +++ b/src/include/86box/ddma.h @@ -8,8 +8,6 @@ * * Definitions for the Distributed DMA emulation. * - * - * * Authors: Miran Grca, * * Copyright 2020 Miran Grca. diff --git a/src/include/86box/device.h b/src/include/86box/device.h index 76f12a0c5..c3892d27c 100644 --- a/src/include/86box/device.h +++ b/src/include/86box/device.h @@ -8,8 +8,6 @@ * * Definitions for the device handler. * - * - * * Authors: Fred N. van Kempen, * Miran Grca, * Sarah Walker, diff --git a/src/include/86box/discord.h b/src/include/86box/discord.h index 358c95c9b..6f698470b 100644 --- a/src/include/86box/discord.h +++ b/src/include/86box/discord.h @@ -8,8 +8,6 @@ * * Definitions for the Discord integration module. * - * - * * Authors: David HrdliÄka, * * Copyright 2019 David HrdliÄka. diff --git a/src/include/86box/disksizes.h b/src/include/86box/disksizes.h index b5cd1bc30..642d099fc 100644 --- a/src/include/86box/disksizes.h +++ b/src/include/86box/disksizes.h @@ -8,13 +8,10 @@ * * Header of the emulation of the PC speaker. * - * - * * Authors: Jasmine Iwanek * - * Copyright 2022 Jasmine Iwanek + * Copyright 2022-2025 Jasmine Iwanek */ - #ifndef DISK_SIZES_H #define DISK_SIZES_H diff --git a/src/include/86box/dma.h b/src/include/86box/dma.h index 23ce04898..96530cf01 100644 --- a/src/include/86box/dma.h +++ b/src/include/86box/dma.h @@ -8,8 +8,6 @@ * * Definitions for the Intel DMA controller. * - * - * * Authors: Fred N. van Kempen, * Miran Grca, * Sarah Walker, diff --git a/src/include/86box/fdc.h b/src/include/86box/fdc.h index 06ccafa39..ff56aa0ef 100644 --- a/src/include/86box/fdc.h +++ b/src/include/86box/fdc.h @@ -9,8 +9,6 @@ * Implementation of the NEC uPD-765 and compatible floppy disk * controller. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, diff --git a/src/include/86box/fdc_ext.h b/src/include/86box/fdc_ext.h index e6348139b..099271629 100644 --- a/src/include/86box/fdc_ext.h +++ b/src/include/86box/fdc_ext.h @@ -9,8 +9,6 @@ * Implementation of the NEC uPD-765 and compatible floppy disk * controller. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, diff --git a/src/include/86box/fdd_common.h b/src/include/86box/fdd_common.h index 7673d9684..9fa870f87 100644 --- a/src/include/86box/fdd_common.h +++ b/src/include/86box/fdd_common.h @@ -8,8 +8,6 @@ * * Shared code for all the floppy modules. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2017-2018 Fred N. van Kempen. diff --git a/src/include/86box/fdd_fdi.h b/src/include/86box/fdd_fdi.h index 6b9461bad..5e24f17a2 100644 --- a/src/include/86box/fdd_fdi.h +++ b/src/include/86box/fdd_fdi.h @@ -9,8 +9,6 @@ * Implementation of the FDI floppy stream image format * interface to the FDI2RAW module. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, diff --git a/src/include/86box/fdd_imd.h b/src/include/86box/fdd_imd.h index f50ad865e..d129ac642 100644 --- a/src/include/86box/fdd_imd.h +++ b/src/include/86box/fdd_imd.h @@ -8,8 +8,6 @@ * * Definitions for the IMD floppy image format. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/fdd_img.h b/src/include/86box/fdd_img.h index f0a639d88..83084c079 100644 --- a/src/include/86box/fdd_img.h +++ b/src/include/86box/fdd_img.h @@ -9,8 +9,6 @@ * Implementation of the raw sector-based floppy image format, * as well as the Japanese FDI, CopyQM, and FDF formats. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, diff --git a/src/include/86box/fdd_mfm.h b/src/include/86box/fdd_mfm.h index 3a8494a26..455a1e3d4 100644 --- a/src/include/86box/fdd_mfm.h +++ b/src/include/86box/fdd_mfm.h @@ -8,8 +8,6 @@ * * Implementation of the HxC MFM image format. * - * - * * Authors: Miran Grca, * * Copyright 2018 Miran Grca. diff --git a/src/include/86box/fdd_pcjs.h b/src/include/86box/fdd_pcjs.h index 30e8d28a3..4bfe4aca9 100644 --- a/src/include/86box/fdd_pcjs.h +++ b/src/include/86box/fdd_pcjs.h @@ -15,7 +15,6 @@ * More info: https://www.pcjs.org/tools/diskimage/ * pcjs disk module v2: https://github.com/jeffpar/pcjs/blob/master/machines/pcx86/modules/v2/disk.js */ - #ifndef EMU_FLOPPY_PCJS_H #define EMU_FLOPPY_PCJS_H diff --git a/src/include/86box/fdd_td0.h b/src/include/86box/fdd_td0.h index add6a07dd..cebc86c21 100644 --- a/src/include/86box/fdd_td0.h +++ b/src/include/86box/fdd_td0.h @@ -8,8 +8,6 @@ * * Definitions for the Teledisk floppy image format. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/flash.h b/src/include/86box/flash.h index bd9b7e505..606831a45 100644 --- a/src/include/86box/flash.h +++ b/src/include/86box/flash.h @@ -8,15 +8,12 @@ * * Handling of the emulated flash devices. * - * - * * Authors: Miran Grca, * Jasmine Iwanek, * * Copyright 2020 Miran Grca. * Copyright 2022-2023 Jasmine Iwanek. */ - #ifndef EMU_FLASH_H #define EMU_FLASH_H diff --git a/src/include/86box/gdbstub.h b/src/include/86box/gdbstub.h index c58a58bf5..695eb90f0 100644 --- a/src/include/86box/gdbstub.h +++ b/src/include/86box/gdbstub.h @@ -8,8 +8,6 @@ * * Definitions for the GDB stub server. * - * - * * Authors: RichardG, * * Copyright 2022 RichardG. diff --git a/src/include/86box/hdc.h b/src/include/86box/hdc.h index 91a4c68cd..70d71958b 100644 --- a/src/include/86box/hdc.h +++ b/src/include/86box/hdc.h @@ -8,8 +8,6 @@ * * Definitions for the common disk controller handler. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/hdc_ide.h b/src/include/86box/hdc_ide.h index 3fd589f9c..99d97efd9 100644 --- a/src/include/86box/hdc_ide.h +++ b/src/include/86box/hdc_ide.h @@ -9,8 +9,6 @@ * Implementation of the IDE emulation for hard disks and ATAPI * CD-ROM devices. * - * - * * Authors: Sarah Walker, * Miran Grca, * Copyright 2008-2019 Sarah Walker. diff --git a/src/include/86box/hdc_ide_sff8038i.h b/src/include/86box/hdc_ide_sff8038i.h index 901cdb325..2cf4e1f9d 100644 --- a/src/include/86box/hdc_ide_sff8038i.h +++ b/src/include/86box/hdc_ide_sff8038i.h @@ -8,20 +8,16 @@ * * Emulation of the SFF-8038i IDE Bus Master. * - * - * * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. * Copyright 2016-2020 Miran Grca. */ - #ifndef EMU_HDC_IDE_SFF8038I_H #define EMU_HDC_IDE_SFF8038I_H -enum -{ +enum { IRQ_MODE_LEGACY = 0, IRQ_MODE_PCI_IRQ_PIN, IRQ_MODE_PCI_IRQ_LINE, @@ -33,8 +29,7 @@ enum IRQ_MODE_SIS_551X }; -typedef struct sff8038i_t -{ +typedef struct sff8038i_t { uint8_t command; uint8_t status; uint8_t ptr0; diff --git a/src/include/86box/hdd.h b/src/include/86box/hdd.h index 597059e4f..1457efcae 100644 --- a/src/include/86box/hdd.h +++ b/src/include/86box/hdd.h @@ -8,8 +8,6 @@ * * Definitions for the hard disk image handler. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/hwm.h b/src/include/86box/hwm.h index 4ad5e6917..8dee89d74 100644 --- a/src/include/86box/hwm.h +++ b/src/include/86box/hwm.h @@ -8,8 +8,6 @@ * * Definitions for hardware monitoring chips. * - * - * * Authors: RichardG, * * Copyright 2020 RichardG. diff --git a/src/include/86box/i2c.h b/src/include/86box/i2c.h index 20e2f8b30..215e3bf52 100644 --- a/src/include/86box/i2c.h +++ b/src/include/86box/i2c.h @@ -8,8 +8,6 @@ * * Definitions for the I2C handler. * - * - * * Authors: RichardG, * * Copyright 2020 RichardG. diff --git a/src/include/86box/ibm_5161.h b/src/include/86box/ibm_5161.h index e189826a8..581f05e8b 100644 --- a/src/include/86box/ibm_5161.h +++ b/src/include/86box/ibm_5161.h @@ -8,13 +8,10 @@ * * Emulation of the IBM Expansion Unit (5161). * - * - * * Authors: Miran Grca, * * Copyright 2016-2018 Miran Grca. */ - #ifndef EMU_IBM_5161_H #define EMU_IBM_5161_H diff --git a/src/include/86box/ini.h b/src/include/86box/ini.h index c73faaa61..8b1549e6f 100644 --- a/src/include/86box/ini.h +++ b/src/include/86box/ini.h @@ -8,8 +8,6 @@ * * Configuration file handler header. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, diff --git a/src/include/86box/io.h b/src/include/86box/io.h index b80b37a39..9b46e4db4 100644 --- a/src/include/86box/io.h +++ b/src/include/86box/io.h @@ -8,8 +8,6 @@ * * Definitions for the I/O handler. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, diff --git a/src/include/86box/isamem.h b/src/include/86box/isamem.h index 93f417e3e..bc3507d89 100644 --- a/src/include/86box/isamem.h +++ b/src/include/86box/isamem.h @@ -6,8 +6,6 @@ * * Definitions for the ISAMEM cards. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2018 Fred N. van Kempen. diff --git a/src/include/86box/isapnp.h b/src/include/86box/isapnp.h index 9fedd656c..ce8d4864b 100644 --- a/src/include/86box/isapnp.h +++ b/src/include/86box/isapnp.h @@ -8,13 +8,10 @@ * * Definitions for ISA Plug and Play. * - * - * * Authors: RichardG, * * Copyright 2021 RichardG. */ - #ifndef EMU_ISAPNP_H #define EMU_ISAPNP_H #include diff --git a/src/include/86box/isartc.h b/src/include/86box/isartc.h index 815daa5d6..ef2d7a921 100644 --- a/src/include/86box/isartc.h +++ b/src/include/86box/isartc.h @@ -6,8 +6,6 @@ * * Definitions for the ISARTC cards. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2018 Fred N. van Kempen. diff --git a/src/include/86box/keyboard.h b/src/include/86box/keyboard.h index 231da4dd5..78714986c 100644 --- a/src/include/86box/keyboard.h +++ b/src/include/86box/keyboard.h @@ -8,8 +8,6 @@ * * Definitions for the keyboard interface. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, @@ -18,7 +16,6 @@ * Copyright 2016-2025 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. */ - #ifndef EMU_KEYBOARD_H #define EMU_KEYBOARD_H diff --git a/src/include/86box/log.h b/src/include/86box/log.h index e9fb70dc1..1dcc57b34 100644 --- a/src/include/86box/log.h +++ b/src/include/86box/log.h @@ -16,7 +16,6 @@ * Copyright 2021-25 Fred N. van Kempen. * Copyright 2025 Connor Hyde. */ - #ifndef EMU_LOG_H #define EMU_LOG_H diff --git a/src/include/86box/m_amstrad.h b/src/include/86box/m_amstrad.h index ef4e8b9ea..f8567fa4a 100644 --- a/src/include/86box/m_amstrad.h +++ b/src/include/86box/m_amstrad.h @@ -10,13 +10,10 @@ * PC1512, PC1640 and PC200, including their keyboard, mouse and * video devices, as well as the PC2086 and PC3086 systems. * - * - * * Authors: Sarah Walker, * * Copyright 2008-2019 Sarah Walker. */ - #ifndef MACHINE_AMSTRAD_H #define MACHINE_AMSTRAD_H diff --git a/src/include/86box/m_at_t3100e.h b/src/include/86box/m_at_t3100e.h index b9c2e24df..a2fc42761 100644 --- a/src/include/86box/m_at_t3100e.h +++ b/src/include/86box/m_at_t3100e.h @@ -8,8 +8,6 @@ * * Definitions for the Toshiba T3100e system. * - * - * * Authors: Fred N. van Kempen, * Miran Grca, * John Elliott, @@ -36,7 +34,6 @@ * Boston, MA 02111-1307 * USA. */ - #ifndef MACHINE_T3100E_H #define MACHINE_T3100E_H diff --git a/src/include/86box/m_pcjr.h b/src/include/86box/m_pcjr.h index 7bbcde3ed..6fb0ee2ed 100644 --- a/src/include/86box/m_pcjr.h +++ b/src/include/86box/m_pcjr.h @@ -8,13 +8,10 @@ * * Header files for the PCjr keyboard and video subsystems. * - * - * * Authors: Connor Hyde, * * Copyright 2025 starfrost */ - #pragma once #define PCJR_RGB 0 @@ -27,8 +24,7 @@ #define DOUBLE_INTERPOLATE_SRGB 2 #define DOUBLE_INTERPOLATE_LINEAR 3 -typedef struct pcjr_s -{ +typedef struct pcjr_s { /* Video Controller stuff. */ mem_mapping_t mapping; uint8_t crtc[32]; @@ -46,7 +42,7 @@ typedef struct pcjr_s int scanline; int vc; int dispon; - int cursorvisible; // Is the cursor visible on the current scanline? + int cursorvisible; // Is the cursor visible on the current scanline? int cursoron; int blink; int vsynctime; @@ -63,7 +59,7 @@ typedef struct pcjr_s int apply_hd; int double_type; - /* Keyboard Controller stuff. */ + /* Keyboard Controller stuff. */ int latched; int data; int serial_data[44]; @@ -77,4 +73,4 @@ typedef struct pcjr_s void pcjr_recalc_timings(pcjr_t *pcjr); // Note: This is a temporary solution until the pcjr video is made its own gfx card -void pcjr_vid_init(pcjr_t *pcjr); \ No newline at end of file +void pcjr_vid_init(pcjr_t *pcjr); diff --git a/src/include/86box/m_tandy.h b/src/include/86box/m_tandy.h index 5ef509830..15fab6cc0 100644 --- a/src/include/86box/m_tandy.h +++ b/src/include/86box/m_tandy.h @@ -8,13 +8,10 @@ * * Header files for the Tandy keyboard and video subsystems. * - * - * * Authors: Connor Hyde, * * Copyright 2025 starfrost */ - typedef struct t1kvid_t { mem_mapping_t mapping; mem_mapping_t vram_mapping; diff --git a/src/include/86box/m_xt_t1000.h b/src/include/86box/m_xt_t1000.h index 90916444c..725f8e8b1 100644 --- a/src/include/86box/m_xt_t1000.h +++ b/src/include/86box/m_xt_t1000.h @@ -8,8 +8,6 @@ * * Definitions for the Toshiba T1000/T1200 machines. * - * - * * Authors: Fred N. van Kempen, * Miran Grca, * John Elliott, @@ -36,7 +34,6 @@ * Boston, MA 02111-1307 * USA. */ - #ifndef MACHINE_T1000_H #define MACHINE_T1000_H diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 3daba325f..7c4f9f653 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -18,7 +18,6 @@ * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2025 Jasmine Iwanek. */ - #ifndef EMU_MACHINE_H #define EMU_MACHINE_H diff --git a/src/include/86box/machine_status.h b/src/include/86box/machine_status.h index c5640ac08..a3d3bdcd7 100644 --- a/src/include/86box/machine_status.h +++ b/src/include/86box/machine_status.h @@ -32,4 +32,4 @@ extern machine_status_t machine_status; extern void machine_status_init(void); -#endif /*EMU_MACHINE_STATUS_H*/ \ No newline at end of file +#endif /*EMU_MACHINE_STATUS_H*/ diff --git a/src/include/86box/mem.h b/src/include/86box/mem.h index f75f1175e..9051189a6 100644 --- a/src/include/86box/mem.h +++ b/src/include/86box/mem.h @@ -8,8 +8,6 @@ * * Definitions for the memory interface. * - * - * * Authors: Sarah Walker, * Fred N. van Kempen, * Miran Grca, @@ -18,7 +16,6 @@ * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2020 Miran Grca. */ - #ifndef EMU_MEM_H #define EMU_MEM_H diff --git a/src/include/86box/mo.h b/src/include/86box/mo.h index 76e7cbdbe..5d48579eb 100644 --- a/src/include/86box/mo.h +++ b/src/include/86box/mo.h @@ -17,7 +17,6 @@ * Copyright 2020-2025 Miran Grca. * Copyright 2020-2025 Fred N. van Kempen */ - #ifndef EMU_MO_H #define EMU_MO_H diff --git a/src/include/86box/mouse.h b/src/include/86box/mouse.h index 9745de444..86d2d259c 100644 --- a/src/include/86box/mouse.h +++ b/src/include/86box/mouse.h @@ -8,15 +8,12 @@ * * Definitions for the mouse driver. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. */ - #ifndef EMU_MOUSE_H #define EMU_MOUSE_H diff --git a/src/include/86box/net_dp8390.h b/src/include/86box/net_dp8390.h index 0b1cc45f5..352302f37 100644 --- a/src/include/86box/net_dp8390.h +++ b/src/include/86box/net_dp8390.h @@ -8,15 +8,12 @@ * Controller used by the WD family, NE1000/NE2000 family, and * 3Com 3C503 NIC's. * - * - * * Authors: Miran Grca, * Bochs project, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Bochs project. */ - #ifndef NET_DP8390_H #define NET_DP8390_H diff --git a/src/include/86box/net_event.h b/src/include/86box/net_event.h index 48580a359..eb787fe56 100644 --- a/src/include/86box/net_event.h +++ b/src/include/86box/net_event.h @@ -6,7 +6,7 @@ typedef struct net_evt_t { HANDLE handle; #else int fds[2]; -#endif +#endif /* _WIN32 */ } net_evt_t; extern void net_event_init(net_evt_t *event); @@ -17,6 +17,6 @@ extern void net_event_close(net_evt_t *event); extern HANDLE net_event_get_handle(net_evt_t *event); #else extern int net_event_get_fd(net_evt_t *event); -#endif +#endif /* _WIN32 */ -#endif \ No newline at end of file +#endif /* EMU_NET_EVENT_H */ diff --git a/src/include/86box/net_ne2000.h b/src/include/86box/net_ne2000.h index ecf2612b5..bb33223ad 100644 --- a/src/include/86box/net_ne2000.h +++ b/src/include/86box/net_ne2000.h @@ -8,8 +8,6 @@ * * Definitions for the NE2000 ethernet controller. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2017-2018 Fred N. van Kempen. diff --git a/src/include/86box/net_pcnet.h b/src/include/86box/net_pcnet.h index 994d88c75..a616c5827 100644 --- a/src/include/86box/net_pcnet.h +++ b/src/include/86box/net_pcnet.h @@ -7,8 +7,6 @@ * Emulation of the AMD PCnet LANCE NIC controller for both the ISA * and PCI buses. * - * - * * Authors: Miran Grca, * TheCollector1995, * Antony T Curtis @@ -16,7 +14,6 @@ * Copyright 2004-2019 Antony T Curtis * Copyright 2016-2019 Miran Grca. */ - #ifndef NET_PCNET_H #define NET_PCNET_H diff --git a/src/include/86box/net_wd8003.h b/src/include/86box/net_wd8003.h index 6797c7d88..21bff90ea 100644 --- a/src/include/86box/net_wd8003.h +++ b/src/include/86box/net_wd8003.h @@ -11,8 +11,6 @@ * - SMC/WD 8013EBT (ISA 16-bit); * - SMC/WD 8013EP/A (MCA). * - * - * * Authors: Fred N. van Kempen, * TheCollector1995, * Miran Grca, @@ -40,7 +38,6 @@ * Boston, MA 02111-1307 * USA. */ - #ifndef NET_WD8003_H #define NET_WD8003_H diff --git a/src/include/86box/network.h b/src/include/86box/network.h index 5a6651b5b..9c906ef1a 100644 --- a/src/include/86box/network.h +++ b/src/include/86box/network.h @@ -6,8 +6,6 @@ * * Definitions for the network module. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2017-2019 Fred N. van Kempen. @@ -42,7 +40,6 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #ifndef EMU_NETWORK_H #define EMU_NETWORK_H #include diff --git a/src/include/86box/nmc93cxx.h b/src/include/86box/nmc93cxx.h index 7573a6116..dd02b2d06 100644 --- a/src/include/86box/nmc93cxx.h +++ b/src/include/86box/nmc93cxx.h @@ -2,9 +2,9 @@ typedef struct nmc93cxx_eeprom_t { ati_eeprom_t dev; - uint8_t addrbits; - uint16_t size; - char filename[1024]; + uint8_t addrbits; + uint16_t size; + char filename[1024]; } nmc93cxx_eeprom_t; typedef struct nmc93cxx_eeprom_params_t { diff --git a/src/include/86box/nmi.h b/src/include/86box/nmi.h index 79aa68346..a2ca14083 100644 --- a/src/include/86box/nmi.h +++ b/src/include/86box/nmi.h @@ -1,7 +1,6 @@ /* Copyright holders: Sarah Walker see COPYING for more details */ - #ifndef EMU_NMI_H #define EMU_NMI_H diff --git a/src/include/86box/novell_cardkey.h b/src/include/86box/novell_cardkey.h index 8ad3eabab..7c7daa891 100644 --- a/src/include/86box/novell_cardkey.h +++ b/src/include/86box/novell_cardkey.h @@ -9,7 +9,6 @@ * Implementation of the Novell NetWare 2.x Key Card, which * was used for anti-piracy protection. * - * * Authors: Cacodemon345 * * Copyright 2024 Cacodemon345. @@ -34,4 +33,4 @@ extern const device_t novell_keycard_device; } #endif -#endif /*BUGGER_H*/ \ No newline at end of file +#endif /* NOVELL_KEYCARD_H */ diff --git a/src/include/86box/nvr.h b/src/include/86box/nvr.h index 273fc0a37..9485c7dcb 100644 --- a/src/include/86box/nvr.h +++ b/src/include/86box/nvr.h @@ -6,8 +6,6 @@ * * Definitions for the generic NVRAM/CMOS driver. * - * - * * Authors: Fred N. van Kempen, , * David HrdliÄka, * @@ -44,7 +42,6 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #ifndef EMU_NVR_H #define EMU_NVR_H diff --git a/src/include/86box/nvr_ps2.h b/src/include/86box/nvr_ps2.h index 478d1be44..2b892a4f4 100644 --- a/src/include/86box/nvr_ps2.h +++ b/src/include/86box/nvr_ps2.h @@ -8,8 +8,6 @@ * * Definitions for the PS/2 cmos/nvr device. * - * - * * Authors: Fred N. van Kempen, * Sarah Walker, * @@ -34,7 +32,6 @@ * Boston, MA 02111-1307 * USA. */ - #ifndef EMU_NVRPS2_H #define EMU_NVRPS2_H diff --git a/src/include/86box/opl4_defines.h b/src/include/86box/opl4_defines.h index 248b1f729..5280abaad 100644 --- a/src/include/86box/opl4_defines.h +++ b/src/include/86box/opl4_defines.h @@ -5,7 +5,6 @@ * opl4_defines.h * */ - #ifndef __OPL4_DEFINES_H #define __OPL4_DEFINES_H diff --git a/src/include/86box/pci.h b/src/include/86box/pci.h index 8887f89f4..a721db005 100644 --- a/src/include/86box/pci.h +++ b/src/include/86box/pci.h @@ -8,8 +8,6 @@ * * Definitions for the PCI handler module. * - * - * * Authors: Miran Grca, * * Copyright 2023 Miran Grca. diff --git a/src/include/86box/pic.h b/src/include/86box/pic.h index f6dc9af64..e485fd424 100644 --- a/src/include/86box/pic.h +++ b/src/include/86box/pic.h @@ -15,15 +15,14 @@ * Copyright 2015-2020 Andrew Jenner. * Copyright 2016-2020 Miran Grca. */ - #ifndef EMU_PIC_H #define EMU_PIC_H typedef struct pic_latch { - uint8_t d; - uint8_t e; - uint8_t q; - uint8_t nq; + uint8_t d; + uint8_t e; + uint8_t q; + uint8_t nq; } pic_latch_t; typedef struct pic { diff --git a/src/include/86box/pit.h b/src/include/86box/pit.h index 3c5a9cb52..991be4424 100644 --- a/src/include/86box/pit.h +++ b/src/include/86box/pit.h @@ -9,13 +9,10 @@ * Header of the implementation of the Intel 8253/8254 * Programmable Interval Timer. * - * - * * Authors: Miran Grca, * * Copyright 2019-2020 Miran Grca. */ - #ifndef EMU_PIT_H #define EMU_PIT_H diff --git a/src/include/86box/pit_fast.h b/src/include/86box/pit_fast.h index f824bad68..3e192315e 100644 --- a/src/include/86box/pit_fast.h +++ b/src/include/86box/pit_fast.h @@ -9,13 +9,10 @@ * Header of the implementation of the Intel 8253/8254 * Programmable Interval Timer. * - * - * * Authors: Miran Grca, * * Copyright 2019-2020 Miran Grca. */ - #ifndef EMU_PIT_FAST_H #define EMU_PIT_FAST_H @@ -55,9 +52,9 @@ typedef struct ctrf_t { }; }; - uint32_t l; + uint32_t l; - uint64_t pit_const; + uint64_t pit_const; pc_timer_t timer; diff --git a/src/include/86box/plat.h b/src/include/86box/plat.h index b76728047..e18aa707b 100644 --- a/src/include/86box/plat.h +++ b/src/include/86box/plat.h @@ -8,8 +8,6 @@ * * Define the various platform support functions. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * @@ -17,7 +15,6 @@ * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2021 Laci bĂ¡' */ - #ifndef EMU_PLAT_H #define EMU_PLAT_H diff --git a/src/include/86box/plat_cdrom_ioctl.h b/src/include/86box/plat_cdrom_ioctl.h index 471222134..a4b481b02 100644 --- a/src/include/86box/plat_cdrom_ioctl.h +++ b/src/include/86box/plat_cdrom_ioctl.h @@ -8,14 +8,12 @@ * * Definitions for platform specific serial to host passthrough. * - * * Authors: Andreas J. Reichel , * Jasmine Iwanek * * Copyright 2021 Andreas J. Reichel. * Copyright 2021-2022 Jasmine Iwanek. */ - #ifndef PLAT_CDROM_IOCTL_H #define PLAT_CDROM_IOCTL_H @@ -31,4 +29,4 @@ extern void * ioctl_open(cdrom_t *dev, const char *drv); } #endif -#endif +#endif /* PLAT_CDROM_IOCTL_H */ diff --git a/src/include/86box/plat_dir.h b/src/include/86box/plat_dir.h index 965483d26..605cf25cd 100644 --- a/src/include/86box/plat_dir.h +++ b/src/include/86box/plat_dir.h @@ -8,13 +8,10 @@ * * Definitions for the platform OpenDir module. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2017 Fred N. van Kempen. */ - #ifndef PLAT_DIR_H #define PLAT_DIR_H diff --git a/src/include/86box/plat_dynld.h b/src/include/86box/plat_dynld.h index 44891d4ac..a6469da9b 100644 --- a/src/include/86box/plat_dynld.h +++ b/src/include/86box/plat_dynld.h @@ -8,13 +8,10 @@ * * Define the Dynamic Module Loader interface. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2017 Fred N. van Kempen */ - #ifndef PLAT_DYNLD_H #define PLAT_DYNLD_H diff --git a/src/include/86box/plat_fallthrough.h b/src/include/86box/plat_fallthrough.h index 6165b266c..2ba000848 100644 --- a/src/include/86box/plat_fallthrough.h +++ b/src/include/86box/plat_fallthrough.h @@ -8,13 +8,10 @@ * * Define the various platform support functions. * - * - * * Authors: Jasmine Iwanek, * * Copyright 2023 Jasmine Iwanek */ - #ifndef EMU_PLAT_FALLTHROUGH_H #define EMU_PLAT_FALLTHROUGH_H diff --git a/src/include/86box/plat_serial_passthrough.h b/src/include/86box/plat_serial_passthrough.h index ec9a96545..6cc7180b3 100644 --- a/src/include/86box/plat_serial_passthrough.h +++ b/src/include/86box/plat_serial_passthrough.h @@ -13,9 +13,8 @@ * Jasmine Iwanek * * Copyright 2021 Andreas J. Reichel. - * Copyright 2021-2022 Jasmine Iwanek. + * Copyright 2021-2025 Jasmine Iwanek. */ - #ifndef PLAT_SERIAL_PASSTHROUGH_H #define PLAT_SERIAL_PASSTHROUGH_H @@ -36,4 +35,4 @@ extern void plat_serpt_set_line_state(void *priv); } #endif -#endif +#endif /* PLAT_SERIAL_PASSTHROUGH_H */ diff --git a/src/include/86box/plat_unused.h b/src/include/86box/plat_unused.h index 226cf677d..4688a615b 100644 --- a/src/include/86box/plat_unused.h +++ b/src/include/86box/plat_unused.h @@ -8,8 +8,6 @@ * * Define the various platform support functions. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * @@ -17,7 +15,6 @@ * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2021 Laci bĂ¡' */ - #ifndef EMU_PLAT_UNUSED_H #define EMU_PLAT_UNUSED_H diff --git a/src/include/86box/png_struct.h b/src/include/86box/png_struct.h index cbbcc5be8..46a0b2313 100644 --- a/src/include/86box/png_struct.h +++ b/src/include/86box/png_struct.h @@ -6,8 +6,6 @@ * * Definitions for the centralized PNG image handler. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2018 Fred N. van Kempen. @@ -42,7 +40,6 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #ifndef EMU_PNG_STRUCT_H #define EMU_PNG_STRUCT_H diff --git a/src/include/86box/port_6x.h b/src/include/86box/port_6x.h index e0c4b0508..a3ac6ac5c 100644 --- a/src/include/86box/port_6x.h +++ b/src/include/86box/port_6x.h @@ -9,13 +9,10 @@ * Header for the implementation of Port 6x used by various * machines. * - * - * * Authors: Miran Grca, * * Copyright 2021 Miran Grca. */ - #ifndef EMU_PORT_6X_H #define EMU_PORT_6X_H diff --git a/src/include/86box/port_92.h b/src/include/86box/port_92.h index 838b7ca28..3d05a5bf4 100644 --- a/src/include/86box/port_92.h +++ b/src/include/86box/port_92.h @@ -9,13 +9,10 @@ * Header for the implementation of Port 92 used by PS/2 * machines and 386+ clones. * - * - * * Authors: Miran Grca, * * Copyright 2019 Miran Grca. */ - #ifndef EMU_PORT_92_H #define EMU_PORT_92_H diff --git a/src/include/86box/postcard.h b/src/include/86box/postcard.h index 5ceb64ae3..7c8f26dfd 100644 --- a/src/include/86box/postcard.h +++ b/src/include/86box/postcard.h @@ -8,13 +8,10 @@ * * Implementation of a port 80h POST diagnostic card. * - * - * * Authors: RichardG, * * Copyright 2020 RichardG. */ - #ifndef POSTCARD_H #define POSTCARD_H diff --git a/src/include/86box/printer.h b/src/include/86box/printer.h index b576fbf27..52212374e 100644 --- a/src/include/86box/printer.h +++ b/src/include/86box/printer.h @@ -6,8 +6,6 @@ * * Definitions for the printers module. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2018 Fred N. van Kempen. @@ -42,7 +40,6 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #ifndef PRINTER_H #define PRINTER_H diff --git a/src/include/86box/random.h b/src/include/86box/random.h index 021969a54..8b2399c77 100644 --- a/src/include/86box/random.h +++ b/src/include/86box/random.h @@ -9,13 +9,10 @@ * A better random number generation, used for floppy weak bits * and network MAC address generation. * - * - * * Authors: Miran Grca, * * Copyright 2016-2017 Miran Grca. */ - #ifndef EMU_RANDOM_H #define EMU_RANDOM_H diff --git a/src/include/86box/rdisk.h b/src/include/86box/rdisk.h index c226a2c9d..6f0255847 100644 --- a/src/include/86box/rdisk.h +++ b/src/include/86box/rdisk.h @@ -9,13 +9,10 @@ * Implementation of the Iomega ZIP drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * - * * Authors: Miran Grca, * * Copyright 2018-2025 Miran Grca. */ - #ifndef EMU_RDISK_H #define EMU_RDISK_H diff --git a/src/include/86box/rom.h b/src/include/86box/rom.h index 807649956..6865277c6 100644 --- a/src/include/86box/rom.h +++ b/src/include/86box/rom.h @@ -8,13 +8,10 @@ * * Definitions for the ROM image handler. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2018-2019 Fred N. van Kempen. */ - #ifndef EMU_ROM_H #define EMU_ROM_H diff --git a/src/include/86box/row.h b/src/include/86box/row.h index a70c94274..baaa5833a 100644 --- a/src/include/86box/row.h +++ b/src/include/86box/row.h @@ -8,13 +8,10 @@ * * Definitions for the SMRAM interface. * - * - * * Authors: Miran Grca, * * Copyright 2016-2020 Miran Grca. */ - #ifndef EMU_ROW_H # define EMU_ROW_H diff --git a/src/include/86box/scsi.h b/src/include/86box/scsi.h index 84a4a608e..088248d71 100644 --- a/src/include/86box/scsi.h +++ b/src/include/86box/scsi.h @@ -8,8 +8,6 @@ * * SCSI controller handler header. * - * - * * Authors: TheCollector1995, * Miran Grca, * Fred N. van Kempen, diff --git a/src/include/86box/scsi_buslogic.h b/src/include/86box/scsi_buslogic.h index 6de69e700..559e42d91 100644 --- a/src/include/86box/scsi_buslogic.h +++ b/src/include/86box/scsi_buslogic.h @@ -7,8 +7,6 @@ * Emulation of BusLogic BT-542B ISA and BT-958D PCI SCSI * controllers. * - * - * * Authors: TheCollector1995, * Miran Grca, * Fred N. van Kempen, @@ -16,7 +14,6 @@ * Copyright 2016-2018 Miran Grca. * Copyright 2017-2018 Fred N. van Kempen. */ - #ifndef SCSI_BUSLOGIC_H #define SCSI_BUSLOGIC_H diff --git a/src/include/86box/scsi_cdrom.h b/src/include/86box/scsi_cdrom.h index 005223e27..b331ba62c 100644 --- a/src/include/86box/scsi_cdrom.h +++ b/src/include/86box/scsi_cdrom.h @@ -9,13 +9,10 @@ * Implementation of the CD-ROM drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * - * * Authors: Miran Grca, * * Copyright 2018-2019 Miran Grca. */ - #ifndef EMU_SCSI_CDROM_H #define EMU_SCSI_CDROM_H diff --git a/src/include/86box/scsi_device.h b/src/include/86box/scsi_device.h index d5d620670..f4c37e56c 100644 --- a/src/include/86box/scsi_device.h +++ b/src/include/86box/scsi_device.h @@ -8,15 +8,12 @@ * * Definitions for the generic SCSI device command handler. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. */ - #ifndef SCSI_DEVICE_H #define SCSI_DEVICE_H diff --git a/src/include/86box/scsi_disk.h b/src/include/86box/scsi_disk.h index 2d2371172..66bf24a36 100644 --- a/src/include/86box/scsi_disk.h +++ b/src/include/86box/scsi_disk.h @@ -6,29 +6,26 @@ * * Emulation of SCSI fixed and removable disks. * - * - * * Authors: Miran Grca, * * Copyright 2017-2018 Miran Grca. */ - #ifndef SCSI_DISK_H #define SCSI_DISK_H typedef struct scsi_disk_t { mode_sense_pages_t ms_pages_saved; - hard_disk_t * drv; + hard_disk_t *drv; #ifdef EMU_IDE_H - ide_tf_t * tf; + ide_tf_t *tf; #else - void * tf; + void *tf; #endif - void * log; + void *log; - uint8_t * temp_buffer; + uint8_t *temp_buffer; size_t temp_buffer_sz; uint8_t atapi_cdb[16]; uint8_t current_cdb[16]; diff --git a/src/include/86box/scsi_ncr5380.h b/src/include/86box/scsi_ncr5380.h index 5a43ba76a..6453340ae 100644 --- a/src/include/86box/scsi_ncr5380.h +++ b/src/include/86box/scsi_ncr5380.h @@ -9,8 +9,6 @@ * Implementation of the NCR 5380 chip made by NCR * and used in various controllers. * - * - * * Authors: Sarah Walker, * TheCollector1995, * Fred N. van Kempen, @@ -19,7 +17,6 @@ * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2017-2024 TheCollector1995. */ - #ifndef SCSI_NCR5380_H #define SCSI_NCR5380_H diff --git a/src/include/86box/scsi_ncr53c8xx.h b/src/include/86box/scsi_ncr53c8xx.h index 5149c2203..de2d8d2a1 100644 --- a/src/include/86box/scsi_ncr53c8xx.h +++ b/src/include/86box/scsi_ncr53c8xx.h @@ -10,8 +10,6 @@ * Adapters made by NCR and later Symbios and LSI. These * controllers were designed for the PCI bus. * - * - * * Authors: TheCollector1995, * Miran Grca, * Paul Brook (QEMU), @@ -21,7 +19,6 @@ * Copyright 2009-2018 Artyom Tarasenko. * Copyright 2017-2018 Miran Grca. */ - #ifndef SCSI_NCR53C8XX_H #define SCSI_NCR53C8XX_H diff --git a/src/include/86box/scsi_pcscsi.h b/src/include/86box/scsi_pcscsi.h index c4dbedeff..74a2cb937 100644 --- a/src/include/86box/scsi_pcscsi.h +++ b/src/include/86box/scsi_pcscsi.h @@ -9,9 +9,6 @@ * Implementation of the AMD PCscsi and Tekram DC-390 SCSI * controllers using the NCR 53c9x series of chips. * - * - * - * * Authors: Fabrice Bellard (QEMU) * Herve Poussineau (QEMU) * TheCollector1995, @@ -21,7 +18,6 @@ * Copyright 2012-2018 Herve Poussineau. * Copyright 2017-2018 Miran Grca. */ - #ifndef SCSI_PCSCSI_H #define SCSI_PCSCSI_H @@ -30,4 +26,4 @@ extern const device_t am53c974a_pci_device; extern const device_t dc390_pci_device; extern const device_t ncr53c90a_mca_device; -#endif /*SCSI_BUSLOGIC_H*/ +#endif /*SCSI_SCSI_PCSCSI_H*/ diff --git a/src/include/86box/scsi_spock.h b/src/include/86box/scsi_spock.h index 057271772..8777f5336 100644 --- a/src/include/86box/scsi_spock.h +++ b/src/include/86box/scsi_spock.h @@ -9,15 +9,12 @@ * Implementation of the IBM PS/2 SCSI controller with * cache for MCA only. * - * - * * Authors: Sarah Walker, * TheCollector1995, * * Copyright 2020 Sarah Walker. * Copyright 2020 TheCollector1995. */ - #ifndef SCSI_SPOCK_H #define SCSI_SPOCK_H diff --git a/src/include/86box/scsi_t128.h b/src/include/86box/scsi_t128.h index a3bc79335..0433703fb 100644 --- a/src/include/86box/scsi_t128.h +++ b/src/include/86box/scsi_t128.h @@ -17,29 +17,29 @@ * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2017-2024 TheCollector1995. */ - #ifndef SCSI_T128_H #define SCSI_T128_H typedef struct t128_t { - ncr_t ncr; - rom_t bios_rom; + ncr_t ncr; + rom_t bios_rom; mem_mapping_t mapping; - uint8_t ctrl; - uint8_t status; - uint8_t buffer[512]; - uint8_t ext_ram[0x80]; + uint8_t ctrl; + uint8_t status; + uint8_t buffer[512]; + uint8_t ext_ram[0x80]; uint32_t block_count; int block_loaded; - int pos, host_pos; + int pos; + int host_pos; uint32_t rom_addr; - int bios_enabled; + int bios_enabled; uint8_t pos_regs[8]; - int type; + int type; pc_timer_t timer; } t128_t; diff --git a/src/include/86box/scsi_x54x.h b/src/include/86box/scsi_x54x.h index 8d5964de5..2c1561b18 100644 --- a/src/include/86box/scsi_x54x.h +++ b/src/include/86box/scsi_x54x.h @@ -11,8 +11,6 @@ * of SCSI Host Adapters made by Mylex. * These controllers were designed for various buses. * - * - * * Authors: TheCollector1995, * Miran Grca, * Fred N. van Kempen, @@ -20,7 +18,6 @@ * Copyright 2016-2018 Miran Grca. * Copyright 2017-2018 Fred N. van Kempen. */ - #ifndef SCSI_X54X_H #define SCSI_X54X_H @@ -536,4 +533,4 @@ extern void *x54x_init(const device_t *info); extern void x54x_close(void *priv); extern void x54x_device_reset(void *priv); -#endif +#endif /*SCSI_X54X_H*/ diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index c6389a262..5231c491a 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -9,8 +9,6 @@ * Definitions for the NS8250/16450/16550/16650/16750/16850/16950 * UART emulation. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, @@ -19,7 +17,6 @@ * Copyright 2016-2025 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. */ - #ifndef EMU_SERIAL_H #define EMU_SERIAL_H diff --git a/src/include/86box/serial_passthrough.h b/src/include/86box/serial_passthrough.h index a5fa0013a..3b0afad4b 100644 --- a/src/include/86box/serial_passthrough.h +++ b/src/include/86box/serial_passthrough.h @@ -8,14 +8,12 @@ * * Definition of Serial passthrough device. * - * * Authors: Andreas J. Reichel , * Jasmine Iwanek * * Copyright 2021 Andreas J. Reichel. * Copyright 2021-2025 Jasmine Iwanek. */ - #ifndef SERIAL_PASSTHROUGH_H #define SERIAL_PASSTHROUGH_H @@ -65,4 +63,4 @@ extern const device_t serial_passthrough_device; extern void serial_passthrough_init(void); -#endif +#endif /*SERIAL_PASSTHROUGH_H*/ diff --git a/src/include/86box/sio.h b/src/include/86box/sio.h index 2bae49ae1..9a6f3ac79 100644 --- a/src/include/86box/sio.h +++ b/src/include/86box/sio.h @@ -12,7 +12,6 @@ * * Copyright 2017-2020 Fred N. van Kempen. */ - #ifndef EMU_SIO_H #define EMU_SIO_H diff --git a/src/include/86box/smbus.h b/src/include/86box/smbus.h index 2c06c3d4e..58556b5e8 100644 --- a/src/include/86box/smbus.h +++ b/src/include/86box/smbus.h @@ -8,13 +8,10 @@ * * Definitions for the SMBus host controllers. * - * - * * Authors: RichardG, * * Copyright 2020 RichardG. */ - #ifndef EMU_SMBUS_H #define EMU_SMBUS_H diff --git a/src/include/86box/smram.h b/src/include/86box/smram.h index 707c967f5..3bcdf1ff0 100644 --- a/src/include/86box/smram.h +++ b/src/include/86box/smram.h @@ -8,13 +8,10 @@ * * Definitions for the SMRAM interface. * - * - * * Authors: Miran Grca, * * Copyright 2016-2020 Miran Grca. */ - #ifndef EMU_SMRAM_H #define EMU_SMRAM_H diff --git a/src/include/86box/snd_ac97.h b/src/include/86box/snd_ac97.h index a365f5afa..3af68d2c8 100644 --- a/src/include/86box/snd_ac97.h +++ b/src/include/86box/snd_ac97.h @@ -8,8 +8,6 @@ * * Definitions for AC'97 audio emulation. * - * - * * Authors: RichardG, * * Copyright 2021 RichardG. diff --git a/src/include/86box/snd_ad1848.h b/src/include/86box/snd_ad1848.h index 435b2aac4..99525807c 100644 --- a/src/include/86box/snd_ad1848.h +++ b/src/include/86box/snd_ad1848.h @@ -8,8 +8,6 @@ * * Definitions for AD1848 / CS4248 / CS4231 (Windows Sound System) codec emulation. * - * - * * Authors: Sarah Walker, * TheCollector1995, * RichardG, @@ -18,7 +16,6 @@ * Copyright 2018-2020 TheCollector1995. * Copyright 2021-2025 RichardG. */ - #ifndef SOUND_AD1848_H #define SOUND_AD1848_H diff --git a/src/include/86box/snd_akm4531.h b/src/include/86box/snd_akm4531.h index 96f87b396..a2b980b84 100644 --- a/src/include/86box/snd_akm4531.h +++ b/src/include/86box/snd_akm4531.h @@ -19,4 +19,4 @@ struct akm4531_t typedef struct akm4531_t akm4531_t; -double akm4531_apply_master_vol(unsigned short sample); \ No newline at end of file +double akm4531_apply_master_vol(unsigned short sample); diff --git a/src/include/86box/snd_mpu401.h b/src/include/86box/snd_mpu401.h index 6dd99379e..44fb6b479 100644 --- a/src/include/86box/snd_mpu401.h +++ b/src/include/86box/snd_mpu401.h @@ -8,8 +8,6 @@ * * Roland MPU-401 emulation. * - * - * * Authors: Sarah Walker, * DOSBox Team, * Miran Grca, @@ -20,7 +18,6 @@ * Copyright 2016-2020 Miran Grca. * Copyright 2016-2020 TheCollector1995. */ - #ifndef SOUND_MPU401_H #define SOUND_MPU401_H diff --git a/src/include/86box/snd_opl_nuked.h b/src/include/86box/snd_opl_nuked.h index 9fdbe16c4..48819e6f7 100644 --- a/src/include/86box/snd_opl_nuked.h +++ b/src/include/86box/snd_opl_nuked.h @@ -16,7 +16,6 @@ * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. */ - #ifndef SOUND_OPL_NUKED_H #define SOUND_OPL_NUKED_H diff --git a/src/include/86box/snd_sb.h b/src/include/86box/snd_sb.h index 06fbbfa3b..51822f210 100644 --- a/src/include/86box/snd_sb.h +++ b/src/include/86box/snd_sb.h @@ -17,7 +17,6 @@ * Copyright 2016-2018 Miran Grca. * Copyright 2024-2025 Jasmine Iwanek. */ - #ifndef SOUND_SND_SB_H #define SOUND_SND_SB_H diff --git a/src/include/86box/snd_speaker.h b/src/include/86box/snd_speaker.h index fa1a6fe19..087faec32 100644 --- a/src/include/86box/snd_speaker.h +++ b/src/include/86box/snd_speaker.h @@ -8,15 +8,12 @@ * * Header of the emulation of the PC speaker. * - * - * * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. */ - #ifndef SOUND_SPEAKER_H #define SOUND_SPEAKER_H diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index 5815d3f66..2280824e4 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -8,8 +8,6 @@ * * Sound emulation core. * - * - * * Authors: Sarah Walker, * Miran Grca, * Jasmine Iwanek, @@ -18,7 +16,6 @@ * Copyright 2016-2025 Miran Grca. * Copyright 2024-2025 Jasmine Iwanek. */ - #ifndef EMU_SOUND_H #define EMU_SOUND_H diff --git a/src/include/86box/spd.h b/src/include/86box/spd.h index 98eb4e178..887e7f3c7 100644 --- a/src/include/86box/spd.h +++ b/src/include/86box/spd.h @@ -8,13 +8,10 @@ * * Emulation of SPD (Serial Presence Detect) devices. * - * - * * Authors: RichardG, * * Copyright 2020 RichardG. */ - #ifndef EMU_SPD_H #define EMU_SPD_H diff --git a/src/include/86box/thread.h b/src/include/86box/thread.h index a71d03913..874425f6b 100644 --- a/src/include/86box/thread.h +++ b/src/include/86box/thread.h @@ -8,8 +8,6 @@ * * Thread API header. * - * - * * Authors: Sarah Walker, * Miran Grca, * diff --git a/src/include/86box/ui.h b/src/include/86box/ui.h index 63243a666..9bfae4330 100644 --- a/src/include/86box/ui.h +++ b/src/include/86box/ui.h @@ -8,8 +8,6 @@ * * Define the various UI functions. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/unittester.h b/src/include/86box/unittester.h index 00abed3ff..a68f9d7c9 100644 --- a/src/include/86box/unittester.h +++ b/src/include/86box/unittester.h @@ -11,13 +11,10 @@ * If modifying the protocol, you MUST modify the specification * and increment the version number. * - * - * * Authors: GreaseMonkey, * * Copyright 2024 GreaseMonkey. */ - #ifndef UNITTESTER_H #define UNITTESTER_H diff --git a/src/include/86box/usb.h b/src/include/86box/usb.h index 623746829..635b42c4e 100644 --- a/src/include/86box/usb.h +++ b/src/include/86box/usb.h @@ -1,18 +1,16 @@ /* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. * - * This file is part of the 86Box distribution. + * This file is part of the 86Box distribution. * - * Definitions for the Distributed DMA emulation. + * Definitions for the Distributed DMA emulation. * + * Authors: Miran Grca, * - * - * Authors: Miran Grca, - * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. */ #ifndef USB_H diff --git a/src/include/86box/version.h.in b/src/include/86box/version.h.in index 17c5b3068..096bb6516 100644 --- a/src/include/86box/version.h.in +++ b/src/include/86box/version.h.in @@ -8,8 +8,6 @@ * * Definitions for project version, branding, and external links. * - * - * * Authors: Miran Grca, * * Copyright 2020 Miran Grca. diff --git a/src/include/86box/vfio.h b/src/include/86box/vfio.h index 2166070a0..c01dc8ad4 100644 --- a/src/include/86box/vfio.h +++ b/src/include/86box/vfio.h @@ -17,4 +17,4 @@ extern void vfio_init(void); -#endif +#endif /*EMU_VFIO_H*/ diff --git a/src/include/86box/vid_8514a.h b/src/include/86box/vid_8514a.h index 6e8528325..dddb216f6 100644 --- a/src/include/86box/vid_8514a.h +++ b/src/include/86box/vid_8514a.h @@ -9,8 +9,6 @@ * Emulation of the 8514/A card from IBM for the MCA bus and * generic ISA bus clones without vendor extensions. * - * - * * Authors: TheCollector1995 * * Copyright 2022 TheCollector1995. diff --git a/src/include/86box/vid_8514a_device.h b/src/include/86box/vid_8514a_device.h index b4102b17a..cb2a3fd14 100644 --- a/src/include/86box/vid_8514a_device.h +++ b/src/include/86box/vid_8514a_device.h @@ -9,8 +9,6 @@ * Emulation of the 8514/A card from IBM for the MCA bus and * generic ISA bus clones without vendor extensions. * - * - * * Authors: TheCollector1995 * * Copyright 2024 TheCollector1995. diff --git a/src/include/86box/vid_ati_mach8.h b/src/include/86box/vid_ati_mach8.h index e6fd124de..a281dfafa 100644 --- a/src/include/86box/vid_ati_mach8.h +++ b/src/include/86box/vid_ati_mach8.h @@ -9,8 +9,6 @@ * Emulation of the 8514/A-compatible Mach8 and Mach32 graphics * chips from ATI for the ISA/VLB/MCA/PCI buses. * - * - * * Authors: TheCollector1995. * * Copyright 2022-2024 TheCollector1995. diff --git a/src/include/86box/vid_cga.h b/src/include/86box/vid_cga.h index 439ee36fc..8d20d2f22 100644 --- a/src/include/86box/vid_cga.h +++ b/src/include/86box/vid_cga.h @@ -16,7 +16,6 @@ * Copyright 2016-2018 Miran Grca. * Copyright 2025 starfrost (refactoring). */ - #ifndef VIDEO_CGA_H #define VIDEO_CGA_H diff --git a/src/include/86box/vid_cga_comp.h b/src/include/86box/vid_cga_comp.h index 94051b5e5..bd6e83ee2 100644 --- a/src/include/86box/vid_cga_comp.h +++ b/src/include/86box/vid_cga_comp.h @@ -9,8 +9,6 @@ * IBM CGA composite filter, borrowed from reenigne's DOSBox * patch and ported to C. * - * - * * Authors: reenigne, * Miran Grca, * @@ -25,9 +23,9 @@ #define Bitu unsigned int -void update_cga16_color(uint8_t cgamode); -void cga_comp_init(int revision); -void cga_comp_reload(int new_brightness, int new_saturation, int new_sharpness, int new_hue, int new_contrast); +void update_cga16_color(uint8_t cgamode); +void cga_comp_init(int revision); +void cga_comp_reload(int new_brightness, int new_saturation, int new_sharpness, int new_hue, int new_contrast); uint32_t *Composite_Process(uint8_t cgamode, uint8_t border, uint32_t blocks /*, bool doublewidth*/, uint32_t *TempLine); #endif /*VIDEO_CGA_COMP_H*/ diff --git a/src/include/86box/vid_clockgen_icd2061.h b/src/include/86box/vid_clockgen_icd2061.h index 78734a347..4f96e51dc 100644 --- a/src/include/86box/vid_clockgen_icd2061.h +++ b/src/include/86box/vid_clockgen_icd2061.h @@ -14,8 +14,6 @@ * Used by ET4000w32/p (Diamond Stealth 32) and the S3 * Vision964 family. * - * - * * Authors: Miran Grca, * * Copyright 2016-2018 Miran Grca. @@ -35,4 +33,4 @@ typedef struct icd2061_t { uint32_t ctrl; } icd2061_t; -#endif // VIDEO_CLOCKGEN_ICD2061_H +#endif /*VIDEO_CLOCKGEN_ICD2061_H*/ diff --git a/src/include/86box/vid_colorplus.h b/src/include/86box/vid_colorplus.h index 8716f72fb..7e9acf269 100644 --- a/src/include/86box/vid_colorplus.h +++ b/src/include/86box/vid_colorplus.h @@ -5,7 +5,7 @@ typedef struct colorplus_t { cga_t cga; uint8_t control; - lpt_t * lpt; + lpt_t *lpt; } colorplus_t; void colorplus_init(colorplus_t *colorplus); diff --git a/src/include/86box/vid_ddc.h b/src/include/86box/vid_ddc.h index 32c8e88c5..8c1eb8787 100644 --- a/src/include/86box/vid_ddc.h +++ b/src/include/86box/vid_ddc.h @@ -8,15 +8,12 @@ * * DDC monitor emulation definitions. * - * - * * Authors: Sarah Walker, * RichardG, * * Copyright 2008-2020 Sarah Walker. * Copyright 2020 RichardG. */ - #ifndef EMU_VID_DDC_H #define EMU_VID_DDC_H diff --git a/src/include/86box/vid_ega.h b/src/include/86box/vid_ega.h index beef6f98d..e6705400c 100644 --- a/src/include/86box/vid_ega.h +++ b/src/include/86box/vid_ega.h @@ -9,15 +9,12 @@ * Emulation of the EGA and Chips & Technologies SuperEGA * graphics cards. * - * - * * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. * Copyright 2016-2020 Miran Grca. */ - #ifndef VIDEO_EGA_H #define VIDEO_EGA_H diff --git a/src/include/86box/vid_hercules.h b/src/include/86box/vid_hercules.h index 05f2673a5..7c406d64c 100644 --- a/src/include/86box/vid_hercules.h +++ b/src/include/86box/vid_hercules.h @@ -8,8 +8,6 @@ * * Emulation of the Hercules graphics cards. * - * - * * Authors: Sarah Walker, * Miran Grca, * Jasmine Iwanek, @@ -20,7 +18,6 @@ * Copyright 2021 Jasmine Iwanek. * Copyright 2025 starfrost */ - #ifndef VIDEO_HERCULES_H #define VIDEO_HERCULES_H diff --git a/src/include/86box/vid_mda.h b/src/include/86box/vid_mda.h index 2443e0ccc..17c028343 100644 --- a/src/include/86box/vid_mda.h +++ b/src/include/86box/vid_mda.h @@ -13,7 +13,6 @@ * Copyright 2007-2024 Sarah Walker * Copyright 2025 Connor Hyde / starfrost, */ - #ifndef VIDEO_MDA_H #define VIDEO_MDA_H @@ -22,8 +21,7 @@ // Enums & structures -typedef enum mda_registers_e -{ +typedef enum mda_registers_e { MDA_REGISTER_START = 0x3B0, MDA_REGISTER_CRTC_INDEX = 0x3B4, @@ -38,8 +36,7 @@ typedef enum mda_registers_e } mda_registers; // Motorola MC6845 CRTC registers (without light pen for some reason) -typedef enum mda_crtc_registers_e -{ +typedef enum mda_crtc_registers_e { MDA_CRTC_HTOTAL = 0x0, // Horizontal total (total number of characters incl. hsync) MDA_CRTC_HDISP = 0x1, // Horizontal display MDA_CRTC_HSYNC_POS = 0x2, // Horizontal position of horizontal ysnc @@ -58,16 +55,14 @@ typedef enum mda_crtc_registers_e MDA_CRTC_CURSOR_ADDR_LOW = 0xF, // Cursor address low 8 bits } mda_crtc_registers; -typedef enum mda_mode_flags_e -{ +typedef enum mda_mode_flags_e { MDA_MODE_HIGHRES = 1 << 0, // MUST be enabled for sane operation MDA_MODE_BW = 1 << 1, // UNUSED in most cases. Not present on Hercules MDA_MODE_VIDEO_ENABLE = 1 << 3, MDA_MODE_BLINK = 1 << 5, } mda_mode_flags; -typedef enum mda_colors_e -{ +typedef enum mda_colors_e { MDA_COLOR_BLACK = 0, MDA_COLOR_BLUE = 1, MDA_COLOR_GREEN = 2, diff --git a/src/include/86box/vid_nga.h b/src/include/86box/vid_nga.h index bbb5b3c95..bad34ed31 100644 --- a/src/include/86box/vid_nga.h +++ b/src/include/86box/vid_nga.h @@ -9,15 +9,12 @@ * Emulation of the Olivetti OGC 8-bit ISA (GO708) and * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * - * - * * Authors: Miran Grca, * EngiNerd, * * Copyright 2016-2019 Miran Grca. * Copyright 2020 EngiNerd. */ - #ifndef VIDEO_NGA_H #define VIDEO_NGA_H diff --git a/src/include/86box/vid_ogc.h b/src/include/86box/vid_ogc.h index efafb180e..65d79c5a0 100644 --- a/src/include/86box/vid_ogc.h +++ b/src/include/86box/vid_ogc.h @@ -9,15 +9,12 @@ * Emulation of the Olivetti OGC 8-bit ISA (GO708) and * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * - * - * * Authors: Miran Grca, * EngiNerd, * * Copyright 2016-2019 Miran Grca. * Copyright 2020 EngiNerd. */ - #ifndef VIDEO_OGC_H #define VIDEO_OGC_H diff --git a/src/include/86box/vid_pgc.h b/src/include/86box/vid_pgc.h index dd6a45b98..daeb2c259 100644 --- a/src/include/86box/vid_pgc.h +++ b/src/include/86box/vid_pgc.h @@ -8,8 +8,6 @@ * * Definitions for the PGC driver. * - * - * * Authors: Fred N. van Kempen, * John Elliott, * diff --git a/src/include/86box/vid_pgc_palette.h b/src/include/86box/vid_pgc_palette.h index a242e0cbd..c251663e8 100644 --- a/src/include/86box/vid_pgc_palette.h +++ b/src/include/86box/vid_pgc_palette.h @@ -8,15 +8,12 @@ * * Palette definitions for the PGC core. * - * - * * Authors: Fred N. van Kempen, * John Elliott, * * Copyright 2019 Fred N. van Kempen. * Copyright 2019 John Elliott. */ - #ifndef VID_PGC_PALETTE_H #define VID_PGC_PALETTE_H diff --git a/src/include/86box/vid_ps55da2.h b/src/include/86box/vid_ps55da2.h index f029b5751..f6e481b3d 100644 --- a/src/include/86box/vid_ps55da2.h +++ b/src/include/86box/vid_ps55da2.h @@ -8,13 +8,10 @@ * * IBM PS/55 Display Adapter II emulation. * - * - * * Authors: Akamaki. * * Copyright 2024 Akamaki. */ - #ifndef VIDEO_DA2_DEVICE_H #define VIDEO_DA2_DEVICE_H diff --git a/src/include/86box/vid_quadcolor.h b/src/include/86box/vid_quadcolor.h index 41b39dfb0..4e0b9f334 100644 --- a/src/include/86box/vid_quadcolor.h +++ b/src/include/86box/vid_quadcolor.h @@ -8,13 +8,12 @@ * * Quadram Quadcolor I / I+II emulation * - * Authors: Benedikt Freisen, - * Jasmine Iwanek, + * Authors: Benedikt Freisen, + * Jasmine Iwanek, * * Copyright 2024 Benedikt Freisen. - Copyright 2025 Jasmine Iwanek. + * Copyright 2025 Jasmine Iwanek. */ - #ifndef _VID_QUADCOLOR_H_ #define _VID_QUADCOLOR_H_ diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 66ed2affe..61a5697d5 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -8,8 +8,6 @@ * * Generic SVGA handling. * - * - * * Authors: Sarah Walker, * Miran Grca, * diff --git a/src/include/86box/vid_svga_render.h b/src/include/86box/vid_svga_render.h index 7ead95838..9efcafc2d 100644 --- a/src/include/86box/vid_svga_render.h +++ b/src/include/86box/vid_svga_render.h @@ -8,15 +8,12 @@ * * SVGA renderers. * - * - * * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. * Copyright 2016-2018 Miran Grca. */ - #ifndef VIDEO_SVGA_RENDER_H #define VIDEO_SVGA_RENDER_H diff --git a/src/include/86box/vid_v6355.h b/src/include/86box/vid_v6355.h index f8fd11519..c93d04060 100644 --- a/src/include/86box/vid_v6355.h +++ b/src/include/86box/vid_v6355.h @@ -16,7 +16,6 @@ * Copyright 2016-2018 Miran Grca. * Copyright 2025 starfrost (refactoring). */ - #ifndef VIDEO_V6355_H #define VIDEO_V6355_H diff --git a/src/include/86box/vid_vga.h b/src/include/86box/vid_vga.h index 54a1d0690..9de586b13 100644 --- a/src/include/86box/vid_vga.h +++ b/src/include/86box/vid_vga.h @@ -8,8 +8,6 @@ * * Emulation of the IBM MDA + VGA graphics cards. * - * - * * Authors: Sarah Walker, * Miran Grca, * Jasmine Iwanek, @@ -18,7 +16,6 @@ * Copyright 2016-2018 Miran Grca. * Copyright 2021 Jasmine Iwanek. */ - #ifndef VIDEO_VGA_H #define VIDEO_VGA_H diff --git a/src/include/86box/vid_voodoo_banshee.h b/src/include/86box/vid_voodoo_banshee.h index 257a549dd..571c36cda 100644 --- a/src/include/86box/vid_voodoo_banshee.h +++ b/src/include/86box/vid_voodoo_banshee.h @@ -8,13 +8,10 @@ * * Voodoo Banshee and 3 specific emulation. * - * - * * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_BANSHEE_H #define VIDEO_VOODOO_BANSHEE_H diff --git a/src/include/86box/vid_voodoo_banshee_blitter.h b/src/include/86box/vid_voodoo_banshee_blitter.h index 2d36f1566..313f92a3e 100644 --- a/src/include/86box/vid_voodoo_banshee_blitter.h +++ b/src/include/86box/vid_voodoo_banshee_blitter.h @@ -8,13 +8,10 @@ * * Voodoo Banshee and 3 specific emulation. * - * - * * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_BANSHEE_BLITTER_H #define VIDEO_VOODOO_BANSHEE_BLITTER_H diff --git a/src/include/86box/vid_voodoo_blitter.h b/src/include/86box/vid_voodoo_blitter.h index 261352157..e7f0f0b21 100644 --- a/src/include/86box/vid_voodoo_blitter.h +++ b/src/include/86box/vid_voodoo_blitter.h @@ -8,13 +8,10 @@ * * 3DFX Voodoo emulation. * - * - * * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_BLITTER_H #define VIDEO_VOODOO_BLITTER_H diff --git a/src/include/86box/vid_voodoo_common.h b/src/include/86box/vid_voodoo_common.h index 4201562c2..26dcd5a1e 100644 --- a/src/include/86box/vid_voodoo_common.h +++ b/src/include/86box/vid_voodoo_common.h @@ -8,14 +8,11 @@ * * Voodoo Graphics, 2, Banshee, 3 emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_COMMON_H #define VIDEO_VOODOO_COMMON_H diff --git a/src/include/86box/vid_voodoo_display.h b/src/include/86box/vid_voodoo_display.h index f046263bf..35df4152e 100644 --- a/src/include/86box/vid_voodoo_display.h +++ b/src/include/86box/vid_voodoo_display.h @@ -8,14 +8,11 @@ * * Voodoo Graphics, 2, Banshee, 3 emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_DISPLAY_H #define VIDEO_VOODOO_DISPLAY_H diff --git a/src/include/86box/vid_voodoo_dither.h b/src/include/86box/vid_voodoo_dither.h index 51ec91f2e..3a7e3b320 100644 --- a/src/include/86box/vid_voodoo_dither.h +++ b/src/include/86box/vid_voodoo_dither.h @@ -8,14 +8,11 @@ * * Voodoo Graphics and 2 specific emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_DITHER_H #define VIDEO_VOODOO_DITHER_H diff --git a/src/include/86box/vid_voodoo_fb.h b/src/include/86box/vid_voodoo_fb.h index 8a59b30ef..1e55c33fe 100644 --- a/src/include/86box/vid_voodoo_fb.h +++ b/src/include/86box/vid_voodoo_fb.h @@ -8,14 +8,11 @@ * * Voodoo Graphics, 2, Banshee, 3 emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_FB_H #define VIDEO_VOODOO_FB_H diff --git a/src/include/86box/vid_voodoo_fifo.h b/src/include/86box/vid_voodoo_fifo.h index e78d0dd6b..91bb096ec 100644 --- a/src/include/86box/vid_voodoo_fifo.h +++ b/src/include/86box/vid_voodoo_fifo.h @@ -8,14 +8,11 @@ * * Voodoo Graphics, 2, Banshee, 3 emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_FIFO_H #define VIDEO_VOODOO_FIFO_H diff --git a/src/include/86box/vid_voodoo_reg.h b/src/include/86box/vid_voodoo_reg.h index 3dff4498c..04a6b7165 100644 --- a/src/include/86box/vid_voodoo_reg.h +++ b/src/include/86box/vid_voodoo_reg.h @@ -8,14 +8,11 @@ * * Voodoo Graphics, 2, Banshee, 3 emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_REG_H #define VIDEO_VOODOO_REG_H diff --git a/src/include/86box/vid_voodoo_setup.h b/src/include/86box/vid_voodoo_setup.h index d8820a7cb..f349c5f2c 100644 --- a/src/include/86box/vid_voodoo_setup.h +++ b/src/include/86box/vid_voodoo_setup.h @@ -8,14 +8,11 @@ * * Voodoo Graphics, 2, Banshee, 3 emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_SETUP_H #define VIDEO_VOODOO_SETUP_H diff --git a/src/include/86box/vid_voodoo_texture.h b/src/include/86box/vid_voodoo_texture.h index 6f325426a..639001ac2 100644 --- a/src/include/86box/vid_voodoo_texture.h +++ b/src/include/86box/vid_voodoo_texture.h @@ -8,14 +8,11 @@ * * Voodoo Graphics, 2, Banshee, 3 emulation. * - * - * * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. */ - #ifndef VIDEO_VOODOO_TEXTURE_H #define VIDEO_VOODOO_TEXTURE_H diff --git a/src/include/86box/vid_xga.h b/src/include/86box/vid_xga.h index 9aac43b9f..b3a768e7b 100644 --- a/src/include/86box/vid_xga.h +++ b/src/include/86box/vid_xga.h @@ -8,8 +8,6 @@ * * IBM XGA emulation. * - * - * * Authors: TheCollector1995. * * Copyright 2022 TheCollector1995. diff --git a/src/include/86box/vid_xga_device.h b/src/include/86box/vid_xga_device.h index 7a72e76f5..07ddf7f21 100644 --- a/src/include/86box/vid_xga_device.h +++ b/src/include/86box/vid_xga_device.h @@ -8,13 +8,10 @@ * * IBM XGA emulation. * - * - * * Authors: TheCollector1995. * * Copyright 2022 TheCollector1995. */ - #ifndef VIDEO_XGA_DEVICE_H #define VIDEO_XGA_DEVICE_H diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 81424dbcb..5ce3188f0 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -8,8 +8,6 @@ * * Definitions for the video controller module. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, @@ -18,7 +16,6 @@ * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. */ - #ifndef EMU_VIDEO_H #define EMU_VIDEO_H diff --git a/src/include/86box/vnc.h b/src/include/86box/vnc.h index a63c53403..846f53f9a 100644 --- a/src/include/86box/vnc.h +++ b/src/include/86box/vnc.h @@ -8,13 +8,10 @@ * * Definitions for the VNC renderer. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2017 Fred N. van Kempen. */ - #ifndef EMU_VNC_H #define EMU_VNC_H diff --git a/src/include/86box/win.h b/src/include/86box/win.h index 5cead7cb0..183c76b59 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -8,8 +8,6 @@ * * Platform support defintions for Win32. * - * - * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, @@ -19,7 +17,6 @@ * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2021 Laci bĂ¡' */ - #ifndef PLAT_WIN_H #define PLAT_WIN_H diff --git a/src/qt/86Box-qt.rc b/src/qt/86Box-qt.rc index 3a92439d8..6ddbffff2 100644 --- a/src/qt/86Box-qt.rc +++ b/src/qt/86Box-qt.rc @@ -8,8 +8,6 @@ * * Application resource script for Windows. * - * - * * Authors: Miran Grca, * Fred N. van Kempen, * David HrdliÄka, diff --git a/src/qt/dummy_cdrom_ioctl.c b/src/qt/dummy_cdrom_ioctl.c index 8dffc6758..af8679ecc 100644 --- a/src/qt/dummy_cdrom_ioctl.c +++ b/src/qt/dummy_cdrom_ioctl.c @@ -8,8 +8,6 @@ * * Win32 CD-ROM support via IOCTL. * - * - * * Authors: TheCollector1995, , * Miran Grca, * diff --git a/src/qt/evdev_keyboard.cpp b/src/qt/evdev_keyboard.cpp index 9bc2ebdb2..0f54775ba 100644 --- a/src/qt/evdev_keyboard.cpp +++ b/src/qt/evdev_keyboard.cpp @@ -8,8 +8,6 @@ * * evdev keyboard input module. * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. diff --git a/src/qt/evdev_keyboard.hpp b/src/qt/evdev_keyboard.hpp index 5efe5958d..2943390df 100644 --- a/src/qt/evdev_keyboard.hpp +++ b/src/qt/evdev_keyboard.hpp @@ -8,8 +8,6 @@ * * Definitions for evdev keyboard input module. * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. diff --git a/src/qt/evdev_mouse.cpp b/src/qt/evdev_mouse.cpp index b5f68a286..d882e2883 100644 --- a/src/qt/evdev_mouse.cpp +++ b/src/qt/evdev_mouse.cpp @@ -8,8 +8,6 @@ * * Linux/FreeBSD libevdev mouse input module. * - * - * * Authors: Cacodemon345 * * Copyright 2021-2022 Cacodemon345 diff --git a/src/qt/qt.c b/src/qt/qt.c index e19cf1aac..4da6a7c57 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -6,8 +6,6 @@ * * This file is part of the 86Box distribution. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje diff --git a/src/qt/qt_about.cpp b/src/qt/qt_about.cpp index 6c34c2add..a85ab54d5 100644 --- a/src/qt/qt_about.cpp +++ b/src/qt/qt_about.cpp @@ -8,8 +8,6 @@ * * About dialog module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 33572c99c..880539fe4 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -8,8 +8,6 @@ * * Device configuration UI code. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_downloader.cpp b/src/qt/qt_downloader.cpp index 49f8a2e55..d88eca57a 100644 --- a/src/qt/qt_downloader.cpp +++ b/src/qt/qt_downloader.cpp @@ -8,13 +8,10 @@ * * Downloader module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #include #include #include diff --git a/src/qt/qt_downloader.hpp b/src/qt/qt_downloader.hpp index 2164ba59c..942da3c49 100644 --- a/src/qt/qt_downloader.hpp +++ b/src/qt/qt_downloader.hpp @@ -8,13 +8,10 @@ * * Header for the downloader module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #ifndef QT_DOWNLOADER_HPP #define QT_DOWNLOADER_HPP diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index 9272e31a1..aeda899aa 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -8,8 +8,6 @@ * * File field widget. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index ae1c60971..66ab3e59b 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -8,8 +8,6 @@ * * Hard disk dialog code. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_harddrive_common.cpp b/src/qt/qt_harddrive_common.cpp index b0c8e0ea9..9e48a627e 100644 --- a/src/qt/qt_harddrive_common.cpp +++ b/src/qt/qt_harddrive_common.cpp @@ -8,8 +8,6 @@ * * Common storage devices module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje diff --git a/src/qt/qt_joystickconfiguration.cpp b/src/qt/qt_joystickconfiguration.cpp index 2d8910f4a..7011a2882 100644 --- a/src/qt/qt_joystickconfiguration.cpp +++ b/src/qt/qt_joystickconfiguration.cpp @@ -8,8 +8,6 @@ * * Joystick configuration UI module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje diff --git a/src/qt/qt_keybind.cpp b/src/qt/qt_keybind.cpp index e6e87a5e2..1862f4aa8 100644 --- a/src/qt/qt_keybind.cpp +++ b/src/qt/qt_keybind.cpp @@ -8,8 +8,6 @@ * * Keybind dialog * - * - * * Authors: Cathode Ray Dude * Cacodemon345 * diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 6ff25d60f..b9d4c4385 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -8,8 +8,6 @@ * * Joystick configuration UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 5f9101d47..38c77c516 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -8,7 +8,6 @@ * * Main entry point module * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e9e32bae0..80bbd1d0a 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -8,8 +8,6 @@ * * Main window module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen diff --git a/src/qt/qt_mediahistorymanager.cpp b/src/qt/qt_mediahistorymanager.cpp index ff9f1cf1c..a7892af31 100644 --- a/src/qt/qt_mediahistorymanager.cpp +++ b/src/qt/qt_mediahistorymanager.cpp @@ -8,13 +8,10 @@ * * Media history management module * - * - * * Authors: cold-brewed * * Copyright 2022 The 86Box development team */ - #include #include #include diff --git a/src/qt/qt_mediahistorymanager.hpp b/src/qt/qt_mediahistorymanager.hpp index 92b5939d3..fcde55fa8 100644 --- a/src/qt/qt_mediahistorymanager.hpp +++ b/src/qt/qt_mediahistorymanager.hpp @@ -8,13 +8,10 @@ * * Header for the media history management module * - * - * * Authors: cold-brewed * * Copyright 2022 The 86Box development team */ - #ifndef QT_MEDIAHISTORYMANAGER_HPP #define QT_MEDIAHISTORYMANAGER_HPP diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index b42812ad6..e63327fd8 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -8,8 +8,6 @@ * * Media menu UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen diff --git a/src/qt/qt_midi.cpp b/src/qt/qt_midi.cpp index 2ea8ad3b1..40fbfb460 100644 --- a/src/qt/qt_midi.cpp +++ b/src/qt/qt_midi.cpp @@ -5,21 +5,25 @@ extern "C" { void plat_midi_play_msg(uint8_t *msg) { + // } void plat_midi_play_sysex(uint8_t *sysex, unsigned int len) { + // } void plat_midi_input_init(void) { + // } void plat_midi_input_close(void) { + // } int @@ -31,11 +35,13 @@ plat_midi_write(uint8_t val) void plat_midi_init() { + // } void plat_midi_close() { + // } int @@ -63,4 +69,5 @@ plat_midi_in_get_dev_name(int num, char *s) s[0] = ' '; s[1] = 0; } + } diff --git a/src/qt/qt_models_common.cpp b/src/qt/qt_models_common.cpp index ed6aeaa7d..0f1ce81c9 100644 --- a/src/qt/qt_models_common.cpp +++ b/src/qt/qt_models_common.cpp @@ -8,8 +8,6 @@ * * Common storage devices module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje diff --git a/src/qt/qt_models_common.hpp b/src/qt/qt_models_common.hpp index 98674a68f..7e116523f 100644 --- a/src/qt/qt_models_common.hpp +++ b/src/qt/qt_models_common.hpp @@ -3,5 +3,5 @@ class QString; class QAbstractItemModel; namespace Models { -int AddEntry(QAbstractItemModel *model, const QString &displayRole, int userRole); + int AddEntry(QAbstractItemModel *model, const QString &displayRole, int userRole); }; diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index d9ae09d0c..6712b22f3 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -8,8 +8,6 @@ * * Common storage devices module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index 492acb630..d572bd563 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -8,8 +8,6 @@ * * OpenGL renderer for Qt, mostly ported over from PCem. * - * - * * Authors: Teemu Korhonen * Cacodemon345 * bit @@ -20,7 +18,6 @@ * Copyright 2017 Bit * Copyright 2017-2020 Sarah Walker */ - #include "qt_renderercommon.hpp" #include "qt_mainwindow.hpp" diff --git a/src/qt/qt_openglrenderer.hpp b/src/qt/qt_openglrenderer.hpp index 776a2f53e..c2dc32917 100644 --- a/src/qt/qt_openglrenderer.hpp +++ b/src/qt/qt_openglrenderer.hpp @@ -8,15 +8,12 @@ * * Header file for OpenGL renderer * - * - * * Authors: Teemu Korhonen * Cacodemon345 * * Copyright 2022 Teemu Korhonen * Copyright 2025 Cacodemon345 */ - #ifndef QT_OpenGLRenderer_HPP #define QT_OpenGLRenderer_HPP diff --git a/src/qt/qt_openglshaderconfig.cpp b/src/qt/qt_openglshaderconfig.cpp index 25f9d38a8..1e8c2d54f 100644 --- a/src/qt/qt_openglshaderconfig.cpp +++ b/src/qt/qt_openglshaderconfig.cpp @@ -82,4 +82,3 @@ void OpenGLShaderConfig::on_OpenGLShaderConfig_accepted() endblit(); main_window->reloadAllRenderers(); } - diff --git a/src/qt/qt_openglshadermanagerdialog.cpp b/src/qt/qt_openglshadermanagerdialog.cpp index 90f38f40f..ac252c092 100644 --- a/src/qt/qt_openglshadermanagerdialog.cpp +++ b/src/qt/qt_openglshadermanagerdialog.cpp @@ -263,4 +263,3 @@ void OpenGLShaderManagerDialog::on_targetFrameRate_valueChanged(int arg1) if (ui->horizontalSliderFramerate->value() != ui->targetFrameRate->value()) ui->horizontalSliderFramerate->setValue(ui->targetFrameRate->value()); } - diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 6b60adffa..d276dc8bd 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -8,8 +8,6 @@ * * Common platform functions. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen @@ -18,7 +16,6 @@ * Copyright 2021-2022 Cacodemon345 * Copyright 2021-2022 Teemu Korhonen */ - #ifdef __HAIKU__ #include #endif diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 7efeba377..e979a22b6 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -8,8 +8,6 @@ * * Program settings UI module. * - * - * * Authors: Cacodemon345 * * Copyright 2021-2022 Cacodemon345 diff --git a/src/qt/qt_renderercommon.cpp b/src/qt/qt_renderercommon.cpp index b802f5124..d34cad15b 100644 --- a/src/qt/qt_renderercommon.cpp +++ b/src/qt/qt_renderercommon.cpp @@ -8,13 +8,10 @@ * * Program settings UI module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje */ - #include "qt_renderercommon.hpp" #include "qt_mainwindow.hpp" diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index cefd00901..bcd850020 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -8,8 +8,6 @@ * * Program settings UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen @@ -75,9 +73,9 @@ extern "C" { } struct mouseinputdata { - atomic_bool mouse_tablet_in_proximity; + atomic_bool mouse_tablet_in_proximity; - char *mouse_type; + char *mouse_type; }; static mouseinputdata mousedata; diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index e15015403..d892053f8 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -8,8 +8,6 @@ * * Program settings UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp index c811cc7c0..9cfe6c8ac 100644 --- a/src/qt/qt_settings_bus_tracking.cpp +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -8,8 +8,6 @@ * * Program settings UI module. * - * - * * Authors: Miran Grca * Cacodemon345 * diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp index ed9ba220c..8e3a72589 100644 --- a/src/qt/qt_settingsdisplay.cpp +++ b/src/qt/qt_settingsdisplay.cpp @@ -8,8 +8,6 @@ * * Display settings UI module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 8ba860e0f..b1b099b62 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -8,8 +8,6 @@ * * Floppy/CD-ROM devices configuration UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index 40142f4d2..3f0447dff 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -8,8 +8,6 @@ * * Hard disk configuration UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index a0e37259c..ae03f4d38 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -8,8 +8,6 @@ * * Machine selection and configuration UI module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje @@ -413,4 +411,3 @@ void SettingsMachine::on_radioButtonLargerFrames_clicked() { ui->radioButtonSmallerFrames->setChecked(false); } - diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp index cf07234e5..16a885411 100644 --- a/src/qt/qt_settingsnetwork.cpp +++ b/src/qt/qt_settingsnetwork.cpp @@ -8,8 +8,6 @@ * * Network devices configuration UI module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp index 0ecdc30d3..89254b8ee 100644 --- a/src/qt/qt_settingsotherperipherals.cpp +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -8,8 +8,6 @@ * * Other peripherals configuration UI module. * - * - * * Authors: Joakim L. Gilje * Jasmine Iwanek * diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index f2fa3c675..dde8e9bb6 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -8,8 +8,6 @@ * * Other removable devices configuration UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_settingsports.cpp b/src/qt/qt_settingsports.cpp index 001193357..eec896839 100644 --- a/src/qt/qt_settingsports.cpp +++ b/src/qt/qt_settingsports.cpp @@ -8,8 +8,6 @@ * * Serial/Parallel ports configuration UI module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp index 57e278515..38038f97f 100644 --- a/src/qt/qt_settingssound.cpp +++ b/src/qt/qt_settingssound.cpp @@ -8,8 +8,6 @@ * * Sound/MIDI devices configuration UI module. * - * - * * Authors: Joakim L. Gilje * Jasmine Iwanek * diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index 8614852eb..254aadc86 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -8,8 +8,6 @@ * * Storage devices configuration UI module. * - * - * * Authors: Joakim L. Gilje * * Copyright 2021 Joakim L. Gilje diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index dcc0799dd..16e331378 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -8,8 +8,6 @@ * * Software renderer module. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen diff --git a/src/qt/qt_soundgain.cpp b/src/qt/qt_soundgain.cpp index 725a5b115..53cb83aa4 100644 --- a/src/qt/qt_soundgain.cpp +++ b/src/qt/qt_soundgain.cpp @@ -8,8 +8,6 @@ * * Sound gain dialog UI module. * - * - * * Authors: Cacodemon345 * * Copyright 2021-2022 Cacodemon345 diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp index 0b88e9b57..7f2da09e7 100644 --- a/src/qt/qt_specifydimensions.cpp +++ b/src/qt/qt_specifydimensions.cpp @@ -8,8 +8,6 @@ * * Specify dimensions UI module. * - * - * * Authors: Cacodemon345 * * Copyright 2021-2022 Cacodemon345 diff --git a/src/qt/qt_styleoverride.cpp b/src/qt/qt_styleoverride.cpp index 681114c4b..33480d7c3 100644 --- a/src/qt/qt_styleoverride.cpp +++ b/src/qt/qt_styleoverride.cpp @@ -8,8 +8,6 @@ * * Style override class. * - * - * * Authors: Teemu Korhonen * * Copyright 2022 Teemu Korhonen diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index e93ed9786..cebc5a216 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -8,8 +8,6 @@ * * Common UI functions. * - * - * * Authors: Joakim L. Gilje * Cacodemon345 * diff --git a/src/qt/qt_unixmanagerfilter.cpp b/src/qt/qt_unixmanagerfilter.cpp index 5d94584e6..9e46d2c09 100644 --- a/src/qt/qt_unixmanagerfilter.cpp +++ b/src/qt/qt_unixmanagerfilter.cpp @@ -8,8 +8,6 @@ * * Source file for Unix VM-managers (client-side) * - * - * * Authors: Teemu Korhonen * Cacodemon345 * diff --git a/src/qt/qt_unixmanagerfilter.hpp b/src/qt/qt_unixmanagerfilter.hpp index 0587e06ee..6129b1dad 100644 --- a/src/qt/qt_unixmanagerfilter.hpp +++ b/src/qt/qt_unixmanagerfilter.hpp @@ -6,9 +6,7 @@ * * This file is part of the 86Box distribution. * - * Header file for Unix VM-managers (client-side) - * - * + * Header file for Unix VM-managers (client-side) * * Authors: Teemu Korhonen * Cacodemon345 @@ -16,7 +14,6 @@ * Copyright 2022 Teemu Korhonen * Copyright 2022 Cacodemon345 */ - #ifndef QT_UNIXMANAGERFILTER_HPP #define QT_UNIXMANAGERFILTER_HPP diff --git a/src/qt/qt_updatecheck.cpp b/src/qt/qt_updatecheck.cpp index 83e2b34d9..4b9d1e4c5 100644 --- a/src/qt/qt_updatecheck.cpp +++ b/src/qt/qt_updatecheck.cpp @@ -8,13 +8,10 @@ * * Update check module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #include #include #include diff --git a/src/qt/qt_updatecheck.hpp b/src/qt/qt_updatecheck.hpp index 2c04993fc..32732a9be 100644 --- a/src/qt/qt_updatecheck.hpp +++ b/src/qt/qt_updatecheck.hpp @@ -8,13 +8,10 @@ * * Header for the update check module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #ifndef QT_UPDATECHECK_HPP #define QT_UPDATECHECK_HPP diff --git a/src/qt/qt_updatecheckdialog.cpp b/src/qt/qt_updatecheckdialog.cpp index 017d93822..7400f40ae 100644 --- a/src/qt/qt_updatecheckdialog.cpp +++ b/src/qt/qt_updatecheckdialog.cpp @@ -8,13 +8,10 @@ * * Update check dialog module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #include #include diff --git a/src/qt/qt_updatecheckdialog.hpp b/src/qt/qt_updatecheckdialog.hpp index 0f1c0dfa8..f3c39d5da 100644 --- a/src/qt/qt_updatecheckdialog.hpp +++ b/src/qt/qt_updatecheckdialog.hpp @@ -8,13 +8,10 @@ * * Header for the update check dialog module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #ifndef QT_UPDATECHECKDIALOG_HPP #define QT_UPDATECHECKDIALOG_HPP diff --git a/src/qt/qt_updatedetails.cpp b/src/qt/qt_updatedetails.cpp index aea55a30a..386e33fae 100644 --- a/src/qt/qt_updatedetails.cpp +++ b/src/qt/qt_updatedetails.cpp @@ -8,13 +8,10 @@ * * Update details module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #include "qt_updatedetails.hpp" #include "ui_qt_updatedetails.h" diff --git a/src/qt/qt_updatedetails.hpp b/src/qt/qt_updatedetails.hpp index 8c3528e11..c11dd8f43 100644 --- a/src/qt/qt_updatedetails.hpp +++ b/src/qt/qt_updatedetails.hpp @@ -8,13 +8,10 @@ * * Header for the update details module * - * - * * Authors: cold-brewed * * Copyright 2024 cold-brewed */ - #ifndef QT_UPDATEDETAILS_HPP #define QT_UPDATEDETAILS_HPP diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp index a95226247..02d33af9b 100644 --- a/src/qt/qt_util.cpp +++ b/src/qt/qt_util.cpp @@ -8,8 +8,6 @@ * * Utility functions. * - * - * * Authors: Teemu Korhonen * * Copyright 2022 Teemu Korhonen diff --git a/src/qt/qt_vmmanager_addmachine.cpp b/src/qt/qt_vmmanager_addmachine.cpp index b621d4733..81bb47110 100644 --- a/src/qt/qt_vmmanager_addmachine.cpp +++ b/src/qt/qt_vmmanager_addmachine.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager add machine wizard -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager add machine wizard + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include #include #include diff --git a/src/qt/qt_vmmanager_addmachine.hpp b/src/qt/qt_vmmanager_addmachine.hpp index b73b5a609..7a640a70d 100644 --- a/src/qt/qt_vmmanager_addmachine.hpp +++ b/src/qt/qt_vmmanager_addmachine.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager add machine wizard -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager add machine wizard + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef QT_VMMANAGER_ADDMACHINE_H #define QT_VMMANAGER_ADDMACHINE_H @@ -118,4 +115,4 @@ protected: void initializePage() override; }; -#endif // QT_VMMANAGER_ADDMACHINE_H \ No newline at end of file +#endif // QT_VMMANAGER_ADDMACHINE_H diff --git a/src/qt/qt_vmmanager_clientsocket.cpp b/src/qt/qt_vmmanager_clientsocket.cpp index 7f1587cb4..c8e5cbefe 100644 --- a/src/qt/qt_vmmanager_clientsocket.cpp +++ b/src/qt/qt_vmmanager_clientsocket.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager client socket module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager client socket module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include "qt_vmmanager_clientsocket.hpp" #include "qt_vmmanager_protocol.hpp" #include diff --git a/src/qt/qt_vmmanager_clientsocket.hpp b/src/qt/qt_vmmanager_clientsocket.hpp index 1848749a3..8e063a79e 100644 --- a/src/qt/qt_vmmanager_clientsocket.hpp +++ b/src/qt/qt_vmmanager_clientsocket.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header file for 86Box VM manager client socket module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header file for 86Box VM manager client socket module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef QT_VMMANAGER_CLIENTSOCKET_HPP #define QT_VMMANAGER_CLIENTSOCKET_HPP diff --git a/src/qt/qt_vmmanager_config.cpp b/src/qt/qt_vmmanager_config.cpp index 41075799b..5690ea91a 100644 --- a/src/qt/qt_vmmanager_config.cpp +++ b/src/qt/qt_vmmanager_config.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager configuration module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager configuration module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include #include #include "qt_vmmanager_config.hpp" diff --git a/src/qt/qt_vmmanager_config.hpp b/src/qt/qt_vmmanager_config.hpp index bc63aaa03..51ad3ecfe 100644 --- a/src/qt/qt_vmmanager_config.hpp +++ b/src/qt/qt_vmmanager_config.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for the 86Box VM manager configuration module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for the 86Box VM manager configuration module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef QT_VMMANAGER_CONFIG_H #define QT_VMMANAGER_CONFIG_H diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp index 873da9083..2b36e3967 100644 --- a/src/qt/qt_vmmanager_details.cpp +++ b/src/qt/qt_vmmanager_details.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager system details module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager system details module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include #include #include diff --git a/src/qt/qt_vmmanager_details.hpp b/src/qt/qt_vmmanager_details.hpp index ac7cda35b..3ef868f03 100644 --- a/src/qt/qt_vmmanager_details.hpp +++ b/src/qt/qt_vmmanager_details.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager system details module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager system details module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef QT_VMMANAGER_DETAILS_H #define QT_VMMANAGER_DETAILS_H @@ -101,6 +98,4 @@ protected: // QFrame *storageFrame; }; - - #endif //QT_VMMANAGER_DETAILS_H diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp index ac321be1e..ffd8668b4 100644 --- a/src/qt/qt_vmmanager_detailsection.cpp +++ b/src/qt/qt_vmmanager_detailsection.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager system details section module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager system details section module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include "qt_vmmanager_detailsection.hpp" #include "ui_qt_vmmanager_detailsection.h" @@ -304,4 +301,3 @@ void CollapseButton::showContent() { animator_.setDirection(QAbstractAnimation::Forward); animator_.start(); } - diff --git a/src/qt/qt_vmmanager_detailsection.hpp b/src/qt/qt_vmmanager_detailsection.hpp index 3df7ce64c..bca245275 100644 --- a/src/qt/qt_vmmanager_detailsection.hpp +++ b/src/qt/qt_vmmanager_detailsection.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager system details section module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager system details section module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed */ - #ifndef QT_VMMANAGER_DETAILSECTION_H #define QT_VMMANAGER_DETAILSECTION_H diff --git a/src/qt/qt_vmmanager_listviewdelegate.cpp b/src/qt/qt_vmmanager_listviewdelegate.cpp index c5d2e1dc9..67fb80bb7 100644 --- a/src/qt/qt_vmmanager_listviewdelegate.cpp +++ b/src/qt/qt_vmmanager_listviewdelegate.cpp @@ -1,32 +1,26 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. +* 86Box A hypervisor and IBM PC system emulator that specializes in +* running old operating systems and software designed for IBM +* PC systems and compatibles from 1981 through fairly recent +* system designs based on the PCI bus. * -* This file is part of the 86Box distribution. +* This file is part of the 86Box distribution. * -* 86Box VM manager list view delegate module +* 86Box VM manager list view delegate module * +* Authors: cold-brewed * -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed +* Copyright 2024 cold-brewed */ - - #include #include "qt_util.hpp" #include "qt_vmmanager_listviewdelegate.hpp" #include "qt_vmmanager_model.hpp" - // Thanks to scopchanov https://github.com/scopchanov/SO-MessageLog // from https://stackoverflow.com/questions/53105343/is-it-possible-to-add-a-custom-widget-into-a-qlistview - VMManagerListViewDelegate::VMManagerListViewDelegate(QObject *parent) : QStyledItemDelegate(parent), m_ptr(new VMManagerListViewDelegateStyle) @@ -228,7 +222,7 @@ VMManagerListViewDelegateStyle::VMManagerListViewDelegateStyle() : spacingHorizontal(8), spacingVertical(4) { - + // } QRect VMManagerListViewDelegateStyle::statusBox(const QStyleOptionViewItem &option, diff --git a/src/qt/qt_vmmanager_listviewdelegate.hpp b/src/qt/qt_vmmanager_listviewdelegate.hpp index 9e320653b..a561c89d2 100644 --- a/src/qt/qt_vmmanager_listviewdelegate.hpp +++ b/src/qt/qt_vmmanager_listviewdelegate.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager list view delegate module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager list view delegate module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef QT_VMMANAGER_LISTVIEWDELEGATE_H #define QT_VMMANAGER_LISTVIEWDELEGATE_H @@ -74,4 +71,4 @@ private: QColor bg_color; QColor highlight_color; }; -#endif // QT_VMMANAGER_LISTVIEWDELEGATE_H \ No newline at end of file +#endif // QT_VMMANAGER_LISTVIEWDELEGATE_H diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 6ae455f8a..5bc936268 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager main module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager main module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include #include #include diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index 404a90fc6..07d1ff0c1 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager main module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager main module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef QT_VMMANAGER_MAIN_H #define QT_VMMANAGER_MAIN_H diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index a4ae61577..864a2b17a 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager main window -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager main window + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include "qt_vmmanager_mainwindow.hpp" #include "qt_vmmanager_main.hpp" #include "qt_vmmanager_preferences.hpp" @@ -174,7 +171,6 @@ VMManagerMainWindow(QWidget *parent) } delete config; } - } VMManagerMainWindow::~ diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp index be02c3095..055e61808 100644 --- a/src/qt/qt_vmmanager_mainwindow.hpp +++ b/src/qt/qt_vmmanager_mainwindow.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager main window -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager main window + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef VMM_MAINWINDOW_H #define VMM_MAINWINDOW_H diff --git a/src/qt/qt_vmmanager_model.cpp b/src/qt/qt_vmmanager_model.cpp index 6e74da82c..bd66862fd 100644 --- a/src/qt/qt_vmmanager_model.cpp +++ b/src/qt/qt_vmmanager_model.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager model module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager model module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed */ - #include #include "qt_vmmanager_model.hpp" diff --git a/src/qt/qt_vmmanager_model.hpp b/src/qt/qt_vmmanager_model.hpp index af72f3bc9..4e57dfd95 100644 --- a/src/qt/qt_vmmanager_model.hpp +++ b/src/qt/qt_vmmanager_model.hpp @@ -1,24 +1,20 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager model module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager model module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed */ - #ifndef QT_VMMANAGER_MODEL_H #define QT_VMMANAGER_MODEL_H - #include "qt_vmmanager_system.hpp" #include diff --git a/src/qt/qt_vmmanager_preferences.cpp b/src/qt/qt_vmmanager_preferences.cpp index d181119f4..d13fd8cdd 100644 --- a/src/qt/qt_vmmanager_preferences.cpp +++ b/src/qt/qt_vmmanager_preferences.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager preferences module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager preferences module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include #include #include diff --git a/src/qt/qt_vmmanager_preferences.hpp b/src/qt/qt_vmmanager_preferences.hpp index d28ff79ac..ee5cf1fe8 100644 --- a/src/qt/qt_vmmanager_preferences.hpp +++ b/src/qt/qt_vmmanager_preferences.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. +* 86Box A hypervisor and IBM PC system emulator that specializes in +* running old operating systems and software designed for IBM +* PC systems and compatibles from 1981 through fairly recent +* system designs based on the PCI bus. * -* This file is part of the 86Box distribution. +* This file is part of the 86Box distribution. * -* Header for 86Box VM manager preferences module +* Header for 86Box VM manager preferences module * +* Authors: cold-brewed * -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed +* Copyright 2024 cold-brewed */ - #ifndef VMMANAGER_PREFERENCES_H #define VMMANAGER_PREFERENCES_H diff --git a/src/qt/qt_vmmanager_protocol.cpp b/src/qt/qt_vmmanager_protocol.cpp index d113ba203..3091b0254 100644 --- a/src/qt/qt_vmmanager_protocol.cpp +++ b/src/qt/qt_vmmanager_protocol.cpp @@ -1,23 +1,21 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager protocol module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager protocol module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed */ - #include "qt_vmmanager_protocol.hpp" #include #include + VMManagerProtocol::VMManagerProtocol(VMManagerProtocol::Sender sender) { message_class = sender; @@ -65,6 +63,7 @@ VMManagerProtocol::constructDefaultObject(VMManagerProtocol::Sender type) json_message["version"] = QStringLiteral(EMU_VERSION); return json_message; } + bool VMManagerProtocol::hasRequiredFields(const QJsonObject& json_document) { @@ -76,6 +75,7 @@ VMManagerProtocol::hasRequiredFields(const QJsonObject& json_document) } return true; } + VMManagerProtocol::ClientMessage VMManagerProtocol::getClientMessageType(const QJsonObject &json_document) { @@ -100,6 +100,7 @@ VMManagerProtocol::getClientMessageType(const QJsonObject &json_document) } return VMManagerProtocol::ClientMessage::UnknownMessage; } + VMManagerProtocol::ManagerMessage VMManagerProtocol::getManagerMessageType(const QJsonObject &json_document) { @@ -126,6 +127,7 @@ VMManagerProtocol::getManagerMessageType(const QJsonObject &json_document) } return VMManagerProtocol::ManagerMessage::UnknownMessage; } + QJsonObject VMManagerProtocol::getParams(const QJsonObject &json_document) { diff --git a/src/qt/qt_vmmanager_protocol.hpp b/src/qt/qt_vmmanager_protocol.hpp index 99c88d808..f852b23e6 100644 --- a/src/qt/qt_vmmanager_protocol.hpp +++ b/src/qt/qt_vmmanager_protocol.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager protocol module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager protocol module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed */ - #ifndef QT_VMMANAGER_PROTOCOL_H #define QT_VMMANAGER_PROTOCOL_H diff --git a/src/qt/qt_vmmanager_serversocket.cpp b/src/qt/qt_vmmanager_serversocket.cpp index edd1e6c02..36234feec 100644 --- a/src/qt/qt_vmmanager_serversocket.cpp +++ b/src/qt/qt_vmmanager_serversocket.cpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager server socket module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager server socket module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed */ - #include "qt_vmmanager_serversocket.hpp" #include #include @@ -210,9 +207,9 @@ VMManagerServerSocket::setupVars() QString VMManagerServerSocket::getSocketPath() const { - if (server) { + if (server) return server->fullServerName(); - } + return {}; } @@ -220,6 +217,6 @@ QString VMManagerServerSocket::serverTypeToString(VMManagerServerSocket::ServerType server_type_lookup) { QMetaEnum qme = QMetaEnum::fromType(); - return qme.valueToKey(static_cast(server_type_lookup)); + return qme.valueToKey(static_cast(server_type_lookup)); } diff --git a/src/qt/qt_vmmanager_serversocket.hpp b/src/qt/qt_vmmanager_serversocket.hpp index ff1950771..87baa1027 100644 --- a/src/qt/qt_vmmanager_serversocket.hpp +++ b/src/qt/qt_vmmanager_serversocket.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager server socket module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager server socket module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed */ - #ifndef QT_VMMANAGER_SERVERSOCKET_H #define QT_VMMANAGER_SERVERSOCKET_H diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index dec503fce..d3dfa2866 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -1,21 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* 86Box VM manager system module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * 86Box VM manager system module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #include #include #include @@ -38,7 +34,6 @@ #include #endif - extern "C" { #include <86box/86box.h> #include <86box/device.h> diff --git a/src/qt/qt_vmmanager_system.hpp b/src/qt/qt_vmmanager_system.hpp index e40e2d4e1..af6b30016 100644 --- a/src/qt/qt_vmmanager_system.hpp +++ b/src/qt/qt_vmmanager_system.hpp @@ -1,20 +1,17 @@ /* -* 86Box A hypervisor and IBM PC system emulator that specializes in -* running old operating systems and software designed for IBM -* PC systems and compatibles from 1981 through fairly recent -* system designs based on the PCI bus. -* -* This file is part of the 86Box distribution. -* -* Header for 86Box VM manager system module -* -* -* -* Authors: cold-brewed -* -* Copyright 2024 cold-brewed -*/ - + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header for 86Box VM manager system module + * + * Authors: cold-brewed + * + * Copyright 2024 cold-brewed + */ #ifndef QT_VMMANAGER_SYSTEM_H #define QT_VMMANAGER_SYSTEM_H @@ -29,8 +26,8 @@ // This macro helps give us the required `qHash()` function in order to use the // enum as a hash key -#define QHASH_FOR_CLASS_ENUM(T) \ -inline uint qHash(const T &t, uint seed) { \ +#define QHASH_FOR_CLASS_ENUM(T) \ +inline uint qHash(const T &t, uint seed) { \ return ::qHash(static_cast::type>(t), seed); \ } @@ -204,5 +201,4 @@ private: void statusRefresh(); }; - #endif //QT_VMMANAGER_SYSTEM_H diff --git a/src/qt/qt_vmmanager_windarkmodefilter.cpp b/src/qt/qt_vmmanager_windarkmodefilter.cpp index c95bc0c0f..4cba78b50 100644 --- a/src/qt/qt_vmmanager_windarkmodefilter.cpp +++ b/src/qt/qt_vmmanager_windarkmodefilter.cpp @@ -8,15 +8,12 @@ * * Generic Windows native event filter for dark mode handling * - * - * * Authors: Teemu Korhonen * Cacodemon345 * * Copyright 2021 Teemu Korhonen * Copyright 2024-2025 Cacodemon345. */ - #include "qt_vmmanager_windarkmodefilter.hpp" #include diff --git a/src/qt/qt_winmanagerfilter.cpp b/src/qt/qt_winmanagerfilter.cpp index cdb81fcd5..421498057 100644 --- a/src/qt/qt_winmanagerfilter.cpp +++ b/src/qt/qt_winmanagerfilter.cpp @@ -8,13 +8,10 @@ * * Windows VM-managers native messages filter * - * - * * Authors: Teemu Korhonen * * Copyright 2022 Teemu Korhonen */ - #include "qt_winmanagerfilter.hpp" #include diff --git a/src/qt/qt_winmanagerfilter.hpp b/src/qt/qt_winmanagerfilter.hpp index e8fb06d90..19382ffb0 100644 --- a/src/qt/qt_winmanagerfilter.hpp +++ b/src/qt/qt_winmanagerfilter.hpp @@ -8,13 +8,10 @@ * * Header file for Windows VM-managers native messages filter * - * - * * Authors: Teemu Korhonen * * Copyright 2022 Teemu Korhonen */ - #ifndef QT_WINDOWSMANAGERFILTER_HPP #define QT_WINDOWSMANAGERFILTER_HPP diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp index 9029f4fcd..90d85e474 100644 --- a/src/qt/qt_winrawinputfilter.cpp +++ b/src/qt/qt_winrawinputfilter.cpp @@ -8,8 +8,6 @@ * * Windows raw input native filter for Qt * - * - * * Authors: Teemu Korhonen * Miran Grca, * Sam Latinga @@ -19,7 +17,7 @@ * Copyright 2016-2018 Miran Grca. * Copyright 1997-2025 Sam Latinga * Copyright 2024-2025 Cacodemon345. - * + * * See this header for SDL3 code license: * https://github.com/libsdl-org/SDL/blob/8e5fe0ea61dc87b29ca9a6119324221df0113bcf/src/video/windows/SDL_windowsrawinput.c#L1 * diff --git a/src/qt/qt_winrawinputfilter.hpp b/src/qt/qt_winrawinputfilter.hpp index 9d8d6ba0e..28b061ac0 100644 --- a/src/qt/qt_winrawinputfilter.hpp +++ b/src/qt/qt_winrawinputfilter.hpp @@ -8,8 +8,6 @@ * * Header file for windows raw input native filter for QT * - * - * * Authors: Teemu Korhonen * * Copyright 2021 Teemu Korhonen @@ -28,7 +26,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - #ifndef QT_WINDOWSRAWINPUTFILTER_HPP #define QT_WINDOWSRAWINPUTFILTER_HPP diff --git a/src/qt/win_cdrom_ioctl.c b/src/qt/win_cdrom_ioctl.c index 6bc2df27c..5388db8ef 100644 --- a/src/qt/win_cdrom_ioctl.c +++ b/src/qt/win_cdrom_ioctl.c @@ -8,8 +8,6 @@ * * Win32 CD-ROM support via IOCTL. * - * - * * Authors: TheCollector1995, , * Miran Grca, * @@ -39,14 +37,14 @@ #include <86box/scsi_device.h> typedef struct ioctl_t { - cdrom_t *dev; - void *log; - int is_dvd; - int has_audio; - int blocks_num; - uint8_t cur_rti[65536]; - HANDLE handle; - WCHAR path[256]; + cdrom_t *dev; + void *log; + int is_dvd; + int has_audio; + int blocks_num; + uint8_t cur_rti[65536]; + HANDLE handle; + WCHAR path[256]; } ioctl_t; typedef struct _CDROM_FULL_TOC { diff --git a/src/qt/win_dynld.c b/src/qt/win_dynld.c index e4d9d5a13..92c531b98 100644 --- a/src/qt/win_dynld.c +++ b/src/qt/win_dynld.c @@ -8,8 +8,6 @@ * * Try to load a support DLL. * - * - * * Authors: Fred N. van Kempen, * * Copyright 2017-2018 Fred N. van Kempen diff --git a/src/qt/win_opendir.c b/src/qt/win_opendir.c index 46c7eb21e..9dfe8e446 100644 --- a/src/qt/win_opendir.c +++ b/src/qt/win_opendir.c @@ -10,8 +10,6 @@ * * Based on old original code @(#)dir_win32.c 1.2.0 2007/04/19 * - * - * * Authors: Fred N. van Kempen, * * Copyright 1998-2007 MicroWalt Corporation diff --git a/src/qt/win_serial_passthrough.c b/src/qt/win_serial_passthrough.c index 87252e88d..58ebb7fcb 100644 --- a/src/qt/win_serial_passthrough.c +++ b/src/qt/win_serial_passthrough.c @@ -1,19 +1,18 @@ /* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. * - * This file is part of the 86Box distribution. + * This file is part of the 86Box distribution. * - * Definitions for platform specific serial to host passthrough + * Definitions for platform specific serial to host passthrough * + * Authors: Andreas J. Reichel , + * Jasmine Iwanek * - * Authors: Andreas J. Reichel , - * Jasmine Iwanek - * - * Copyright 2021 Andreas J. Reichel - * Copyright 2021-2025 Jasmine Iwanek + * Copyright 2021 Andreas J. Reichel + * Copyright 2021-2025 Jasmine Iwanek */ #define _XOPEN_SOURCE 500 diff --git a/src/qt/win_thread.c b/src/qt/win_thread.c index a4509892b..a21b32cbf 100644 --- a/src/qt/win_thread.c +++ b/src/qt/win_thread.c @@ -8,8 +8,6 @@ * * Implement threads and mutexes for the Win32 platform. * - * - * * Authors: Sarah Walker, * Fred N. van Kempen, * diff --git a/src/qt/wl_mouse.cpp b/src/qt/wl_mouse.cpp index 6f90bac18..a6dc7aa6d 100644 --- a/src/qt/wl_mouse.cpp +++ b/src/qt/wl_mouse.cpp @@ -8,8 +8,6 @@ * * Wayland mouse input module. * - * - * * Authors: Cacodemon345 * * Copyright 2021-2022 Cacodemon345 diff --git a/src/qt/xinput2_mouse.cpp b/src/qt/xinput2_mouse.cpp index 4d79ce66d..b901e7338 100644 --- a/src/qt/xinput2_mouse.cpp +++ b/src/qt/xinput2_mouse.cpp @@ -8,15 +8,12 @@ * * X11 Xinput2 mouse input module. * - * - * * Authors: Cacodemon345 * RichardG * * Copyright 2022 Cacodemon345. * Copyright 2023 RichardG. */ - #include #include #include diff --git a/src/qt/xkbcommon_keyboard.cpp b/src/qt/xkbcommon_keyboard.cpp index 969552229..f1a43621d 100644 --- a/src/qt/xkbcommon_keyboard.cpp +++ b/src/qt/xkbcommon_keyboard.cpp @@ -8,8 +8,6 @@ * * xkbcommon keyboard input module. * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. diff --git a/src/qt/xkbcommon_keyboard.hpp b/src/qt/xkbcommon_keyboard.hpp index c3b28eeec..221a72228 100644 --- a/src/qt/xkbcommon_keyboard.hpp +++ b/src/qt/xkbcommon_keyboard.hpp @@ -8,8 +8,6 @@ * * Definitions for xkbcommon keyboard input module. * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. diff --git a/src/qt/xkbcommon_wl_keyboard.cpp b/src/qt/xkbcommon_wl_keyboard.cpp index 8b7e6399a..6158476e1 100644 --- a/src/qt/xkbcommon_wl_keyboard.cpp +++ b/src/qt/xkbcommon_wl_keyboard.cpp @@ -10,8 +10,6 @@ * * Heavily inspired by libxkbcommon interactive-wayland.c * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. diff --git a/src/qt/xkbcommon_wl_keyboard.hpp b/src/qt/xkbcommon_wl_keyboard.hpp index a70cb9e9b..9bd208905 100644 --- a/src/qt/xkbcommon_wl_keyboard.hpp +++ b/src/qt/xkbcommon_wl_keyboard.hpp @@ -8,8 +8,6 @@ * * Definitions for xkbcommon Wayland keyboard input module. * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. diff --git a/src/qt/xkbcommon_x11_keyboard.cpp b/src/qt/xkbcommon_x11_keyboard.cpp index 8e0167518..fc39ad8a2 100644 --- a/src/qt/xkbcommon_x11_keyboard.cpp +++ b/src/qt/xkbcommon_x11_keyboard.cpp @@ -10,8 +10,6 @@ * * Heavily inspired by libxkbcommon interactive-x11.c * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. diff --git a/src/qt/xkbcommon_x11_keyboard.hpp b/src/qt/xkbcommon_x11_keyboard.hpp index d8c063acb..0e4b18007 100644 --- a/src/qt/xkbcommon_x11_keyboard.hpp +++ b/src/qt/xkbcommon_x11_keyboard.hpp @@ -8,8 +8,6 @@ * * Definitions for xkbcommon-x11 keyboard input module. * - * - * * Authors: RichardG, * * Copyright 2023 RichardG. From 22bd6c53b11baf027c5f00070891240065a85043 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 4 Oct 2025 23:00:30 +0600 Subject: [PATCH 054/233] Run as many frames as possible without "pinging" the host timers (#6278) It should improve performance for certain Intel/AMD platforms with botched HPET/TSC implementations --- src/qt/qt_main.cpp | 48 ++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 38c77c516..90b4b6e59 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -459,32 +459,34 @@ main_thread_fn() drawits += static_cast(new_time - old_time); old_time = new_time; if (drawits > 0 && !dopause) { - /* Yes, so do one frame now. */ - drawits -= force_10ms ? 10 : 1; - if (drawits > 50) - drawits = 0; + /* Yes, so run frames now. */ + do { +#ifdef USE_INSTRUMENT + uint64_t start_time = elapsed_timer.nsecsElapsed(); +#endif + /* Run a block of code. */ + pc_run(); #ifdef USE_INSTRUMENT - uint64_t start_time = elapsed_timer.nsecsElapsed(); + if (instru_enabled) { + uint64_t elapsed_us = (elapsed_timer.nsecsElapsed() - start_time) / 1000; + uint64_t total_elapsed_ms = (uint64_t) ((double) tsc / cpu_s->rspeed * 1000); + printf("[instrument] %llu, %llu\n", total_elapsed_ms, elapsed_us); + if (instru_run_ms && total_elapsed_ms >= instru_run_ms) + break; + } #endif - /* Run a block of code. */ - pc_run(); - -#ifdef USE_INSTRUMENT - if (instru_enabled) { - uint64_t elapsed_us = (elapsed_timer.nsecsElapsed() - start_time) / 1000; - uint64_t total_elapsed_ms = (uint64_t) ((double) tsc / cpu_s->rspeed * 1000); - printf("[instrument] %llu, %llu\n", total_elapsed_ms, elapsed_us); - if (instru_run_ms && total_elapsed_ms >= instru_run_ms) - break; - } -#endif - /* Every 2 emulated seconds we save the machine status. */ - if (++frames >= (force_10ms ? 200 : 2000) && nvr_dosave) { - qt_nvr_save(); - nvr_dosave = 0; - frames = 0; - } + /* Every 2 emulated seconds we save the machine status. */ + if (++frames >= (force_10ms ? 200 : 2000) && nvr_dosave) { + qt_nvr_save(); + nvr_dosave = 0; + frames = 0; + } + + drawits -= force_10ms ? 10 : 1; + if (drawits > 50) + drawits = 0; + } while (drawits > 0); } else { /* Just so we dont overload the host OS. */ From 3f7c2ccf202e0728bcccec532f376eed639f33ee Mon Sep 17 00:00:00 2001 From: Sasamiya <117635969+sasamiya-bios@users.noreply.github.com> Date: Sun, 5 Oct 2025 09:06:11 +0800 Subject: [PATCH 055/233] Update Language Module: Simp-Chinese and Trad-Chinese (#6279) --- src/qt/languages/zh-CN.po | 28 +++++++++++------------ src/qt/languages/zh-TW.po | 48 +++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 557323f6c..e1db5c3e2 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -778,10 +778,10 @@ msgid "Ports" msgstr "端å£" msgid "Serial ports:" -msgstr "串行端å£:" +msgstr "串å£:" msgid "Parallel ports:" -msgstr "并行端å£:" +msgstr "å¹¶å£:" msgid "Storage controllers" msgstr "存储æ§åˆ¶å™¨" @@ -1138,7 +1138,7 @@ msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM msgstr "%1 计算机当å‰å¤„äºæ´»å¨ç¶æ€ă€‚您确å®è¦é€€å‡ºè™æ‹Ÿæœºç®¡ç†å™¨å—?" msgid "Add new system wizard" -msgstr "æ–°å¢ç³»ç»Ÿå‘导" +msgstr "æ·»å æ–°ç³»ç»Ÿå‘导" msgid "Introduction" msgstr "介ç»" @@ -1159,7 +1159,7 @@ msgid "Use existing configuration" msgstr "ä½¿ç”¨ç°æœ‰é…ç½®" msgid "Type some notes here" -msgstr "在此处键入一些备注" +msgstr "在此处键入备注" msgid "Paste the contents of the existing configuration file into the box below." msgstr "å°†ç°æœ‰é…置文件内容粘贴到下é¢ç„æ¡†ä¸­ă€‚" @@ -1789,16 +1789,16 @@ msgid "Novell NetWare 2.x Key Card" msgstr "Novell NetWare 2.x 密钥å¡" msgid "Serial port passthrough 1" -msgstr "串行端å£ç›´é€ 1" +msgstr "串å£ç›´é€ 1" msgid "Serial port passthrough 2" -msgstr "串行端å£ç›´é€ 2" +msgstr "串å£ç›´é€ 2" msgid "Serial port passthrough 3" -msgstr "串行端å£ç›´é€ 3" +msgstr "串å£ç›´é€ 3" msgid "Serial port passthrough 4" -msgstr "串行端å£ç›´é€ 4" +msgstr "串å£ç›´é€ 4" msgid "Renderer &options..." msgstr "渲染器选项...(&O)" @@ -1849,7 +1849,7 @@ msgid "PS/2 QuickPort Mouse" msgstr "PS/2 QuickPort é¼ æ ‡" msgid "3M MicroTouch (Serial)" -msgstr "3M MicroTouch (串行)" +msgstr "3M MicroTouch (串å£)" msgid "Default Baud rate" msgstr "默认波特ç‡" @@ -1936,7 +1936,7 @@ msgid "Serial port IRQ" msgstr "串å£ç„ IRQ" msgid "Parallel port IRQ" -msgstr "并行端å£ç„ IRQ" +msgstr "å¹¶å£ç„ IRQ" msgid "BIOS Revision" msgstr "BIOS 修订版" @@ -2074,7 +2074,7 @@ msgid "Buttons" msgstr "按钮" msgid "Serial Port" -msgstr "串行端å£" +msgstr "串å£" msgid "RTS toggle" msgstr "RTS 切æ¢" @@ -2620,13 +2620,13 @@ msgid "Protection Dongle for Savage Quest" msgstr "Savage Quest ä¿æ¤å å¯†ç‹—" msgid "Serial Passthrough Device" -msgstr "串行端å£ç›´é€è®¾å¤‡" +msgstr "串å£ç›´é€è®¾å¤‡" msgid "Passthrough Mode" msgstr "ç›´é€æ¨¡å¼" msgid "Host Serial Device" -msgstr "主机串行设备" +msgstr "主机串å£è®¾å¤‡" msgid "Name of pipe" msgstr "管é“åç§°" @@ -2647,7 +2647,7 @@ msgid "Named Pipe (Client)" msgstr "命åç®¡é“ (客户端) " msgid "Host Serial Passthrough" -msgstr "主机串行端å£ç›´é€" +msgstr "主机串å£ç›´é€" msgid "E&ject %1" msgstr "弹出 %1(&J)" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index ad570b830..d691e514e 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -643,7 +643,7 @@ msgid "MO drives:" msgstr "ç£å…‰ç¢Ÿæ©Ÿ:" msgid "MO:" -msgstr "ç£å…‰:" +msgstr "ç£å…‰ç¢Ÿ:" msgid "Removable disks:" msgstr "å¯ç§»é™¤:" @@ -778,10 +778,10 @@ msgid "Ports" msgstr "連æ¥åŸ " msgid "Serial ports:" -msgstr "åºåˆ—連æ¥åŸ :" +msgstr "åºåˆ—埠:" msgid "Parallel ports:" -msgstr "平行埠:" +msgstr "並列埠:" msgid "Storage controllers" msgstr "存儲æ§åˆ¶å™¨" @@ -793,7 +793,7 @@ msgid "Disks:" msgstr "ç£ç¢Ÿ:" msgid "Floppy:" -msgstr "軟盤:" +msgstr "軟碟:" msgid "Controllers:" msgstr "æ§åˆ¶å™¨:" @@ -1120,10 +1120,10 @@ msgid "Choose directory" msgstr "鏿“‡ç›®éŒ„" msgid "Choose configuration file" -msgstr "鏿“‡çµ„態檔案" +msgstr "鏿“‡è¨­å®æª”" msgid "86Box configuration files (86box.cfg)" -msgstr "86Box é…置檔案 (86box.cfg)" +msgstr "86Box è¨­å®æª” (86box.cfg)" msgid "Configuration read failed" msgstr "設å®è®€å–失敗" @@ -1147,22 +1147,22 @@ msgid "This will help you add a new system to 86Box." msgstr "é€™å°‡æœ‰å©æ–¼æ‚¨åœ¨ 86Box 中å å…¥æ–°ç³»çµ±ă€‚" msgid "New configuration" -msgstr "æ–°é…ç½®" +msgstr "æ–°å¢è¨­å®" msgid "Complete" msgstr "完æˆ" msgid "The wizard will now launch the configuration for the new system." -msgstr "ç²¾éˆç¾åœ¨æœƒå•Ÿå‹•新系統ç„çµ„æ…‹ă€‚" +msgstr "ç²¾éˆç¾åœ¨æœƒå•Ÿå‹•新系統ç„設å®ă€‚" msgid "Use existing configuration" -msgstr "ä½¿ç”¨ç¾æœ‰çµ„æ…‹" +msgstr "ä½¿ç”¨ç¾æœ‰è¨­å®" msgid "Type some notes here" -msgstr "在此輸入一些備註" +msgstr "在此輸入備註" msgid "Paste the contents of the existing configuration file into the box below." -msgstr "å°‡ç¾æœ‰çµ„態檔案ç„內容貼到下é¢ç„æ–¹å¡ä¸­ă€‚" +msgstr "å°‡ç¾æœ‰è¨­å®æª”ç„內容貼到下é¢ç„æ–¹å¡ä¸­ă€‚" msgid "Load configuration from file" msgstr "徿ª”案載入設å®" @@ -1849,7 +1849,7 @@ msgid "PS/2 QuickPort Mouse" msgstr "PS/2 QuickPort 滑鼠" msgid "3M MicroTouch (Serial)" -msgstr "3M MicroTouch (åºåˆ—)" +msgstr "3M MicroTouch (åºåˆ—埠)" msgid "Default Baud rate" msgstr "é è¨­æ³¢ç‰¹ç‡" @@ -1936,7 +1936,7 @@ msgid "Serial port IRQ" msgstr "åºåˆ—åŸ ç„ IRQ" msgid "Parallel port IRQ" -msgstr "å¹³è¡ŒåŸ ç„ IRQ" +msgstr "ä¸¦åˆ—åŸ ç„ IRQ" msgid "BIOS Revision" msgstr "BIOS 版本" @@ -2074,7 +2074,7 @@ msgid "Buttons" msgstr "按鈕" msgid "Serial Port" -msgstr "串列埠" +msgstr "åºåˆ—埠" msgid "RTS toggle" msgstr "RTS 切æ›" @@ -2620,13 +2620,13 @@ msgid "Protection Dongle for Savage Quest" msgstr "用於 Savage Quest ç„ä¿è­·å å¯†ç‹—" msgid "Serial Passthrough Device" -msgstr "åºåˆ—埠ç„ç›´é€è£ç½®" +msgstr "åºåˆ—埠直é€è£ç½®" msgid "Passthrough Mode" msgstr "ç›´é€æ¨¡å¼" msgid "Host Serial Device" -msgstr "主機串列è£ç½®" +msgstr "主機åºåˆ—è£ç½®" msgid "Name of pipe" msgstr "管é“å稱" @@ -2647,7 +2647,7 @@ msgid "Named Pipe (Client)" msgstr "已命åç®¡é“ (用戶端)" msgid "Host Serial Passthrough" -msgstr "主機åºåˆ—埠ç„ç›´é€" +msgstr "主機åºåˆ—埠直é€" msgid "E&ject %1" msgstr "退出 %1(&J)" @@ -2755,7 +2755,7 @@ msgid "Shader Manager" msgstr "著色器管ç†å“¡" msgid "Shader Configuration" -msgstr "著色器組態" +msgstr "著色器設å®" msgid "Add" msgstr "æ–°å¢" @@ -2923,7 +2923,7 @@ msgid "Update check" msgstr "更新檢查" msgid "Checking for updates..." -msgstr "檢查更新..." +msgstr "正在檢查更新..." msgid "86Box Update" msgstr "86Box æ›´æ–°" @@ -2941,7 +2941,7 @@ msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exi msgstr "虛擬機 \"%1\" ç„進程以退出代碼 %2 æ„å¤–çµ‚æ­¢ă€‚" msgid "The system will not be added." -msgstr "ç³»çµ±å°‡ä¸æœƒæ–°å¢ă€‚" +msgstr "ç³»çµ±å°‡ä¸æœƒè¢«æ–°å¢ă€‚" msgid "&Update mouse every CPU frame" msgstr "æ¯ CPU 幀更新滑鼠(&U)" @@ -2953,7 +2953,7 @@ msgid "Saturation" msgstr "飽和度" msgid "Contrast" -msgstr "å°æ¯”" +msgstr "å°æ¯”度" msgid "Brightness" msgstr "亮度" @@ -2971,7 +2971,7 @@ msgid "Monitor EDID" msgstr "ç›£è¦–å™¨ç„ EDID" msgid "Export..." -msgstr "出å£..." +msgstr "匯出..." msgid "Export EDID" msgstr "匯出 EDID" @@ -2989,10 +2989,10 @@ msgid "Color scheme" msgstr "é…色方案" msgid "Light" -msgstr "å…‰" +msgstr "亮色" msgid "Dark" -msgstr "黑æ—" +msgstr "æ—色" msgid "Search:" msgstr "æœå°‹:" From 79e5f9426bab191b23af542d58b5e1c13d71d768 Mon Sep 17 00:00:00 2001 From: Sasamiya <117635969+sasamiya-bios@users.noreply.github.com> Date: Sun, 5 Oct 2025 12:38:41 +0800 Subject: [PATCH 056/233] Update Language Module: Simp-Chinese and Trad-Chinese (#6280) --- src/qt/languages/zh-CN.po | 2 +- src/qt/languages/zh-TW.po | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index e1db5c3e2..48ffc0dc9 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -403,7 +403,7 @@ msgid "Dynamic Recompiler" msgstr "卿€é‡ç¼–译器" msgid "CPU frame size" -msgstr "CPU 执行帧长度" +msgstr "CPU 执行帧大å°" msgid "Larger frames (less smooth)" msgstr "大执行帧 (æ“作欠平滑)" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index d691e514e..1732cb914 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -403,13 +403,13 @@ msgid "Dynamic Recompiler" msgstr "å‹•æ…‹é‡ç·¨è­¯å™¨" msgid "CPU frame size" -msgstr "CPU 框æ¶å¤§å°" +msgstr "CPU 執行幀大å°" msgid "Larger frames (less smooth)" -msgstr "è¼ƒå¤§ç„æ¡†æ¶ (較ä¸å¹³æ»‘)" +msgstr "大執行幀 (æ“作欠平滑)" msgid "Smaller frames (smoother)" -msgstr "æ›´å°ç„æ¡†æ¶ (更平滑)" +msgstr "å°åŸ·è¡Œå¹€ (æ“作更平滑)" msgid "Video:" msgstr "顯示å¡:" @@ -901,10 +901,10 @@ msgid "4-button flight yoke" msgstr "4 æŒ‰éˆ•é£›è¡Œæ–æ¡¿" msgid "2-button flight yoke with throttle" -msgstr "2 æŒ‰éˆ•é£›è¡Œæ–æ¡¿ï¼Œå«ç¯€æµé–¥" +msgstr "2 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" msgid "4-button flight yoke with throttle" -msgstr "4 æŒ‰éˆ•é£›è¡Œæ–æ¡¿ï¼Œå«ç¯€æµé–¥" +msgstr "4 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" msgid "Win95 Steering Wheel (3-axis, 4-button)" msgstr "Win95 æ–¹å‘盤 (3 軸, 4 鵿–æ¡¿)" @@ -1225,7 +1225,7 @@ msgid "&Open folder..." msgstr "開啟資料夾(&O)..." msgid "Open p&rinter tray..." -msgstr "打開å°è¡¨æ©Ÿæ‰˜ç›¤(&R)..." +msgstr "開啟å°è¡¨æ©Ÿæ‰˜ç›¤(&R)..." msgid "Set &icon..." msgstr "設å®åœ–示(&I)..." @@ -1786,7 +1786,7 @@ msgid "86Box Unit Tester" msgstr "86Box 單元測試器" msgid "Novell NetWare 2.x Key Card" -msgstr "Novell NetWare 2.x 密鑰å¡" +msgstr "Novell NetWare 2.x 金鑰å¡" msgid "Serial port passthrough 1" msgstr "åºåˆ—埠ç„ç›´é€ 1" @@ -1819,7 +1819,7 @@ msgid "PS/55 Keyboard" msgstr "PS/55 éµç›¤" msgid "Keys" -msgstr "鑰匙" +msgstr "按éµ" msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft åŒ¯æµæ’滑鼠" From 41ecd0bc62a6334ee53d1e22b9ce4a3454d35416 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 5 Oct 2025 22:22:12 +0600 Subject: [PATCH 057/233] Mark stack-related functions in x86seg inline (#6281) --- src/cpu/x86seg.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cpu/x86seg.c b/src/cpu/x86seg.c index 145752237..9b8afa0e5 100644 --- a/src/cpu/x86seg.c +++ b/src/cpu/x86seg.c @@ -143,7 +143,7 @@ x86_doabrt(int x86_abrt) } } -static void +static inline void set_stack32(int s) { stack32 = s; @@ -154,7 +154,7 @@ set_stack32(int s) cpu_cur_status &= ~CPU_STATUS_STACK32; } -static void +static inline void set_use32(int u) { use32 = u ? 0x300 : 0; @@ -202,7 +202,7 @@ do_seg_load(x86seg *s, uint16_t *segdat) } #endif -static void +static inline void do_seg_v86_init(x86seg *s) { s->access = 0xe2; @@ -761,7 +761,7 @@ loadcsjmp(uint16_t seg, uint32_t old_pc) } } -static void +static inline void PUSHW(uint16_t v) { if (stack32) { @@ -777,7 +777,7 @@ PUSHW(uint16_t v) } } -static void +static inline void PUSHL(uint32_t v) { if (cpu_16bitbus) { @@ -798,7 +798,7 @@ PUSHL(uint32_t v) } } -static void +static inline void PUSHL_SEL(uint32_t v) { if (cpu_16bitbus) { @@ -819,7 +819,7 @@ PUSHL_SEL(uint32_t v) } } -static uint16_t +static inline uint16_t POPW(void) { uint16_t tempw; @@ -837,7 +837,7 @@ POPW(void) return tempw; } -static uint32_t +static inline uint32_t POPL(void) { uint32_t templ; From 362e7a9ffdc753b3f2fc83faf12a348c5c4da873 Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Sun, 5 Oct 2025 20:34:54 +0300 Subject: [PATCH 058/233] Add bounds checking for negative line and horizontal coordinates in the rendering functions --- src/video/vid_tandy.c | 223 ++++++++++++++++++++++++------------------ 1 file changed, 130 insertions(+), 93 deletions(-) diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 4244c3309..c3737eba3 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -396,35 +396,36 @@ vid_render(tandy_t *dev, int line, int hos_offs) uint16_t dat; int col; int cols[4]; + int out_x; cols[0] = (vid->array[2] & 0xf) + 16; - for (c = 0; c < hos_offs; c++) { - if (vid->array[3] & 4) { - buffer32->line[line][c] = cols[0]; - } else if ((vid->mode & 0x12) == 0x12) { - buffer32->line[line][c] = 0; - } else { - buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->col & 15) + 16; + if (line >= 0) { + for (c = 0; c < hos_offs; c++) { + if (vid->array[3] & 4) { + buffer32->line[line][c] = cols[0]; + } else if ((vid->mode & 0x12) == 0x12) { + buffer32->line[line][c] = 0; + } else { + buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->col & 15) + 16; + } } - } - for (c = 0; c < 8 - vid->hsync_offset; c++) { - if (vid->array[3] & 4) { + for (c = 0; c < 8 - vid->hsync_offset; c++) { if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = cols[0]; + out_x = c + (vid->crtc[1] << 3) + hos_offs; else - buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = cols[0]; - } else if ((vid->mode & 0x12) == 0x12) { - if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = 0; - else - buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = 0; - } else { - if (vid->mode & 1) - buffer32->line[line][c + (vid->crtc[1] << 3) + hos_offs] = (vid->col & 15) + 16; - else - buffer32->line[line][c + (vid->crtc[1] << 4) + hos_offs] = (vid->col & 15) + 16; + out_x = c + (vid->crtc[1] << 4) + hos_offs; + + if (out_x >= 0) { + if (vid->array[3] & 4) { + buffer32->line[line][out_x] = cols[0]; + } else if ((vid->mode & 0x12) == 0x12) { + buffer32->line[line][out_x] = 0; + } else { + buffer32->line[line][out_x] = (vid->col & 15) + 16; + } + } } } @@ -432,24 +433,30 @@ vid_render(tandy_t *dev, int line, int hos_offs) for (x = 0; x < vid->crtc[1] * 2; x++) { dat = (vid->vram[(vid->memaddr << 1) & 0xffff] << 8) | vid->vram[((vid->memaddr << 1) + 1) & 0xffff]; vid->memaddr++; - buffer32->line[line][(x << 2) + hos_offs] = vid->array[((dat >> 12) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + hos_offs + 1] = vid->array[((dat >> 8) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + hos_offs + 2] = vid->array[((dat >> 4) & 0xf) + 16] + 16; - buffer32->line[line][(x << 2) + hos_offs + 3] = vid->array[(dat & 0xf) + 16] + 16; + out_x = (x << 2) + hos_offs; + if (line >= 0) { + if (out_x >= 0) buffer32->line[line][out_x] = vid->array[((dat >> 12) & 0xf) + 16] + 16; + if (out_x + 1 >= 0) buffer32->line[line][out_x + 1] = vid->array[((dat >> 8) & 0xf) + 16] + 16; + if (out_x + 2 >= 0) buffer32->line[line][out_x + 2] = vid->array[((dat >> 4) & 0xf) + 16] + 16; + if (out_x + 3 >= 0) buffer32->line[line][out_x + 3] = 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->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; - buffer32->line[line][(x << 3) + hos_offs] = buffer32->line[line][(x << 3) + hos_offs + 1] = - vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + hos_offs + 2] = buffer32->line[line][(x << 3) + hos_offs + 3] = - vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + hos_offs + 4] = buffer32->line[line][(x << 3) + hos_offs + 5] = - vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 3) + hos_offs + 6] = buffer32->line[line][(x << 3) + hos_offs + 7] = - vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; + out_x = (x << 3) + hos_offs; + if (line >= 0) { + if (out_x >= 0) buffer32->line[line][out_x] = buffer32->line[line][out_x + 1] = + vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; + if (out_x + 2 >= 0) buffer32->line[line][out_x + 2] = buffer32->line[line][out_x + 3] = + vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; + if (out_x + 4 >= 0) buffer32->line[line][out_x + 4] = buffer32->line[line][out_x + 5] = + vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; + if (out_x + 6 >= 0) buffer32->line[line][out_x + 6] = buffer32->line[line][out_x + 7] = + vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; + } } } else if (vid->array[3] & 0x10) { /*160x200x16*/ for (x = 0; x < vid->crtc[1]; x++) { @@ -460,18 +467,21 @@ vid_render(tandy_t *dev, int line, int hos_offs) dat = (vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; - buffer32->line[line][(x << 4) + hos_offs] = buffer32->line[line][(x << 4) + hos_offs + 1] = - buffer32->line[line][(x << 4) + hos_offs + 2] = buffer32->line[line][(x << 4) + hos_offs + 3] = - vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 4) + hos_offs + 4] = buffer32->line[line][(x << 4) + hos_offs + 5] = - buffer32->line[line][(x << 4) + hos_offs + 6] = buffer32->line[line][(x << 4) + hos_offs + 7] = - vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 4) + hos_offs + 8] = buffer32->line[line][(x << 4) + hos_offs + 9] = - buffer32->line[line][(x << 4) + hos_offs + 10] = buffer32->line[line][(x << 4) + hos_offs + 11] = - vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; - buffer32->line[line][(x << 4) + hos_offs + 12] = buffer32->line[line][(x << 4) + hos_offs + 13] = - buffer32->line[line][(x << 4) + hos_offs + 14] = buffer32->line[line][(x << 4) + hos_offs + 15] = - vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; + out_x = (x << 4) + hos_offs; + if (line >= 0) { + if (out_x >= 0) buffer32->line[line][out_x] = buffer32->line[line][out_x + 1] = + buffer32->line[line][out_x + 2] = buffer32->line[line][out_x + 3] = + vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; + if (out_x + 4 >= 0) buffer32->line[line][out_x + 4] = buffer32->line[line][out_x + 5] = + buffer32->line[line][out_x + 6] = buffer32->line[line][out_x + 7] = + vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; + if (out_x + 8 >= 0) buffer32->line[line][out_x + 8] = buffer32->line[line][out_x + 9] = + buffer32->line[line][out_x + 10] = buffer32->line[line][out_x + 11] = + vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; + if (out_x + 12 >= 0) buffer32->line[line][out_x + 12] = buffer32->line[line][out_x + 13] = + buffer32->line[line][out_x + 14] = buffer32->line[line][out_x + 15] = + vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; + } } } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ for (x = 0; x < vid->crtc[1]; x++) { @@ -481,8 +491,10 @@ vid_render(tandy_t *dev, int line, int hos_offs) for (c = 0; c < 8; c++) { chr = (dat >> 6) & 2; chr |= ((dat >> 15) & 1); - buffer32->line[line][(x << 3) + hos_offs + c] = - vid->array[(chr & vid->array[1]) + 16] + 16; + out_x = (x << 3) + hos_offs + c; + if (out_x >= 0 && line >= 0) + buffer32->line[line][out_x] = + vid->array[(chr & vid->array[1]) + 16] + 16; dat <<= 1; } } @@ -500,17 +512,27 @@ vid_render(tandy_t *dev, int line, int hos_offs) cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; } - if (vid->scanline & 8) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 3) + c + hos_offs] = - ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; - else for (c = 0; c < 8; c++) { - if (vid->scanline == 8) - buffer32->line[line][(x << 3) + c + hos_offs] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; - else - buffer32->line[line][(x << 3) + c + hos_offs] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; + if (line >= 0) { + if (vid->scanline & 8) for (c = 0; c < 8; c++) { + out_x = (x << 3) + c + hos_offs; + if (out_x >= 0) + buffer32->line[line][out_x] = + ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; + } else for (c = 0; c < 8; c++) { + out_x = (x << 3) + c + hos_offs; + if (out_x >= 0) { + if (vid->scanline == 8) + buffer32->line[line][out_x] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; + else + buffer32->line[line][out_x] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + if (drawcursor) for (c = 0; c < 8; c++) { + out_x = (x << 3) + c + hos_offs; + if (out_x >= 0) + buffer32->line[line][out_x] ^= 15; + } } - if (drawcursor) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 3) + c + hos_offs] ^= 15; vid->memaddr++; } } else if (!(vid->mode & 2)) { @@ -528,22 +550,30 @@ vid_render(tandy_t *dev, int line, int hos_offs) cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; } vid->memaddr++; - if (vid->scanline & 8) for (c = 0; c < 8; c++) - buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = - ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; - else for (c = 0; c < 8; c++) { - if (vid->scanline == 8) - buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = - cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; - else - buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = - cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; + if (line >= 0) { + if (vid->scanline & 8) for (c = 0; c < 8; c++) { + out_x = (x << 4) + (c << 1) + hos_offs; + if (out_x >= 0) buffer32->line[line][out_x] = + buffer32->line[line][out_x + 1] = + ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; + } else for (c = 0; c < 8; c++) { + out_x = (x << 4) + (c << 1) + hos_offs; + if (vid->scanline == 8) { + if (out_x >= 0) buffer32->line[line][out_x] = + buffer32->line[line][out_x + 1] = + cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; + } else { + if (out_x >= 0) buffer32->line[line][out_x] = + buffer32->line[line][out_x + 1] = + cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + if (drawcursor) for (c = 0; c < 16; c++) { + out_x = (x << 4) + c + hos_offs; + if (out_x >= 0) + buffer32->line[line][out_x] ^= 15; + } } - if (drawcursor) for (c = 0; c < 16; c++) - buffer32->line[line][(x << 4) + c + hos_offs] ^= 15; } } else if (!(vid->mode & 16)) { cols[0] = (vid->col & 15); @@ -570,8 +600,9 @@ vid_render(tandy_t *dev, int line, int hos_offs) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; for (c = 0; c < 8; c++) { - buffer32->line[line][(x << 4) + (c << 1) + hos_offs] = - buffer32->line[line][(x << 4) + (c << 1) + 1 + hos_offs] = cols[dat >> 14]; + out_x = (x << 4) + (c << 1) + hos_offs; + if (out_x >= 0 && line >= 0) buffer32->line[line][out_x] = + buffer32->line[line][out_x + 1] = cols[dat >> 14]; dat <<= 2; } } @@ -583,7 +614,9 @@ vid_render(tandy_t *dev, int line, int hos_offs) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; for (c = 0; c < 16; c++) { - buffer32->line[line][(x << 4) + c + hos_offs] = buffer32->line[(line) + 1][(x << 4) + c + hos_offs] = cols[dat >> 15]; + out_x = (x << 4) + c + hos_offs; + if (out_x >= 0 && line >= 0) + buffer32->line[line][out_x] = buffer32->line[(line) + 1][out_x] = cols[dat >> 15]; dat <<= 1; } } @@ -595,18 +628,20 @@ vid_render_blank(tandy_t *dev, int line) { t1kvid_t *vid = dev->vid; - if (vid->array[3] & 4) { - if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); - else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); - } else { - int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; + if (line >= 0) { + if (vid->array[3] & 4) { + if (vid->mode & 1) + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); + else + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); + } else { + int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; - if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, cols); - else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, cols); + if (vid->mode & 1) + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, cols); + else + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, cols); + } } } @@ -621,10 +656,12 @@ vid_render_process(tandy_t *dev, int line) else x = (vid->crtc[1] << 4) + 16; - if (!dev->is_sl2 && vid->composite) - Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); - else - video_process_8(x, line); + if (line >= 0) { + if (!dev->is_sl2 && vid->composite) + Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); + else + video_process_8(x, line); + } } static void @@ -639,8 +676,8 @@ vid_poll(void *priv) int scanline_old; int old_ma; int hos_offs = 8 + vid->hsync_offset; - int displine_offs = (vid->displine + vid->vsync_offset < 0) ? 0 : vid->displine + vid->vsync_offset; - int displine_offs_double = displine_offs << 1; + int displine_offs = vid->displine + vid->vsync_offset; + int displine_offs_double = (vid->displine << 1) + (vid->vsync_offset << 1); if (!vid->linepos) { timer_advance_u64(&vid->timer, vid->dispofftime); From 0b09681c468826942dc1d5a024100280e71bb270 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:35:09 -0500 Subject: [PATCH 059/233] Add the Sony Vaio PCV-130/150 (#6282) * Add the Sony Vaio PCV-130/150 as a selectable BIOS for the AN430TX * Add Sony CDU-611 24x CD-ROM drive This may not have been the drive included in the Vaio PCV-130/150 but is contemporary, is the correct speed and satisfies the vendor-locked CD-ROM driver on the recovery CD. --- src/include/86box/cdrom.h | 1 + src/include/86box/machine.h | 5 ++- src/machine/m_at_socket7.c | 59 ++++++++++++++++++++---- src/machine/machine_table.c | 90 ++++++++++++++++++------------------- 4 files changed, 100 insertions(+), 55 deletions(-) diff --git a/src/include/86box/cdrom.h b/src/include/86box/cdrom.h index 85e5a0f0b..3fcf278af 100644 --- a/src/include/86box/cdrom.h +++ b/src/include/86box/cdrom.h @@ -174,6 +174,7 @@ static const struct cdrom_drive_types_s { { "PHILIPS", "CD-ROM PCA403CD", "U31P", "philips_403", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, -1 } }, { "SONY", "CD-ROM CDU76", "1.0i", "sony_76", BUS_TYPE_IDE, 0, 4, 36, 0, 0, { 2, -1, -1, -1 } }, { "SONY", "CD-ROM CDU311", "3.0h", "sony_311", BUS_TYPE_IDE, 0, 8, 36, 0, 0, { 3, 2, 1, -1 } }, + { "SONY", "CD-ROM CDU611", "2.2c", "sony_611", BUS_TYPE_IDE, 0, 24, 36, 0, 0, { 3, 2, 2, -1 } }, { "SONY", "CD-ROM CDU5225", "NYS4", "sony_5225", BUS_TYPE_IDE, 0, 52, 36, 0, 0, { 4, 2, 2, 4 } }, { "TEAC", "CD-516E", "1.0G", "teac_516e", BUS_TYPE_IDE, 0, 16, 36, 0, 0, { 3, 2, 2, -1 } }, { "TEAC", "CD-524EA", "3.0D", "teac_524ea", BUS_TYPE_IDE, 0, 24, 36, 0, 0, { 3, 2, 2, -1 } }, diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 7c4f9f653..ab4cfaebd 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1043,10 +1043,13 @@ extern int machine_at_tx97_init(const machine_t *); extern void machine_at_optiplex_21152_init(void); extern int machine_at_optiplexgn_init(const machine_t *); extern int machine_at_tomahawk_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t an430tx_device; +#endif +extern int machine_at_an430tx_init(const machine_t *); extern int machine_at_ym430tx_init(const machine_t *); extern int machine_at_thunderbolt_init(const machine_t *); extern int machine_at_ma23c_init(const machine_t *); -extern int machine_at_an430tx_init(const machine_t *); extern int machine_at_mb540n_init(const machine_t *); extern int machine_at_56a5_init(const machine_t *); extern int machine_at_p5mms98_init(const machine_t *); diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 75f94f82e..cfe615551 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -1419,21 +1419,62 @@ machine_at_ma23c_init(const machine_t *model) return ret; } +static const device_config_t an430tx_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "an430tx", + .default_int = 0, + .file_filter = "", + .spinner = { 0 }, + .bios = { + { .name = "Packard Bell PB79x", .internal_name = "an430tx", .bios_type = BIOS_NORMAL, + .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/an430tx/ANP0911A.BIO", "roms/machines/an430tx/ANP0911A.BI1", + "roms/machines/an430tx/ANP0911A.BI2", "roms/machines/an430tx/ANP0911A.BI3", + "roms/machines/an430tx/ANP0911A.RCV", "" } }, + { .name = "Sony Vaio PCV-130/150", .internal_name = "vaio150", .bios_type = BIOS_NORMAL, + .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/an430tx/P02-0011.BIO", "roms/machines/an430tx/P02-0011.BI1", + "roms/machines/an430tx/P02-0011.BI2", "roms/machines/an430tx/P02-0011.BI3", + "roms/machines/an430tx/P02-0011.RCV", "" } }, + { .files_no = 0 } + }, + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t an430tx_device = { + .name = "Intel AN430TX (Anchorage)", + .internal_name = "an430tx_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = an430tx_config +}; + int machine_at_an430tx_init(const machine_t *model) { - int ret; + int ret = 0; + const char* fn[5]; - ret = bios_load_linear_combined2("roms/machines/an430tx/ANP0911A.BIO", - "roms/machines/an430tx/ANP0911A.BI1", - "roms/machines/an430tx/ANP0911A.BI2", - "roms/machines/an430tx/ANP0911A.BI3", - "roms/machines/an430tx/ANP0911A.RCV", - 0x3a000, 160); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + for (int i = 0; i < 5; i++) + fn[i] = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), i); + ret = bios_load_linear_combined2(fn[0], fn[1], fn[2], fn[3], fn[4], 0x3a000, 160); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 5264b1cf8..9bd5e771f 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -15508,6 +15508,51 @@ const machine_t machines[] = { .snd_device = &cs4236b_device, .net_device = &pcnet_am79c973_onboard_device }, + /* This has the Phoenix MultiKey KBC firmware on the NSC Super I/O chip. */ + { + .name = "[i430TX] Intel AN430TX (Anchorage)", + .internal_name = "an430tx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_an430tx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), + .min_bus = 60000000, + .max_bus = 66666667, + .min_voltage = 2800, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.5 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ + .ram = { + .min = 8192, + .max = 262144, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &an430tx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &ymf715_onboard_device, + .net_device = NULL + }, /* This has the Winbond W83977 Super I/O Chip with AMIKey-2 KBC firmware, which is type 'H'. */ { .name = "[i430TX] Intel YM430TX (Yamamoto)", @@ -15649,51 +15694,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* This has the Phoenix MultiKey KBC firmware on the NSC Super I/O chip. */ - { - .name = "[i430TX] Packard Bell PB790", - .internal_name = "an430tx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_an430tx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, - CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 60000000, - .max_bus = 66666667, - .min_voltage = 2800, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 - }, - .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ - .ram = { - .min = 8192, - .max = 262144, - .step = 8192 - }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &ymf715_onboard_device, - .net_device = NULL - }, /* The BIOS sends KBC command BB and expects it to output a byte, which is AMI KBC behavior. A picture shows a VIA VT82C42N KBC though, so it could be a case of that KBC with AMI firmware. */ { From 774a1a7f08b1120a9ae74df4be100f0aeb87506d Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:26:58 +0800 Subject: [PATCH 060/233] Add the MSI MS-6147 Machine (#6270) * machine.h: MSI MS-6147 added. * m_at_slot1.c: MSI MS-6147 added. * machine_table.c: MSI MS-6147 added. --- src/include/86box/machine.h | 4 ++ src/machine/m_at_slot1.c | 90 +++++++++++++++++++++++++++++++++++++ src/machine/machine_table.c | 44 ++++++++++++++++++ 3 files changed, 138 insertions(+) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index ab4cfaebd..fadd19f7f 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1167,6 +1167,10 @@ extern int machine_at_ga686_init(const machine_t *); extern const device_t ms6119_device; #endif extern int machine_at_ms6119_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t ms6147_device; +#endif +extern int machine_at_ms6147_init(const machine_t *); extern int machine_at_p6sba_init(const machine_t *); extern int machine_at_s1846_init(const machine_t *); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index c9fd9b6fb..995c943b9 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -800,6 +800,96 @@ machine_at_ms6119_init(const machine_t *model) return ret; } +static const device_config_t ms6147_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "ms6147", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision 1.8", + .internal_name = "ms6147", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6147/W647MS18.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 2.1 (Packard Bell Tempest)", + .internal_name = "pbtempest", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6147/w647p221.pbc", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t ms6147_device = { + .name = "MSI MS-6147", + .internal_name = "ms6147_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = ms6147_config +}; + +int +machine_at_ms6147_init(const machine_t *model) +{ + int ret = 0; + const char *fn; + + /* No ROMs available */ + if (!device_available(model->device)) + return ret; + + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + + 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(0x14, PCI_CARD_SOUND, 3, 4, 1, 2); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + device_add(&i440bx_device); + device_add(&piix4e_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); + device_add(&winbond_flash_w29c020_device); + spd_register(SPD_TYPE_SDRAM, 0x7, 256); + + if (sound_card_current[0] == SOUND_INTERNAL) { + device_add(machine_get_snd_device(machine)); + device_add(&es1371_onboard_device); + } + + return ret; +} + int machine_at_p6sba_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 9bd5e771f..9b7b30354 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -18043,6 +18043,50 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ + { + .name = "[i440BX] MSI MS-6147", + .internal_name = "ms6147", + .type = MACHINE_TYPE_SLOT1, + .chipset = MACHINE_CHIPSET_INTEL_440BX, + .init = machine_at_ms6147_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SLOT1, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 116666667, + .min_voltage = 1800, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 8.0 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, /* Has internal video: ATI 3D Rage Pro PCI */ + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &ms6147_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &es1371_onboard_device, + .net_device = NULL + }, /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { From 39b249fedfb4051f4a2d78d92af40f4631b7c027 Mon Sep 17 00:00:00 2001 From: bozoscum Date: Mon, 6 Oct 2025 09:28:00 +0800 Subject: [PATCH 061/233] Some modifications for Multitech machines (#6258) * add alternative OEM model names for Multitech machines * add Multitech PC-700 BIOS 3.30 * add Multitech PC-900 / Commodore PC-40 BIOS v2.07a.xc * add Multitech PC-500+ BIOS 4.03 and 4.06 * correcting display name of Multitech BIOS 3.10 to 3.1 * merge with origin/master * fix github-advanced-security check error 'uninitialized local variable' * implement the Multitech onboard ISA RTC device --- src/device/isartc.c | 162 +++++++++++++++++++-- src/include/86box/machine.h | 9 ++ src/machine/m_at_286.c | 62 +++++++- src/machine/m_xt.c | 273 +++++++++++++++++++++++++++++++----- src/machine/machine_table.c | 12 +- 5 files changed, 457 insertions(+), 61 deletions(-) diff --git a/src/device/isartc.c b/src/device/isartc.c index 06b7767c8..bdf057b4b 100644 --- a/src/device/isartc.c +++ b/src/device/isartc.c @@ -82,13 +82,14 @@ #include <86box/pic.h> #include <86box/isartc.h> -#define ISARTC_EV170 0 -#define ISARTC_DTK 1 -#define ISARTC_P5PAK 2 -#define ISARTC_A6PAK 3 -#define ISARTC_VENDEX 4 -#define ISARTC_MPLUS2 5 -#define ISARTC_MM58167 10 +#define ISARTC_EV170 0 +#define ISARTC_DTK 1 +#define ISARTC_P5PAK 2 +#define ISARTC_A6PAK 3 +#define ISARTC_VENDEX 4 +#define ISARTC_MPLUS2 5 +#define ISARTC_RTC58167 6 +#define ISARTC_MM58167 10 #define ISARTC_ROM_MM58167_1 "roms/rtc/glatick/GLaTICK_0.8.8_NS_86B.ROM" /* Generic 58167, AST or EV-170 */ #define ISARTC_ROM_MM58167_2 "roms/rtc/glatick/GLaTICK_0.8.8_NS_86B2.ROM" /* PII-147 */ @@ -509,6 +510,73 @@ mm67_write(uint16_t port, uint8_t val, void *priv) } } +/* Multitech PC-500/PC-500+ onboard RTC 58167 device disigned to use I/O port + * base+0 as register index and base+1 as register data read/write window, + * according to the official RTC utilities SDATE.EXE, STIME.EXE, and TODAY.EXE + * + * the RTC utilities check the RTC millisecond counter first to deteminate the + * presence of the RTC 58167 IC, so here implement the bogus_msec to fool them + */ +static uint8_t rtc58167_index = 0x00; + +static uint8_t +rtc58167_read(uint16_t port, void *priv) +{ + uint8_t ret = 0xff; + uint16_t bogus_msec = (uint16_t)((tsc * 1000) / cpu_s->rspeed); + + switch (port) + { + case 0x2c0: + case 0x300: + ret = rtc58167_index; + break; + + case 0x2c1: + case 0x301: + switch (rtc58167_index) + { + case MM67_MSEC: + ret = (uint8_t)(bogus_msec % 10) << 4; + break; + + case MM67_HUNTEN: + ret = RTC_BCD((uint8_t)((bogus_msec / 10) % 100)); + break; + + default: + ret = mm67_read(((port - 1) + rtc58167_index), priv); + break; + } + break; + + default: + break; + } + + return ret; +} + +static void +rtc58167_write(uint16_t port, uint8_t val, void *priv) +{ + switch (port) + { + case 0x2c0: + case 0x300: + rtc58167_index = val; + break; + + case 0x2c1: + case 0x301: + mm67_write(((port - 1) + rtc58167_index), val, priv); + break; + + default: + break; + } +} + /************************************************************************ * * * Generic code for all supported chips. * @@ -594,6 +662,19 @@ isartc_init(const device_t *info) dev->year = MM67_AL_DOM; /* year, NON STANDARD */ break; + case ISARTC_RTC58167: /* Multitech PC-500/PC-500+ onboard RTC */ + dev->flags |= FLAG_YEARBCD; + dev->base_addr = device_get_config_hex16("base"); + dev->base_addrsz = 8; + dev->irq = device_get_config_int("irq"); + dev->f_rd = rtc58167_read; + dev->f_wr = rtc58167_write; + dev->nvr.reset = mm67_reset; + dev->nvr.start = mm67_start; + dev->nvr.tick = mm67_tick; + dev->year = MM67_AL_HUNTEN; /* year, NON STANDARD */ + break; + default: break; } @@ -929,18 +1010,69 @@ const device_t vendex_xt_rtc_onboard_device = { .config = NULL }; +static const device_config_t rtc58167_config[] = { + // clang-format off + { + .name = "irq", + .description = "IRQ2", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = -1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "Disabled", .value = -1 }, + { .description = "Enabled", .value = 2 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x2C0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "2C0H", .value = 0x2c0 }, + { .description = "300H", .value = 0x300 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END} + // clang-format on +}; + +const device_t rtc58167_device = { + .name = "RTC 58167 IC (Multitech)", + .internal_name = "rtc58167_xt_rtc", + .flags = DEVICE_ISA, + .local = ISARTC_RTC58167, + .init = isartc_init, + .close = isartc_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = rtc58167_config +}; + static const struct { const device_t *dev; } boards[] = { // clang-format off - { &device_none }, - { &ev170_device }, - { &pii147_device }, - { &p5pak_device }, - { &a6pak_device }, - { &mplus2_device }, - { &mm58167_device }, - { NULL } + { &device_none }, + { &ev170_device }, + { &pii147_device }, + { &p5pak_device }, + { &a6pak_device }, + { &mplus2_device }, + //{ &rtc58167_device }, /* Multitech onboard ISA RTC */ + { &mm58167_device }, + { NULL } // clang-format on }; diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index fadd19f7f..98d9fbd45 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -496,6 +496,9 @@ extern int machine_at_portableii_init(const machine_t *); extern int machine_at_portableiii_init(const machine_t *); extern int machine_at_grid1520_init(const machine_t *); extern int machine_at_pc900_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t pc900_device; +#endif extern int machine_at_mr286_init(const machine_t *); extern int machine_at_pc8_init(const machine_t *); extern int machine_at_m290_init(const machine_t *); @@ -1361,7 +1364,13 @@ extern int machine_xt_micoms_xl7turbo_init(const machine_t *); extern const device_t pc500_device; #endif extern int machine_xt_pc500_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t pc500plus_device; +#endif extern int machine_xt_pc500plus_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t pc700_device; +#endif extern int machine_xt_pc700_init(const machine_t *); extern int machine_xt_pc4i_init(const machine_t *); extern int machine_xt_openxt_init(const machine_t *); diff --git a/src/machine/m_at_286.c b/src/machine/m_at_286.c index 7f6442940..20baec312 100644 --- a/src/machine/m_at_286.c +++ b/src/machine/m_at_286.c @@ -339,13 +339,69 @@ machine_at_grid1520_init(const machine_t *model) return ret; } +static const device_config_t pc900_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "pc900_v207a", + .default_int = 0, + .file_filter = "", + .spinner = { 0 }, + .bios = { + { + .name = "BIOS V2.07A", + .internal_name = "pc900_v207a", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { "roms/machines/pc900/mpf_pc900_v207a.bin", "" } + }, + { + .name = "BIOS V2.07A.XC", + .internal_name = "pc900_v207a_xc", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { "roms/machines/pc900/cbm_pc40_v207a_xc.bin", "" } + } + }, + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t pc900_device = { + .name = "Multitech PC-900", + .internal_name = "pc900", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = pc900_config +}; + int machine_at_pc900_init(const machine_t *model) { - int ret = 0; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/pc900/mpf_pc900_v207a.bin", - 0x000f8000, 32768, 0); + /* No ROMs available. */ + if (!device_available(model->device)) + return ret; + + device_context(model->device); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000f8000, 32768, 0); + device_context_restore(); if (bios_only || !ret) return ret; diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index c59b4ef37..550d336a2 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -46,6 +46,7 @@ #include <86box/video.h> extern const device_t vendex_xt_rtc_onboard_device; +extern const device_t rtc58167_device; /* 8088 */ static void @@ -1171,7 +1172,7 @@ static const device_config_t pc500_config[] = { .files = { "roms/machines/pc500/rom330.bin", "" } }, { - .name = "3.10", + .name = "3.1", .internal_name = "pc500_310", .bios_type = BIOS_NORMAL, .files_no = 1, @@ -1182,6 +1183,37 @@ static const device_config_t pc500_config[] = { { .files_no = 0 } } }, + { + .name = "rtc_irq", + .description = "RTC IRQ", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = -1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "Disabled", .value = -1 }, + { .description = "Enabled", .value = 2 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "rtc_port", + .description = "RTC Port Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "Disabled", .value = 0 }, + { .description = "2C0H", .value = 0x2c0 }, + { .description = "300H", .value = 0x300 }, + { .description = "" } + }, + .bios = { { 0 } } + }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on }; @@ -1202,6 +1234,209 @@ const device_t pc500_device = { int machine_xt_pc500_init(const machine_t *model) +{ + int ret = 0; + int rtc_irq = -1; + int rtc_port = 0; + const char *fn; + + /* No ROMs available. */ + if (!device_available(model->device)) + return ret; + + device_context(model->device); + rtc_irq = machine_get_config_int("rtc_irq"); + rtc_port = machine_get_config_int("rtc_port"); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000fe000, 8192, 0); + device_context_restore(); + + if (bios_only || !ret) + return ret; + + device_add(&kbc_pc_device); + + machine_xt_common_init(model, 0); + + if (rtc_port != 0) + device_add(&rtc58167_device); + + return ret; +} + +static const device_config_t pc500plus_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "pc500plus_404", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "4.06", + .internal_name = "pc500plus_406", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/machines/pc500/rom406.bin", "" } + }, + { + .name = "4.04", + .internal_name = "pc500plus_404", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/machines/pc500/rom404.bin", "" } + }, + { + .name = "4.03", + .internal_name = "pc500plus_403", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/machines/pc500/rom403.bin", "" } + }, + { .files_no = 0 } + }, + }, + { + .name = "rtc_irq", + .description = "RTC IRQ", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = -1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "Disabled", .value = -1 }, + { .description = "Enabled", .value = 2 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "rtc_port", + .description = "Onboard RTC", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "Disabled", .value = 0 }, + { .description = "Enabled", .value = 0x2c0 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t pc500plus_device = { + .name = "Multitech PC-500 plus", + .internal_name = "pc500plus_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = pc500plus_config +}; + +int +machine_xt_pc500plus_init(const machine_t *model) +{ + int ret = 0; + int rtc_irq = -1; + int rtc_port = 0; + const char *fn; + + /* No ROMs available. */ + if (!device_available(model->device)) + return ret; + + device_context(model->device); + rtc_irq = machine_get_config_int("rtc_irq"); + rtc_port = machine_get_config_int("rtc_port"); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000fc000, 16384, 0); + device_context_restore(); + + if (bios_only || !ret) + return ret; + + device_add(&kbc_pc_device); + + machine_xt_common_init(model, 0); + + if (rtc_port != 0) + device_add(&rtc58167_device); + + return ret; +} + +static const device_config_t pc700_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "pc700_330", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "3.30", + .internal_name = "pc700_330", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 8192, + .files = { "roms/machines/pc700/multitech pc-700 3.30.bin", "" } + }, + { + .name = "3.1", + .internal_name = "pc700_31", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 8192, + .files = { "roms/machines/pc700/multitech pc-700 3.1.bin", "" } + }, + { .files_no = 0 } + }, + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t pc700_device = { + .name = "Multitech PC-700", + .internal_name = "pc700_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = pc700_config +}; + +int +machine_xt_pc700_init(const machine_t *model) { int ret = 0; const char *fn; @@ -1225,42 +1460,6 @@ machine_xt_pc500_init(const machine_t *model) return ret; } -int -machine_xt_pc500plus_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/pc500/rom404.bin", - 0x000fc000, 16384, 0); - - if (bios_only || !ret) - return ret; - - device_add(&kbc_pc_device); - - machine_xt_common_init(model, 0); - - 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); - - if (bios_only || !ret) - return ret; - - device_add(&kbc_pc_device); - - machine_xt_common_init(model, 0); - - return ret; -} - int machine_xt_pc4i_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 9b7b30354..f0672a743 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -1097,7 +1097,7 @@ const machine_t machines[] = { .net_device = NULL }, { - .name = "[8088] Multitech PC-500", + .name = "[8088] Multitech PC-500 / Franklin PC 8000", .internal_name = "pc500", .type = MACHINE_TYPE_8088, .chipset = MACHINE_CHIPSET_DISCRETE, @@ -1174,7 +1174,7 @@ const machine_t machines[] = { .kbc_p1 = 0xff, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &pc500plus_device, .kbd_device = &keyboard_pc_xt_device, .fdc_device = NULL, .sio_device = NULL, @@ -1183,7 +1183,7 @@ const machine_t machines[] = { .net_device = NULL }, { - .name = "[8088] Multitech PC-700", + .name = "[8088] Multitech PC-700 / Siemens SICOMP PC 16 05", .internal_name = "pc700", .type = MACHINE_TYPE_8088, .chipset = MACHINE_CHIPSET_DISCRETE, @@ -1217,7 +1217,7 @@ const machine_t machines[] = { .kbc_p1 = 0xff, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &pc700_device, .kbd_device = &keyboard_pc_xt_device, .fdc_device = NULL, .sio_device = NULL, @@ -3346,7 +3346,7 @@ const machine_t machines[] = { }, /* Has IBM AT KBC firmware. */ { - .name = "[ISA] Multitech PC-900", + .name = "[ISA] Multitech PC-900 / Commodore PC 40 / NBI 4200", .internal_name = "pc900", .type = MACHINE_TYPE_286, .chipset = MACHINE_CHIPSET_DISCRETE, @@ -3380,7 +3380,7 @@ const machine_t machines[] = { .kbc_p1 = 0x000004f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &pc900_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From 2193938266bf41a4df104bf47bea94ce2f61568f Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 5 Oct 2025 23:49:16 -0400 Subject: [PATCH 062/233] A little more progress towards dual gameport support (#6284) --- src/config.c | 30 ++++--- src/game/joystick_ch_flightstick_pro.c | 43 +++++---- src/game/joystick_standard.c | 120 ++++++++++++++----------- src/game/joystick_sw_pad.c | 24 +++-- src/game/joystick_tm_fcs.c | 51 ++++++----- 5 files changed, 153 insertions(+), 115 deletions(-) diff --git a/src/config.c b/src/config.c index 102f9de97..a06d9e8b4 100644 --- a/src/config.c +++ b/src/config.c @@ -639,25 +639,27 @@ load_input_devices(void) } else joystick_type[joy_insn] = JS_TYPE_NONE; + uint8_t gp = 0; + for (int js = 0; js < joystick_get_max_joysticks(joystick_type[joy_insn]); js++) { sprintf(temp, "joystick_%i_nr", js); - joystick_state[0][js].plat_joystick_nr = ini_section_get_int(cat, temp, 0); + joystick_state[gp][js].plat_joystick_nr = ini_section_get_int(cat, temp, 0); - if (joystick_state[0][js].plat_joystick_nr) { + if (joystick_state[gp][js].plat_joystick_nr) { for (int axis_nr = 0; axis_nr < joystick_get_axis_count(joystick_type[joy_insn]); axis_nr++) { sprintf(temp, "joystick_%i_axis_%i", js, axis_nr); - joystick_state[0][js].axis_mapping[axis_nr] = ini_section_get_int(cat, temp, axis_nr); + joystick_state[gp][js].axis_mapping[axis_nr] = ini_section_get_int(cat, temp, axis_nr); } for (int button_nr = 0; button_nr < joystick_get_button_count(joystick_type[joy_insn]); button_nr++) { sprintf(temp, "joystick_%i_button_%i", js, button_nr); - joystick_state[0][js].button_mapping[button_nr] = ini_section_get_int(cat, temp, button_nr); + joystick_state[gp][js].button_mapping[button_nr] = ini_section_get_int(cat, temp, button_nr); } for (int pov_nr = 0; pov_nr < joystick_get_pov_count(joystick_type[joy_insn]); pov_nr++) { sprintf(temp, "joystick_%i_pov_%i", js, pov_nr); p = ini_section_get_string(cat, temp, "0, 0"); - joystick_state[0][js].pov_mapping[pov_nr][0] = joystick_state[0][js].pov_mapping[pov_nr][1] = 0; - sscanf(p, "%i, %i", &joystick_state[0][js].pov_mapping[pov_nr][0], - &joystick_state[0][js].pov_mapping[pov_nr][1]); + joystick_state[gp][js].pov_mapping[pov_nr][0] = joystick_state[gp][js].pov_mapping[pov_nr][1] = 0; + sscanf(p, "%i, %i", &joystick_state[gp][js].pov_mapping[pov_nr][0], + &joystick_state[gp][js].pov_mapping[pov_nr][1]); } } } @@ -2728,25 +2730,27 @@ save_input_devices(void) } } } else { + uint8_t gp = 0; + ini_section_set_string(cat, "joystick_type", joystick_get_internal_name(joystick_type[joy_insn])); for (int js = 0; js < joystick_get_max_joysticks(joystick_type[joy_insn]); js++) { sprintf(tmp2, "joystick_%i_nr", js); - ini_section_set_int(cat, tmp2, joystick_state[0][js].plat_joystick_nr); + ini_section_set_int(cat, tmp2, joystick_state[gp][js].plat_joystick_nr); - if (joystick_state[0][js].plat_joystick_nr) { + if (joystick_state[gp][js].plat_joystick_nr) { for (int axis_nr = 0; axis_nr < joystick_get_axis_count(joystick_type[joy_insn]); axis_nr++) { sprintf(tmp2, "joystick_%i_axis_%i", js, axis_nr); - ini_section_set_int(cat, tmp2, joystick_state[0][js].axis_mapping[axis_nr]); + ini_section_set_int(cat, tmp2, joystick_state[gp][js].axis_mapping[axis_nr]); } for (int button_nr = 0; button_nr < joystick_get_button_count(joystick_type[joy_insn]); button_nr++) { sprintf(tmp2, "joystick_%i_button_%i", js, button_nr); - ini_section_set_int(cat, tmp2, joystick_state[0][js].button_mapping[button_nr]); + ini_section_set_int(cat, tmp2, joystick_state[gp][js].button_mapping[button_nr]); } for (int pov_nr = 0; pov_nr < joystick_get_pov_count(joystick_type[joy_insn]); pov_nr++) { sprintf(tmp2, "joystick_%i_pov_%i", js, pov_nr); - sprintf(temp, "%i, %i", joystick_state[0][js].pov_mapping[pov_nr][0], - joystick_state[0][js].pov_mapping[pov_nr][1]); + sprintf(temp, "%i, %i", joystick_state[gp][js].pov_mapping[pov_nr][0], + joystick_state[gp][js].pov_mapping[pov_nr][1]); ini_section_set_string(cat, tmp2, temp); } } diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index b3d4e0ef5..834aa8a99 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -58,25 +58,26 @@ ch_flightstick_pro_close(UNUSED(void *priv)) static uint8_t ch_flightstick_pro_read(UNUSED(void *priv)) { + uint8_t gp = 0; uint8_t ret = 0xf0; - if (JOYSTICK_PRESENT(0, 0)) { - if (joystick_state[0][0].button[0]) + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) ret &= ~0x10; - if (joystick_state[0][0].button[1]) + if (joystick_state[gp][0].button[1]) ret &= ~0x20; - if (joystick_state[0][0].button[2]) + if (joystick_state[gp][0].button[2]) ret &= ~0x40; - if (joystick_state[0][0].button[3]) + if (joystick_state[gp][0].button[3]) ret &= ~0x80; - if (joystick_state[0][0].pov[0] != -1) { - if (joystick_state[0][0].pov[0] > 315 || joystick_state[0][0].pov[0] < 45) + if (joystick_state[gp][0].pov[0] != -1) { + if (joystick_state[gp][0].pov[0] > 315 || joystick_state[gp][0].pov[0] < 45) ret &= ~0xf0; - else if (joystick_state[0][0].pov[0] >= 45 && joystick_state[0][0].pov[0] < 135) + else if (joystick_state[gp][0].pov[0] >= 45 && joystick_state[gp][0].pov[0] < 135) ret &= ~0xb0; - else if (joystick_state[0][0].pov[0] >= 135 && joystick_state[0][0].pov[0] < 225) + else if (joystick_state[gp][0].pov[0] >= 135 && joystick_state[gp][0].pov[0] < 225) ret &= ~0x70; - else if (joystick_state[0][0].pov[0] >= 225 && joystick_state[0][0].pov[0] < 315) + else if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315) ret &= ~0x30; } } @@ -93,18 +94,20 @@ ch_flightstick_pro_write(UNUSED(void *priv)) static int ch_flightstick_pro_read_axis(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: return 0; case 3: - return joystick_state[0][0].axis[2]; + return joystick_state[gp][0].axis[2]; default: return 0; } @@ -113,18 +116,20 @@ ch_flightstick_pro_read_axis(UNUSED(void *priv), int axis) static int ch_flightstick_pro_ch_pedals_read_axis(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: - return joystick_state[0][0].axis[3]; + return joystick_state[gp][0].axis[3]; case 3: - return joystick_state[0][0].axis[2]; + return joystick_state[gp][0].axis[2]; default: return 0; } diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index fa83826da..5e0268d6b 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -10,7 +10,6 @@ * * Authors: Miran Grca, * Sarah Walker, - * Miran Grca, * Jasmine Iwanek, * * Copyright 2016-2018 Miran Grca. @@ -61,19 +60,20 @@ joystick_standard_close(UNUSED(void *priv)) static uint8_t joystick_standard_read(UNUSED(void *priv)) { + uint8_t gp = 0; uint8_t ret = 0xf0; - if (JOYSTICK_PRESENT(0, 0)) { - if (joystick_state[0][0].button[0]) + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) ret &= ~0x10; - if (joystick_state[0][0].button[1]) + if (joystick_state[gp][0].button[1]) ret &= ~0x20; } - if (JOYSTICK_PRESENT(0, 1)) { - if (joystick_state[0][1].button[0]) + if (JOYSTICK_PRESENT(gp, 1)) { + if (joystick_state[gp][1].button[0]) ret &= ~0x40; - if (joystick_state[0][1].button[1]) + if (joystick_state[gp][1].button[1]) ret &= ~0x80; } @@ -83,16 +83,17 @@ joystick_standard_read(UNUSED(void *priv)) static uint8_t joystick_standard_read_4button(UNUSED(void *priv)) { + uint8_t gp = 0; uint8_t ret = 0xf0; - if (JOYSTICK_PRESENT(0, 0)) { - if (joystick_state[0][0].button[0]) + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) ret &= ~0x10; - if (joystick_state[0][0].button[1]) + if (joystick_state[gp][0].button[1]) ret &= ~0x20; - if (joystick_state[0][0].button[2]) + if (joystick_state[gp][0].button[2]) ret &= ~0x40; - if (joystick_state[0][0].button[3]) + if (joystick_state[gp][0].button[3]) ret &= ~0x80; } @@ -108,23 +109,25 @@ joystick_standard_write(UNUSED(void *priv)) static int joystick_standard_read_axis(UNUSED(void *priv), int axis) { + uint8_t gp = 0; + switch (axis) { case 0: - if (!JOYSTICK_PRESENT(0, 0)) + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - if (!JOYSTICK_PRESENT(0, 0)) + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: - if (!JOYSTICK_PRESENT(0, 1)) + if (!JOYSTICK_PRESENT(gp, 1)) return AXIS_NOT_PRESENT; - return joystick_state[0][1].axis[0]; + return joystick_state[gp][1].axis[0]; case 3: - if (!JOYSTICK_PRESENT(0, 1)) + if (!JOYSTICK_PRESENT(gp, 1)) return AXIS_NOT_PRESENT; - return joystick_state[0][1].axis[1]; + return joystick_state[gp][1].axis[1]; default: return 0; } @@ -133,14 +136,16 @@ joystick_standard_read_axis(UNUSED(void *priv), int axis) static int joystick_standard_read_axis_4button(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: case 3: default: @@ -153,24 +158,26 @@ joystick_standard_read_axis_4button(UNUSED(void *priv), int axis) static int joystick_standard_read_axis_with_pov(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: // X-axis - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: // Y-axis - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: // POV Hat (mapped to the 3rd logical axis, index 2) - if (joystick_state[0][0].pov[0] == -1) + if (joystick_state[gp][0].pov[0] == -1) return 32767; // Centered/No input (as per tm_fcs_rcs_read_axis example) - if (joystick_state[0][0].pov[0] > 315 || joystick_state[0][0].pov[0] < 45) + if (joystick_state[gp][0].pov[0] > 315 || joystick_state[gp][0].pov[0] < 45) return -32768; // Up - if (joystick_state[0][0].pov[0] >= 45 && joystick_state[0][0].pov[0] < 135) + if (joystick_state[gp][0].pov[0] >= 45 && joystick_state[gp][0].pov[0] < 135) return -16384; // Up-Right (example value, matches tm_fcs_rcs_read_axis) - if (joystick_state[0][0].pov[0] >= 135 && joystick_state[0][0].pov[0] < 225) + if (joystick_state[gp][0].pov[0] >= 135 && joystick_state[gp][0].pov[0] < 225) return 0; // Right/Left (example, matches tm_fcs_rcs_read_axis) - if (joystick_state[0][0].pov[0] >= 225 && joystick_state[0][0].pov[0] < 315) + if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315) return 16384; // Down-Left (example value, matches tm_fcs_rcs_read_axis) return 0; // Fallback case 3: // This case might be used for a Z-axis if present, or can return 0 if not. @@ -185,16 +192,19 @@ joystick_standard_read_axis_with_pov(UNUSED(void *priv), int axis) static int joystick_standard_read_axis_3axis(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + uint8_t js = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: - return joystick_state[0][0].axis[2]; + return joystick_state[gp][0].axis[2]; case 3: default: return 0; @@ -204,18 +214,20 @@ joystick_standard_read_axis_3axis(UNUSED(void *priv), int axis) static int joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: - return joystick_state[0][0].axis[2]; + return joystick_state[gp][0].axis[2]; case 3: - return joystick_state[0][0].axis[3]; + return joystick_state[gp][0].axis[3]; default: return 0; } @@ -224,18 +236,20 @@ joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis) static int joystick_standard_read_axis_6button(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: - return joystick_state[0][0].button[4] ? -32767 : 32768; + return joystick_state[gp][0].button[4] ? -32767 : 32768; case 3: - return joystick_state[0][0].button[5] ? -32767 : 32768; + return joystick_state[gp][0].button[5] ? -32767 : 32768; default: return 0; } @@ -243,24 +257,26 @@ joystick_standard_read_axis_6button(UNUSED(void *priv), int axis) static int joystick_standard_read_axis_8button(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: - if (joystick_state[0][0].button[4]) + if (joystick_state[gp][0].button[4]) return -32767; - if (joystick_state[0][0].button[6]) + if (joystick_state[gp][0].button[6]) return 32768; return 0; case 3: - if (joystick_state[0][0].button[5]) + if (joystick_state[gp][0].button[5]) return -32767; - if (joystick_state[0][0].button[7]) + if (joystick_state[gp][0].button[7]) return 32768; return 0; default: diff --git a/src/game/joystick_sw_pad.c b/src/game/joystick_sw_pad.c index 7c1d4910b..c0d280de1 100644 --- a/src/game/joystick_sw_pad.c +++ b/src/game/joystick_sw_pad.c @@ -31,9 +31,11 @@ * * Authors: Miran Grca, * Sarah Walker, + * Jasmine Iwanek, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. + * Copyright 2021-2025 Jasmine Iwanek. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -136,10 +138,11 @@ sw_close(void *priv) static uint8_t sw_read(void *priv) { + uint8_t gp = 0; sw_data *sw = (sw_data *) priv; uint8_t temp = 0; - if (!JOYSTICK_PRESENT(0, 0)) + if (!JOYSTICK_PRESENT(gp, 0)) return 0xff; if (timer_is_enabled(&sw->poll_timer)) { @@ -162,10 +165,11 @@ sw_read(void *priv) static void sw_write(void *priv) { + uint8_t gp = 0; sw_data *sw = (sw_data *) priv; int64_t time_since_last = timer_get_remaining_us(&sw->trigger_timer); - if (!JOYSTICK_PRESENT(0, 0)) + if (!JOYSTICK_PRESENT(gp, 0)) return; if (!sw->poll_left) { @@ -191,20 +195,20 @@ sw_write(void *priv) for (uint8_t js = 0; js < 4; js++) { uint16_t data = 0x3fff; - if (!JOYSTICK_PRESENT(0, js)) + if (!JOYSTICK_PRESENT(gp, js)) break; - if (joystick_state[0][js].axis[1] < -16383) + if (joystick_state[gp][js].axis[1] < -16383) data &= ~1; - if (joystick_state[0][js].axis[1] > 16383) + if (joystick_state[gp][js].axis[1] > 16383) data &= ~2; - if (joystick_state[0][js].axis[0] > 16383) + if (joystick_state[gp][js].axis[0] > 16383) data &= ~4; - if (joystick_state[0][js].axis[0] < -16383) + if (joystick_state[gp][js].axis[0] < -16383) data &= ~8; for (uint8_t button_nr = 0; button_nr < 10; button_nr++) { - if (joystick_state[0][js].button[button_nr]) + if (joystick_state[gp][js].button[button_nr]) data &= ~(1 << (button_nr + 4)); } @@ -228,7 +232,9 @@ sw_write(void *priv) static int sw_read_axis(UNUSED(void *priv), UNUSED(int axis)) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; return 0; /*No analogue support on Sidewinder game pad*/ diff --git a/src/game/joystick_tm_fcs.c b/src/game/joystick_tm_fcs.c index 6c1176a42..c8368612d 100644 --- a/src/game/joystick_tm_fcs.c +++ b/src/game/joystick_tm_fcs.c @@ -10,9 +10,11 @@ * * Authors: Miran Grca, * Sarah Walker, + * Jasmine Iwanek, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. + * Copyright 2021-2025 Jasmine IWanek. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -58,16 +60,17 @@ tm_fcs_close(UNUSED(void *priv)) static uint8_t tm_fcs_read(UNUSED(void *priv)) { + uint8_t gp = 0; uint8_t ret = 0xf0; - if (JOYSTICK_PRESENT(0, 0)) { - if (joystick_state[0][0].button[0]) + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) ret &= ~0x10; - if (joystick_state[0][0].button[1]) + if (joystick_state[gp][0].button[1]) ret &= ~0x20; - if (joystick_state[0][0].button[2]) + if (joystick_state[gp][0].button[2]) ret &= ~0x40; - if (joystick_state[0][0].button[3]) + if (joystick_state[gp][0].button[3]) ret &= ~0x80; } @@ -83,26 +86,28 @@ tm_fcs_write(UNUSED(void *priv)) static int tm_fcs_read_axis(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp= 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: return 0; case 3: - if (joystick_state[0][0].pov[0] == -1) + if (joystick_state[gp][0].pov[0] == -1) return 32767; - if (joystick_state[0][0].pov[0] > 315 || joystick_state[0][0].pov[0] < 45) + if (joystick_state[gp][0].pov[0] > 315 || joystick_state[gp][0].pov[0] < 45) return -32768; - if (joystick_state[0][0].pov[0] >= 45 && joystick_state[0][0].pov[0] < 135) + if (joystick_state[gp][0].pov[0] >= 45 && joystick_state[gp][0].pov[0] < 135) return -16384; - if (joystick_state[0][0].pov[0] >= 135 && joystick_state[0][0].pov[0] < 225) + if (joystick_state[gp][0].pov[0] >= 135 && joystick_state[gp][0].pov[0] < 225) return 0; - if (joystick_state[0][0].pov[0] >= 225 && joystick_state[0][0].pov[0] < 315) + if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315) return 16384; return 0; default: @@ -113,26 +118,28 @@ tm_fcs_read_axis(UNUSED(void *priv), int axis) static int tm_fcs_rcs_read_axis(UNUSED(void *priv), int axis) { - if (!JOYSTICK_PRESENT(0, 0)) + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; switch (axis) { case 0: - return joystick_state[0][0].axis[0]; + return joystick_state[gp][0].axis[0]; case 1: - return joystick_state[0][0].axis[1]; + return joystick_state[gp][0].axis[1]; case 2: - return joystick_state[0][0].axis[2]; + return joystick_state[gp][0].axis[2]; case 3: - if (joystick_state[0][0].pov[0] == -1) + if (joystick_state[gp][0].pov[0] == -1) return 32767; - if (joystick_state[0][0].pov[0] > 315 || joystick_state[0][0].pov[0] < 45) + if (joystick_state[gp][0].pov[0] > 315 || joystick_state[gp][0].pov[0] < 45) return -32768; - if (joystick_state[0][0].pov[0] >= 45 && joystick_state[0][0].pov[0] < 135) + if (joystick_state[gp][0].pov[0] >= 45 && joystick_state[gp][0].pov[0] < 135) return -16384; - if (joystick_state[0][0].pov[0] >= 135 && joystick_state[0][0].pov[0] < 225) + if (joystick_state[gp][0].pov[0] >= 135 && joystick_state[gp][0].pov[0] < 225) return 0; - if (joystick_state[0][0].pov[0] >= 225 && joystick_state[0][0].pov[0] < 315) + if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315) return 16384; return 0; default: From 65cf2649f110ed390dd6c800fa76578d8937a3c9 Mon Sep 17 00:00:00 2001 From: mw308 <34479591+mw308@users.noreply.github.com> Date: Mon, 6 Oct 2025 16:16:42 +0100 Subject: [PATCH 063/233] Added HDD model tag capability and extra MS-6119 BIOS (#6287) * Added HDD version tag capability * Added additional PB MS-6119 BIOS --- src/disk/hdc_ide.c | 5 ++++- src/disk/hdd.c | 3 +++ src/include/86box/hdd.h | 3 +++ src/machine/m_at_slot1.c | 9 +++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index 566f255e9..6b116697f 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -552,7 +552,10 @@ ide_hd_identify(const ide_t *ide) /* Serial Number */ ide_padstr((char *) (ide->buffer + 10), "", 20); /* Firmware */ - ide_padstr((char *) (ide->buffer + 23), EMU_VERSION_EX, 8); + if (hdd[ide->hdd_num].version_ex) + ide_padstr((char *) (ide->buffer + 23), hdd[ide->hdd_num].version_ex, 8); + else + ide_padstr((char *) (ide->buffer + 23), EMU_VERSION_EX, 8); /* Model */ if (hdd[ide->hdd_num].model) ide_padstr((char *) (ide->buffer + 27), hdd[ide->hdd_num].model, 40); diff --git a/src/disk/hdd.c b/src/disk/hdd.c index af4411ab0..3c94bfa65 100644 --- a/src/disk/hdd.c +++ b/src/disk/hdd.c @@ -621,6 +621,9 @@ hdd_preset_apply(int hdd_id) if (preset->model) hd->model = preset->model; + if (preset->version_ex) + hd->version_ex = preset->version_ex; + if (!hd->speed_preset) return; diff --git a/src/include/86box/hdd.h b/src/include/86box/hdd.h index 1457efcae..e471cb54e 100644 --- a/src/include/86box/hdd.h +++ b/src/include/86box/hdd.h @@ -99,6 +99,7 @@ typedef struct hdd_preset_t { uint32_t max_multiple; double full_stroke_ms; double track_seek_ms; + const char *version_ex; } hdd_preset_t; typedef struct hdd_cache_seg_t { @@ -186,6 +187,8 @@ typedef struct hard_disk_t { const char *model; + const char *version_ex; + hdd_zone_t zones[HDD_MAX_ZONES]; hdd_cache_t cache; diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 995c943b9..db014587e 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -708,6 +708,15 @@ static const device_config_t ms6119_config[] = { .spinner = { 0 }, .selection = { { 0 } }, .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 1.72 (Packard Bell Tacoma with logo)", + .internal_name = "tacoma_logo", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ms6119/A19P2172.ROM", "" } + }, { .name = "AMIBIOS 6 (071595) - Revision 1.90 (Packard Bell Tacoma)", .internal_name = "tacoma", From ec86595d5da8b64fb223334bf4fc1bc2124f9fdc Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Mon, 6 Oct 2025 23:17:16 +0800 Subject: [PATCH 064/233] machine_table.c: Sony Vaio PCV-90 -> Sony Vaio PCV-70/90/100/120 (#6286) Change the machine name. Old name: "Sony Vaio PCV-90" New name: "Sony Vaio PCV-70/90/100/120" --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index f0672a743..3a8e12e44 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -14511,7 +14511,7 @@ const machine_t machines[] = { Command 0xA0 copyright string: (C)1994 AMI . Yes, this is an Intel AMI BIOS with a fancy splash screen. */ { - .name = "[i430HX] Sony Vaio PCV-90", + .name = "[i430HX] Sony Vaio PCV-70/90/100/120", .internal_name = "pcv90", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430HX, From 3f5b88ac8fb8afa72cd98fd3476e4815b42c1491 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 6 Oct 2025 11:17:30 -0400 Subject: [PATCH 065/233] More Joystick/gameport related changes (#6285) Fix a warning, correct a device name, formatting --- src/game/gameport.c | 2 +- src/game/joystick_ch_flightstick_pro.c | 19 +++++++++++++------ src/game/joystick_standard.c | 7 +++---- src/include/86box/gameport.h | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/game/gameport.c b/src/game/gameport.c index f17e39efe..88ff5cc8a 100644 --- a/src/game/gameport.c +++ b/src/game/gameport.c @@ -100,7 +100,7 @@ static const struct { { &joystick_3axis_2button }, { &joystick_2button_yoke_throttle }, { &joystick_3axis_4button }, - { &joystick_win95_steering_wheel }, + { &joystick_steering_wheel_4_button }, { &joystick_4button_yoke_throttle }, { &joystick_4axis_4button }, { &joystick_ch_flightstick_pro }, diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index 834aa8a99..84dc5a380 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -10,9 +10,11 @@ * * Authors: Miran Grca, * Sarah Walker, + * Jasmine Iwanek, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. + * Copyright 2021-2025 Jasmine Iwanek. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -70,14 +72,19 @@ ch_flightstick_pro_read(UNUSED(void *priv)) ret &= ~0x40; if (joystick_state[gp][0].button[3]) ret &= ~0x80; + // POV Hat if (joystick_state[gp][0].pov[0] != -1) { - if (joystick_state[gp][0].pov[0] > 315 || joystick_state[gp][0].pov[0] < 45) + // POV Up + if ((joystick_state[gp][0].pov[0] > 315) || (joystick_state[gp][0].pov[0] < 45)) ret &= ~0xf0; - else if (joystick_state[gp][0].pov[0] >= 45 && joystick_state[gp][0].pov[0] < 135) + // POV Right + else if ((joystick_state[gp][0].pov[0]) >= 45 && (joystick_state[gp][0].pov[0] < 135)) ret &= ~0xb0; - else if (joystick_state[gp][0].pov[0] >= 135 && joystick_state[gp][0].pov[0] < 225) + // POV Down + else if ((joystick_state[gp][0].pov[0]) >= 135 && (joystick_state[gp][0].pov[0] < 225)) ret &= ~0x70; - else if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315) + // POV Left + else if ((joystick_state[gp][0].pov[0]) >= 225 && (joystick_state[gp][0].pov[0] < 315)) ret &= ~0x30; } } @@ -94,7 +101,7 @@ ch_flightstick_pro_write(UNUSED(void *priv)) static int ch_flightstick_pro_read_axis(UNUSED(void *priv), int axis) { - uint8_t gp = 0; + uint8_t gp = 0; if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; @@ -116,7 +123,7 @@ ch_flightstick_pro_read_axis(UNUSED(void *priv), int axis) static int ch_flightstick_pro_ch_pedals_read_axis(UNUSED(void *priv), int axis) { - uint8_t gp = 0; + uint8_t gp = 0; if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index 5e0268d6b..60ea4b57d 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -193,7 +193,6 @@ static int joystick_standard_read_axis_3axis(UNUSED(void *priv), int axis) { uint8_t gp = 0; - uint8_t js = 0; if (!JOYSTICK_PRESENT(gp, 0)) return AXIS_NOT_PRESENT; @@ -470,9 +469,9 @@ const joystick_t joystick_4button_yoke_throttle = { .pov_names = { NULL } }; -const joystick_t joystick_win95_steering_wheel = { - .name = "Win95 Steering Wheel (3-axis, 4-button)", - .internal_name = "win95_steering_wheel", +const joystick_t joystick_steering_wheel_4_button = { + .name = "Steering Wheel (3-axis, 4-button)", + .internal_name = "steering_wheel_4_button", .init = joystick_standard_init, .close = joystick_standard_close, .read = joystick_standard_read_4button, diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index f9d7810e0..1b86c0567 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -182,7 +182,7 @@ extern const joystick_t joystick_3axis_2button; extern const joystick_t joystick_2button_yoke_throttle; extern const joystick_t joystick_3axis_4button; extern const joystick_t joystick_4button_yoke_throttle; -extern const joystick_t joystick_win95_steering_wheel; +extern const joystick_t joystick_steering_wheel_4_button; extern const joystick_t joystick_4axis_4button; extern const joystick_t joystick_2axis_6button; extern const joystick_t joystick_2axis_8button; From e5d1d20c8a29fd9372ffc7ad9b491510c6db47a9 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 7 Oct 2025 02:29:48 +0200 Subject: [PATCH 066/233] DEC Tulip: 100 megabit modes now actually run at that speed. --- src/network/net_tulip.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/network/net_tulip.c b/src/network/net_tulip.c index cbf3b704e..113af5cd4 100644 --- a/src/network/net_tulip.c +++ b/src/network/net_tulip.c @@ -910,6 +910,7 @@ tulip_reset(void *priv) s->subsys_id = eeprom_data[1]; s->subsys_ven_id = eeprom_data[0]; } + s->nic->byte_period = NET_PERIOD_10M; } static void @@ -967,6 +968,13 @@ tulip_write(uint32_t addr, uint32_t data, void *opaque) tulip_update_ts(s, CSR5_TS_STOPPED); s->csr[5] |= CSR5_TPS; } + + if (s->device_info->local < 3) { + if ((s->csr[6] & 0x00440000) && ((s->csr[6] & 0x00440000) != 0x00440000)) + s->nic->byte_period = NET_PERIOD_100M; + else + s->nic->byte_period = NET_PERIOD_10M; + } break; case CSR(7): From 626063fc9d0e3a938d4edc52953bb160eda3e8cb Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 7 Oct 2025 02:34:37 +0200 Subject: [PATCH 067/233] XT: Fix warnings. --- src/machine/m_xt.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 550d336a2..2d87ad8a7 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -1235,8 +1235,7 @@ const device_t pc500_device = { int machine_xt_pc500_init(const machine_t *model) { - int ret = 0; - int rtc_irq = -1; + int ret = 0; int rtc_port = 0; const char *fn; @@ -1245,7 +1244,6 @@ machine_xt_pc500_init(const machine_t *model) return ret; device_context(model->device); - rtc_irq = machine_get_config_int("rtc_irq"); rtc_port = machine_get_config_int("rtc_port"); fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000fe000, 8192, 0); @@ -1356,8 +1354,7 @@ const device_t pc500plus_device = { int machine_xt_pc500plus_init(const machine_t *model) { - int ret = 0; - int rtc_irq = -1; + int ret = 0; int rtc_port = 0; const char *fn; @@ -1366,7 +1363,6 @@ machine_xt_pc500plus_init(const machine_t *model) return ret; device_context(model->device); - rtc_irq = machine_get_config_int("rtc_irq"); rtc_port = machine_get_config_int("rtc_port"); fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); ret = bios_load_linear(fn, 0x000fc000, 16384, 0); From c2b9f0468836410153f8315bdefc01ecefd42561 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 7 Oct 2025 13:48:31 +0600 Subject: [PATCH 068/233] Provide AC97 codec for MSI MS-6147 (#6292) --- src/machine/m_at_slot1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index db014587e..734df82ee 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -893,7 +893,7 @@ machine_at_ms6147_init(const machine_t *model) if (sound_card_current[0] == SOUND_INTERNAL) { device_add(machine_get_snd_device(machine)); - device_add(&es1371_onboard_device); + device_add(&ct1297_device); } return ret; From 9a19f3357b3350f2f2bdd1ea848f32ad73047791 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Tue, 7 Oct 2025 21:02:41 +0700 Subject: [PATCH 069/233] Some Socket 7-DV BIOS changes (#6291) Also one name correction to LX6 Beta BIOS --- src/machine/m_at_slot1.c | 2 +- src/machine/m_at_socket7.c | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 734df82ee..0ed20583f 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -175,7 +175,7 @@ static const device_config_t lx6_config[] = { .files = { "roms/machines/lx6/LX6C_LY.BIN", "" } }, { - .name = "Award Modular BIOS v4.51PG - Revision PZ Beta", + .name = "Award Modular BIOS v4.51PG - Revision PZ (Beta)", .internal_name = "lx6_beta", .bios_type = BIOS_NORMAL, .files_no = 1, diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index cfe615551..3bd4f8a95 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -421,7 +421,7 @@ static const device_config_t m7shi_config[] = { .bios = { { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision 05/20/97", - .internal_name = "m7shi", + .internal_name = "m7shi_97", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -430,7 +430,7 @@ static const device_config_t m7shi_config[] = { }, { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision 01/21/98", - .internal_name = "m7shi_4", + .internal_name = "m7shi", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -1425,19 +1425,19 @@ static const device_config_t an430tx_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "an430tx", + .default_string = "pb79x", .default_int = 0, .file_filter = "", .spinner = { 0 }, .bios = { - { .name = "Packard Bell PB79x", .internal_name = "an430tx", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/an430tx/ANP0911A.BIO", "roms/machines/an430tx/ANP0911A.BI1", - "roms/machines/an430tx/ANP0911A.BI2", "roms/machines/an430tx/ANP0911A.BI3", - "roms/machines/an430tx/ANP0911A.RCV", "" } }, - { .name = "Sony Vaio PCV-130/150", .internal_name = "vaio150", .bios_type = BIOS_NORMAL, + { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P02-0011 (Sony Vaio PCV-130/150)", .internal_name = "vaio150", .bios_type = BIOS_NORMAL, .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/an430tx/P02-0011.BIO", "roms/machines/an430tx/P02-0011.BI1", "roms/machines/an430tx/P02-0011.BI2", "roms/machines/an430tx/P02-0011.BI3", "roms/machines/an430tx/P02-0011.RCV", "" } }, + { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P09-0006 (Packard Bell PB79x)", .internal_name = "pb79x", .bios_type = BIOS_NORMAL, + .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/an430tx/ANP0911A.BIO", "roms/machines/an430tx/ANP0911A.BI1", + "roms/machines/an430tx/ANP0911A.BI2", "roms/machines/an430tx/ANP0911A.BI3", + "roms/machines/an430tx/ANP0911A.RCV", "" } }, { .files_no = 0 } }, }, @@ -1789,7 +1789,7 @@ static const device_config_t r534f_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "r534f_1998", + .default_string = "r534f", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -1797,7 +1797,7 @@ static const device_config_t r534f_config[] = { .bios = { { .name = "Award Modular BIOS v4.51PG - Revision 06/12/1998", - .internal_name = "r534f_1998", + .internal_name = "r534f", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -1806,7 +1806,7 @@ static const device_config_t r534f_config[] = { }, { .name = "Award Modular BIOS v4.51PG - Revision 03/13/2000 (by Unicore Software)", - .internal_name = "r534f", + .internal_name = "r534f_unicore", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From a2d7e9383d315c0745bf011719b2f354d4d2f040 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 7 Oct 2025 23:03:18 +0600 Subject: [PATCH 070/233] Add ATi WinCharger (ATi Mach64CT) emulation (#6293) --- src/include/86box/video.h | 1 + src/video/vid_ati_mach64.c | 76 ++++++++++++++++++++++++++++++++------ src/video/vid_table.c | 1 + 3 files changed, 66 insertions(+), 12 deletions(-) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 5ce3188f0..9bbc3b9e3 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -332,6 +332,7 @@ extern void da2_device_add(void); extern const device_t mach64gx_isa_device; extern const device_t mach64gx_vlb_device; extern const device_t mach64gx_pci_device; +extern const device_t mach64ct_device; extern const device_t mach64vt2_device; /* ATi 18800 */ diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index 221af0d3f..098d938da 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -48,6 +48,7 @@ #define BIOS_ROM_PATH "roms/video/mach64/bios.bin" #define BIOS_ISA_ROM_PATH "roms/video/mach64/M64-1994.VBI" #define BIOS_VLB_ROM_PATH "roms/video/mach64/mach64_vlb_vram.bin" +#define BIOS_ROMCT_PATH "roms/video/mach64/mach64-68b110b8cddfd546595673.bin" #define BIOS_ROMVT2_PATH "roms/video/mach64/atimach64vt2pci.bin" #define FIFO_SIZE 65536 @@ -75,6 +76,7 @@ typedef struct fifo_entry_t { enum { MACH64_GX = 0, + MACH64_CT, MACH64_VT2 }; @@ -2580,7 +2582,7 @@ mach64_ext_readb(uint32_t addr, void *priv) case 0xc7: READ8(addr, mach64->dac_cntl); - if (mach64->type >= MACH64_VT2) { + if (mach64->type >= MACH64_CT) { ret &= 0xf9; if (i2c_gpio_get_scl(mach64->i2c)) ret |= 0x04; @@ -2600,7 +2602,7 @@ mach64_ext_readb(uint32_t addr, void *priv) case 0xdd: case 0xde: case 0xdf: - if (mach64->type == MACH64_GX) + if (mach64->type != MACH64_VT2) mach64->config_cntl = (mach64->config_cntl & ~0x3ff0) | ((mach64->linear_base >> 22) << 4); else mach64->config_cntl = (mach64->config_cntl & ~0x3ff0) | ((mach64->linear_base >> 24) << 4); @@ -4703,19 +4705,19 @@ mach64_pci_read(UNUSED(int func), int addr, void *priv) return mach64->linear_base >> 24; case 0x14: - if (mach64->type >= MACH64_VT2) + if (mach64->type >= MACH64_CT) return 0x01; /*Block decoded IO address*/ return 0x00; case 0x15: - if (mach64->type >= MACH64_VT2) + if (mach64->type >= MACH64_CT) return mach64->block_decoded_io >> 8; return 0x00; case 0x16: - if (mach64->type >= MACH64_VT2) + if (mach64->type >= MACH64_CT) return mach64->block_decoded_io >> 16; return 0x00; case 0x17: - if (mach64->type >= MACH64_VT2) + if (mach64->type >= MACH64_CT) return mach64->block_decoded_io >> 24; return 0x00; @@ -4759,7 +4761,7 @@ mach64_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) break; case 0x12: - if (mach64->type >= MACH64_VT2) + if (mach64->type >= MACH64_CT) val = 0; mach64->linear_base = (mach64->linear_base & 0xff000000) | ((val & 0x80) << 16); mach64_updatemapping(mach64); @@ -4770,7 +4772,7 @@ mach64_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) break; case 0x15: - if (mach64->type >= MACH64_VT2) { + if (mach64->type >= MACH64_CT) { if (mach64->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_IO) mach64_io_remove(mach64); mach64->block_decoded_io = (mach64->block_decoded_io & 0xffff0000) | ((val & 0xff) << 8); @@ -4779,7 +4781,7 @@ mach64_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) } break; case 0x16: - if (mach64->type >= MACH64_VT2) { + if (mach64->type >= MACH64_CT) { if (mach64->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_IO) mach64_io_remove(mach64); mach64->block_decoded_io = (mach64->block_decoded_io & 0xff00fc00) | (val << 16); @@ -4788,7 +4790,7 @@ mach64_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) } break; case 0x17: - if (mach64->type >= MACH64_VT2) { + if (mach64->type >= MACH64_CT) { if (mach64->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_IO) mach64_io_remove(mach64); mach64->block_decoded_io = (mach64->block_decoded_io & 0x00fffc00) | (val << 24); @@ -4820,7 +4822,7 @@ mach64_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) if (mach64->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_IO) mach64_io_remove(mach64); mach64->io_base = val & 0x03; - if (mach64->type >= MACH64_VT2) + if (mach64->type >= MACH64_CT) mach64->use_block_decoded_io = val & 0x04; if (mach64->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_IO) mach64_io_set(mach64); @@ -4841,7 +4843,7 @@ mach64_common_init(const device_t *info) svga = &mach64->svga; mach64->type = info->local & 0xff; - mach64->vram_size = (info->local & (1 << 20)) ? 4 : device_get_config_int("memory"); + mach64->vram_size = (mach64->type == MACH64_CT) ? 2 : ((info->local & (1 << 20)) ? 4 : device_get_config_int("memory")); mach64->vram_mask = (mach64->vram_size << 20) - 1; if (mach64->type > MACH64_GX) @@ -4932,6 +4934,37 @@ mach64gx_init(const device_t *info) return mach64; } static void * +mach64ct_init(const device_t *info) +{ + mach64_t *mach64 = mach64_common_init(info); + svga_t *svga = &mach64->svga; + + svga->dac_hwcursor_draw = NULL; + + svga->hwcursor.cur_ysize = 64; + svga->hwcursor.cur_xsize = 64; + + video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_mach64_pci); + + mach64->pci = 1; + mach64->vlb = 0; + mach64->pci_id = 'T' | ('C' << 8); + mach64->config_chip_id = mach64->pci_id; + mach64->dac_cntl = 1 << 16; /*Internal 24-bit DAC*/ + mach64->config_stat0 = 4; + mach64->use_block_decoded_io = 4; + + ati_eeprom_load(&mach64->eeprom, "mach64ct.nvr", 1); + + rom_init(&mach64->bios_rom, BIOS_ROMCT_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + + mem_mapping_disable(&mach64->bios_rom.mapping); + + svga->vblank_start = mach64_vblank_start; + + return mach64; +} +static void * mach64vt2_init(const device_t *info) { mach64_t *mach64 = mach64_common_init(info); @@ -4979,6 +5012,11 @@ mach64gx_vlb_available(void) return rom_present(BIOS_VLB_ROM_PATH); } int +mach64ct_available(void) +{ + return rom_present(BIOS_ROMCT_PATH); +} +int mach64vt2_available(void) { return rom_present(BIOS_ROMVT2_PATH); @@ -5102,6 +5140,20 @@ const device_t mach64gx_pci_device = { .config = mach64gx_config }; +const device_t mach64ct_device = { + .name = "ATI WinCharger (ATI Mach64CT)", + .internal_name = "mach64ct", + .flags = DEVICE_PCI, + .local = MACH64_CT, + .init = mach64ct_init, + .close = mach64_close, + .reset = NULL, + .available = mach64ct_available, + .speed_changed = mach64_speed_changed, + .force_redraw = mach64_force_redraw, + .config = NULL +}; + const device_t mach64vt2_device = { .name = "ATI Mach64VT2", .internal_name = "mach64vt2", diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 4e76e150d..717fbc8ef 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -185,6 +185,7 @@ video_cards[] = { { .device = &mach32_pci_device, .flags = VIDEO_FLAG_TYPE_8514 }, { .device = &mach64gx_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &mach64vt2_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &mach64ct_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &bochs_svga_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &chips_69000_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5430_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, From c73cb84f8f74f9123e80e02607d3d1b1f41ae209 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Tue, 7 Oct 2025 22:33:21 +0200 Subject: [PATCH 071/233] Mach64 changes of the day (October 7th, 2025) (#6295) * AdLib Gold changes of the day (September 23rd, 2025) 1. Make sure the check to the Surround module is properly placed when disabled/enabled. 2. Replace local adgold_buffer with opl_buffer from its struct to improve the audio output and less clipping. * Some fixes for the AdLib Gold of the day (September 26th, 2025) 1. Revert the sampling DMA int functions back to void but with a check that monitors the DMA FIFO whenever it's within the range or not. 2. Actually clear the IRQ properly. * Mach64 changes of the day (October 7th, 2025) 1. Add a second call to wake_fifo_thread to reduce thread glitching. 2. Minor cosmetic fixes. --- src/video/vid_ati_mach64.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index 098d938da..d9c290897 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -1212,16 +1212,17 @@ fifo_thread(void *param) uint64_t start_time = plat_timer_read(); uint64_t end_time; fifo_entry_t *fifo = &mach64->fifo[mach64->fifo_read_idx & FIFO_MASK]; + uint32_t val = fifo->val; switch (fifo->addr_type & FIFO_TYPE) { case FIFO_WRITE_BYTE: - mach64_accel_write_fifo(mach64, fifo->addr_type & FIFO_ADDR, fifo->val); + mach64_accel_write_fifo(mach64, fifo->addr_type & FIFO_ADDR, val); break; case FIFO_WRITE_WORD: - mach64_accel_write_fifo_w(mach64, fifo->addr_type & FIFO_ADDR, fifo->val); + mach64_accel_write_fifo_w(mach64, fifo->addr_type & FIFO_ADDR, val); break; case FIFO_WRITE_DWORD: - mach64_accel_write_fifo_l(mach64, fifo->addr_type & FIFO_ADDR, fifo->val); + mach64_accel_write_fifo_l(mach64, fifo->addr_type & FIFO_ADDR, val); break; default: @@ -1282,16 +1283,14 @@ mach64_queue(mach64_t *mach64, uint32_t addr, uint32_t val, uint32_t type) if (limit) { if (FIFO_ENTRIES >= 16) { thread_reset_event(mach64->fifo_not_full_event); - if (FIFO_ENTRIES >= 16) { + if (FIFO_ENTRIES >= 16) thread_wait_event(mach64->fifo_not_full_event, -1); /*Wait for room in ringbuffer*/ - } } } else { if (FIFO_FULL) { thread_reset_event(mach64->fifo_not_full_event); - if (FIFO_FULL) { + if (FIFO_FULL) thread_wait_event(mach64->fifo_not_full_event, -1); /*Wait for room in ringbuffer*/ - } } } @@ -1300,6 +1299,8 @@ mach64_queue(mach64_t *mach64, uint32_t addr, uint32_t val, uint32_t type) mach64->fifo_write_idx++; + if (FIFO_ENTRIES > 0xe000) + wake_fifo_thread(mach64); if (FIFO_ENTRIES > 0xe000 || FIFO_ENTRIES < 8) wake_fifo_thread(mach64); } @@ -2409,7 +2410,7 @@ mach64_ext_readb(uint32_t addr, void *priv) case 0x4a: ret = mach64->scaler_format; break; - + case 0x4b: ret = mach64->scaler_yuv_aper; break; @@ -3113,7 +3114,7 @@ mach64_ext_writeb(uint32_t addr, uint8_t val, void *priv) case 0x4a: mach64->scaler_format = val & 0xf; break; - + case 0x4b: mach64->scaler_yuv_aper = val; break; From 501bc4d45f984600a6f648565a40da07d3aecdbb Mon Sep 17 00:00:00 2001 From: MattBytesRetro <9090295+MattBytesRetro@users.noreply.github.com> Date: Wed, 8 Oct 2025 00:22:23 -0700 Subject: [PATCH 072/233] Update machine_table.c (#6296) * Update machine_table.c Rename Packard Bell motherboards to be in line with the actual board names, and not machine oem names, which aren't fully accurate. * Update machine_table.c Edited more models based on actual names: https://pb.retropc.se/ --- src/machine/machine_table.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 3a8e12e44..f1af74d90 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -5114,7 +5114,7 @@ const machine_t machines[] = { }, /* Most likely has Phonenix KBC firmware. */ { - .name = "[ACC 2036] Packard Bell Legend 300SX", + .name = "[ACC 2036] Packard Bell PB300/PB320", .internal_name = "pbl300sx", .type = MACHINE_TYPE_386SX, .chipset = MACHINE_CHIPSET_ACC_2036, @@ -7922,7 +7922,7 @@ const machine_t machines[] = { /* Uses some variant of Phoenix MultiKey/42 as the BIOS sends keyboard controller command C7 (OR input byte with received data byte). */ { - .name = "[ACC 2168] Packard Bell PB410A", + .name = "[ACC 2168] Packard Bell PB410/PB410A/PB420/PB420T", .internal_name = "pb410a", .type = MACHINE_TYPE_486_S2, .chipset = MACHINE_CHIPSET_ACC_2168, @@ -10017,7 +10017,7 @@ const machine_t machines[] = { }, /* has a Phoenix PLCC Multikey copyrighted 1993, version unknown. */ { - .name = "[OPTi 895] Packard Bell PB450", + .name = "[OPTi 895] Packard Bell PB450 (Firehawk)", .internal_name = "pb450", .type = MACHINE_TYPE_486_S3_PCI, .chipset = MACHINE_CHIPSET_OPTI_895_802G, @@ -11580,7 +11580,7 @@ const machine_t machines[] = { }, /* This has the Phoenix MultiKey KBC firmware. */ { - .name = "[i430LX] Packard Bell PB520R", + .name = "[i430LX] Packard Bell Robin LC (PB520R)", .internal_name = "pb520r", .type = MACHINE_TYPE_SOCKET4, .chipset = MACHINE_CHIPSET_INTEL_430LX, @@ -13063,7 +13063,7 @@ const machine_t machines[] = { }, /* This has Phoenix KBC firmware. */ { - .name = "[VLSI SuperCore] Packard Bell PB600", + .name = "[VLSI SuperCore] Packard Bell Agoura/Wildcat (PB600)", .internal_name = "pb600", .type = MACHINE_TYPE_SOCKET5, .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, @@ -13427,7 +13427,7 @@ const machine_t machines[] = { /* This most likely uses AMI MegaKey KBC firmware as well due to having the same Super I/O chip (that has the KBC firmware on it) as eg. the Advanced/EV. */ { - .name = "[i430FX] Packard Bell PB640", + .name = "[i430FX] Packard Bell Thousand Oaks (PB640)", .internal_name = "pb640", .type = MACHINE_TYPE_SOCKET7_3V, .chipset = MACHINE_CHIPSET_INTEL_430FX, @@ -15142,7 +15142,7 @@ const machine_t machines[] = { PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i430VX] Packard Bell Multimedia C110 (PB680/PB682/PB685)", + .name = "[i430VX] Packard Bell Orlando/2D/2D/MMX (PB680/PB682/PB683/PB685)", .internal_name = "pb680", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430VX, @@ -15188,7 +15188,7 @@ const machine_t machines[] = { /* Has a SM(S)C FDC37C935 Super I/O chip with on-chip KBC with Phoenix MultiKey/42 (version 1.38) KBC firmware. */ { - .name = "[i430VX] Packard Bell Multimedia M415 (PB810)", + .name = "[i430VX] Packard Bell PB810/820 (GVC/BCM FM530)", .internal_name = "pb810", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430VX, @@ -18272,7 +18272,7 @@ const machine_t machines[] = { /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[i440ZX] Packard Bell Bora Pro (MSI MS-6168)", + .name = "[i440ZX] Packard Bell Bora/Bora Pro (MSI MS-6168)", .internal_name = "borapro", .type = MACHINE_TYPE_SLOT1, .chipset = MACHINE_CHIPSET_INTEL_440ZX, From 0b487422b2a6e1f909a3afa3fa938fe517ac6460 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Oct 2025 13:22:36 +0600 Subject: [PATCH 073/233] Gamma correction support for Mach64VT2 (#6294) --- src/video/vid_ati_mach64.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index d9c290897..6b2575deb 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -543,6 +543,7 @@ mach64_recalctimings(svga_t *svga) svga->split = 0xffffff; svga->vblankstart = svga->dispend; svga->rowcount = mach64->crtc_gen_cntl & 1; + svga->lut_map = (mach64->type >= MACH64_VT2); svga->rowoffset <<= 1; if (mach64->type == MACH64_GX) @@ -592,6 +593,7 @@ mach64_recalctimings(svga_t *svga) svga->vram_display_mask = mach64->vram_mask; } else { svga->vram_display_mask = (mach64->regs[0x36] & 0x01) ? mach64->vram_mask : 0x3ffff; + svga->lut_map = 0; } } @@ -4028,6 +4030,29 @@ mach64_readl(uint32_t addr, void *priv) return ret; } +uint32_t +mach64_conv_16to32(svga_t* svga, uint16_t color, uint8_t bpp) +{ + uint32_t ret = 0x00000000; + + if (svga->lut_map) { + if (bpp == 15) { + uint8_t b = getcolr(svga->pallook[(color & 0x1f) << 3]); + uint8_t g = getcolg(svga->pallook[(color & 0x3e0) >> 2]); + uint8_t r = getcolb(svga->pallook[(color & 0x7c00) >> 7]); + ret = (video_15to32[color] & 0xFF000000) | makecol(r, g, b); + } else { + uint8_t b = getcolr(svga->pallook[(color & 0x1f) << 3]); + uint8_t g = getcolg(svga->pallook[(color & 0x7e0) >> 3]); + uint8_t r = getcolb(svga->pallook[(color & 0xf800) >> 8]); + ret = (video_16to32[color] & 0xFF000000) | makecol(r, g, b); + } + } else + ret = (bpp == 15) ? video_15to32[color] : video_16to32[color]; + + return ret; +} + void mach64_int_hwcursor_draw(svga_t *svga, int displine) { @@ -4879,6 +4904,10 @@ mach64_common_init(const device_t *info) svga->clock_gen = device_add(&ics2595_device); + if (mach64->type >= MACH64_VT2) { + svga->conv_16to32 = mach64_conv_16to32; + } + mach64->dst_cntl = 3; mach64->thread_run = 1; From 9cac0c12f3a452b31be4f8274be406cfe193e9e7 Mon Sep 17 00:00:00 2001 From: mw308 <34479591+mw308@users.noreply.github.com> Date: Wed, 8 Oct 2025 08:22:48 +0100 Subject: [PATCH 074/233] Add more hard disks (#6290) --- src/disk/hdd.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/disk/hdd.c b/src/disk/hdd.c index 3c94bfa65..357c787b8 100644 --- a/src/disk/hdd.c +++ b/src/disk/hdd.c @@ -435,6 +435,7 @@ static hdd_preset_t hdd_speed_presets[] = { { .name = "[Generic] 1998 (5400 RPM)", .internal_name = "1998_5400rpm", .zones = 16, .avg_spt = 300, .heads = 8, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 32 }, { .name = "[Generic] 2000 (7200 RPM)", .internal_name = "2000_7200rpm", .zones = 16, .avg_spt = 350, .heads = 6, .rpm = 7200, .full_stroke_ms = 15, .track_seek_ms = 2, .rcache_num_seg = 16, .rcache_seg_size = 128, .max_multiple = 32 }, { .name = "[PIO IDE] IBM WDA-L42", .internal_name = "WDAL42", .model = "WDA-L42", .zones = 1, .avg_spt = 85, .heads = 2, .rpm = 3600, .full_stroke_ms = 33, .track_seek_ms = 2.5, .rcache_num_seg = 1, .rcache_seg_size = 32, .max_multiple = 1 }, + { .name = "[PIO-2] IBM DSAA-3270", .internal_name = "DSAA3270", .model = "DSAA-3270", .zones = 8, .avg_spt = 268, .heads = 2, .rpm = 4500, .full_stroke_ms = 25, .track_seek_ms = 2.1, .rcache_num_seg = 3, .rcache_seg_size = 32, .max_multiple = 8, .version_ex = "25505120" }, { .name = "[ATA-1] Conner CP3024", .internal_name = "CP3024", .model = "Conner Peripherals 20MB - CP3024", .zones = 1, .avg_spt = 33, .heads = 2, .rpm = 3500, .full_stroke_ms = 50, .track_seek_ms = 8, .rcache_num_seg = 1, .rcache_seg_size = 8, .max_multiple = 8 }, // Needed for GRiDcase 1520 to work { .name = "[ATA-1] Conner CP3044", .internal_name = "CP3044", .model = "Conner Peripherals 40MB - CP3044", .zones = 1, .avg_spt = 40, .heads = 2, .rpm = 3500, .full_stroke_ms = 50, .track_seek_ms = 8, .rcache_num_seg = 1, .rcache_seg_size = 8, .max_multiple = 8 }, // Needed for GRiDcase 1520 to work { .name = "[ATA-1] Conner CP3104", .internal_name = "CP3104", .model = "Conner Peripherals 104MB - CP3104", .zones = 1, .avg_spt = 33, .heads = 8, .rpm = 3500, .full_stroke_ms = 45, .track_seek_ms = 8, .rcache_num_seg = 4, .rcache_seg_size = 8, .max_multiple = 8 }, // Needed for GRiDcase 1520 to work @@ -522,6 +523,8 @@ static hdd_preset_t hdd_speed_presets[] = { { .name = "[ATA-4] Quantum Fireball SE4.3A", .internal_name = "SE43A011", .model = "QUANTUM FIREBALL SE4.3A", .zones = 2, .avg_spt = 200, .heads = 4, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16 }, { .name = "[ATA-4] Quantum Fireball SE6.4A", .internal_name = "SE64A011", .model = "QUANTUM FIREBALL SE6.4A", .zones = 3, .avg_spt = 200, .heads = 6, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16 }, { .name = "[ATA-4] Quantum Fireball SE8.4A", .internal_name = "SE84A011", .model = "QUANTUM FIREBALL SE8.4A", .zones = 4, .avg_spt = 200, .heads = 8, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16 }, + { .name = "[ATA-4] Quantum Fireball EX12.7A", .internal_name = "EX12A012", .model = "QUANTUM FIREBALL EX12.7A", .zones = 4, .avg_spt = 200, .heads = 8, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16, .version_ex = "A0A.0D00" }, + { .name = "[ATA-4] Quantum Fireball LCT-08 (LA04A011)", .internal_name = "LA04A011", .model = "QUANTUM FIREBALLlct08 04", .zones = 8, .avg_spt = 280, .heads = 6, .rpm = 5400, .full_stroke_ms = 40, .track_seek_ms = 3, .rcache_num_seg = 8, .rcache_seg_size = 512, .max_multiple = 16, .version_ex = "A05.0X00" }, { .name = "[ATA-4] Seagate Medalist 2122", .internal_name = "ST32122A", .model = "ST32122A", .zones = 16, .avg_spt = 215, .heads = 2, .rpm = 4500, .full_stroke_ms = 23, .track_seek_ms = 3.8, .rcache_num_seg = 16, .rcache_seg_size = 128, .max_multiple = 16 }, { .name = "[ATA-4] Seagate Medalist 3321", .internal_name = "ST33221A", .model = "ST33221A", .zones = 16, .avg_spt = 210, .heads = 4, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 1.7, .rcache_num_seg = 16, .rcache_seg_size = 128, .max_multiple = 16 }, { .name = "[ATA-4] Seagate Medalist 4321", .internal_name = "ST34321A", .model = "ST34321A", .zones = 16, .avg_spt = 210, .heads = 4, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 2.2, .rcache_num_seg = 16, .rcache_seg_size = 128, .max_multiple = 16 }, @@ -534,6 +537,7 @@ static hdd_preset_t hdd_speed_presets[] = { { .name = "[ATA-4] Western Digital Caviar 23200", .internal_name = "AC23200", .model = "WDC AC23200LB", .zones = 16, .avg_spt = 210, .heads = 4, .rpm = 5400, .full_stroke_ms = 21, .track_seek_ms = 3, .rcache_num_seg = 8, .rcache_seg_size = 256, .max_multiple = 32 }, { .name = "[ATA-4] Western Digital Caviar 26400", .internal_name = "AC26400", .model = "WDC AC26400RN", .zones = 16, .avg_spt = 295, .heads = 5, .rpm = 5400, .full_stroke_ms = 21, .track_seek_ms = 3, .rcache_num_seg = 8, .rcache_seg_size = 512, .max_multiple = 32 }, { .name = "[ATA-4] Western Digital Caviar 33200", .internal_name = "AC33200", .model = "WDC AC33200LA", .zones = 16, .avg_spt = 310, .heads = 5, .rpm = 5200, .full_stroke_ms = 40, .track_seek_ms = 3, .rcache_num_seg = 16, .rcache_seg_size = 256, .max_multiple = 32 }, + { .name = "[ATA-4] Western Digital Caviar 35100", .internal_name = "AC35100", .model = "WDC AC35100L", .zones = 16, .avg_spt = 315, .heads = 5, .rpm = 5400, .full_stroke_ms = 40, .track_seek_ms = 3, .rcache_num_seg = 16, .rcache_seg_size = 256, .max_multiple = 32, .version_ex = "09.09M08" }, { .name = "[ATA-5] IBM Travelstar 6GN", .internal_name = "DARA206000", .model = "IBM-DARA-206000", .zones = 12, .avg_spt = 292, .heads = 2, .rpm = 4200, .full_stroke_ms = 31, .track_seek_ms = 4, .rcache_num_seg = 16, .rcache_seg_size = 512, .max_multiple = 32 }, { .name = "[ATA-5] IBM Travelstar 9GN", .internal_name = "DARA209000", .model = "IBM-DARA-209000", .zones = 12, .avg_spt = 292, .heads = 3, .rpm = 4200, .full_stroke_ms = 31, .track_seek_ms = 4, .rcache_num_seg = 16, .rcache_seg_size = 512, .max_multiple = 32 }, { .name = "[ATA-5] IBM/Hitachi Travelstar 12GN", .internal_name = "DARA212000", .model = "IBM-DARA-212000", .zones = 12, .avg_spt = 292, .heads = 4, .rpm = 4200, .full_stroke_ms = 31, .track_seek_ms = 4, .rcache_num_seg = 16, .rcache_seg_size = 512, .max_multiple = 32 }, // Either Hitachi or IBM OEM From 5f6aa3b44eb6b5070b7e9267c3397dfd80934aa6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Oct 2025 19:38:32 +0600 Subject: [PATCH 075/233] Add ATi Mach64 VT emulation (#6300) --- src/include/86box/video.h | 1 + src/video/vid_ati_mach64.c | 60 +++++++++++++++++++++++++++++++++++--- src/video/vid_table.c | 3 +- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 9bbc3b9e3..a142a63fc 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -333,6 +333,7 @@ extern const device_t mach64gx_isa_device; extern const device_t mach64gx_vlb_device; extern const device_t mach64gx_pci_device; extern const device_t mach64ct_device; +extern const device_t mach64vt_device; extern const device_t mach64vt2_device; /* ATi 18800 */ diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index 6b2575deb..4a819b7d1 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -49,6 +49,7 @@ #define BIOS_ISA_ROM_PATH "roms/video/mach64/M64-1994.VBI" #define BIOS_VLB_ROM_PATH "roms/video/mach64/mach64_vlb_vram.bin" #define BIOS_ROMCT_PATH "roms/video/mach64/mach64-68b110b8cddfd546595673.bin" +#define BIOS_ROMVT_PATH "roms/video/mach64/mach64vt-660c60c135839345779942.bin" #define BIOS_ROMVT2_PATH "roms/video/mach64/atimach64vt2pci.bin" #define FIFO_SIZE 65536 @@ -77,6 +78,7 @@ typedef struct fifo_entry_t { enum { MACH64_GX = 0, MACH64_CT, + MACH64_VT, MACH64_VT2 }; @@ -543,7 +545,7 @@ mach64_recalctimings(svga_t *svga) svga->split = 0xffffff; svga->vblankstart = svga->dispend; svga->rowcount = mach64->crtc_gen_cntl & 1; - svga->lut_map = (mach64->type >= MACH64_VT2); + svga->lut_map = (mach64->type >= MACH64_VT); svga->rowoffset <<= 1; if (mach64->type == MACH64_GX) @@ -2605,7 +2607,7 @@ mach64_ext_readb(uint32_t addr, void *priv) case 0xdd: case 0xde: case 0xdf: - if (mach64->type != MACH64_VT2) + if (mach64->type != MACH64_VT2 && mach64->type != MACH64_VT) mach64->config_cntl = (mach64->config_cntl & ~0x3ff0) | ((mach64->linear_base >> 22) << 4); else mach64->config_cntl = (mach64->config_cntl & ~0x3ff0) | ((mach64->linear_base >> 24) << 4); @@ -4869,7 +4871,7 @@ mach64_common_init(const device_t *info) svga = &mach64->svga; mach64->type = info->local & 0xff; - mach64->vram_size = (mach64->type == MACH64_CT) ? 2 : ((info->local & (1 << 20)) ? 4 : device_get_config_int("memory")); + mach64->vram_size = (mach64->type == MACH64_CT || mach64->type == MACH64_VT) ? 2 : ((info->local & (1 << 20)) ? 4 : device_get_config_int("memory")); mach64->vram_mask = (mach64->vram_size << 20) - 1; if (mach64->type > MACH64_GX) @@ -4904,7 +4906,7 @@ mach64_common_init(const device_t *info) svga->clock_gen = device_add(&ics2595_device); - if (mach64->type >= MACH64_VT2) { + if (mach64->type >= MACH64_VT) { svga->conv_16to32 = mach64_conv_16to32; } @@ -4995,6 +4997,37 @@ mach64ct_init(const device_t *info) return mach64; } static void * +mach64vt_init(const device_t *info) +{ + mach64_t *mach64 = mach64_common_init(info); + svga_t *svga = &mach64->svga; + + svga->dac_hwcursor_draw = NULL; + + svga->hwcursor.cur_ysize = 64; + svga->hwcursor.cur_xsize = 64; + + video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_mach64_pci); + + mach64->pci = 1; + mach64->vlb = 0; + mach64->pci_id = 0x5654; + mach64->config_chip_id = 0x08005654; + mach64->dac_cntl = 1 << 16; /*Internal 24-bit DAC*/ + mach64->config_stat0 = 4; + mach64->use_block_decoded_io = 4; + + ati_eeprom_load(&mach64->eeprom, "mach64vt1.nvr", 1); + + rom_init(&mach64->bios_rom, BIOS_ROMVT_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + + mem_mapping_disable(&mach64->bios_rom.mapping); + + svga->vblank_start = mach64_vblank_start; + + return mach64; +} +static void * mach64vt2_init(const device_t *info) { mach64_t *mach64 = mach64_common_init(info); @@ -5047,6 +5080,11 @@ mach64ct_available(void) return rom_present(BIOS_ROMCT_PATH); } int +mach64vt_available(void) +{ + return rom_present(BIOS_ROMVT_PATH); +} +int mach64vt2_available(void) { return rom_present(BIOS_ROMVT2_PATH); @@ -5184,6 +5222,20 @@ const device_t mach64ct_device = { .config = NULL }; +const device_t mach64vt_device = { + .name = "ATI Mach64VT", + .internal_name = "mach64vt", + .flags = DEVICE_PCI, + .local = MACH64_VT, + .init = mach64vt_init, + .close = mach64_close, + .reset = NULL, + .available = mach64vt_available, + .speed_changed = mach64_speed_changed, + .force_redraw = mach64_force_redraw, + .config = NULL +}; + const device_t mach64vt2_device = { .name = "ATI Mach64VT2", .internal_name = "mach64vt2", diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 717fbc8ef..35f42c2ee 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -184,8 +184,9 @@ video_cards[] = { /* PCI */ { .device = &mach32_pci_device, .flags = VIDEO_FLAG_TYPE_8514 }, { .device = &mach64gx_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &mach64vt2_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &mach64ct_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &mach64vt_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &mach64vt2_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &bochs_svga_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &chips_69000_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5430_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, From 7d4c1d831de2178997cc30bcc1576eb9d82d0473 Mon Sep 17 00:00:00 2001 From: mw308 <34479591+mw308@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:39:28 +0100 Subject: [PATCH 076/233] Add some CD drives (#6299) * Add some CD drives * Renamed internal name for the GCD-R560B --- src/include/86box/cdrom.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/include/86box/cdrom.h b/src/include/86box/cdrom.h index 3fcf278af..5ddb2400f 100644 --- a/src/include/86box/cdrom.h +++ b/src/include/86box/cdrom.h @@ -138,8 +138,9 @@ static const struct cdrom_drive_types_s { { "AZT", "CDA46802I", "1.15", "azt_cda", BUS_TYPE_IDE, 0, 4, 36, 0, 0, { 3, 0, 0, 0 } }, { "BTC", "CD-ROM BCD36XH", "U1.0", "btc_36xh", BUS_TYPE_IDE, 0, 36, 36, 0, 0, { 4, 2, 2, -1 } }, { "GOLDSTAR", "CRD-8160B", "3.14", "goldstar", BUS_TYPE_IDE, 0, 16, 36, 0, 0, { 4, 2, 2, -1 } }, + { "GOLDSTAR", "CRD-8400B", "1.03", "goldstar_8400b", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, -1 } }, /* TODO: Find an IDENTIFY and/or INQUIRY dump. */ - { "GOLDSTAR", "GCD-R560B", "1.00", "goldstar", BUS_TYPE_IDE, 0, 6, 36, 0, 0, { 4, 2, 2, -1 } }, + { "GOLDSTAR", "GCD-R560B", "1.00", "goldstar_r560b", BUS_TYPE_IDE, 0, 6, 36, 0, 0, { 4, 2, 2, -1 } }, { "HITACHI", "CDR-8130", "0020", "hitachi_r8130", BUS_TYPE_IDE, 0, 16, 36, 0, 0, { 4, 2, 2, -1 } }, { "HITACHI", "GD-7500", "A1 ", "hitachi_7500", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, 2 } }, /* DVD. */ { "HL-DT-ST", "CD-ROM GCR-8526B", "1.01", "hldtst_8526b", BUS_TYPE_IDE, 0, 52, 36, 0, 0, { 4, 2, 2, 2 } }, @@ -184,6 +185,7 @@ static const struct cdrom_drive_types_s { { "TOSHIBA", "CD-ROM XM-6202B", "1512", "toshiba_6202b", BUS_TYPE_IDE, 0, 32, 96, 0, 0, { 4, 2, 2, -1 } }, { "TOSHIBA", "CD-ROM XM-6402B", "1008", "toshiba_6402b", BUS_TYPE_IDE, 0, 32, 96, 0, 0, { 4, 2, 2, 2 } }, { "TOSHIBA", "CD-ROM XM-6702B", "1007", "toshiba_6720b", BUS_TYPE_IDE, 0, 48, 96, 0, 0, { 4, 2, 2, 2 } }, + { "TOSHIBA", "DVD-ROM SD-M1202", "1020", "toshiba_m1202", BUS_TYPE_IDE, 0, 32, 96, 0, 1, { 4, 2, 2, 2 } }, { "TOSHIBA", "DVD-ROM SD-M1802", "1051", "toshiba_m1802", BUS_TYPE_IDE, 0, 48, 96, 0, 1, { 4, 2, 2, 2 } }, { "CHINON", "CD-ROM CDS-431", "H42 ", "chinon_431", BUS_TYPE_SCSI, 1, 1, 36, 1, 0, { -1, -1, -1, -1 } }, { "CHINON", "CD-ROM CDX-435", "M62 ", "chinon_435", BUS_TYPE_SCSI, 1, 2, 36, 1, 0, { -1, -1, -1, -1 } }, @@ -228,6 +230,7 @@ static const struct cdrom_drive_types_s { { "TOSHIBA", "CD-ROM XM-5701TA", "3136", "toshiba_5701a", BUS_TYPE_SCSI, 2, 12, 96, 0, 0, { -1, -1, -1, -1 } }, /* Tray. */ { "TOSHIBA", "DVD-ROM SD-M1401", "1008", "toshiba_m1401", BUS_TYPE_SCSI, 2, 40, 96, 0, 1, { -1, -1, -1, -1 } }, /* Tray. */ { "MATSHITA", "CR-562", "0.75", "cr562", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, + { "MATSHITA", "CR-562", "0.76", "cr562_076", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, { "MATSHITA", "CR-562", "0.80", "cr562_080", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, { "MATSHITA", "CR-563", "0.75", "cr563", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, { "MATSHITA", "CR-563", "0.80", "cr563_080", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, From 151e0bdd165bbaf2aea1f2e20c0fbe0fb6a960e2 Mon Sep 17 00:00:00 2001 From: bozoscum Date: Wed, 8 Oct 2025 21:39:40 +0800 Subject: [PATCH 077/233] more Multitech PC-500/500+ modifies (#6298) * add DTK PIM-TB10-Z BIOS 2.39 * change Multitech PC-500/PC500+ KBC type to XTClone * 1. add ISA RTC century field to support Multitech onboard RTC 2. hard-coded I/O port and IRQ for Multitech onboard RTC until find a prorper way to obtain correct value from machine config --- src/device/isartc.c | 84 +++++++++++++++---------------------- src/include/86box/machine.h | 3 ++ src/machine/m_xt.c | 68 +++++++++++++++++++++++++++--- src/machine/machine_table.c | 2 +- 4 files changed, 100 insertions(+), 57 deletions(-) diff --git a/src/device/isartc.c b/src/device/isartc.c index bdf057b4b..3ba092eb9 100644 --- a/src/device/isartc.c +++ b/src/device/isartc.c @@ -113,7 +113,8 @@ typedef struct rtcdev_t { void (*f_wr)(uint16_t, uint8_t, void *); uint8_t (*f_rd)(uint16_t, void *); int8_t year; /* register for YEAR value */ - char pad[3]; + int8_t century; /* register for CENTURY value */ + char pad[2]; nvr_t nvr; /* RTC/NVR */ } rtcdev_t; @@ -319,9 +320,14 @@ mm67_time_get(nvr_t *nvr, struct tm *tm) tm->tm_year = regs[dev->year]; if (dev->flags & FLAG_YEAR80) tm->tm_year += 80; -#ifdef MM67_CENTURY - tm->tm_year += (regs[MM67_CENTURY] * 100) - 1900; -#endif + + if ((dev->century != -1) && !(dev->flags & FLAG_YEAR80)) { + if (dev->flags & FLAG_YEARBCD) + tm->tm_year += (RTC_DCB(regs[dev->century]) * 100) - 1900; + else + tm->tm_year += (regs[dev->century] * 100) - 1900; + } + #if ISARTC_DEBUG > 1 isartc_log("ISARTC: get_time: year=%i [%02x]\n", tm->tm_year, regs[dev->year]); #endif @@ -351,9 +357,14 @@ mm67_time_set(nvr_t *nvr, struct tm *tm) regs[dev->year] = RTC_BCD(year % 100); else regs[dev->year] = year % 100; -#ifdef MM67_CENTURY - regs[MM67_CENTURY] = (year + 1900) / 100; -#endif + + if ((dev->year != -1) && !(dev->flags & FLAG_YEAR80)) { + if (dev->flags & FLAG_YEARBCD) + regs[dev->century] = RTC_BCD((year + 1900) / 100); + else + regs[dev->century] = (year + 1900) / 100; + } + #if ISARTC_DEBUG > 1 isartc_log("ISARTC: set_time: [%02x] year=%i (%i)\n", regs[dev->year], year, tm->tm_year); #endif @@ -474,9 +485,13 @@ mm67_write(uint16_t port, uint8_t val, void *priv) dev->nvr.regs[dev->year] = RTC_BCD(val); else dev->nvr.regs[dev->year] = val; -#ifdef MM67_CENTURY - dev->nvr.regs[MM67_CENTURY] = 19; -#endif + + if ((dev->century != -1) && !(dev->flags & FLAG_YEAR80)) { + if (dev->flags & FLAG_YEARBCD) + dev->nvr.regs[dev->century] = RTC_BCD(19); + else + dev->nvr.regs[dev->century] = (1900 + val) / 100; + } } } break; @@ -597,6 +612,7 @@ isartc_init(const device_t *info) dev->board = info->local; dev->irq = -1; dev->year = -1; + dev->century = -1; dev->nvr.data = dev; dev->nvr.size = 16; @@ -664,15 +680,18 @@ isartc_init(const device_t *info) case ISARTC_RTC58167: /* Multitech PC-500/PC-500+ onboard RTC */ dev->flags |= FLAG_YEARBCD; - dev->base_addr = device_get_config_hex16("base"); + //dev->base_addr = machine_get_config_int("rtc_port"); + dev->base_addr = 0x2c0; dev->base_addrsz = 8; - dev->irq = device_get_config_int("irq"); + //dev->irq = machine_get_config_int("rtc_irq"); + dev->irq = -1; dev->f_rd = rtc58167_read; dev->f_wr = rtc58167_write; dev->nvr.reset = mm67_reset; dev->nvr.start = mm67_start; dev->nvr.tick = mm67_tick; - dev->year = MM67_AL_HUNTEN; /* year, NON STANDARD */ + dev->year = MM67_AL_HUNTEN; /* year, NON STANDARD */ + dev->century = MM67_AL_SEC; /* century, NON STANDARD */ break; default: @@ -1010,42 +1029,6 @@ const device_t vendex_xt_rtc_onboard_device = { .config = NULL }; -static const device_config_t rtc58167_config[] = { - // clang-format off - { - .name = "irq", - .description = "IRQ2", - .type = CONFIG_SELECTION, - .default_string = NULL, - .default_int = -1, - .file_filter = NULL, - .spinner = { 0 }, - .selection = { - { .description = "Disabled", .value = -1 }, - { .description = "Enabled", .value = 2 }, - { .description = "" } - }, - .bios = { { 0 } } - }, - { - .name = "base", - .description = "Address", - .type = CONFIG_HEX16, - .default_string = NULL, - .default_int = 0x2C0, - .file_filter = NULL, - .spinner = { 0 }, - .selection = { - { .description = "2C0H", .value = 0x2c0 }, - { .description = "300H", .value = 0x300 }, - { .description = "" } - }, - .bios = { { 0 } } - }, - { .name = "", .description = "", .type = CONFIG_END} - // clang-format on -}; - const device_t rtc58167_device = { .name = "RTC 58167 IC (Multitech)", .internal_name = "rtc58167_xt_rtc", @@ -1057,7 +1040,7 @@ const device_t rtc58167_device = { .available = NULL, .speed_changed = NULL, .force_redraw = NULL, - .config = rtc58167_config + .config = NULL }; static const struct { @@ -1070,7 +1053,6 @@ static const struct { { &p5pak_device }, { &a6pak_device }, { &mplus2_device }, - //{ &rtc58167_device }, /* Multitech onboard ISA RTC */ { &mm58167_device }, { NULL } // clang-format on diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 98d9fbd45..2cb95d017 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1347,6 +1347,9 @@ extern int machine_xt_ataripc3_init(const machine_t *); extern int machine_xt_bw230_init(const machine_t *); extern int machine_xt_mpc1600_init(const machine_t *); extern int machine_xt_compaq_portable_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t dtk_device; +#endif extern int machine_xt_dtk_init(const machine_t *); extern int machine_xt_pcspirit_init(const machine_t *); extern int machine_genxt_init(const machine_t *); diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 2d87ad8a7..56ba5f843 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -896,13 +896,71 @@ machine_xt_compaq_portable_init(const machine_t *model) return ret; } +static const device_config_t dtk_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "dtk_242", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "2.39", + .internal_name = "dtk_239", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 8192, + .files = { "roms/machines/dtk/PIM-TB10-Z.BIN", ""} + }, + { + .name = "2.42", + .internal_name = "dtk_242", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 8192, + .files = { "roms/machines/dtk/dtk_erso_2.42_2764.bin", ""} + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t dtk_device = { + .name = "DTK PIM-TB10-Z", + .internal_name = "dtk_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = dtk_config +}; + int machine_xt_dtk_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/dtk/dtk_erso_2.42_2764.bin", - 0x000fe000, 8192, 0); + /* No ROMs available. */ + if (!device_available(model->device)) + return ret; + + device_context(model->device); + fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000fe000, 8192, 0); + device_context_restore(); if (bios_only || !ret) return ret; @@ -1252,7 +1310,7 @@ machine_xt_pc500_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&kbc_pc_device); + device_add(&kbc_xtclone_device); machine_xt_common_init(model, 0); @@ -1371,7 +1429,7 @@ machine_xt_pc500plus_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&kbc_pc_device); + device_add(&kbc_xtclone_device); machine_xt_common_init(model, 0); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index f1af74d90..05390668e 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -701,7 +701,7 @@ const machine_t machines[] = { .kbc_p1 = 0xff, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &dtk_device, .kbd_device = &keyboard_pc_xt_device, .fdc_device = NULL, .sio_device = NULL, From 5b7ac6fa2116f5e2c5fe1bf79e980bd88e27a035 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Oct 2025 20:10:42 +0600 Subject: [PATCH 078/233] Add Intel Advanced/MA (Monaco) (#6297) --- src/include/86box/machine.h | 1 + src/include/86box/video.h | 1 + src/machine/m_at_socket7_3v.c | 37 ++++++++++++++++++++++++++++ src/machine/machine_table.c | 46 +++++++++++++++++++++++++++++++++++ src/video/vid_ati_mach64.c | 15 ++++++++++++ 5 files changed, 100 insertions(+) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 2cb95d017..0c22f94e4 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -960,6 +960,7 @@ extern const device_t thor_device; extern int machine_at_thor_init(const machine_t *); extern uint32_t machine_at_endeavor_gpio_handler(uint8_t write, uint32_t val); extern int machine_at_endeavor_init(const machine_t *); +extern int machine_at_monaco_init(const machine_t *); extern int machine_at_ms5119_init(const machine_t *); extern int machine_at_pb640_init(const machine_t *); extern int machine_at_mb500n_init(const machine_t *); diff --git a/src/include/86box/video.h b/src/include/86box/video.h index a142a63fc..a9bffa0c1 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -333,6 +333,7 @@ extern const device_t mach64gx_isa_device; extern const device_t mach64gx_vlb_device; extern const device_t mach64gx_pci_device; extern const device_t mach64ct_device; +extern const device_t mach64ct_device_onboard; extern const device_t mach64vt_device; extern const device_t mach64vt2_device; diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 76d09dbe0..8a72c667f 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -465,6 +465,43 @@ machine_at_endeavor_init(const machine_t *model) return ret; } + +int +machine_at_monaco_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear_combined("roms/machines/monaco/1007cl0_.bio", + "roms/machines/monaco/1007cl0_.bi1", + 0x20000, 128); + + if (bios_only || !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, 0, 0, 0, 0); + 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); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + + if (sound_card_current[0] == SOUND_INTERNAL) + machine_snd = device_add(machine_get_snd_device(machine)); + + device_add(&i430fx_device); + device_add(&piix_device); + device_add_params(&pc87306_device, (void *) PCX730X_AMI); + device_add(&intel_flash_bxt_ami_device); + + return ret; +} int machine_at_ms5119_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 05390668e..45fdb6bc3 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13380,6 +13380,52 @@ const machine_t machines[] = { .snd_device = &sb_vibra16s_onboard_device, .net_device = NULL }, + /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the + PC87306 Super I/O chip, command 0xA1 returns '5'. + Command 0xA0 copyright string: (C)1994 AMI . */ + { + .name = "[i430FX] Intel Advanced/MA (Monaco)", + .internal_name = "monaco", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_monaco_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3380, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, + .default_jumpered_ecp_dma = 3, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &mach64ct_device_onboard, + .snd_device = NULL, + .net_device = NULL + }, /* This has an AMIKey-2, which is type 'H'. */ { .name = "[i430FX] MSI MS-5119", diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index 4a819b7d1..d003687f4 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -4916,6 +4916,7 @@ mach64_common_init(const device_t *info) mach64->wake_fifo_thread = thread_create_event(); mach64->fifo_not_full_event = thread_create_event(); mach64->fifo_thread = thread_create(fifo_thread, mach64); + mach64->on_board = !!(info->local & (1 << 19)); mach64->i2c = i2c_gpio_init("ddc_ati_mach64"); mach64->ddc = ddc_init(i2c_gpio_get_bus(mach64->i2c)); @@ -5222,6 +5223,20 @@ const device_t mach64ct_device = { .config = NULL }; +const device_t mach64ct_device_onboard = { + .name = "ATI Mach64CT (On-Board)", + .internal_name = "mach64ct", + .flags = DEVICE_PCI, + .local = MACH64_CT | (1 << 19), + .init = mach64ct_init, + .close = mach64_close, + .reset = NULL, + .available = NULL, + .speed_changed = mach64_speed_changed, + .force_redraw = mach64_force_redraw, + .config = NULL +}; + const device_t mach64vt_device = { .name = "ATI Mach64VT", .internal_name = "mach64vt", From 51a814c959daf054d21e29c1250a53cec5f49959 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Oct 2025 21:19:12 +0600 Subject: [PATCH 079/233] Correct the internal name of on-board ATI Mach64CT device (#6301) --- src/video/vid_ati_mach64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index d003687f4..f809a6c0e 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -5225,7 +5225,7 @@ const device_t mach64ct_device = { const device_t mach64ct_device_onboard = { .name = "ATI Mach64CT (On-Board)", - .internal_name = "mach64ct", + .internal_name = "mach64ct_onboard", .flags = DEVICE_PCI, .local = MACH64_CT | (1 << 19), .init = mach64ct_init, From 40ed3118950fd41b5032da067f2e31fdfa266995 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Oct 2025 21:19:23 +0600 Subject: [PATCH 080/233] Resize renderer view back on Windows on language selection changes (#6302) --- src/qt/qt_mainwindow.cpp | 7 +++++++ src/qt/qt_progsettings.cpp | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 80bbd1d0a..45ec2e95b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -2306,7 +2306,14 @@ MainWindow::changeEvent(QEvent *event) { #ifdef Q_OS_WINDOWS if (event->type() == QEvent::LanguageChange) { + auto size = this->centralWidget()->size(); QApplication::setFont(QFont(ProgSettings::getFontName(lang_id), 9)); + QApplication::processEvents(); + main_window->centralWidget()->setFixedSize(size); + QApplication::processEvents(); + if (vid_resize == 1) { + main_window->centralWidget()->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + } } #endif QWidget::changeEvent(event); diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index e979a22b6..ac1d6478f 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -20,6 +20,7 @@ #include "ui_qt_mainwindow.h" #include "qt_machinestatus.hpp" +#include #include #include #include @@ -36,6 +37,7 @@ extern "C" { #include <86box/plat.h> #include <86box/mem.h> #include <86box/rom.h> +#include <86box/video.h> } extern MainWindow *main_window; @@ -107,6 +109,7 @@ ProgSettings::ProgSettings(QWidget *parent) void ProgSettings::accept() { + auto size = main_window->centralWidget()->size(); lang_id = ui->comboBoxLanguage->currentData().toInt(); open_dir_usr_path = ui->openDirUsrPath->isChecked() ? 1 : 0; confirm_exit = ui->checkBoxConfirmExit->isChecked() ? 1 : 0; @@ -137,6 +140,13 @@ ProgSettings::accept() connect(main_window, &MainWindow::statusBarMessage, main_window->status.get(), &MachineStatus::message, Qt::QueuedConnection); mouse_sensitivity = mouseSensitivity; config_save_global(); + QTimer::singleShot(200, [size] () { + main_window->centralWidget()->setFixedSize(size); + QApplication::processEvents(); + if (vid_resize == 1) { + main_window->centralWidget()->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + } + }); QDialog::accept(); } From 9077501f7ebab59500c005153588536781f0b66e Mon Sep 17 00:00:00 2001 From: mw308 <34479591+mw308@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:12:31 +0100 Subject: [PATCH 081/233] Add Abit AH4T (#6304) * Add Abit AH4T * Remove DX4 support from AH4 --- src/include/86box/machine.h | 1 + src/machine/m_at_socket3.c | 18 ++++++++++++++ src/machine/machine_table.c | 48 +++++++++++++++++++++++++++++++++++-- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 0c22f94e4..4e68020d4 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -760,6 +760,7 @@ extern int machine_at_acerv10_init(const machine_t *); /* SiS 471 */ extern int machine_at_win471_init(const machine_t *); +extern int machine_at_win471t_init(const machine_t *); extern int machine_at_vi15g_init(const machine_t *); extern int machine_at_vli486sv2g_init(const machine_t *); extern int machine_at_dvent4xx_init(const machine_t *); diff --git a/src/machine/m_at_socket3.c b/src/machine/m_at_socket3.c index b98d27627..008394505 100644 --- a/src/machine/m_at_socket3.c +++ b/src/machine/m_at_socket3.c @@ -314,6 +314,24 @@ machine_at_win471_init(const machine_t *model) return ret; } +int +machine_at_win471t_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/win471t/486-SiS_AB6680759.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_sis_85c471_common_init(model); + + device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params); + + return ret; +} + int machine_at_vi15g_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 45fdb6bc3..1ffae2fda 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -8778,13 +8778,13 @@ const machine_t machines[] = { .gpio_acpi_handler = NULL, .cpu = { .package = CPU_PKG_SOCKET3, - .block = CPU_BLOCK_NONE, + .block = CPU_BLOCK(CPU_Cx5x86), .min_bus = 0, .max_bus = 0, .min_voltage = 0, .max_voltage = 0, .min_multi = 0, - .max_multi = 0 + .max_multi = 2 }, .bus_flags = MACHINE_VLB, .flags = MACHINE_APM, @@ -8809,6 +8809,50 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* JETKey 5.0 KBC */ + { + .name = "[SiS 471] ABIT AB-AH4T", + .internal_name = "win471t", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_win471t_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET3, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_VLB, + .flags = MACHINE_APM | MACHINE_ACPI, + .ram = { + .min = 1024, + .max = 131072, + .step = 1024 + }, + .nvrmask = 127, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_AMI | KBC_FLAG_IS_CLONE | KBC_FLAG_IS_ASIC | 0x00004800, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has AMIKey-2 'H' keyboard BIOS. */ { .name = "[SiS 471] AOpen Vi15G", From 7b8c431b2fef9538a3466a4c0c5474f5733bf5d6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Oct 2025 23:14:16 +0600 Subject: [PATCH 082/233] Correct cases for Intel Advanced/MA ROMs (#6303) --- src/machine/m_at_socket7_3v.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 8a72c667f..f1877ab2d 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -471,8 +471,8 @@ machine_at_monaco_init(const machine_t *model) { int ret; - ret = bios_load_linear_combined("roms/machines/monaco/1007cl0_.bio", - "roms/machines/monaco/1007cl0_.bi1", + ret = bios_load_linear_combined("roms/machines/monaco/1007CL0_.BIO", + "roms/machines/monaco/1007CL0_.BI1", 0x20000, 128); if (bios_only || !ret) From 775b30f877bca15bb0f810466cbd67adb4c56b76 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 9 Oct 2025 15:20:48 +0600 Subject: [PATCH 083/233] Use correct BIOSes for Intel Advanced/MA (Monaco) (#6306) Existing one is renamed to Intel Advanced/AS (Atlantis) --- src/include/86box/machine.h | 3 + src/machine/m_at_socket7_3v.c | 118 ++++++++++++++++++++++++++++++++-- src/machine/machine_table.c | 48 +++++++++++++- 3 files changed, 164 insertions(+), 5 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 4e68020d4..8a66b879a 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -959,8 +959,11 @@ extern int machine_at_vectra54_init(const machine_t *); extern const device_t thor_device; #endif extern int machine_at_thor_init(const machine_t *); +extern uint32_t machine_at_monaco_gpio_handler(uint8_t write, uint32_t val); +extern int machine_at_monaco_init(const machine_t *); extern uint32_t machine_at_endeavor_gpio_handler(uint8_t write, uint32_t val); extern int machine_at_endeavor_init(const machine_t *); +extern int machine_at_atlantis_init(const machine_t *); extern int machine_at_monaco_init(const machine_t *); extern int machine_at_ms5119_init(const machine_t *); extern int machine_at_pb640_init(const machine_t *); diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index f1877ab2d..0804ffba0 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -427,6 +427,80 @@ machine_at_endeavor_gpio_handler(uint8_t write, uint32_t val) return ret; } +static void +machine_at_monaco_gpio_init(void) +{ + uint32_t gpio = 0xffffe0cf; + uint16_t addr; + + /* Return to this after CS4232 PnP is working. */ + /* Register 0x0078 (Undocumented): */ + /* Bit 5,4: Vibra 16S base address: 0 = 220h, 1 = 260h, 2 = 240h, 3 = 280h. */ + /*device_context(machine_get_snd_device(machine)); + addr = device_get_config_hex16("base"); + switch (addr) { + case 0x0220: + gpio |= 0xffff00cf; + break; + case 0x0240: + gpio |= 0xffff00ef; + break; + case 0x0260: + gpio |= 0xffff00df; + break; + case 0x0280: + gpio |= 0xffff00ff; + break; + } + device_context_restore();*/ + + /* Register 0x0079: */ + /* Bit 7: 0 = Clear password, 1 = Keep password. */ + /* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */ + /* Bit 5: 0 = CMOS Setup disabled, 1 = CMOS Setup enabled. */ + /* Bit 4: External CPU clock (Switch 8). */ + /* Bit 3: External CPU clock (Switch 7). */ + /* 50 MHz: Switch 7 = Off, Switch 8 = Off. */ + /* 60 MHz: Switch 7 = On, Switch 8 = Off. */ + /* 66 MHz: Switch 7 = Off, Switch 8 = On. */ + /* Bit 2: 0 = On-board audio absent, 1 = On-board audio present. */ + /* Bit 1: 0 = Soft-off capable power supply present, 1 = Soft-off capable power supply absent. */ + /* Bit 0: 0 = 2x multiplier, 1 = 1.5x multiplier (Switch 6). */ + /* NOTE: A bit is read as 1 if switch is off, and as 0 if switch is on. */ + if (cpu_busspeed <= 50000000) + gpio |= 0xffff0000; + else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000)) + gpio |= 0xffff0800; + else if (cpu_busspeed > 60000000) + gpio |= 0xffff1000; + + if (sound_card_current[0] == SOUND_INTERNAL) + gpio |= 0xffff0400; + + if (cpu_dmulti <= 1.5) + gpio |= 0xffff0100; + else + gpio |= 0xffff0000; + + machine_set_gpio_default(gpio); +} + +uint32_t +machine_at_monaco_gpio_handler(uint8_t write, uint32_t val) +{ + uint32_t ret = machine_get_gpio_default(); + + if (write) { + ret &= ((val & 0xffffffcf) | 0xffff0000); + ret |= (val & 0x00000030); + + machine_set_gpio(ret); + } else + ret = machine_get_gpio(); + + return ret; +} + int machine_at_endeavor_init(const machine_t *model) { @@ -465,14 +539,13 @@ machine_at_endeavor_init(const machine_t *model) return ret; } - int -machine_at_monaco_init(const machine_t *model) +machine_at_atlantis_init(const machine_t *model) { int ret; - ret = bios_load_linear_combined("roms/machines/monaco/1007CL0_.BIO", - "roms/machines/monaco/1007CL0_.BI1", + ret = bios_load_linear_combined("roms/machines/atlantis/1007CL0_.BIO", + "roms/machines/atlantis/1007CL0_.BI1", 0x20000, 128); if (bios_only || !ret) @@ -502,6 +575,43 @@ machine_at_monaco_init(const machine_t *model) return ret; } + +int +machine_at_monaco_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear_combined("roms/machines/monaco/1007BU0_.BIO", + "roms/machines/monaco/1007BU0_.BI1", + 0x20000, 128); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); + machine_at_monaco_gpio_init(); + + 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(0x0B, PCI_CARD_VIDEO, 1, 2, 3, 4); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 3, 4); + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + + if (sound_card_current[0] == SOUND_INTERNAL) + machine_snd = device_add(machine_get_snd_device(machine)); + + device_add(&i430fx_device); + device_add(&piix_device); + device_add_params(&pc87306_device, (void *) PCX730X_AMI); + device_add(&intel_flash_bxt_ami_device); + + return ret; +} + int machine_at_ms5119_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 1ffae2fda..f89ba6925 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13424,6 +13424,52 @@ const machine_t machines[] = { .snd_device = &sb_vibra16s_onboard_device, .net_device = NULL }, + /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the + PC87306 Super I/O chip, command 0xA1 returns '5'. + Command 0xA0 copyright string: (C)1994 AMI . */ + { + .name = "[i430FX] Intel Advanced/AS (Atlantis)", + .internal_name = "atlantis", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_atlantis_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3380, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, + .default_jumpered_ecp_dma = 3, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &mach64ct_device_onboard, + .snd_device = NULL, + .net_device = NULL + }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ @@ -13434,7 +13480,7 @@ const machine_t machines[] = { .chipset = MACHINE_CHIPSET_INTEL_430FX, .init = machine_at_monaco_init, .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, + .gpio_handler = machine_at_monaco_gpio_handler, .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, .cpu = { From ef23521a77a9e0ce75068cefc55ce98d4e70f0eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 00:23:19 +0200 Subject: [PATCH 084/233] Update qt_openglrenderer.cpp: Port the version workaround from PCem. --- src/qt/qt_openglrenderer.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index d572bd563..780c9a329 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -219,7 +219,14 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch snprintf(version, 49, "%s\n", versionRegex.match(progSource).captured(1).toLatin1().data()); progSource.remove(versionRegex); } else { - snprintf(version, 49, "%s\n", this->glslVersion.toLatin1().data()); + int ver = this->glslVersion.toLatin1().data()[0] * 100 + this->glslVersion.toLatin1().data()[1] * 10; + if (ver == 300) + ver = 130; + else if (ver == 310) + ver = 140; + else if (ver == 320) + ver = 150; + snprintf(version, 49, "#version %d\n", ver); } /* Remove parameter lines. */ From 9da9d8e9750c2e750c334482833a5a3b336d3fc3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 10 Oct 2025 04:24:11 +0600 Subject: [PATCH 085/233] Attempt to fix black screen on NVIDIA (#6307) --- src/qt/qt_rendererstack.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index bcd850020..2ec4bc98e 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -445,10 +445,11 @@ RendererStack::createRenderer(Renderer renderer) current->setFocusPolicy(Qt::NoFocus); current->setFocusProxy(this); current->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - current->setStyleSheet("background-color: black"); current->setAttribute(Qt::WA_AlwaysStackOnTop); + current->setAttribute(Qt::WA_OpaquePaintEvent): + current->setAttribute(Qt::WA_DontCreateNativeAncestors); - this->setStyleSheet("background-color: black"); + this->setAttribute(Qt::WA_TranslucentBackground); boxLayout->addWidget(current.get()); rendererWindow->r_monitor_index = m_monitor_index; From c56254178ce2b491670d59b621a94b3fabc95142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 00:33:31 +0200 Subject: [PATCH 086/233] Update qt_rendererstack.cpp: Fix a colon that should have been a semicolon. --- src/qt/qt_rendererstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 2ec4bc98e..753b1a21e 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -446,7 +446,7 @@ RendererStack::createRenderer(Renderer renderer) current->setFocusProxy(this); current->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); current->setAttribute(Qt::WA_AlwaysStackOnTop); - current->setAttribute(Qt::WA_OpaquePaintEvent): + current->setAttribute(Qt::WA_OpaquePaintEvent); current->setAttribute(Qt::WA_DontCreateNativeAncestors); this->setAttribute(Qt::WA_TranslucentBackground); From 1a90e667117f5e528ee2d72d4f071bc9229b6508 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 10 Oct 2025 04:47:42 +0600 Subject: [PATCH 087/233] Remove some flags (#6308) --- src/qt/qt_rendererstack.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 753b1a21e..0be4596a9 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -446,10 +446,7 @@ RendererStack::createRenderer(Renderer renderer) current->setFocusProxy(this); current->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); current->setAttribute(Qt::WA_AlwaysStackOnTop); - current->setAttribute(Qt::WA_OpaquePaintEvent); - current->setAttribute(Qt::WA_DontCreateNativeAncestors); - this->setAttribute(Qt::WA_TranslucentBackground); boxLayout->addWidget(current.get()); rendererWindow->r_monitor_index = m_monitor_index; From 1fe3b18fe3cd12df1d7b64647288681db8ea32df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 00:51:33 +0200 Subject: [PATCH 088/233] Update qt_openglrenderer.cpp: Fix the previous fix. --- src/qt/qt_openglrenderer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index 780c9a329..b88da87b0 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -219,7 +219,10 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch snprintf(version, 49, "%s\n", versionRegex.match(progSource).captured(1).toLatin1().data()); progSource.remove(versionRegex); } else { - int ver = this->glslVersion.toLatin1().data()[0] * 100 + this->glslVersion.toLatin1().data()[1] * 10; + version_loc = ((char *) this->glslVersion.toLatin1().data()) + 9; + char glsl_ver[4] = { 0 }; + memcpy(glsl_ver, version_loc, 3); + int ver = atoi((char *) glsl_ver); if (ver == 300) ver = 130; else if (ver == 310) From 31310f8a909e7a8b8d5618171233c1bdb8dad942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 02:50:22 +0200 Subject: [PATCH 089/233] Update machine_table.c: The UMC Compaq is 7100 only, not 7200. --- src/machine/machine_table.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index f89ba6925..8ca38771a 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -10547,10 +10547,10 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Compaq Presario 7100 / 7200 Series, using MiTAC/Trigon PL4600C (486). */ + /* Compaq Presario 7100 Series, using MiTAC/Trigon PL4600C (486). */ /* Has a VIA VT82C42N KBC. */ { - .name = "[UMC 8881] Compaq Presario 7100/7200 Series 486", + .name = "[UMC 8881] Compaq Presario 7100 Series 486", .internal_name = "pl4600c", .type = MACHINE_TYPE_486_S3_PCI, .chipset = MACHINE_CHIPSET_UMC_UM8881, From c0af46af3571c26eabde8bcdbe0f5aee64e2d65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 02:58:02 +0200 Subject: [PATCH 090/233] Update qt_openglrenderer.cpp: Make the renderer RGB and not RGBA. --- src/qt/qt_openglrenderer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index b88da87b0..5190df058 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -906,8 +906,8 @@ OpenGLRenderer::initialize() scene_texture.data = NULL; scene_texture.width = 2048; scene_texture.height = 2048; - scene_texture.internal_format = GL_RGBA8; - scene_texture.format = GL_BGRA; + scene_texture.internal_format = GL_RGB8; + scene_texture.format = GL_BGR; scene_texture.type = GL_UNSIGNED_INT_8_8_8_8_REV; scene_texture.wrap_mode = GL_CLAMP_TO_BORDER; scene_texture.min_filter = scene_texture.mag_filter = video_filter_method ? GL_LINEAR : GL_NEAREST; From 02b59c46264d0ee0c9ec7c6d6ea92a29dda18975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 03:13:00 +0200 Subject: [PATCH 091/233] Update qt_openglrenderer.cpp: Update more BGRA's to BGR. --- src/qt/qt_openglrenderer.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index 5190df058..a82b2b780 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -218,6 +218,12 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch if (version_loc) { snprintf(version, 49, "%s\n", versionRegex.match(progSource).captured(1).toLatin1().data()); progSource.remove(versionRegex); + + version_loc = ((char *) this->glslVersion.toLatin1().data()) + 9; + char glsl_ver[4] = { 0 }; + memcpy(glsl_ver, version_loc, 3); + int ver = atoi((char *) glsl_ver); + pclog("Fucce Ă¾iÄ‹: %d\n", ver); } else { version_loc = ((char *) this->glslVersion.toLatin1().data()) + 9; char glsl_ver[4] = { 0 }; @@ -483,8 +489,8 @@ OpenGLRenderer::create_fbo(struct shader_fbo *fbo) void OpenGLRenderer::setup_fbo(struct shader *shader, struct shader_fbo *fbo) { - fbo->texture.internal_format = GL_RGBA8; - fbo->texture.format = GL_RGBA; + fbo->texture.internal_format = GL_RGB8; + fbo->texture.format = GL_RGB; fbo->texture.min_filter = fbo->texture.mag_filter = shader->filter_linear ? GL_LINEAR : GL_NEAREST; fbo->texture.width = 2048; fbo->texture.height = 2048; @@ -499,10 +505,10 @@ OpenGLRenderer::setup_fbo(struct shader *shader, struct shader_fbo *fbo) fbo->texture.wrap_mode = GL_CLAMP_TO_BORDER; fbo->srgb = 0; if (shader->srgb_framebuffer) { - fbo->texture.internal_format = GL_SRGB8_ALPHA8; + fbo->texture.internal_format = GL_SRGB8; fbo->srgb = 1; } else if (shader->float_framebuffer) { - fbo->texture.internal_format = GL_RGBA32F; + fbo->texture.internal_format = GL_RGB32F; fbo->texture.type = GL_FLOAT; } @@ -596,7 +602,7 @@ load_texture(const char *f, struct shader_texture *tex) width = img.size().width(); height = img.size().height(); - img.convertTo(QImage::Format_RGBA8888); + img.convertTo(QImage::Format_RGB888); const GLubyte *rgb = img.constBits(); @@ -617,8 +623,8 @@ load_texture(const char *f, struct shader_texture *tex) tex->width = width; tex->height = height; - tex->internal_format = GL_RGBA8; - tex->format = GL_RGBA; + tex->internal_format = GL_RGB8; + tex->format = GL_RGB; tex->type = GL_UNSIGNED_BYTE; tex->data = data; return 1; @@ -1158,7 +1164,7 @@ OpenGLRenderer::onBlit(int buf_idx, int x, int y, int w, int h) if (source.width() != w || source.height() != h) { glw.glBindTexture(GL_TEXTURE_2D, scene_texture.id); - glw.glTexImage2D(GL_TEXTURE_2D, 0, (GLenum) QOpenGLTexture::RGBA8_UNorm, w, h, 0, (GLenum) QOpenGLTexture::BGRA, (GLenum) QOpenGLTexture::UInt32_RGBA8_Rev, NULL); + glw.glTexImage2D(GL_TEXTURE_2D, 0, (GLenum) QOpenGLTexture::RGB8_UNorm, w, h, 0, (GLenum) QOpenGLTexture::BGRA, (GLenum) QOpenGLTexture::UInt32_RGBA8_Rev, NULL); glw.glBindTexture(GL_TEXTURE_2D, 0); } From 566ac10b7bbce7511398c00dca537bc07c192aa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 03:32:27 +0200 Subject: [PATCH 092/233] Update video.h: Force the upper 8 bits of every 32-bit color to all 1's. --- src/include/86box/video.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index a9bffa0c1..840b95249 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -27,8 +27,8 @@ using atomic_int = std::atomic_int; # include #endif -#define makecol(r, g, b) ((b) | ((g) << 8) | ((r) << 16)) -#define makecol32(r, g, b) ((b) | ((g) << 8) | ((r) << 16)) +#define makecol(r, g, b) ((b) | ((g) << 8) | ((r) << 16) | 0xff000000) +#define makecol32(r, g, b) ((b) | ((g) << 8) | ((r) << 16) | 0xff000000) #define getcolr(color) (((color) >> 16) & 0xFF) #define getcolg(color) (((color) >> 8) & 0xFF) #define getcolb(color) ((color) & 0xFF) From 640bd2b5ca5acb585a8b532a0310ffc4183d70e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Fri, 10 Oct 2025 03:50:25 +0200 Subject: [PATCH 093/233] Update video.c: More alpha channel related fixes. --- src/video/video.c | 136 +++++++++++++++++++++++----------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/src/video/video.c b/src/video/video.c index 859794142..a999748b7 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -177,58 +177,58 @@ const uint32_t shade[5][256] = { {0}, // RGB Color (unused) {0}, // RGB Grayscale (unused) { // Amber monitor - 0x000000, 0x060000, 0x090000, 0x0d0000, 0x100000, 0x120100, 0x150100, 0x170100, 0x1a0100, 0x1c0100, 0x1e0200, 0x210200, 0x230200, 0x250300, 0x270300, 0x290300, - 0x2b0400, 0x2d0400, 0x2f0400, 0x300500, 0x320500, 0x340500, 0x360600, 0x380600, 0x390700, 0x3b0700, 0x3d0700, 0x3f0800, 0x400800, 0x420900, 0x440900, 0x450a00, - 0x470a00, 0x480b00, 0x4a0b00, 0x4c0c00, 0x4d0c00, 0x4f0d00, 0x500d00, 0x520e00, 0x530e00, 0x550f00, 0x560f00, 0x581000, 0x591000, 0x5b1100, 0x5c1200, 0x5e1200, - 0x5f1300, 0x601300, 0x621400, 0x631500, 0x651500, 0x661600, 0x671600, 0x691700, 0x6a1800, 0x6c1800, 0x6d1900, 0x6e1a00, 0x701a00, 0x711b00, 0x721c00, 0x741c00, - 0x751d00, 0x761e00, 0x781e00, 0x791f00, 0x7a2000, 0x7c2000, 0x7d2100, 0x7e2200, 0x7f2300, 0x812300, 0x822400, 0x832500, 0x842600, 0x862600, 0x872700, 0x882800, - 0x8a2900, 0x8b2900, 0x8c2a00, 0x8d2b00, 0x8e2c00, 0x902c00, 0x912d00, 0x922e00, 0x932f00, 0x953000, 0x963000, 0x973100, 0x983200, 0x993300, 0x9b3400, 0x9c3400, - 0x9d3500, 0x9e3600, 0x9f3700, 0xa03800, 0xa23900, 0xa33a00, 0xa43a00, 0xa53b00, 0xa63c00, 0xa73d00, 0xa93e00, 0xaa3f00, 0xab4000, 0xac4000, 0xad4100, 0xae4200, - 0xaf4300, 0xb14400, 0xb24500, 0xb34600, 0xb44700, 0xb54800, 0xb64900, 0xb74a00, 0xb94a00, 0xba4b00, 0xbb4c00, 0xbc4d00, 0xbd4e00, 0xbe4f00, 0xbf5000, 0xc05100, - 0xc15200, 0xc25300, 0xc45400, 0xc55500, 0xc65600, 0xc75700, 0xc85800, 0xc95900, 0xca5a00, 0xcb5b00, 0xcc5c00, 0xcd5d00, 0xce5e00, 0xcf5f00, 0xd06000, 0xd26101, - 0xd36201, 0xd46301, 0xd56401, 0xd66501, 0xd76601, 0xd86701, 0xd96801, 0xda6901, 0xdb6a01, 0xdc6b01, 0xdd6c01, 0xde6d01, 0xdf6e01, 0xe06f01, 0xe17001, 0xe27201, - 0xe37301, 0xe47401, 0xe57501, 0xe67602, 0xe77702, 0xe87802, 0xe97902, 0xeb7a02, 0xec7b02, 0xed7c02, 0xee7e02, 0xef7f02, 0xf08002, 0xf18103, 0xf28203, 0xf38303, - 0xf48403, 0xf58503, 0xf68703, 0xf78803, 0xf88903, 0xf98a04, 0xfa8b04, 0xfb8c04, 0xfc8d04, 0xfd8f04, 0xfe9005, 0xff9105, 0xff9205, 0xff9305, 0xff9405, 0xff9606, - 0xff9706, 0xff9806, 0xff9906, 0xff9a07, 0xff9b07, 0xff9d07, 0xff9e08, 0xff9f08, 0xffa008, 0xffa109, 0xffa309, 0xffa409, 0xffa50a, 0xffa60a, 0xffa80a, 0xffa90b, - 0xffaa0b, 0xffab0c, 0xffac0c, 0xffae0d, 0xffaf0d, 0xffb00e, 0xffb10e, 0xffb30f, 0xffb40f, 0xffb510, 0xffb610, 0xffb811, 0xffb912, 0xffba12, 0xffbb13, 0xffbd14, - 0xffbe14, 0xffbf15, 0xffc016, 0xffc217, 0xffc317, 0xffc418, 0xffc619, 0xffc71a, 0xffc81b, 0xffca1c, 0xffcb1d, 0xffcc1e, 0xffcd1f, 0xffcf20, 0xffd021, 0xffd122, - 0xffd323, 0xffd424, 0xffd526, 0xffd727, 0xffd828, 0xffd92a, 0xffdb2b, 0xffdc2c, 0xffdd2e, 0xffdf2f, 0xffe031, 0xffe133, 0xffe334, 0xffe436, 0xffe538, 0xffe739 + 0xff000000, 0xff060000, 0xff090000, 0xff0d0000, 0xff100000, 0xff120100, 0xff150100, 0xff170100, 0xff1a0100, 0xff1c0100, 0xff1e0200, 0xff210200, 0xff230200, 0xff250300, 0xff270300, 0xff290300, + 0xff2b0400, 0xff2d0400, 0xff2f0400, 0xff300500, 0xff320500, 0xff340500, 0xff360600, 0xff380600, 0xff390700, 0xff3b0700, 0xff3d0700, 0xff3f0800, 0xff400800, 0xff420900, 0xff440900, 0xff450a00, + 0xff470a00, 0xff480b00, 0xff4a0b00, 0xff4c0c00, 0xff4d0c00, 0xff4f0d00, 0xff500d00, 0xff520e00, 0xff530e00, 0xff550f00, 0xff560f00, 0xff581000, 0xff591000, 0xff5b1100, 0xff5c1200, 0xff5e1200, + 0xff5f1300, 0xff601300, 0xff621400, 0xff631500, 0xff651500, 0xff661600, 0xff671600, 0xff691700, 0xff6a1800, 0xff6c1800, 0xff6d1900, 0xff6e1a00, 0xff701a00, 0xff711b00, 0xff721c00, 0xff741c00, + 0xff751d00, 0xff761e00, 0xff781e00, 0xff791f00, 0xff7a2000, 0xff7c2000, 0xff7d2100, 0xff7e2200, 0xff7f2300, 0xff812300, 0xff822400, 0xff832500, 0xff842600, 0xff862600, 0xff872700, 0xff882800, + 0xff8a2900, 0xff8b2900, 0xff8c2a00, 0xff8d2b00, 0xff8e2c00, 0xff902c00, 0xff912d00, 0xff922e00, 0xff932f00, 0xff953000, 0xff963000, 0xff973100, 0xff983200, 0xff993300, 0xff9b3400, 0xff9c3400, + 0xff9d3500, 0xff9e3600, 0xff9f3700, 0xffa03800, 0xffa23900, 0xffa33a00, 0xffa43a00, 0xffa53b00, 0xffa63c00, 0xffa73d00, 0xffa93e00, 0xffaa3f00, 0xffab4000, 0xffac4000, 0xffad4100, 0xffae4200, + 0xffaf4300, 0xffb14400, 0xffb24500, 0xffb34600, 0xffb44700, 0xffb54800, 0xffb64900, 0xffb74a00, 0xffb94a00, 0xffba4b00, 0xffbb4c00, 0xffbc4d00, 0xffbd4e00, 0xffbe4f00, 0xffbf5000, 0xffc05100, + 0xffc15200, 0xffc25300, 0xffc45400, 0xffc55500, 0xffc65600, 0xffc75700, 0xffc85800, 0xffc95900, 0xffca5a00, 0xffcb5b00, 0xffcc5c00, 0xffcd5d00, 0xffce5e00, 0xffcf5f00, 0xffd06000, 0xffd26101, + 0xffd36201, 0xffd46301, 0xffd56401, 0xffd66501, 0xffd76601, 0xffd86701, 0xffd96801, 0xffda6901, 0xffdb6a01, 0xffdc6b01, 0xffdd6c01, 0xffde6d01, 0xffdf6e01, 0xffe06f01, 0xffe17001, 0xffe27201, + 0xffe37301, 0xffe47401, 0xffe57501, 0xffe67602, 0xffe77702, 0xffe87802, 0xffe97902, 0xffeb7a02, 0xffec7b02, 0xffed7c02, 0xffee7e02, 0xffef7f02, 0xfff08002, 0xfff18103, 0xfff28203, 0xfff38303, + 0xfff48403, 0xfff58503, 0xfff68703, 0xfff78803, 0xfff88903, 0xfff98a04, 0xfffa8b04, 0xfffb8c04, 0xfffc8d04, 0xfffd8f04, 0xfffe9005, 0xffff9105, 0xffff9205, 0xffff9305, 0xffff9405, 0xffff9606, + 0xffff9706, 0xffff9806, 0xffff9906, 0xffff9a07, 0xffff9b07, 0xffff9d07, 0xffff9e08, 0xffff9f08, 0xffffa008, 0xffffa109, 0xffffa309, 0xffffa409, 0xffffa50a, 0xffffa60a, 0xffffa80a, 0xffffa90b, + 0xffffaa0b, 0xffffab0c, 0xffffac0c, 0xffffae0d, 0xffffaf0d, 0xffffb00e, 0xffffb10e, 0xffffb30f, 0xffffb40f, 0xffffb510, 0xffffb610, 0xffffb811, 0xffffb912, 0xffffba12, 0xffffbb13, 0xffffbd14, + 0xffffbe14, 0xffffbf15, 0xffffc016, 0xffffc217, 0xffffc317, 0xffffc418, 0xffffc619, 0xffffc71a, 0xffffc81b, 0xffffca1c, 0xffffcb1d, 0xffffcc1e, 0xffffcd1f, 0xffffcf20, 0xffffd021, 0xffffd122, + 0xffffd323, 0xffffd424, 0xffffd526, 0xffffd727, 0xffffd828, 0xffffd92a, 0xffffdb2b, 0xffffdc2c, 0xffffdd2e, 0xffffdf2f, 0xffffe031, 0xffffe133, 0xffffe334, 0xffffe436, 0xffffe538, 0xffffe739 }, { // Green monitor - 0x000000, 0x000400, 0x000700, 0x000900, 0x000b00, 0x000d00, 0x000f00, 0x001100, 0x001300, 0x001500, 0x001600, 0x001800, 0x001a00, 0x001b00, 0x001d00, 0x001e00, - 0x002000, 0x002100, 0x002300, 0x002400, 0x002601, 0x002701, 0x002901, 0x002a01, 0x002b01, 0x002d01, 0x002e01, 0x002f01, 0x003101, 0x003201, 0x003301, 0x003401, - 0x003601, 0x003702, 0x003802, 0x003902, 0x003b02, 0x003c02, 0x003d02, 0x003e02, 0x004002, 0x004102, 0x004203, 0x004303, 0x004403, 0x004503, 0x004703, 0x004803, - 0x004903, 0x004a03, 0x004b04, 0x004c04, 0x004d04, 0x004e04, 0x005004, 0x005104, 0x005205, 0x005305, 0x005405, 0x005505, 0x005605, 0x005705, 0x005806, 0x005906, - 0x005a06, 0x005b06, 0x005d06, 0x005e07, 0x005f07, 0x006007, 0x006107, 0x006207, 0x006308, 0x006408, 0x006508, 0x006608, 0x006708, 0x006809, 0x006909, 0x006a09, - 0x006b09, 0x016c0a, 0x016d0a, 0x016e0a, 0x016f0a, 0x01700b, 0x01710b, 0x01720b, 0x01730b, 0x01740c, 0x01750c, 0x01760c, 0x01770c, 0x01780d, 0x01790d, 0x017a0d, - 0x017b0d, 0x017b0e, 0x017c0e, 0x017d0e, 0x017e0f, 0x017f0f, 0x01800f, 0x018110, 0x028210, 0x028310, 0x028410, 0x028511, 0x028611, 0x028711, 0x028812, 0x028912, - 0x028a12, 0x028a13, 0x028b13, 0x028c13, 0x028d14, 0x028e14, 0x038f14, 0x039015, 0x039115, 0x039215, 0x039316, 0x039416, 0x039417, 0x039517, 0x039617, 0x039718, - 0x049818, 0x049918, 0x049a19, 0x049b19, 0x049c19, 0x049c1a, 0x049d1a, 0x049e1b, 0x059f1b, 0x05a01b, 0x05a11c, 0x05a21c, 0x05a31c, 0x05a31d, 0x05a41d, 0x06a51e, - 0x06a61e, 0x06a71f, 0x06a81f, 0x06a920, 0x06aa20, 0x07aa21, 0x07ab21, 0x07ac21, 0x07ad22, 0x07ae22, 0x08af23, 0x08b023, 0x08b024, 0x08b124, 0x08b225, 0x09b325, - 0x09b426, 0x09b526, 0x09b527, 0x0ab627, 0x0ab728, 0x0ab828, 0x0ab929, 0x0bba29, 0x0bba2a, 0x0bbb2a, 0x0bbc2b, 0x0cbd2b, 0x0cbe2c, 0x0cbf2c, 0x0dbf2d, 0x0dc02d, - 0x0dc12e, 0x0ec22e, 0x0ec32f, 0x0ec42f, 0x0fc430, 0x0fc530, 0x0fc631, 0x10c731, 0x10c832, 0x10c932, 0x11c933, 0x11ca33, 0x11cb34, 0x12cc35, 0x12cd35, 0x12cd36, - 0x13ce36, 0x13cf37, 0x13d037, 0x14d138, 0x14d139, 0x14d239, 0x15d33a, 0x15d43a, 0x16d43b, 0x16d53b, 0x17d63c, 0x17d73d, 0x17d83d, 0x18d83e, 0x18d93e, 0x19da3f, - 0x19db40, 0x1adc40, 0x1adc41, 0x1bdd41, 0x1bde42, 0x1cdf43, 0x1ce043, 0x1de044, 0x1ee145, 0x1ee245, 0x1fe346, 0x1fe446, 0x20e447, 0x20e548, 0x21e648, 0x22e749, - 0x22e74a, 0x23e84a, 0x23e94b, 0x24ea4c, 0x25ea4c, 0x25eb4d, 0x26ec4e, 0x27ed4e, 0x27ee4f, 0x28ee50, 0x29ef50, 0x29f051, 0x2af152, 0x2bf153, 0x2cf253, 0x2cf354, - 0x2df455, 0x2ef455, 0x2ff556, 0x2ff657, 0x30f758, 0x31f758, 0x32f859, 0x32f95a, 0x33fa5a, 0x34fa5b, 0x35fb5c, 0x36fc5d, 0x37fd5d, 0x38fd5e, 0x38fe5f, 0x39ff60 + 0xff000000, 0xff000400, 0xff000700, 0xff000900, 0xff000b00, 0xff000d00, 0xff000f00, 0xff001100, 0xff001300, 0xff001500, 0xff001600, 0xff001800, 0xff001a00, 0xff001b00, 0xff001d00, 0xff001e00, + 0xff002000, 0xff002100, 0xff002300, 0xff002400, 0xff002601, 0xff002701, 0xff002901, 0xff002a01, 0xff002b01, 0xff002d01, 0xff002e01, 0xff002f01, 0xff003101, 0xff003201, 0xff003301, 0xff003401, + 0xff003601, 0xff003702, 0xff003802, 0xff003902, 0xff003b02, 0xff003c02, 0xff003d02, 0xff003e02, 0xff004002, 0xff004102, 0xff004203, 0xff004303, 0xff004403, 0xff004503, 0xff004703, 0xff004803, + 0xff004903, 0xff004a03, 0xff004b04, 0xff004c04, 0xff004d04, 0xff004e04, 0xff005004, 0xff005104, 0xff005205, 0xff005305, 0xff005405, 0xff005505, 0xff005605, 0xff005705, 0xff005806, 0xff005906, + 0xff005a06, 0xff005b06, 0xff005d06, 0xff005e07, 0xff005f07, 0xff006007, 0xff006107, 0xff006207, 0xff006308, 0xff006408, 0xff006508, 0xff006608, 0xff006708, 0xff006809, 0xff006909, 0xff006a09, + 0xff006b09, 0xff016c0a, 0xff016d0a, 0xff016e0a, 0xff016f0a, 0xff01700b, 0xff01710b, 0xff01720b, 0xff01730b, 0xff01740c, 0xff01750c, 0xff01760c, 0xff01770c, 0xff01780d, 0xff01790d, 0xff017a0d, + 0xff017b0d, 0xff017b0e, 0xff017c0e, 0xff017d0e, 0xff017e0f, 0xff017f0f, 0xff01800f, 0xff018110, 0xff028210, 0xff028310, 0xff028410, 0xff028511, 0xff028611, 0xff028711, 0xff028812, 0xff028912, + 0xff028a12, 0xff028a13, 0xff028b13, 0xff028c13, 0xff028d14, 0xff028e14, 0xff038f14, 0xff039015, 0xff039115, 0xff039215, 0xff039316, 0xff039416, 0xff039417, 0xff039517, 0xff039617, 0xff039718, + 0xff049818, 0xff049918, 0xff049a19, 0xff049b19, 0xff049c19, 0xff049c1a, 0xff049d1a, 0xff049e1b, 0xff059f1b, 0xff05a01b, 0xff05a11c, 0xff05a21c, 0xff05a31c, 0xff05a31d, 0xff05a41d, 0xff06a51e, + 0xff06a61e, 0xff06a71f, 0xff06a81f, 0xff06a920, 0xff06aa20, 0xff07aa21, 0xff07ab21, 0xff07ac21, 0xff07ad22, 0xff07ae22, 0xff08af23, 0xff08b023, 0xff08b024, 0xff08b124, 0xff08b225, 0xff09b325, + 0xff09b426, 0xff09b526, 0xff09b527, 0xff0ab627, 0xff0ab728, 0xff0ab828, 0xff0ab929, 0xff0bba29, 0xff0bba2a, 0xff0bbb2a, 0xff0bbc2b, 0xff0cbd2b, 0xff0cbe2c, 0xff0cbf2c, 0xff0dbf2d, 0xff0dc02d, + 0xff0dc12e, 0xff0ec22e, 0xff0ec32f, 0xff0ec42f, 0xff0fc430, 0xff0fc530, 0xff0fc631, 0xff10c731, 0xff10c832, 0xff10c932, 0xff11c933, 0xff11ca33, 0xff11cb34, 0xff12cc35, 0xff12cd35, 0xff12cd36, + 0xff13ce36, 0xff13cf37, 0xff13d037, 0xff14d138, 0xff14d139, 0xff14d239, 0xff15d33a, 0xff15d43a, 0xff16d43b, 0xff16d53b, 0xff17d63c, 0xff17d73d, 0xff17d83d, 0xff18d83e, 0xff18d93e, 0xff19da3f, + 0xff19db40, 0xff1adc40, 0xff1adc41, 0xff1bdd41, 0xff1bde42, 0xff1cdf43, 0xff1ce043, 0xff1de044, 0xff1ee145, 0xff1ee245, 0xff1fe346, 0xff1fe446, 0xff20e447, 0xff20e548, 0xff21e648, 0xff22e749, + 0xff22e74a, 0xff23e84a, 0xff23e94b, 0xff24ea4c, 0xff25ea4c, 0xff25eb4d, 0xff26ec4e, 0xff27ed4e, 0xff27ee4f, 0xff28ee50, 0xff29ef50, 0xff29f051, 0xff2af152, 0xff2bf153, 0xff2cf253, 0xff2cf354, + 0xff2df455, 0xff2ef455, 0xff2ff556, 0xff2ff657, 0xff30f758, 0xff31f758, 0xff32f859, 0xff32f95a, 0xff33fa5a, 0xff34fa5b, 0xff35fb5c, 0xff36fc5d, 0xff37fd5d, 0xff38fd5e, 0xff38fe5f, 0xff39ff60 }, { // White monitor - 0x000000, 0x010102, 0x020203, 0x020304, 0x030406, 0x040507, 0x050608, 0x060709, 0x07080a, 0x08090c, 0x080a0d, 0x090b0e, 0x0a0c0f, 0x0b0d10, 0x0c0e11, 0x0d0f12, - 0x0e1013, 0x0f1115, 0x101216, 0x111317, 0x121418, 0x121519, 0x13161a, 0x14171b, 0x15181c, 0x16191d, 0x171a1e, 0x181b1f, 0x191c20, 0x1a1d21, 0x1b1e22, 0x1c1f23, - 0x1d2024, 0x1e2125, 0x1f2226, 0x202327, 0x212428, 0x222529, 0x22262b, 0x23272c, 0x24282d, 0x25292e, 0x262a2f, 0x272b30, 0x282c30, 0x292d31, 0x2a2e32, 0x2b2f33, - 0x2c3034, 0x2d3035, 0x2e3136, 0x2f3237, 0x303338, 0x313439, 0x32353a, 0x33363b, 0x34373c, 0x35383d, 0x36393e, 0x373a3f, 0x383b40, 0x393c41, 0x3a3d42, 0x3b3e43, - 0x3c3f44, 0x3d4045, 0x3e4146, 0x3f4247, 0x404348, 0x414449, 0x42454a, 0x43464b, 0x44474c, 0x45484d, 0x46494d, 0x474a4e, 0x484b4f, 0x484c50, 0x494d51, 0x4a4e52, - 0x4b4f53, 0x4c5054, 0x4d5155, 0x4e5256, 0x4f5357, 0x505458, 0x515559, 0x52565a, 0x53575b, 0x54585b, 0x55595c, 0x565a5d, 0x575b5e, 0x585c5f, 0x595d60, 0x5a5e61, - 0x5b5f62, 0x5c6063, 0x5d6164, 0x5e6265, 0x5f6366, 0x606466, 0x616567, 0x626668, 0x636769, 0x64686a, 0x65696b, 0x666a6c, 0x676b6d, 0x686c6e, 0x696d6f, 0x6a6e70, - 0x6b6f70, 0x6c7071, 0x6d7172, 0x6f7273, 0x707374, 0x707475, 0x717576, 0x727677, 0x747778, 0x757879, 0x767979, 0x777a7a, 0x787b7b, 0x797c7c, 0x7a7d7d, 0x7b7e7e, - 0x7c7f7f, 0x7d8080, 0x7e8181, 0x7f8281, 0x808382, 0x818483, 0x828584, 0x838685, 0x848786, 0x858887, 0x868988, 0x878a89, 0x888b89, 0x898c8a, 0x8a8d8b, 0x8b8e8c, - 0x8c8f8d, 0x8d8f8e, 0x8e908f, 0x8f9190, 0x909290, 0x919391, 0x929492, 0x939593, 0x949694, 0x959795, 0x969896, 0x979997, 0x989a98, 0x999b98, 0x9a9c99, 0x9b9d9a, - 0x9c9e9b, 0x9d9f9c, 0x9ea09d, 0x9fa19e, 0xa0a29f, 0xa1a39f, 0xa2a4a0, 0xa3a5a1, 0xa4a6a2, 0xa6a7a3, 0xa7a8a4, 0xa8a9a5, 0xa9aaa5, 0xaaaba6, 0xabaca7, 0xacada8, - 0xadaea9, 0xaeafaa, 0xafb0ab, 0xb0b1ac, 0xb1b2ac, 0xb2b3ad, 0xb3b4ae, 0xb4b5af, 0xb5b6b0, 0xb6b7b1, 0xb7b8b2, 0xb8b9b2, 0xb9bab3, 0xbabbb4, 0xbbbcb5, 0xbcbdb6, - 0xbdbeb7, 0xbebfb8, 0xbfc0b8, 0xc0c1b9, 0xc1c2ba, 0xc2c3bb, 0xc3c4bc, 0xc5c5bd, 0xc6c6be, 0xc7c7be, 0xc8c8bf, 0xc9c9c0, 0xcacac1, 0xcbcbc2, 0xccccc3, 0xcdcdc3, - 0xcecec4, 0xcfcfc5, 0xd0d0c6, 0xd1d1c7, 0xd2d2c8, 0xd3d3c9, 0xd4d4c9, 0xd5d5ca, 0xd6d6cb, 0xd7d7cc, 0xd8d8cd, 0xd9d9ce, 0xdadacf, 0xdbdbcf, 0xdcdcd0, 0xdeddd1, - 0xdfded2, 0xe0dfd3, 0xe1e0d4, 0xe2e1d4, 0xe3e2d5, 0xe4e3d6, 0xe5e4d7, 0xe6e5d8, 0xe7e6d9, 0xe8e7d9, 0xe9e8da, 0xeae9db, 0xebeadc, 0xecebdd, 0xedecde, 0xeeeddf, - 0xefeedf, 0xf0efe0, 0xf1f0e1, 0xf2f1e2, 0xf3f2e3, 0xf4f3e3, 0xf6f3e4, 0xf7f4e5, 0xf8f5e6, 0xf9f6e7, 0xfaf7e8, 0xfbf8e9, 0xfcf9e9, 0xfdfaea, 0xfefbeb, 0xfffcec + 0xff000000, 0xff010102, 0xff020203, 0xff020304, 0xff030406, 0xff040507, 0xff050608, 0xff060709, 0xff07080a, 0xff08090c, 0xff080a0d, 0xff090b0e, 0xff0a0c0f, 0xff0b0d10, 0xff0c0e11, 0xff0d0f12, + 0xff0e1013, 0xff0f1115, 0xff101216, 0xff111317, 0xff121418, 0xff121519, 0xff13161a, 0xff14171b, 0xff15181c, 0xff16191d, 0xff171a1e, 0xff181b1f, 0xff191c20, 0xff1a1d21, 0xff1b1e22, 0xff1c1f23, + 0xff1d2024, 0xff1e2125, 0xff1f2226, 0xff202327, 0xff212428, 0xff222529, 0xff22262b, 0xff23272c, 0xff24282d, 0xff25292e, 0xff262a2f, 0xff272b30, 0xff282c30, 0xff292d31, 0xff2a2e32, 0xff2b2f33, + 0xff2c3034, 0xff2d3035, 0xff2e3136, 0xff2f3237, 0xff303338, 0xff313439, 0xff32353a, 0xff33363b, 0xff34373c, 0xff35383d, 0xff36393e, 0xff373a3f, 0xff383b40, 0xff393c41, 0xff3a3d42, 0xff3b3e43, + 0xff3c3f44, 0xff3d4045, 0xff3e4146, 0xff3f4247, 0xff404348, 0xff414449, 0xff42454a, 0xff43464b, 0xff44474c, 0xff45484d, 0xff46494d, 0xff474a4e, 0xff484b4f, 0xff484c50, 0xff494d51, 0xff4a4e52, + 0xff4b4f53, 0xff4c5054, 0xff4d5155, 0xff4e5256, 0xff4f5357, 0xff505458, 0xff515559, 0xff52565a, 0xff53575b, 0xff54585b, 0xff55595c, 0xff565a5d, 0xff575b5e, 0xff585c5f, 0xff595d60, 0xff5a5e61, + 0xff5b5f62, 0xff5c6063, 0xff5d6164, 0xff5e6265, 0xff5f6366, 0xff606466, 0xff616567, 0xff626668, 0xff636769, 0xff64686a, 0xff65696b, 0xff666a6c, 0xff676b6d, 0xff686c6e, 0xff696d6f, 0xff6a6e70, + 0xff6b6f70, 0xff6c7071, 0xff6d7172, 0xff6f7273, 0xff707374, 0xff707475, 0xff717576, 0xff727677, 0xff747778, 0xff757879, 0xff767979, 0xff777a7a, 0xff787b7b, 0xff797c7c, 0xff7a7d7d, 0xff7b7e7e, + 0xff7c7f7f, 0xff7d8080, 0xff7e8181, 0xff7f8281, 0xff808382, 0xff818483, 0xff828584, 0xff838685, 0xff848786, 0xff858887, 0xff868988, 0xff878a89, 0xff888b89, 0xff898c8a, 0xff8a8d8b, 0xff8b8e8c, + 0xff8c8f8d, 0xff8d8f8e, 0xff8e908f, 0xff8f9190, 0xff909290, 0xff919391, 0xff929492, 0xff939593, 0xff949694, 0xff959795, 0xff969896, 0xff979997, 0xff989a98, 0xff999b98, 0xff9a9c99, 0xff9b9d9a, + 0xff9c9e9b, 0xff9d9f9c, 0xff9ea09d, 0xff9fa19e, 0xffa0a29f, 0xffa1a39f, 0xffa2a4a0, 0xffa3a5a1, 0xffa4a6a2, 0xffa6a7a3, 0xffa7a8a4, 0xffa8a9a5, 0xffa9aaa5, 0xffaaaba6, 0xffabaca7, 0xffacada8, + 0xffadaea9, 0xffaeafaa, 0xffafb0ab, 0xffb0b1ac, 0xffb1b2ac, 0xffb2b3ad, 0xffb3b4ae, 0xffb4b5af, 0xffb5b6b0, 0xffb6b7b1, 0xffb7b8b2, 0xffb8b9b2, 0xffb9bab3, 0xffbabbb4, 0xffbbbcb5, 0xffbcbdb6, + 0xffbdbeb7, 0xffbebfb8, 0xffbfc0b8, 0xffc0c1b9, 0xffc1c2ba, 0xffc2c3bb, 0xffc3c4bc, 0xffc5c5bd, 0xffc6c6be, 0xffc7c7be, 0xffc8c8bf, 0xffc9c9c0, 0xffcacac1, 0xffcbcbc2, 0xffccccc3, 0xffcdcdc3, + 0xffcecec4, 0xffcfcfc5, 0xffd0d0c6, 0xffd1d1c7, 0xffd2d2c8, 0xffd3d3c9, 0xffd4d4c9, 0xffd5d5ca, 0xffd6d6cb, 0xffd7d7cc, 0xffd8d8cd, 0xffd9d9ce, 0xffdadacf, 0xffdbdbcf, 0xffdcdcd0, 0xffdeddd1, + 0xffdfded2, 0xffe0dfd3, 0xffe1e0d4, 0xffe2e1d4, 0xffe3e2d5, 0xffe4e3d6, 0xffe5e4d7, 0xffe6e5d8, 0xffe7e6d9, 0xffe8e7d9, 0xffe9e8da, 0xffeae9db, 0xffebeadc, 0xffecebdd, 0xffedecde, 0xffeeeddf, + 0xffefeedf, 0xfff0efe0, 0xfff1f0e1, 0xfff2f1e2, 0xfff3f2e3, 0xfff4f3e3, 0xfff6f3e4, 0xfff7f4e5, 0xfff8f5e6, 0xfff9f6e7, 0xfffaf7e8, 0xfffbf8e9, 0xfffcf9e9, 0xfffdfaea, 0xfffefbeb, 0xfffffcec } }; @@ -604,22 +604,22 @@ cgapal_rebuild_monitor(int monitor_index) palette_lookup[0x16] = makecol(video_6to8[42], video_6to8[42], video_6to8[0]); else if (cga_palette_monitor == 10) { /* IBM 5153 CRT, colors by VileR */ - palette_lookup[0x10] = 0x00000000; - palette_lookup[0x11] = 0x000000c4; - palette_lookup[0x12] = 0x0000c400; - palette_lookup[0x13] = 0x0000c4c4; - palette_lookup[0x14] = 0x00c40000; - palette_lookup[0x15] = 0x00c400c4; - palette_lookup[0x16] = 0x00c47e00; - palette_lookup[0x17] = 0x00c4c4c4; - palette_lookup[0x18] = 0x004e4e4e; - palette_lookup[0x19] = 0x004e4edc; - palette_lookup[0x1a] = 0x004edc4e; - palette_lookup[0x1b] = 0x004ef3f3; - palette_lookup[0x1c] = 0x00dc4e4e; - palette_lookup[0x1d] = 0x00f34ef3; - palette_lookup[0x1e] = 0x00f3f34e; - palette_lookup[0x1f] = 0x00ffffff; + palette_lookup[0x10] = 0xff000000; + palette_lookup[0x11] = 0xff0000c4; + palette_lookup[0x12] = 0xff00c400; + palette_lookup[0x13] = 0xff00c4c4; + palette_lookup[0x14] = 0xffc40000; + palette_lookup[0x15] = 0xffc400c4; + palette_lookup[0x16] = 0xffc47e00; + palette_lookup[0x17] = 0xffc4c4c4; + palette_lookup[0x18] = 0x0ffe4e4e; + palette_lookup[0x19] = 0xff4e4edc; + palette_lookup[0x1a] = 0xff4edc4e; + palette_lookup[0x1b] = 0xff4ef3f3; + palette_lookup[0x1c] = 0xffdc4e4e; + palette_lookup[0x1d] = 0xfff34ef3; + palette_lookup[0x1e] = 0xfff3f34e; + palette_lookup[0x1f] = 0xffffffff; } } @@ -734,7 +734,7 @@ calc_8to32(int c) g = ((int) dg) << 8; r = ((int) dr) << 16; - return (b | g | r); + return (b | g | r | 0xff000000); } int @@ -757,7 +757,7 @@ calc_15to32(int c) g = ((int) dg) << 8; r = ((int) dr) << 16; - return (b | g | r); + return (b | g | r | 0xff000000); } int @@ -780,7 +780,7 @@ calc_16to32(int c) g = ((int) dg) << 8; r = ((int) dr) << 16; - return (b | g | r); + return (b | g | r | 0xff000000); } void @@ -1177,7 +1177,7 @@ video_color_transform(uint32_t color) color = shade[video_grayscale][color]; break; default: - clr8[3] = 0; + clr8[3] = 0xff; clr8[0] = color; clr8[1] = clr8[2] = clr8[0]; break; From 5bd7198f63d5bcc90f300a9d2d0580f84b68132e Mon Sep 17 00:00:00 2001 From: WNT50 <173389620+WNT50@users.noreply.github.com> Date: Fri, 10 Oct 2025 12:08:39 +0800 Subject: [PATCH 094/233] Memory detection fixes for IBM PS/2 machines (#6309) Fix IBM PS/2 model 50 and 60 with 1MB memory, and correct IBM PS/2 model 30-286 maximum onboard memory --- src/machine/m_ps2_mca.c | 58 ++++++++++++++++++++++++++++++++++--- src/machine/machine_table.c | 4 +-- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index e9f813f32..f02dd265a 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -507,7 +507,7 @@ model_50_write(uint16_t port, uint8_t val) ps2.option[0] = val; break; case 0x103: - ps2.option[1] = val; + ps2.option[1] = (ps2.option[1] & 0xfe) | (val & 0x01); break; case 0x104: ps2.option[2] = val; @@ -1163,6 +1163,29 @@ ps2_mca_board_model_50_init(void) ps2.planar_read = model_50_read; ps2.planar_write = model_50_write; + /* + I/O 103h - Bit 3: Memory Presence Detect 2 + Bit 2: Memory Presence Detect 1 + Bit 1: Password Override Jumper + Bit 0: Enable System Board RAM + */ + + switch (mem_size / 1024) { + case 0: /*256Kx2*/ + ps2.option[1] = 0xf8; + break; + case 1: /*512Kx2*/ + ps2.option[1] = 0xf4; + break; + case 2: /*1Mx2*/ + default: + ps2.option[1] = 0xf0; + break; + } + + /* Enable password function */ + ps2.option[1] |= 0x02; + if (mem_size > 2048) { /* Only 2 MB supported on planar, create a memory expansion card for the rest */ ps2_mca_mem_fffc_init(2); @@ -1183,9 +1206,36 @@ ps2_mca_board_model_60_init(void) 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); + /* + I/O 103h - Bit 3: Memory Presence Detect 2 (Reversed) + Bit 2: Memory Presence Detect 1 (Reversed) + Bit 1: Password Override Jumper + Bit 0: Enable System Board RAM + */ + + switch (mem_size / 1024) { + case 0: /*256Kx2*/ + ps2.option[1] = 0xf0; + break; + case 1: /*256Kx4*/ + ps2.option[1] = 0xf4; + break; + case 2: /*512Kx4*/ + case 3: /*Not supported*/ + ps2.option[1] = 0xf8; + break; + case 4: /*1Mx4*/ + default: + ps2.option[1] = 0xfc; + break; + } + + /* Enable password function */ + ps2.option[1] |= 0x02; + + if (mem_size > 4096) { + /* Only 4 MB supported on planar, create a memory expansion card for the rest */ + ps2_mca_mem_fffc_init(4); } device_add(&ps2_nvr_55ls_device); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 8ca38771a..180628e9f 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -3105,7 +3105,7 @@ const machine_t machines[] = { .flags = MACHINE_XTA | MACHINE_VIDEO_FIXED, .ram = { .min = 512, - .max = 16384, + .max = 4096, .step = 512 }, .nvrmask = 127, @@ -4959,7 +4959,7 @@ const machine_t machines[] = { .flags = MACHINE_VIDEO, .ram = { .min = 1024, - .max = 10240, + .max = 12288, .step = 1024 }, .nvrmask = 63, From f97dea2be6c7ba6567007d16f7d9fa9dc58c6894 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 10 Oct 2025 15:32:32 +0600 Subject: [PATCH 095/233] Try to reduce hacks (#6313) --- src/qt/qt_openglrenderer.cpp | 2 +- src/qt/qt_rendererstack.cpp | 8 +++++--- src/qt/qt_vulkanwindowrenderer.cpp | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index a82b2b780..4dd3e8bc6 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -822,7 +822,7 @@ OpenGLRenderer::read_shader_config() } OpenGLRenderer::OpenGLRenderer(QWidget *parent) - : QWindow(parent->windowHandle()) + : QWindow((QWindow*)nullptr) , renderTimer(new QTimer(this)) { connect(renderTimer, &QTimer::timeout, this, [this]() { this->render(); } ); diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 0be4596a9..ad8172d11 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -377,7 +377,7 @@ RendererStack::createRenderer(Renderer renderer) #ifdef __HAIKU__ current.reset(sw); #else - current.reset(this->createWindowContainer(sw, this)); + current.reset(this->createWindowContainer(sw)); #endif } break; @@ -399,7 +399,7 @@ RendererStack::createRenderer(Renderer renderer) imagebufs = {}; QTimer::singleShot(0, this, [this]() { switchRenderer(Renderer::Software); }); }); - current.reset(this->createWindowContainer(hw, this)); + current.reset(this->createWindowContainer(hw)); break; } #if QT_CONFIG(vulkan) @@ -434,7 +434,7 @@ RendererStack::createRenderer(Renderer renderer) imagebufs = {}; QTimer::singleShot(0, this, [this]() { switchRenderer(Renderer::Software); }); }); - current.reset(this->createWindowContainer(hw, this)); + current.reset(this->createWindowContainer(hw)); break; } #endif @@ -446,7 +446,9 @@ RendererStack::createRenderer(Renderer renderer) current->setFocusProxy(this); current->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); current->setAttribute(Qt::WA_AlwaysStackOnTop); + current->setStyleSheet("background-color: black"); + this->setStyleSheet("background-color: black"); boxLayout->addWidget(current.get()); rendererWindow->r_monitor_index = m_monitor_index; diff --git a/src/qt/qt_vulkanwindowrenderer.cpp b/src/qt/qt_vulkanwindowrenderer.cpp index d0fbb39a3..005f39b1f 100644 --- a/src/qt/qt_vulkanwindowrenderer.cpp +++ b/src/qt/qt_vulkanwindowrenderer.cpp @@ -823,7 +823,7 @@ public: # endif /* 0*/ VulkanWindowRenderer::VulkanWindowRenderer(QWidget *parent) - : QVulkanWindow(parent->windowHandle()) + : QVulkanWindow(NULL) { parentWidget = parent; instance.setApiVersion(QVersionNumber(1, 0)); From fadc8c37b85715586b0e063de57b4a8eb484da95 Mon Sep 17 00:00:00 2001 From: toggo9 <121191375+toggo9@users.noreply.github.com> Date: Fri, 10 Oct 2025 20:54:27 +0200 Subject: [PATCH 096/233] Add the IBM PC 330/350 type 65x6. (#6315) * Change BIOS loading (temporarily) * Change GPIO related stuff on the PC 330 65x6... CPU clock is now properly reported up to 166 MHz. * Add IBM PC 330 type 65x6 machine table entry. * Add IBM PC 330 type 65x6 machine definition. * Fix a compile breaking error. * Block AMD K5/Cx686 CPUs from the IBM PC 330/350 type 65x6. * Correct the PC 330/350 ROM path. --- src/include/86box/machine.h | 1 + src/machine/m_at_socket5.c | 108 ++++++++++++++++++++++++++++++++++++ src/machine/machine_table.c | 43 ++++++++++++++ 3 files changed, 152 insertions(+) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 8a66b879a..6d268d4d5 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -917,6 +917,7 @@ extern int machine_at_acerv30_init(const machine_t *); extern int machine_at_apollo_init(const machine_t *); extern int machine_at_optiplexgxl_init(const machine_t *); extern int machine_at_pt2000_init(const machine_t *); +extern int machine_at_pc330_65x6_init(const machine_t *); extern int machine_at_zappa_init(const machine_t *); extern int machine_at_powermatev_init(const machine_t *); extern int machine_at_hawk_init(const machine_t *); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index d544dbc2e..8f79bd44b 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -427,6 +427,114 @@ machine_at_optiplexgxl_init(const machine_t *model) return ret; } +/* Some stuff taken from Monaco */ +static void +machine_at_morrison64_gpio_init(void) +{ + uint32_t gpio = 0xffffe0cf; + uint16_t addr; + + /* Return to this after CS4232 PnP is working. */ + /* Register 0x0078 (Undocumented): */ + /* Bit 5,4: Vibra 16S base address: 0 = 220h, 1 = 260h, 2 = 240h, 3 = 280h. */ + /*device_context(machine_get_snd_device(machine)); + addr = device_get_config_hex16("base"); + switch (addr) { + case 0x0220: + gpio |= 0xffff00cf; + break; + case 0x0240: + gpio |= 0xffff00ef; + break; + case 0x0260: + gpio |= 0xffff00df; + break; + case 0x0280: + gpio |= 0xffff00ff; + break; + } + device_context_restore();*/ + + /* Register 0x0079: */ + /* Bit 7: 0 = Clear password, 1 = Keep password. */ + /* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */ + /* Bit 5: 0 = CMOS Setup disabled, 1 = CMOS Setup enabled. */ + /* Bit 4: External CPU clock (Switch 8). */ + /* Bit 3: External CPU clock (Switch 7). */ + /* 50 MHz: Switch 7 = Off, Switch 8 = Off. */ + /* 60 MHz: Switch 7 = On, Switch 8 = Off. */ + /* 66 MHz: Switch 7 = Off, Switch 8 = On. */ + /* Bit 2: 0 = On-board audio absent, 1 = On-board audio present. */ + /* Bit 1: 0 = Soft-off capable power supply present, 1 = Soft-off capable power supply absent. */ + /* Bit 0: 0 = 2x multiplier, 1 = 1.5x multiplier (Switch 6). */ + /* NOTE: A bit is read as 1 if switch is off, and as 0 if switch is on. */ + if (cpu_busspeed <= 50000000) + gpio |= 0xffff0000; + else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000)) + gpio |= 0xffff0800; + else if (cpu_busspeed > 60000000) + gpio |= 0xffff1000; + + if (sound_card_current[0] == SOUND_INTERNAL) + gpio |= 0xffff0400; + + if (cpu_dmulti <= 1.5) + gpio |= 0xffff01af; + else if (cpu_dmulti <= 2.0) + gpio |= 0xffffe2af; + if ((cpu_dmulti > 2.0) && (cpu_dmulti <= 2.5)) + gpio |= 0xffffe5cf; + + machine_set_gpio_default(gpio); +} + +uint32_t +machine_at_morrison64_gpio_handler(uint8_t write, uint32_t val) +{ + uint32_t ret = machine_get_gpio_default(); + + if (write) { + ret &= ((val & 0xffffffcf) | 0xffff0000); + ret |= (val & 0x00000030); + + machine_set_gpio(ret); + } else + ret = machine_get_gpio(); + + return ret; +} + +int +machine_at_pc330_65x6_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/pc330_65x6/intel.bin", + 0x000c0000, 262144, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); + machine_at_morrison64_gpio_init(); + + 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_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 3, 4); + device_add(&i430fx_device); + device_add(&piix_device); + device_add_params(&pc87306_device, (void *) PCX730X_AMI); + device_add(&intel_flash_bxt_ami_device); + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + + return ret; +} static void machine_at_zappa_gpio_init(void) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 180628e9f..b58b71599 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12431,6 +12431,49 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + { + .name = "[i430FX] IBM PC 330/350 type 65x6 (Intel Advanced/MN OEM)", + .internal_name = "pc330_65x6", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_pc330_65x6_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3380, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 2.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .default_jumpered_ecp_dma = 3, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL + }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ From c0159caee70c6055c81dc8d146df6fa6da53d14a Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Sat, 11 Oct 2025 03:56:20 +0700 Subject: [PATCH 097/233] Add two OEM BIOSes to 2 Intel machines + two misc changes (#6310) * Added Bravo MS-T BIOS for Intel Monaco -Move Atlantis machine above Thor machine -Correct the name for Zeos Pantera Wildcat * Added Gateway 2000 latest BIOS of Intel Zappa * Fixed a compile-breaking mistake --- src/include/86box/machine.h | 6 +++ src/machine/m_at_socket5.c | 68 +++++++++++++++++++++--- src/machine/m_at_socket7_3v.c | 68 +++++++++++++++++++++--- src/machine/machine_table.c | 98 +++++++++++++++++------------------ 4 files changed, 179 insertions(+), 61 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 6d268d4d5..1510092eb 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -918,6 +918,9 @@ extern int machine_at_apollo_init(const machine_t *); extern int machine_at_optiplexgxl_init(const machine_t *); extern int machine_at_pt2000_init(const machine_t *); extern int machine_at_pc330_65x6_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t zappa_device; +#endif extern int machine_at_zappa_init(const machine_t *); extern int machine_at_powermatev_init(const machine_t *); extern int machine_at_hawk_init(const machine_t *); @@ -965,6 +968,9 @@ extern int machine_at_monaco_init(const machine_t *); extern uint32_t machine_at_endeavor_gpio_handler(uint8_t write, uint32_t val); extern int machine_at_endeavor_init(const machine_t *); extern int machine_at_atlantis_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t monaco_device; +#endif extern int machine_at_monaco_init(const machine_t *); extern int machine_at_ms5119_init(const machine_t *); extern int machine_at_pb640_init(const machine_t *); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 8f79bd44b..dc4064d31 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -599,18 +599,74 @@ machine_at_pt2000_init(const machine_t *model) return ret; } +static const device_config_t zappa_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "zappa", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Intel AMIBIOS - Revision 1.00.06.BS0", + .internal_name = "zappa", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/zappa/1006bs0_.bio", "roms/machines/zappa/1006bs0_.bi1", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.11.BS0T (Gateway 2000)", + .internal_name = "zappa_gw2k", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/zappa/1011BS0T.BIO", "roms/machines/zappa/1011BS0T.BI1", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t zappa_device = { + .name = "Intel Advanced/ZP (Zappa)", + .internal_name = "zappa_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = zappa_config +}; + int machine_at_zappa_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; + const char *fn2; - ret = bios_load_linear_combined("roms/machines/zappa/1006bs0_.bio", - "roms/machines/zappa/1006bs0_.bi1", - 0x20000, 128); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn2 = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 1); + ret = bios_load_linear_combined(fn, fn2, 0x20000, 128); + device_context_restore(); + machine_at_common_init_ex(model, 2); machine_at_zappa_gpio_init(); diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 0804ffba0..8547701f4 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -576,18 +576,74 @@ machine_at_atlantis_init(const machine_t *model) return ret; } +static const device_config_t monaco_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "monaco", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Intel AMIBIOS - Revision 1.00.07.BU0", + .internal_name = "monaco", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/monaco/1007BU0_.BIO", "roms/machines/monaco/1007BU0_.BI1", "" } + }, + { + .name = "Intel AMIBIOS - Revision 1.00.12.BU0Q (AST Bravo MS-T)", + .internal_name = "bravomst", + .bios_type = BIOS_NORMAL, + .files_no = 2, + .local = 0, + .size = 131072, + .files = { "roms/machines/monaco/1012BU0Q.BIO", "roms/machines/monaco/1012BU0Q.BI1", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t monaco_device = { + .name = "Intel Advanced/MA (Monaco)", + .internal_name = "monaco_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = monaco_config +}; + int machine_at_monaco_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; + const char *fn2; - ret = bios_load_linear_combined("roms/machines/monaco/1007BU0_.BIO", - "roms/machines/monaco/1007BU0_.BI1", - 0x20000, 128); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + fn2 = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 1); + ret = bios_load_linear_combined(fn, fn2, 0x20000, 128); + device_context_restore(); + machine_at_common_init_ex(model, 2); machine_at_monaco_gpio_init(); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index b58b71599..e650af2a6 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12512,7 +12512,7 @@ const machine_t machines[] = { .kbc_p1 = 0x000044f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &zappa_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -13375,6 +13375,52 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the + PC87306 Super I/O chip, command 0xA1 returns '5'. + Command 0xA0 copyright string: (C)1994 AMI . */ + { + .name = "[i430FX] Intel Advanced/AS (Atlantis)", + .internal_name = "atlantis", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_atlantis_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3380, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_3, + .default_jumpered_ecp_dma = 3, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &mach64ct_device_onboard, + .snd_device = NULL, + .net_device = NULL + }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ @@ -13467,52 +13513,6 @@ const machine_t machines[] = { .snd_device = &sb_vibra16s_onboard_device, .net_device = NULL }, - /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the - PC87306 Super I/O chip, command 0xA1 returns '5'. - Command 0xA0 copyright string: (C)1994 AMI . */ - { - .name = "[i430FX] Intel Advanced/AS (Atlantis)", - .internal_name = "atlantis", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_atlantis_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, - .min_voltage = 3380, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 - }, - .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ - .ram = { - .min = 8192, - .max = 131072, - .step = 8192 - }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_3, - .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &mach64ct_device_onboard, - .snd_device = NULL, - .net_device = NULL - }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ @@ -13551,7 +13551,7 @@ const machine_t machines[] = { .kbc_p1 = 0x000044f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &monaco_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -14192,7 +14192,7 @@ const machine_t machines[] = { /* KBC firmware is unknown. No PS/2 port is present and no commands outside */ /* of the base AT KBC command set are used. */ { - .name = "[VLSI Wildcat] Zeos Pantera Wildcat", + .name = "[VLSI Wildcat] ZEOS Boa 2 (Pantera/Wildcat)", .internal_name = "zeoswildcat", .type = MACHINE_TYPE_SOCKET7_3V, .chipset = MACHINE_CHIPSET_VLSI_WILDCAT, From 7727065b5b2648580513969bff74a790dc75ac34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Miguel=20S=C3=A1nchez=20Garc=C3=ADa?= Date: Sat, 11 Oct 2025 03:55:08 +0200 Subject: [PATCH 098/233] Add DFI K6BV3+ (rev. A+) motherboard (#6318) --- src/include/86box/flash.h | 1 + src/include/86box/machine.h | 1 + src/machine/m_at_sockets7.c | 31 +++++++++++++++++++++++ src/machine/machine_table.c | 49 +++++++++++++++++++++++++++++++++++-- src/mem/sst_flash.c | 15 ++++++++++++ 5 files changed, 95 insertions(+), 2 deletions(-) diff --git a/src/include/86box/flash.h b/src/include/86box/flash.h index 606831a45..5ecf0ef60 100644 --- a/src/include/86box/flash.h +++ b/src/include/86box/flash.h @@ -29,6 +29,7 @@ extern const device_t sst_flash_29ee020_device; extern const device_t winbond_flash_w29c512_device; extern const device_t winbond_flash_w29c010_device; +extern const device_t winbond_flash_w29c011a_device; extern const device_t winbond_flash_w29c020_device; extern const device_t winbond_flash_w29c040_device; diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 1510092eb..a5628dfeb 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1117,6 +1117,7 @@ extern int machine_at_delhi3_init(const machine_t *); extern int machine_at_mvp3_init(const machine_t *); extern int machine_at_ficva503a_init(const machine_t *); extern int machine_at_5emapro_init(const machine_t *); +extern int machine_at_k6bv3p_a_init(const machine_t *); /* SiS 5591 */ extern int machine_at_5sg100_init(const machine_t *); diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 7aaffb6ba..832cd3fdd 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -430,6 +430,37 @@ machine_at_5emapro_init(const machine_t *model) return ret; } +int +machine_at_k6bv3p_a_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/k6bv3p_a/KB3A0805.BIN", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 1, 2, 3, 5); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 5); + pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 5); + pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 5, 1); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 5, 1, 2); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 5, 1, 2, 3); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 5); + + device_add(&via_mvp3_device); + device_add(&via_vt82c586b_device); + device_add_params(&fdc37c669_device, (void *) 0); /* jmi2k: what's that param? */ + device_add(&winbond_flash_w29c011a_device); + spd_register(SPD_TYPE_SDRAM, 0x7, 256); + + return ret; +} + /* SiS 5591 */ int machine_at_5sg100_init(const machine_t *model) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index e650af2a6..4ef731f74 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -11578,7 +11578,7 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* The M5Pi appears to have a Phoenix MultiKey KBC firmware according to photos. */ + /* The M5Pi appears to have a Phoenix MultiKey KBC firmware according to photos. */ { .name = "[i430LX] Micronics M5Pi", .internal_name = "m5pi", @@ -13042,7 +13042,7 @@ const machine_t machines[] = { .min = 4096, .max = 131072, .step = 4096 - }, + }, .nvrmask = 127, .jumpered_ecp_dma = MACHINE_DMA_USE_CONFIG, .default_jumpered_ecp_dma = -1, @@ -16956,6 +16956,51 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA + VT82C42N. */ + { + .name = "[VIA MVP3] DFI K6BV3+ (rev. A+)", + .internal_name = "k6bv3p_a", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_k6bv3p_a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, + .min_voltage = 2000, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 5.5 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 16384, + .max = 786432, + .step = 16384 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Socket 8 machines */ /* 450KX */ diff --git a/src/mem/sst_flash.c b/src/mem/sst_flash.c index 5db1e33de..024bcf6a5 100644 --- a/src/mem/sst_flash.c +++ b/src/mem/sst_flash.c @@ -127,6 +127,7 @@ static char flash_path[1024]; #define WINBOND 0xda /* Winbond Manufacturer's ID */ #define W29C512 0xc800 #define W29C010 0xc100 +#define W29C011A 0xc100 #define W29C020 0x4500 #define W29C040 0x4600 @@ -622,6 +623,20 @@ const device_t winbond_flash_w29c010_device = { .config = NULL }; +const device_t winbond_flash_w29c011a_device = { + .name = "Winbond W29C011A Flash BIOS", + .internal_name = "winbond_flash_w29c011a", + .flags = 0, + .local = WINBOND | W29C011A | SIZE_1M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t winbond_flash_w29c020_device = { .name = "Winbond W29C020 Flash BIOS", .internal_name = "winbond_flash_w29c020", From 4d088835eebf05fcbe78961e2dce5f737b7ca7ec Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Sat, 11 Oct 2025 11:39:18 +0700 Subject: [PATCH 099/233] Few machine changes (October 11) (#6319) -Slightly changed the name for IBM PC 3x0 (type 65x6), with the addition of its codename -Slightly changed the revision name to DFI G586VPM -Corrected the configuration for Gateway Lucas according to MSI MS-5185's manual, as well as bringing the ISA slot to it -Alphabetize the DFI K6BV3+ --- src/machine/machine_table.c | 102 ++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 4ef731f74..ee545d117 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12432,7 +12432,7 @@ const machine_t machines[] = { .net_device = NULL }, { - .name = "[i430FX] IBM PC 330/350 type 65x6 (Intel Advanced/MN OEM)", + .name = "[i430FX] IBM PC 3x0 (type 65x6) (Morrison64)", .internal_name = "pc330_65x6", .type = MACHINE_TYPE_SOCKET5, .chipset = MACHINE_CHIPSET_INTEL_430FX, @@ -13061,7 +13061,7 @@ const machine_t machines[] = { }, /* Has a VIA KBC chip */ { - .name = "[VLSI SuperCore] DFI G586VPM Rev C", + .name = "[VLSI SuperCore] DFI G586VPM (rev. C)", .internal_name = "g586vpmc", .type = MACHINE_TYPE_SOCKET5, .chipset = MACHINE_CHIPSET_VLSI_SUPERCORE, @@ -16520,14 +16520,14 @@ const machine_t machines[] = { .cpu = { .package = CPU_PKG_SOCKET5_7, .block = CPU_BLOCK_NONE, - .min_bus = 66666667, + .min_bus = 60000000, .max_bus = 100000000, - .min_voltage = 2000, + .min_voltage = 1300, .max_voltage = 3520, - .min_multi = 1.5, + .min_multi = 2.0, .max_multi = 5.5 }, - .bus_flags = MACHINE_PS2_PCIONLY | MACHINE_BUS_USB, + .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, /* Has internal video: ATI 3D Rage Pro Turbo AGP and sound: Ensoniq ES1373 */ .ram = { .min = 8192, @@ -16776,6 +16776,51 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA + VT82C42N. */ + { + .name = "[VIA MVP3] DFI K6BV3+ (rev. A+)", + .internal_name = "k6bv3p_a", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_k6bv3p_a_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 66666667, + .max_bus = 100000000, + .min_voltage = 2000, + .max_voltage = 3500, + .min_multi = 1.5, + .max_multi = 5.5 + }, + .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .ram = { + .min = 16384, + .max = 786432, + .step = 16384 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has the VIA VT82C596A southbridge with on-chip KBC identical to the VIA VT82C42N. Sadly likely abuses cache on Cyrix 6x86MX and MII CPUs (Cyrix MII being what most socket 7 eMachines PCs used) , so they are blocked and it's thus named after the only known eMachines with an AMD K6-2 CPU here */ { @@ -16956,51 +17001,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA - VT82C42N. */ - { - .name = "[VIA MVP3] DFI K6BV3+ (rev. A+)", - .internal_name = "k6bv3p_a", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, - .init = machine_at_k6bv3p_a_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 66666667, - .max_bus = 100000000, - .min_voltage = 2000, - .max_voltage = 3500, - .min_multi = 1.5, - .max_multi = 5.5 - }, - .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, - .ram = { - .min = 16384, - .max = 786432, - .step = 16384 - }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Socket 8 machines */ /* 450KX */ From ce940933e4424c728d7ec009038563c986b8f382 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Sat, 11 Oct 2025 14:30:58 +0700 Subject: [PATCH 100/233] Fixed minimum multiplier on Gateway Lucas (#6320) This brings back 233MHz and 333MHz CPU speed back that were lost to the machine. --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index ee545d117..9f9fbc3fb 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -16524,7 +16524,7 @@ const machine_t machines[] = { .max_bus = 100000000, .min_voltage = 1300, .max_voltage = 3520, - .min_multi = 2.0, + .min_multi = 1.5, .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, From 9132b5cfee25702cb7c4623b5188f25d0f2857cb Mon Sep 17 00:00:00 2001 From: toggo9 <121191375+toggo9@users.noreply.github.com> Date: Sun, 12 Oct 2025 03:24:33 +0200 Subject: [PATCH 101/233] Remove the unused (and in this case useless) Morrison64 GPIO Handler. (#6323) --- src/machine/m_at_socket5.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index dc4064d31..b6065a27d 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -488,22 +488,6 @@ machine_at_morrison64_gpio_init(void) machine_set_gpio_default(gpio); } -uint32_t -machine_at_morrison64_gpio_handler(uint8_t write, uint32_t val) -{ - uint32_t ret = machine_get_gpio_default(); - - if (write) { - ret &= ((val & 0xffffffcf) | 0xffff0000); - ret |= (val & 0x00000030); - - machine_set_gpio(ret); - } else - ret = machine_get_gpio(); - - return ret; -} - int machine_at_pc330_65x6_init(const machine_t *model) { From 727b1d059d17a02985a4872080cfe5b1819d5e17 Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sun, 12 Oct 2025 11:31:14 +0800 Subject: [PATCH 102/233] Add BIOS selector and 1996 BIOS to the NEC PowerMate Vxxx (#6324) * Add BIOS selector and 1996 BIOS to the NEC PowerMate Vxxx Add a BIOS selector and the 1996 BIOS to the NEC PowerMate Vxxx. * m_at_socket5.c: Version 4.04 -> Version 4.05 --- src/include/86box/machine.h | 3 ++ src/machine/m_at_socket5.c | 65 ++++++++++++++++++++++++++++++++++--- src/machine/machine_table.c | 2 +- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index a5628dfeb..ee8b7eafc 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -922,6 +922,9 @@ extern int machine_at_pc330_65x6_init(const machine_t *); extern const device_t zappa_device; #endif extern int machine_at_zappa_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t powermatev_device; +#endif extern int machine_at_powermatev_init(const machine_t *); extern int machine_at_hawk_init(const machine_t *); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index b6065a27d..aef755c3e 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -669,17 +669,72 @@ machine_at_zappa_init(const machine_t *model) return ret; } +static const device_config_t powermatev_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "powermatev", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS Version 4.05.M - Revision 00.04.08", + .internal_name = "powermatev_122195", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/powermatev/B50NM00M.ROM", "" } + }, + { + .name = "PhoenixBIOS Version 4.05.V - Revision 00.04.15", + .internal_name = "powermatev", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/powermatev/B50NM00V.ROM", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t powermatev_device = { + .name = "NEC PowerMate Vxxx", + .internal_name = "powermatev_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = powermatev_config +}; + int machine_at_powermatev_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/powermatev/BIOS.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 9f9fbc3fb..b4ba3bab8 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12556,7 +12556,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &powermatev_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From 74678a391b8806661b18a7fd9251b26d3b887fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Sun, 12 Oct 2025 05:33:52 +0200 Subject: [PATCH 103/233] NEC PowerMate V: Give it the correct KBC. --- src/machine/machine_table.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index b4ba3bab8..f6837a9df 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12520,7 +12520,10 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* The BIOS sends KBC command B3 which indicates an AMI (or VIA VT82C42N) KBC. */ + /* + The BIOS sends KBC command B3 which indicates an AMI (or VIA VT82C42N) KBC. + The board turns out to be a BCM FM540 which has an AMI 'H' KBC. + */ { .name = "[i430FX] NEC PowerMate Vxxx", .internal_name = "powermatev", @@ -12552,7 +12555,7 @@ const machine_t machines[] = { .jumpered_ecp_dma = MACHINE_DMA_USE_MBDMA, .default_jumpered_ecp_dma = -1, .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, + .kbc_params = KBC_VEN_AMI | 0x00004800, .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, From 57b72c8a5c1d644cab6b32dd53f828004b373008 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Sun, 12 Oct 2025 00:08:02 -0500 Subject: [PATCH 104/233] Aztech AZT1605 (Clinton/Nova 16 Extra) fixes (#6325) * Add missing cpu.h include to fix compile errors when logging is enabled * SB DSP: Move Aztech variable command length handling to correct if block, fixes EEPROM writing hang in MIXTSR * SB DSP: Increment RP after unknown Aztech command 0x08 subcommand 0x01 is run, fixes HWSET detection after EMUTSR is run * Aztech: Give AZT1605 its own read function and only allocate I/O ports in the 62x/64x range * Aztech: Add logging code * AZT1605: Implement the SBPro mixer readout ports, fixes scrambled mixer settings in MIXTSR and HWSET * AZT1605: Restore WSS mixer from EEPROM during init and use sane initial EEPROM mixer values * Aztech: Always use AUX1 WSS channel for CD audio on AZT1605, fixes CD volume control on Win3.1 drivers * AZT1605: Filter OPL3 through WSS AUX2 mixer, fixes FM volume control on Win3.1 drivers --- src/sound/snd_azt2316a.c | 178 ++++++++++++++++++++++++++++++++++----- src/sound/snd_sb_dsp.c | 21 +++-- 2 files changed, 171 insertions(+), 28 deletions(-) diff --git a/src/sound/snd_azt2316a.c b/src/sound/snd_azt2316a.c index 65d10532f..1f88db719 100644 --- a/src/sound/snd_azt2316a.c +++ b/src/sound/snd_azt2316a.c @@ -151,6 +151,24 @@ #include <86box/snd_azt2316a.h> #include <86box/snd_sb.h> #include <86box/plat_unused.h> +#include <86box/log.h> + +#ifdef ENABLE_AZTECH_LOG +int aztech_do_log = ENABLE_AZTECH_LOG; + +static void +aztech_log(void *priv, const char *fmt, ...) +{ + if (aztech_log) { + va_list ap; + va_start(ap, fmt); + log_out(priv, fmt, ap); + va_end(ap); + } +} +#else +# define aztech_log(fmt, ...) +#endif /*530, 11, 3 - 530=23*/ /*530, 11, 1 - 530=22*/ @@ -195,8 +213,18 @@ typedef struct azt2316a_t { mpu_t *mpu; sb_t *sb; + + void * log; /* New logging system */ } azt2316a_t; +static void +azt1605_filter_opl(void *priv, double *out_l, double *out_r) +{ + azt2316a_t *azt2316a = (azt2316a_t *) priv; + + ad1848_filter_channel((void *) &azt2316a->ad1848, AD1848_AUX2, out_l, out_r); +} + static uint8_t azt2316a_wss_read(uint16_t addr, void *priv) { @@ -211,15 +239,18 @@ azt2316a_wss_read(uint16_t addr, void *priv) else temp = 4 | (azt2316a->wss_config & 0xC0); + aztech_log(azt2316a->log, "Aztech WSS: [R] (%04X) = %02X\n", addr, temp); return temp; } static void -azt2316a_wss_write(UNUSED(uint16_t addr), uint8_t val, void *priv) +azt2316a_wss_write(uint16_t addr, uint8_t val, void *priv) { azt2316a_t *azt2316a = (azt2316a_t *) priv; int interrupt = 0; + aztech_log(azt2316a->log, "Aztech WSS: [W] (%04X) = %02X\n", addr, val); + if (azt2316a->wss_interrupt_after_config) { if ((azt2316a->wss_config & 0x40) && !(val & 0x40)) { // TODO: is this the right edge? interrupt = 1; @@ -421,6 +452,7 @@ azt1605_create_config_word(void *priv) } azt2316a->config_word = temp; + aztech_log(azt2316a->log, "Aztech 1605 Config Word Create: %08X\n", temp); } static void @@ -676,6 +708,70 @@ azt2316a_create_config_word(void *priv) } azt2316a->config_word = temp; + aztech_log(azt2316a->log, "Aztech 2316 Config Word Create: %08X\n", temp); +} + +static uint8_t +azt1605_config_read(uint16_t addr, void *priv) +{ + const azt2316a_t *azt2316a = (azt2316a_t *) priv; + uint8_t temp = 0; + + /* Some WSS config here + config change enable bit + (setting bit 7 and writing back) */ + + if (addr == (azt2316a->cur_addr + 0x404)) { + /* TODO: what is the real meaning of the read value? + I got a mention of bit 0x10 for WSS from disassembling the source + code of the driver, and when playing with the I/O ports on real + hardware after doing some configuration, but didn't dig into it. + Bit 0x08 seems to be a busy flag and generates a timeout + (continuous re-reading when initializing windows 98) */ + temp = azt2316a->cur_mode ? 0x07 : 0x0F; + if (azt2316a->config_word_unlocked) { + temp |= 0x80; + } + } else { + /* Rest of config. Bytes 0x00-0x03 are documented in the Linux driver. */ + /* 0x07 causes EMUTSR to resync mixers when nonzero values are written but the mechanism is unknown */ + /* 0x08-0x0F mixer registers are not documented */ + switch (addr & 0x0f) { + case 0x00: + temp = azt2316a->config_word & 0xFF; + break; + case 0x01: + temp = (azt2316a->config_word >> 8); + break; + case 0x02: + temp = (azt2316a->config_word >> 16); + break; + case 0x03: + temp = (azt2316a->config_word >> 24); + break; + case 0x08: /* SBPro Voice mixer readout */ + temp = azt2316a->sb->mixer_sbpro.regs[0x04]; + break; + case 0x09: /* SBPro Mic mixer readout */ + temp = azt2316a->sb->mixer_sbpro.regs[0x0A]; + break; + case 0x0C: /* SBPro Master mixer readout */ + temp = azt2316a->sb->mixer_sbpro.regs[0x22]; + break; + case 0x0D: /* SBPro FM mixer readout */ + temp = azt2316a->sb->mixer_sbpro.regs[0x26]; + break; + case 0x0E: /* SBPro CD mixer readout */ + temp = azt2316a->sb->mixer_sbpro.regs[0x28]; + break; + default: + temp = 0x00; + break; + } + } + + aztech_log(azt2316a->log, "Aztech 1605 Config Word Read: (%04X) = %02X\n", addr, temp); + + return temp; } static uint8_t @@ -719,6 +815,8 @@ azt2316a_config_read(uint16_t addr, void *priv) } } + aztech_log(azt2316a->log, "Aztech 2316 Config Word Read: (%04X) = %02X\n", addr, temp); + return temp; } @@ -728,6 +826,8 @@ azt1605_config_write(uint16_t addr, uint8_t val, void *priv) azt2316a_t *azt2316a = (azt2316a_t *) priv; uint8_t temp; + aztech_log(azt2316a->log, "Aztech 1605 Config Word Write: (%04X) = %02X\n", addr, val); + if (addr == (azt2316a->cur_addr + 0x404)) { if (val & 0x80) azt2316a->config_word_unlocked = 1; @@ -832,10 +932,7 @@ azt2316a_config_write(uint16_t addr, uint8_t val, void *priv) azt2316a_t *azt2316a = (azt2316a_t *) priv; uint8_t temp; - if (azt2316a->type == SB_SUBTYPE_CLONE_AZT1605_0X0C) { - azt1605_config_write(addr, val, azt2316a); - return; - } + aztech_log(azt2316a->log, "Aztech 2316 Config Word Write: (%04X) = %02X\n", addr, val); if (addr == (azt2316a->cur_addr + 0x404)) { if (val & 0x80) @@ -978,6 +1075,8 @@ azt_init(const device_t *info) azt2316a->type = info->local; + azt2316a->log = log_open("AztechWSS"); + if (azt2316a->type == SB_SUBTYPE_CLONE_AZT1605_0X0C) { fn = "azt1605.nvr"; } else if (azt2316a->type == SB_SUBTYPE_CLONE_AZT2316A_0X11) { @@ -1023,22 +1122,22 @@ azt_init(const device_t *info) read_eeprom[14] = 0x01; read_eeprom[15] = 0x00; } else if (azt2316a->type == SB_SUBTYPE_CLONE_AZT1605_0X0C) { - read_eeprom[0] = 0x80; - read_eeprom[1] = 0x80; - read_eeprom[2] = 0x9F; - read_eeprom[3] = 0x13; - read_eeprom[4] = 0x16; - read_eeprom[5] = 0x13; - read_eeprom[6] = 0x00; - read_eeprom[7] = 0x00; - read_eeprom[8] = 0x16; - read_eeprom[9] = 0x0B; - read_eeprom[10] = 0x06; + read_eeprom[0] = 0x80; /* WSS ADC L mixer value */ + read_eeprom[1] = 0x80; /* WSS ADC R mixer value */ + read_eeprom[2] = 0x08; /* WSS AUX1 L mixer value */ + read_eeprom[3] = 0x08; /* WSS AUX1 R mixer value */ + read_eeprom[4] = 0x08; /* WSS AUX2 L mixer value */ + read_eeprom[5] = 0x08; /* WSS AUX2 R mixer value */ + read_eeprom[6] = 0x08; /* WSS DAC L mixer value */ + read_eeprom[7] = 0x08; /* WSS DAC R mixer value */ + read_eeprom[8] = 0x08; /* WSS LINE L mixer value (CS4231) */ + read_eeprom[9] = 0x08; /* WSS LINE R mixer value (CS4231) */ + read_eeprom[10] = 0x80; /* WSS MIC mixer value (CS4231) */ read_eeprom[11] = 0x01; read_eeprom[12] = 0x1C; read_eeprom[13] = 0x14; read_eeprom[14] = 0x04; - read_eeprom[15] = 0x1C; + read_eeprom[15] = 0xFF; /* SBPro Master volume (EMUTSR) */ } } @@ -1211,12 +1310,18 @@ azt_init(const device_t *info) /* wss part */ ad1848_init(&azt2316a->ad1848, device_get_config_int("codec")); - ad1848_set_cd_audio_channel(&azt2316a->ad1848, (device_get_config_int("codec") == AD1848_TYPE_CS4248) ? AD1848_AUX1 : AD1848_LINE_IN); + if (azt2316a->type == SB_SUBTYPE_CLONE_AZT2316A_0X11) + ad1848_set_cd_audio_channel(&azt2316a->ad1848, (device_get_config_int("codec") == AD1848_TYPE_CS4248) ? AD1848_AUX1 : AD1848_LINE_IN); + else + ad1848_set_cd_audio_channel(&azt2316a->ad1848, AD1848_AUX1); ad1848_setirq(&azt2316a->ad1848, azt2316a->cur_wss_irq); ad1848_setdma(&azt2316a->ad1848, azt2316a->cur_wss_dma); - io_sethandler(azt2316a->cur_addr + 0x0400, 0x0040, azt2316a_config_read, NULL, NULL, azt2316a_config_write, NULL, NULL, azt2316a); + if (azt2316a->type == SB_SUBTYPE_CLONE_AZT2316A_0X11) + io_sethandler(azt2316a->cur_addr + 0x0400, 0x0040, azt2316a_config_read, NULL, NULL, azt2316a_config_write, NULL, NULL, azt2316a); + else /* Aztech 1605 only needs 62x/64x */ + io_sethandler(azt2316a->cur_addr + 0x0400, 0x0010, azt1605_config_read, NULL, NULL, azt1605_config_write, NULL, NULL, azt2316a); io_sethandler(azt2316a->cur_wss_addr, 0x0004, azt2316a_wss_read, NULL, NULL, azt2316a_wss_write, NULL, NULL, azt2316a); io_sethandler(azt2316a->cur_wss_addr + 0x0004, 0x0004, ad1848_read, NULL, NULL, ad1848_write, NULL, NULL, &azt2316a->ad1848); @@ -1253,8 +1358,18 @@ azt_init(const device_t *info) azt2316a_create_config_word(azt2316a); sound_add_handler(azt2316a_get_buffer, azt2316a); - if (azt2316a->sb->opl_enabled) - music_add_handler(sb_get_music_buffer_sbpro, azt2316a->sb); + + if (azt2316a->type == SB_SUBTYPE_CLONE_AZT2316A_0X11) { + if (azt2316a->sb->opl_enabled) + music_add_handler(sb_get_music_buffer_sbpro, azt2316a->sb); + } + else { + if (azt2316a->sb->opl_enabled) { + azt2316a->sb->opl_mixer = azt2316a; + azt2316a->sb->opl_mix = azt1605_filter_opl; + music_add_handler(sb_get_music_buffer_sbpro, azt2316a->sb); + } + } sound_set_cd_audio_filter(sbpro_filter_cd_audio, azt2316a->sb); if (azt2316a->cur_mpu401_enabled) { @@ -1266,6 +1381,21 @@ azt_init(const device_t *info) if (device_get_config_int("receive_input")) midi_in_handler(1, sb_dsp_input_msg, sb_dsp_input_sysex, &azt2316a->sb->dsp); + /* Restore WSS mixer settings from EEPROM on AZT1605 cards */ + if (azt2316a->type == SB_SUBTYPE_CLONE_AZT1605_0X0C) { + azt2316a->ad1848.regs[0] = read_eeprom[0]; /* WSS ADC L */ + azt2316a->ad1848.regs[1] = read_eeprom[1]; /* WSS ADC R */ + azt2316a->ad1848.regs[2] = read_eeprom[2]; /* WSS AUX1/CD L */ + azt2316a->ad1848.regs[3] = read_eeprom[3]; /* WSS AUX1/CD R */ + azt2316a->ad1848.regs[4] = read_eeprom[4]; /* WSS AUX2/FM L */ + azt2316a->ad1848.regs[5] = read_eeprom[5]; /* WSS AUX2/FM R */ + azt2316a->ad1848.regs[6] = read_eeprom[6]; /* WSS DAC L */ + azt2316a->ad1848.regs[7] = read_eeprom[7]; /* WSS DAC R */ + azt2316a->ad1848.regs[18] = read_eeprom[8]; /* CS4231 LINE/SB Voice L */ + azt2316a->ad1848.regs[19] = read_eeprom[9]; /* CS4231 LINE/SB Voice R */ + azt2316a->ad1848.regs[26] = read_eeprom[10]; /* CS4231 Mic */ + } + return azt2316a; } @@ -1301,6 +1431,12 @@ azt_close(void *priv) sb_close(azt2316a->sb); free(azt2316a->mpu); + + if (azt2316a->log != NULL) { + log_close(azt2316a->log); + azt2316a->log = NULL; + } + free(azt2316a); } diff --git a/src/sound/snd_sb_dsp.c b/src/sound/snd_sb_dsp.c index 80f6c9555..890395805 100644 --- a/src/sound/snd_sb_dsp.c +++ b/src/sound/snd_sb_dsp.c @@ -28,6 +28,7 @@ #include <86box/snd_sb.h> #include <86box/plat_fallthrough.h> #include <86box/plat_unused.h> +#include "cpu.h" /* NON-PCM SAMPLE FORMATS */ #define ADPCM_4 1 @@ -1300,6 +1301,12 @@ sb_exec_command(sb_dsp_t *dsp) sb_dsp_log("EEPROM read = %02x\n", dsp->azt_eeprom[dsp->sb_data[1]]); sb_add_data(dsp, dsp->azt_eeprom[dsp->sb_data[1]]); break; + } else if ((dsp->sb_data[0] == 0x01) && (dsp->sb_subtype == SB_SUBTYPE_CLONE_AZT1605_0X0C)) { + /* Unknown command executed by EMUTSR after DSP reset */ + sb_dsp_log("AZT1605: Command 0x08 Subcommand 0x01\n"); + /* HACK: Aztech HWSET seems to rely on RP being incremented for detection to work after EMUTSR is run */ + dsp->sb_read_rp++; + break; } else sb_dsp_log("AZT2316A: UNKNOWN 0x08 COMMAND: %02X\n", dsp->sb_data[0]); /* 0x08 (when shutting down, driver tries to read 1 byte of response), 0x55, 0x0D, 0x08D seen */ break; @@ -1919,13 +1926,6 @@ sb_write(uint16_t addr, uint8_t val, void *priv) if (val == 0x01) sb_add_data(dsp, 0); dsp->sb_data_stat++; - if (IS_AZTECH(dsp)) { - /* variable length commands */ - if (dsp->sb_command == 0x08 && dsp->sb_data_stat == 1 && dsp->sb_data[0] == 0x08) - sb_commands[dsp->sb_command] = 3; - else if (dsp->sb_command == 0x08 && dsp->sb_data_stat == 1 && dsp->sb_data[0] == 0x07) - sb_commands[dsp->sb_command] = 2; - } if (IS_ESS(dsp) && dsp->sb_command >= 0x64 && dsp->sb_command <= 0x6F) { sb_commands[dsp->sb_command] = 2; } else if (IS_ESS(dsp) && dsp->sb_command >= 0xA0 && dsp->sb_command <= 0xCF) { @@ -1944,6 +1944,13 @@ sb_write(uint16_t addr, uint8_t val, void *priv) } } else { dsp->sb_data[dsp->sb_data_stat++] = val; + if (IS_AZTECH(dsp)) { + /* variable length commands */ + if (dsp->sb_command == 0x08 && dsp->sb_data_stat == 1 && dsp->sb_data[0] == 0x08) + sb_commands[dsp->sb_command] = 3; + else if (dsp->sb_command == 0x08 && dsp->sb_data_stat == 1 && dsp->sb_data[0] == 0x07) + sb_commands[dsp->sb_command] = 2; + } } if (dsp->sb_data_stat == sb_commands[dsp->sb_command] || sb_commands[dsp->sb_command] == -1) { sb_exec_command(dsp); From 3fb7bc1b564ed658fe045903697609db2406bfad Mon Sep 17 00:00:00 2001 From: Lili Kurek Date: Sun, 12 Oct 2025 09:56:22 +0000 Subject: [PATCH 105/233] Fix building with Qt 6.10 Fixes #6326. --- src/qt/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 1a004d958..1c61f5559 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -48,10 +48,12 @@ set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF) find_package(Threads REQUIRED) find_package(Qt${QT_MAJOR} COMPONENTS Core Widgets Network OpenGL Gui REQUIRED) find_package(Qt${QT_MAJOR}LinguistTools REQUIRED NO_CMAKE_FIND_ROOT_PATH) -if(NOT USE_QT6) - # For in src/qt/qt_mainwindow.cpp +if(USE_QT6) + set(QT_NO_PRIVATE_MODULE_WARNING ON) + find_package(Qt6 COMPONENTS GuiPrivate) +else() include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) -endif () +endif() # TODO: Is this the correct way to do this, and is it required on any # other platforms or with Qt 5? From 3f61475d9ae0574efd81ccb924e970f7d7476374 Mon Sep 17 00:00:00 2001 From: Lili Kurek Date: Sun, 12 Oct 2025 13:49:29 +0000 Subject: [PATCH 106/233] Fix building with Qt 6.10 (#6327) Fixes #6326. --- src/qt/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 1a004d958..1c61f5559 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -48,10 +48,12 @@ set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF) find_package(Threads REQUIRED) find_package(Qt${QT_MAJOR} COMPONENTS Core Widgets Network OpenGL Gui REQUIRED) find_package(Qt${QT_MAJOR}LinguistTools REQUIRED NO_CMAKE_FIND_ROOT_PATH) -if(NOT USE_QT6) - # For in src/qt/qt_mainwindow.cpp +if(USE_QT6) + set(QT_NO_PRIVATE_MODULE_WARNING ON) + find_package(Qt6 COMPONENTS GuiPrivate) +else() include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) -endif () +endif() # TODO: Is this the correct way to do this, and is it required on any # other platforms or with Qt 5? From 93cb9e9c9dbe8051c01a05d205f0d1db23af4eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Sun, 12 Oct 2025 16:16:01 +0200 Subject: [PATCH 107/233] UI: Never move the window to top left on resize, fixes #6329. --- src/qt/qt_mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 45ec2e95b..e41f36c57 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1021,6 +1021,7 @@ void MainWindow::updateShortcuts() void MainWindow::resizeEvent(QResizeEvent *event) { +#ifdef MOVE_WINDOW //qDebug() << pos().x() + event->size().width(); //qDebug() << pos().y() + event->size().height(); if (vid_resize == 1 || video_fullscreen) @@ -1040,6 +1041,7 @@ MainWindow::resizeEvent(QResizeEvent *event) if (newY < 1) newY = 1; } move(newX, newY); +#endif } void From 5c3f0a4ecc0d0bb9af8b68d8808fecab50fedf54 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 12 Oct 2025 18:21:08 +0200 Subject: [PATCH 108/233] OpenGL Renderer: Remove leftover debug code. --- src/qt/qt_openglrenderer.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index 4dd3e8bc6..c8c2e2fc6 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -218,12 +218,6 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch if (version_loc) { snprintf(version, 49, "%s\n", versionRegex.match(progSource).captured(1).toLatin1().data()); progSource.remove(versionRegex); - - version_loc = ((char *) this->glslVersion.toLatin1().data()) + 9; - char glsl_ver[4] = { 0 }; - memcpy(glsl_ver, version_loc, 3); - int ver = atoi((char *) glsl_ver); - pclog("Fucce Ă¾iÄ‹: %d\n", ver); } else { version_loc = ((char *) this->glslVersion.toLatin1().data()) + 9; char glsl_ver[4] = { 0 }; @@ -1738,3 +1732,4 @@ OpenGLRenderer::render() frameCounter++; context->swapBuffers(this); } + From b6879768ee5ba497a861121f27166ee86db2fe6e Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 12 Oct 2025 18:25:04 +0200 Subject: [PATCH 109/233] Fix warnings. --- src/machine/m_at_socket5.c | 5 ++--- src/machine/m_at_socket7_3v.c | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index aef755c3e..409beee24 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -432,7 +432,6 @@ static void machine_at_morrison64_gpio_init(void) { uint32_t gpio = 0xffffe0cf; - uint16_t addr; /* Return to this after CS4232 PnP is working. */ /* Register 0x0078 (Undocumented): */ @@ -482,8 +481,8 @@ machine_at_morrison64_gpio_init(void) gpio |= 0xffff01af; else if (cpu_dmulti <= 2.0) gpio |= 0xffffe2af; - if ((cpu_dmulti > 2.0) && (cpu_dmulti <= 2.5)) - gpio |= 0xffffe5cf; + else if ((cpu_dmulti > 2.0) && (cpu_dmulti <= 2.5)) + gpio |= 0xffffe5cf; machine_set_gpio_default(gpio); } diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 8547701f4..add28bd1b 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -431,7 +431,6 @@ static void machine_at_monaco_gpio_init(void) { uint32_t gpio = 0xffffe0cf; - uint16_t addr; /* Return to this after CS4232 PnP is working. */ /* Register 0x0078 (Undocumented): */ From 50c9fd6a0de3ca3f2d150a485688c1318431e5de Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 13 Oct 2025 00:39:02 +0600 Subject: [PATCH 110/233] Generalized PC87307 GPIO handler (#6331) --- src/sio/sio_pc87307.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index 44db6ee9d..9a56ab05b 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -34,6 +34,7 @@ #include <86box/fdc.h> #include <86box/keyboard.h> #include <86box/sio.h> +#include <86box/random.h> #include <86box/plat_fallthrough.h> #include "cpu.h" @@ -108,6 +109,15 @@ pc87307_gpio_write(uint16_t port, uint8_t val, void *priv) CS, cpu_state.pc, port, bank, val); dev->gpio[bank][port & 0x0007] = val; + + if (bank == 0) { + if ((port & 0x7) >= 4) { + /* Bit 31 to indicate write to second GPIO set. Only lower 16 bits are returned on reads so it does not matter much. */ + machine_handle_gpio(1, (1 << 31) | (dev->gpio[0][5] & dev->gpio[0][4])); + } else { + machine_handle_gpio(1, (dev->gpio[0][0] & dev->gpio[0][1])); + } + } } uint8_t @@ -118,18 +128,18 @@ pc87307_gpio_read(uint16_t port, void *priv) uint8_t bank = !!(dev->regs[0x22] & 0x80); uint8_t ret = dev->gpio[bank][port & 0x0007]; - switch (port & 0x0003) { + switch (port & 0x0007) { case 0x0000: if (bank == 0) { uint8_t mask = dev->gpio[0][1]; - pins = 0x7f; + pins = machine_handle_gpio(0, 0xFFFF) & 0xFF; ret = (ret & mask) | (pins & ~mask); } break; case 0x0004: if (bank == 0) { uint8_t mask = dev->gpio[0][5]; - pins = 0xfb; + pins = (machine_handle_gpio(0, 0xFFFF) >> 8) & 0xFF; ret = (ret & mask) | (pins & ~mask); } else ret = 0xff; @@ -152,13 +162,13 @@ static void pc87307_gpio_remove(pc87307_t *dev) { if (dev->gpio_base != 0xffff) { - io_removehandler(dev->gpio_base, 0x0002, + io_removehandler(dev->gpio_base, 0x0008, pc87307_gpio_read, NULL, NULL, pc87307_gpio_write, NULL, NULL, dev); dev->gpio_base = 0xffff; } if (dev->gpio_base2 != 0xffff) { - io_removehandler(dev->gpio_base2, 0x0002, + io_removehandler(dev->gpio_base2, 0x0008, pc87307_gpio_read, NULL, NULL, pc87307_gpio_write, NULL, NULL, dev); dev->gpio_base2 = 0xffff; } @@ -171,7 +181,7 @@ pc87307_gpio_init(pc87307_t *dev, int bank, uint16_t addr) *bank_base = addr; - io_sethandler(*bank_base, 0x0002, + io_sethandler(*bank_base, 0x0008, pc87307_gpio_read, NULL, NULL, pc87307_gpio_write, NULL, NULL, dev); } From 05fe82a2052ce5a36406f04d0e63773a8e202498 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 13 Oct 2025 01:40:29 +0600 Subject: [PATCH 111/233] Give all PC87307 machines the earlier GPIO behaviour (#6332) --- src/include/86box/machine.h | 1 + src/machine/m_at_socket8.c | 9 +++++++++ src/machine/machine_table.c | 8 ++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index ee8b7eafc..886e73356 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1139,6 +1139,7 @@ extern int machine_at_acerv60n_init(const machine_t *); extern int machine_at_p65up5_cp6nd_init(const machine_t *); extern int machine_at_8600ttc_init(const machine_t *); extern int machine_at_686nx_init(const machine_t *); +extern uint32_t machine_ap440fx_vs440fx_gpio_handler(uint8_t write, uint32_t val); extern int machine_at_ap440fx_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t vs440fx_device; diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index ea53e5fd4..8d1847d5f 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -303,6 +303,15 @@ machine_at_686nx_init(const machine_t *model) return ret; } +uint32_t +machine_ap440fx_vs440fx_gpio_handler(uint8_t write, uint32_t val) +{ + if (!write) + return 0xff7f; + + (void)val; /* Writes are ignored. */ +} + int machine_at_ap440fx_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index f6837a9df..b2534988f 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -15608,7 +15608,7 @@ const machine_t machines[] = { .chipset = MACHINE_CHIPSET_INTEL_430TX, .init = machine_at_optiplexgn_init, .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, + .gpio_handler = machine_ap440fx_vs440fx_gpio_handler, .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, .cpu = { @@ -17328,7 +17328,7 @@ const machine_t machines[] = { .chipset = MACHINE_CHIPSET_INTEL_440FX, .init = machine_at_ap440fx_init, .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, + .gpio_handler = machine_ap440fx_vs440fx_gpio_handler, .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, .cpu = { @@ -17374,7 +17374,7 @@ const machine_t machines[] = { .chipset = MACHINE_CHIPSET_INTEL_440FX, .init = machine_at_vs440fx_init, .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, + .gpio_handler = machine_ap440fx_vs440fx_gpio_handler, .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, .cpu = { @@ -17781,7 +17781,7 @@ const machine_t machines[] = { .chipset = MACHINE_CHIPSET_INTEL_440LX, .init = machine_at_optiplexgxa_init, .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, + .gpio_handler = machine_ap440fx_vs440fx_gpio_handler, .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, .cpu = { From ffa8d90e514c1cb010d72ca5c25c3f08cce4667c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 13 Oct 2025 03:13:27 +0600 Subject: [PATCH 112/233] Fix warnings (#6333) --- src/machine/m_at_socket8.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index 8d1847d5f..11fbcd694 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -309,7 +309,7 @@ machine_ap440fx_vs440fx_gpio_handler(uint8_t write, uint32_t val) if (!write) return 0xff7f; - (void)val; /* Writes are ignored. */ + return val; /* Writes are ignored. */ } int From b19be165ca7c4b3e927ac7da3ea692582f9912b4 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 13 Oct 2025 02:23:39 +0200 Subject: [PATCH 113/233] AN430TX: Use the VS440FX GPIO handler, unbreaks the Packard Bell. --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index b2534988f..c1099ed42 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -15698,7 +15698,7 @@ const machine_t machines[] = { .chipset = MACHINE_CHIPSET_INTEL_430TX, .init = machine_at_an430tx_init, .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, + .gpio_handler = machine_ap440fx_vs440fx_gpio_handler, .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, .cpu = { From 6e72b21fc442b42f81e5d69ea482201b4a9d0c07 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 13 Oct 2025 14:43:06 +0600 Subject: [PATCH 114/233] PC87307 GPIO write handling is now saner (#6336) --- src/sio/sio_pc87307.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index 9a56ab05b..ab290ef3d 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -111,12 +111,7 @@ pc87307_gpio_write(uint16_t port, uint8_t val, void *priv) dev->gpio[bank][port & 0x0007] = val; if (bank == 0) { - if ((port & 0x7) >= 4) { - /* Bit 31 to indicate write to second GPIO set. Only lower 16 bits are returned on reads so it does not matter much. */ - machine_handle_gpio(1, (1 << 31) | (dev->gpio[0][5] & dev->gpio[0][4])); - } else { - machine_handle_gpio(1, (dev->gpio[0][0] & dev->gpio[0][1])); - } + machine_handle_gpio(1, ((dev->gpio[0][5] & dev->gpio[0][4]) << 8) | (dev->gpio[0][0] & dev->gpio[0][1])); } } From 9079c68200a72474fb27f38d742dc3a9cb3e5be2 Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Mon, 13 Oct 2025 20:21:56 +0800 Subject: [PATCH 115/233] m_at_socket7.c: Align array entries for Intel AN430TX (Anchorage) (#6337) --- src/machine/m_at_socket7.c | 47 +++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 3bd4f8a95..7916db2d4 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -1422,24 +1422,39 @@ machine_at_ma23c_init(const machine_t *model) static const device_config_t an430tx_config[] = { // clang-format off { - .name = "bios", - .description = "BIOS Version", - .type = CONFIG_BIOS, + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, .default_string = "pb79x", - .default_int = 0, - .file_filter = "", - .spinner = { 0 }, - .bios = { - { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P02-0011 (Sony Vaio PCV-130/150)", .internal_name = "vaio150", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/an430tx/P02-0011.BIO", "roms/machines/an430tx/P02-0011.BI1", - "roms/machines/an430tx/P02-0011.BI2", "roms/machines/an430tx/P02-0011.BI3", - "roms/machines/an430tx/P02-0011.RCV", "" } }, - { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P09-0006 (Packard Bell PB79x)", .internal_name = "pb79x", .bios_type = BIOS_NORMAL, - .files_no = 5, .local = 0, .size = 262144, .files = { "roms/machines/an430tx/ANP0911A.BIO", "roms/machines/an430tx/ANP0911A.BI1", - "roms/machines/an430tx/ANP0911A.BI2", "roms/machines/an430tx/ANP0911A.BI3", - "roms/machines/an430tx/ANP0911A.RCV", "" } }, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P02-0011 (Sony Vaio PCV-130/150)", + .internal_name = "vaio150", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/an430tx/P02-0011.BIO", "roms/machines/an430tx/P02-0011.BI1", + "roms/machines/an430tx/P02-0011.BI2", "roms/machines/an430tx/P02-0011.BI3", + "roms/machines/an430tx/P02-0011.RCV", "" } + }, + { + .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P09-0006 (Packard Bell PB79x)", + .internal_name = "pb79x", + .bios_type = BIOS_NORMAL, + .files_no = 5, + .local = 0, + .size = 262144, + .files = { "roms/machines/an430tx/ANP0911A.BIO", "roms/machines/an430tx/ANP0911A.BI1", + "roms/machines/an430tx/ANP0911A.BI2", "roms/machines/an430tx/ANP0911A.BI3", + "roms/machines/an430tx/ANP0911A.RCV", "" } + }, { .files_no = 0 } - }, + } }, { .name = "", .description = "", .type = CONFIG_END } // clang-format on From ad2499e1c07b74314143917d2d671873c7ee4cb5 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Mon, 13 Oct 2025 21:58:59 +0700 Subject: [PATCH 116/233] Additional BIOSes for six selected machines + few misc. changes (#6339) * Added Tulip BIOS to Tyan Tsunami ATX * Added non-OEM BIOS to TriGem Delhi-III + renamed * Added the 1999 4.50PG BIOS to FIC PT-2000 * Added Rainbow BIOSes to MS-5119 and FMB Also added codenames/original names to ValuePoint P60, PowerMate Vxxx, and E-1000 * Added the earliest v4.51PG BIOS to AOpen AX6BC Also corrected the latest BIOS name to FIC PT-2000 * Correct the BIOS version names for AX6BC * Changed the name for HP i440ZX machine * Slightly change the notes for Delhi-III --- src/include/86box/machine.h | 18 +++++ src/machine/m_at_slot1.c | 130 +++++++++++++++++++++++++++++++--- src/machine/m_at_socket5.c | 65 +++++++++++++++-- src/machine/m_at_socket7_3v.c | 130 +++++++++++++++++++++++++++++++--- src/machine/m_at_sockets7.c | 65 +++++++++++++++-- src/machine/machine_table.c | 107 ++++++++++++++-------------- 6 files changed, 431 insertions(+), 84 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 886e73356..1f8aaeae3 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -916,6 +916,9 @@ extern int machine_at_tek932_init(const machine_t *); extern int machine_at_acerv30_init(const machine_t *); extern int machine_at_apollo_init(const machine_t *); extern int machine_at_optiplexgxl_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t pt2000_device; +#endif extern int machine_at_pt2000_init(const machine_t *); extern int machine_at_pc330_65x6_init(const machine_t *); #ifdef EMU_DEVICE_H @@ -975,9 +978,15 @@ extern int machine_at_atlantis_init(const machine_t *); extern const device_t monaco_device; #endif extern int machine_at_monaco_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t ms5119_device; +#endif extern int machine_at_ms5119_init(const machine_t *); extern int machine_at_pb640_init(const machine_t *); extern int machine_at_mb500n_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t fmb_device; +#endif extern int machine_at_fmb_init(const machine_t *); /* i430HX */ @@ -1116,6 +1125,9 @@ extern int machine_at_g5x_init(const machine_t *); /* VIA MVP3 */ extern int machine_at_ax59pro_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t delhi3_device; +#endif extern int machine_at_delhi3_init(const machine_t *); extern int machine_at_mvp3_init(const machine_t *); extern int machine_at_ficva503a_init(const machine_t *); @@ -1176,6 +1188,9 @@ extern int machine_at_bf6_init(const machine_t *); extern const device_t bx6_device; #endif extern int machine_at_bx6_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t ax6bc_device; +#endif extern int machine_at_ax6bc_init(const machine_t *); extern int machine_at_p2bls_init(const machine_t *); extern int machine_at_p3bf_init(const machine_t *); @@ -1192,6 +1207,9 @@ extern const device_t ms6147_device; #endif extern int machine_at_ms6147_init(const machine_t *); extern int machine_at_p6sba_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t s1846_device; +#endif extern int machine_at_s1846_init(const machine_t *); /* i440ZX */ diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 0ed20583f..5345724d6 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -571,17 +571,72 @@ machine_at_p3bf_init(const machine_t *model) return ret; } +static const device_config_t ax6bc_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "ax6bc", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PGM - Revision R1.10", + .internal_name = "ax6bc_451pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ax6bc/ax6bc110.bin", "" } + }, + { + .name = "Award Modular BIOS v4.60PGM - Revision R2.59", + .internal_name = "ax6bc", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/ax6bc/AX6BC_R2.59.bin", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t ax6bc_device = { + .name = "AOpen AX6BC", + .internal_name = "ax6bc_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = ax6bc_config +}; + int machine_at_ax6bc_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/ax6bc/AX6BC_R2.59.bin", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); @@ -937,17 +992,72 @@ machine_at_p6sba_init(const machine_t *model) return ret; } +static const device_config_t s1846_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "s1846", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 2.00.04", + .internal_name = "s1846", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/s1846/bx46200f.rom", "" } + }, + { + .name = "AMIBIOS 6 (071595) - Revision 2.00.0x (Tulip Vision Line TP90)", + .internal_name = "tp90", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/s1846/1846TP90.BIN", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t s1846_device = { + .name = "Tyan Tsunami ATX", + .internal_name = "s1846_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = s1846_config +}; + int machine_at_s1846_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/s1846/bx46200f.rom", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 409beee24..1d8f50a76 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -552,17 +552,72 @@ machine_at_zappa_gpio_init(void) machine_set_gpio_default(gpio); } +static const device_config_t pt2000_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "pt2000", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.50GP - Revision T1.01", + .internal_name = "pt2000_450gp", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ficpt2000/PT2000_v1.01.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 3.072C806", + .internal_name = "pt2000", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ficpt2000/3072c806.bin", "" } + }, + { .files_no = 0 } + }, + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t pt2000_device = { + .name = "FIC PT-2000", + .internal_name = "pt2000_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = pt2000_config +}; + int machine_at_pt2000_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/ficpt2000/PT2000_v1.01.BIN", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index add28bd1b..fb24f5a43 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -667,17 +667,72 @@ machine_at_monaco_init(const machine_t *model) return ret; } +static const device_config_t ms5119_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "ms5119", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision A37EB", + .internal_name = "ms5119", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms5119/A37EB.ROM", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Release 2.3 (by Rainbow)", + .internal_name = "ms5119_v451pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms5119/MS-5120.BIN", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t ms5119_device = { + .name = "MSI MS-5119", + .internal_name = "ms5119_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = ms5119_config +}; + int machine_at_ms5119_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/ms5119/A37EB.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); @@ -793,17 +848,72 @@ machine_at_mb500n_init(const machine_t *model) return ret; } +static const device_config_t fmb_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "fmb", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 1.83", + .internal_name = "fmb", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/fmb/P5IV183.ROM", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - 2001 Release (by Rainbow)", + .internal_name = "fmb_v451pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/fmb/P5I437FM.BIN", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t fmb_device = { + .name = "QDI FMB", + .internal_name = "fmb_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = fmb_config +}; + int machine_at_fmb_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/fmb/P5IV183.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 832cd3fdd..07b3c59af 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -298,17 +298,72 @@ machine_at_ax59pro_init(const machine_t *model) return ret; } +static const device_config_t delhi3_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "delhi3", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 1.01", + .internal_name = "delhi3", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/delhi3/DELHI3_nonoem.ROM", "" } + }, + { + .name = "AMIBIOS 6 (071595) - Revision 1.20 (eMachines eTower 3__k)", + .internal_name = "etower", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/delhi3/DELHI3.ROM", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t delhi3_device = { + .name = "TriGem Delhi-III", + .internal_name = "delhi3_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = delhi3_config +}; + int machine_at_delhi3_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/delhi3/DELHI3.ROM", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index c1099ed42..7333e6846 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -11448,7 +11448,7 @@ const machine_t machines[] = { }, /* Has IBM PS/2 Type 1 KBC firmware. */ { - .name = "[i430LX] IBM PS/ValuePoint P60", + .name = "[i430LX] IBM PS/ValuePoint P60 (Robin ACE)", .internal_name = "valuepointp60", .type = MACHINE_TYPE_SOCKET4, .chipset = MACHINE_CHIPSET_INTEL_430LX, @@ -12423,7 +12423,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &pt2000_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -12525,7 +12525,7 @@ const machine_t machines[] = { The board turns out to be a BCM FM540 which has an AMI 'H' KBC. */ { - .name = "[i430FX] NEC PowerMate Vxxx", + .name = "[i430FX] NEC PowerMate Vxxx (BCM FM540)", .internal_name = "powermatev", .type = MACHINE_TYPE_SOCKET5, .chipset = MACHINE_CHIPSET_INTEL_430FX, @@ -13598,7 +13598,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &ms5119_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -13731,7 +13731,7 @@ const machine_t machines[] = { .kbc_p1 = 0x000004f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &fmb_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -15648,7 +15648,7 @@ const machine_t machines[] = { }, /* [TEST] Has AMI Megakey '5' KBC firmware on the SM(S)C FDC37C67x Super I/O chip. */ { - .name = "[i430TX] Gateway E-1000", + .name = "[i430TX] Gateway E-1000 (Tomahawk)", .internal_name = "tomahawk", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430TX, @@ -16824,51 +16824,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has the VIA VT82C596A southbridge with on-chip KBC identical to the VIA - VT82C42N. Sadly likely abuses cache on Cyrix 6x86MX and MII CPUs (Cyrix MII being what most socket 7 eMachines PCs used) , so they are blocked and it's thus named after the only known eMachines with an AMD K6-2 CPU here */ - { - .name = "[VIA MVP3] eMachines eTower 300k", - .internal_name = "delhi3", - .type = MACHINE_TYPE_SOCKETS7, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, - .init = machine_at_delhi3_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_Cx6x86MX), - .min_bus = 66666667, - .max_bus = 124242424, - .min_voltage = 2000, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 5.5 - }, - .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Has internal video: ATI 3D Rage IIc AGP (Rage 2) */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_USB, - .ram = { - .min = 8192, - .max = 524288, - .step = 8192 - }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &cs4235_onboard_device, - .net_device = NULL - }, /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { @@ -17004,6 +16959,50 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has the VIA VT82C596A southbridge with on-chip KBC identical to the VIA VT82C42N. */ + { + .name = "[VIA MVP3] TriGem Delhi-III", + .internal_name = "delhi3", + .type = MACHINE_TYPE_SOCKETS7, + .chipset = MACHINE_CHIPSET_VIA_APOLLO_MVP3, + .init = machine_at_delhi3_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_Cx6x86MX), /* Sadly it likely abuses cache if using Cyrix 6x86MX and MII CPUs (the latter being what most Socket 7 eMachines PCs used), so they are blocked. */ + .min_bus = 66666667, + .max_bus = 124242424, + .min_voltage = 2000, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 5.5 + }, + .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Has internal video: ATI 3D Rage IIc AGP (Rage 2) */ + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_USB, + .ram = { + .min = 8192, + .max = 524288, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &delhi3_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &cs4235_onboard_device, + .net_device = NULL + }, /* Socket 8 machines */ /* 450KX */ @@ -18083,7 +18082,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &ax6bc_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -18396,7 +18395,7 @@ const machine_t machines[] = { .kbc_p1 = 0x000044f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &s1846_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -18409,7 +18408,7 @@ const machine_t machines[] = { /* Has a SM(S)C FDC37M60x Super I/O chip with on-chip KBC with most likely AMIKey-2 KBC firmware. */ { - .name = "[i440ZX] HP Vectra VEi 8", + .name = "[i440ZX] HP Sherwood-B (MiTAC/Trigon 6110Zu)", .internal_name = "vei8", .type = MACHINE_TYPE_SLOT1, .chipset = MACHINE_CHIPSET_INTEL_440ZX, From 32b3f1930d762a587915c5a83a8df8109a5441b7 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 14 Oct 2025 01:10:34 +0600 Subject: [PATCH 117/233] Fix bad PCI slots for onboard Mach64 PCI devices (#6341) --- src/video/vid_ati_mach64.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index f809a6c0e..bd65a1376 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -4897,7 +4897,7 @@ mach64_common_init(const device_t *info) mach64_io_set(mach64); if (info->flags & DEVICE_PCI) - pci_add_card(PCI_ADD_NORMAL, mach64_pci_read, mach64_pci_write, mach64, &mach64->pci_slot); + pci_add_card((info->local & (1 << 19)) ? PCI_ADD_VIDEO : PCI_ADD_NORMAL, mach64_pci_read, mach64_pci_write, mach64, &mach64->pci_slot); mach64->pci_regs[PCI_REG_COMMAND] = 3; mach64->pci_regs[0x30] = 0x00; @@ -4989,7 +4989,8 @@ mach64ct_init(const device_t *info) ati_eeprom_load(&mach64->eeprom, "mach64ct.nvr", 1); - rom_init(&mach64->bios_rom, BIOS_ROMCT_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + if (!(info->local & (1 << 19))) + rom_init(&mach64->bios_rom, BIOS_ROMCT_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); mem_mapping_disable(&mach64->bios_rom.mapping); From e56eeaa9b4fdfd82bbc408648132e97a6723aee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miran=20Gr=C4=8Da?= Date: Tue, 14 Oct 2025 04:57:58 +0200 Subject: [PATCH 118/233] CUE sheet loader: Add REM TAOGAP support. --- src/cdrom/cdrom_image.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cdrom/cdrom_image.c b/src/cdrom/cdrom_image.c index 816a563d8..6452868ab 100644 --- a/src/cdrom/cdrom_image.c +++ b/src/cdrom/cdrom_image.c @@ -1803,6 +1803,16 @@ image_load_cue(cd_image_t *img, const char *cuefile) lo_cmd = 0; image_log(img->log, " [SESSION ] Initialization successful\n"); + } else if (!strcmp(command, "TAOGAP")) { + ci = &(ct->idx[2]); + + ci->type = INDEX_ZERO; + ci->file = tf; + success = image_cue_get_frame(&frame, &line); + ci->length = frame; + + image_log(img->log, " [INDEX ] 02 (%8s): Initialization %s\n", + cit[ci->type + 2], success ? "successful" : "failed"); } } } From 7ad56f017993d49c9be4a805e0da9f33e5a5a6de Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Mon, 13 Oct 2025 23:54:00 -0500 Subject: [PATCH 119/233] Minor Aztech changes (#6343) * Switch CD audio and OPL3 filters on AZT2316 mode switch, fixes FM and CD volume control on Windows * Add support for I/O port 630h (as used on PB Forte16 cards) to the MKE/Panasonic interface --- src/cdrom/cdrom_mke.c | 1 + src/sound/snd_azt2316a.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/cdrom/cdrom_mke.c b/src/cdrom/cdrom_mke.c index 98ae6c057..9632c3140 100644 --- a/src/cdrom/cdrom_mke.c +++ b/src/cdrom/cdrom_mke.c @@ -1041,6 +1041,7 @@ static const device_config_t mke_config[] = { { .description = "320H", .value = 0x320 }, { .description = "330H", .value = 0x330 }, { .description = "340H", .value = 0x340 }, + { .description = "630H", .value = 0x630 }, { NULL } }, .bios = { { 0 } } diff --git a/src/sound/snd_azt2316a.c b/src/sound/snd_azt2316a.c index 1f88db719..226adad15 100644 --- a/src/sound/snd_azt2316a.c +++ b/src/sound/snd_azt2316a.c @@ -1040,10 +1040,20 @@ azt2316a_enable_wss(uint8_t enable, void *priv) { azt2316a_t *azt2316a = (azt2316a_t *) priv; - if (enable) + sound_set_cd_audio_filter(NULL, NULL); + + if (enable) { azt2316a->cur_mode = 1; - else + sound_set_cd_audio_filter(ad1848_filter_cd_audio, &azt2316a->ad1848); + azt2316a->sb->opl_mixer = azt2316a; + azt2316a->sb->opl_mix = azt1605_filter_opl; + } + else { azt2316a->cur_mode = 0; + sound_set_cd_audio_filter(sbpro_filter_cd_audio, azt2316a->sb); + azt2316a->sb->opl_mixer = NULL; + azt2316a->sb->opl_mix = NULL; + } } static void From 5d55e5dd53ad84fd88fa86f30abcb6adc94cf447 Mon Sep 17 00:00:00 2001 From: kees-z Date: Tue, 14 Oct 2025 17:28:06 +0200 Subject: [PATCH 120/233] Fix typos and translation improvements --- src/qt/languages/nl-NL.po | 132 +++++++++++++++++++------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 68bcbc2bf..ee57f32a1 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -43,7 +43,7 @@ msgid "&Hide status bar" msgstr "&Statusbalk verbergen" msgid "Hide &toolbar" -msgstr "Verberg &toolbar" +msgstr "&Toolbar verbergen" msgid "&Resizeable window" msgstr "&Venster met aanpasbare grootte" @@ -109,7 +109,7 @@ msgid "Fi<er method" msgstr "Filtermethode" msgid "&Nearest" -msgstr "&Dichtsbijzijnde" +msgstr "&Dichtstbijzijnde" msgid "&Linear" msgstr "&Lineair" @@ -220,7 +220,7 @@ msgid "Begin trace" msgstr "Begin traceren" msgid "End trace" -msgstr "Traceren beĂ«indigen" +msgstr "BeĂ«indig traceren" msgid "&Help" msgstr "&Help" @@ -232,19 +232,19 @@ msgid "&About 86Box..." msgstr "&Over 86Box..." msgid "&New image..." -msgstr "&Nieuw image..." +msgstr "&Nieuw imagebestand..." msgid "&Existing image..." -msgstr "&Bestaande image..." +msgstr "&Bestaande imagebestand..." msgid "Existing image (&Write-protected)..." -msgstr "Bestaande image (&Schrijfbeveiligd)..." +msgstr "Bestaand imagebestand (&Schrijfbeveiligd)..." msgid "&Record" msgstr "&Opnemen" msgid "&Play" -msgstr "&Play" +msgstr "&Afspelen" msgid "&Rewind to the beginning" msgstr "&Terugspoelen naar het begin" @@ -256,19 +256,19 @@ msgid "E&ject" msgstr "&Uitwerpen" msgid "&Image..." -msgstr "&Image..." +msgstr "&Imagebestand..." msgid "E&xport to 86F..." msgstr "E&xporteer naar 86F..." msgid "&Mute" -msgstr "&Mute" +msgstr "&Dempen" msgid "E&mpty" -msgstr "E&mpty" +msgstr "&Leeg" msgid "Reload previous image" -msgstr "Herlaad vorige image" +msgstr "Herlaad vorig imagebestand" msgid "&Folder..." msgstr "&Map..." @@ -301,7 +301,7 @@ msgid "&Select shader..." msgstr "&Selecteer shader..." msgid "&Remove shader" -msgstr "&Remove shader" +msgstr "&Verwijder shader" msgid "Preferences" msgstr "Voorkeuren" @@ -310,7 +310,7 @@ msgid "Sound Gain" msgstr "Geluidsversterking" msgid "New Image" -msgstr "Nieuw image" +msgstr "Nieuw imagebestand" msgid "Settings" msgstr "Instellingen" @@ -343,7 +343,7 @@ msgid "RPM mode:" msgstr "RPM-modus:" msgid "Progress:" -msgstr "Vooruitgang:" +msgstr "Voortgang:" msgid "Width:" msgstr "Breedte:" @@ -352,7 +352,7 @@ msgid "Height:" msgstr "Hoogte:" msgid "Lock to this size" -msgstr "Leg vast op deze grootte" +msgstr "Vergrendel deze grootte" msgid "Machine type:" msgstr "Machinetype:" @@ -403,10 +403,10 @@ msgid "Dynamic Recompiler" msgstr "Dynamische Recompiler" msgid "CPU frame size" -msgstr "CPU frame grootte" +msgstr "CPU framegrootte" msgid "Larger frames (less smooth)" -msgstr "Groter frames (minder vloeiend)" +msgstr "Grotere frames (minder vloeiend)" msgid "Smaller frames (smoother)" msgstr "Kleinere frames (vloeiender)" @@ -430,7 +430,7 @@ msgid "IBM PS/55 Display Adapter Graphics" msgstr "IBM PS/55 Display Adapter Graphics" msgid "Keyboard:" -msgstr "Toetsenbord" +msgstr "Toetsenbord:" msgid "Keyboard" msgstr "Toetsenbord" @@ -472,13 +472,13 @@ msgid "Sound card #4:" msgstr "Geluidskaart #4:" msgid "MIDI Out Device:" -msgstr "MIDI Out-apparaat:" +msgstr "MIDI Uitvoerapparaat:" msgid "MIDI In Device:" -msgstr "MIDI In-apparaat:" +msgstr "MIDI Invoerapparaat:" msgid "MIDI Out:" -msgstr "Midi Out:" +msgstr "Midi Uit:" msgid "Standalone MPU-401" msgstr "Standalone MPU-401" @@ -649,7 +649,7 @@ msgid "Removable disks:" msgstr "Verwisselbare schijven:" msgid "Removable disk drives:" -msgstr "Verwisselbare schijfstations" +msgstr "Verwisselbare schijfstations:" msgid "ZIP 250" msgstr "ZIP 250" @@ -712,13 +712,13 @@ msgid "&Removable disk %1 (%2): %3" msgstr "&Verwijderbare schijf %1 (%2): %3" msgid "Removable disk images" -msgstr "Verwijderbare schijf image" +msgstr "Verwijderbaar schijfimagebestand" msgid "Image %1" msgstr "Image %1" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box kon geen bruikbare ROM images vinden.\n\nDownload een ROM set en pak deze uit in de map \"roms\"." +msgstr "86Box kon geen bruikbare ROM imagebestanden vinden.\n\nDownload een ROM set en pak deze uit in de map \"roms\"." msgid "(empty)" msgstr "(leeg)" @@ -814,7 +814,7 @@ msgid "Click to capture mouse" msgstr "Klik om muis vast te leggen" msgid "Press %1 to release mouse" -msgstr "Druk op %1 om de muis los te laten" +msgstr "Druk op %1 om de muis vrij te geven" msgid "Press %1 or middle button to release mouse" msgstr "Druk op %1 of middelste knop om de muis los te laten" @@ -973,7 +973,7 @@ msgid "Do you want to save the settings?" msgstr "Wil je de instellingen opslaan?" msgid "This will hard reset the emulated machine." -msgstr "Dit zal de geĂ«muleerde machine een hard reset geven." +msgstr "Dit zal de geĂ«muleerde machine een harde reset geven." msgid "Save" msgstr "Opslaan" @@ -1054,10 +1054,10 @@ msgid "Cartridge images" msgstr "Cartridge-images" msgid "Resume execution" -msgstr "Hervat executie" +msgstr "Hervat uitvoering" msgid "Pause execution" -msgstr "Pauze executie" +msgstr "Pauzeer uitvoering" msgid "Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del" @@ -1084,7 +1084,7 @@ msgid "&Start" msgstr "&Start" msgid "Not running" -msgstr "Niet actied" +msgstr "Niet actief" msgid "Running" msgstr "Actief" @@ -1093,10 +1093,10 @@ msgid "Paused" msgstr "Gepauzeerd" msgid "Waiting" -msgstr "aan het wachtend" +msgstr "Aan het wachten" msgid "Powered Off" -msgstr "Sluit af" +msgstr "Uitgeschakeld" msgid "%n running" msgstr "%n actief" @@ -1126,7 +1126,7 @@ msgid "86Box configuration files (86box.cfg)" msgstr "86Box configuratiebestanden (86box.cfg)" msgid "Configuration read failed" -msgstr "Lezen configuratie mislukt" +msgstr "Lezen van configuratie mislukt" msgid "Unable to open the selected configuration file for reading: %1" msgstr "Openen van geselecteerd configuratiebestand voor lezen niet mogelijk: %1" @@ -1138,7 +1138,7 @@ msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM msgstr "%1 machine(s) zijn nu actief. Weet je zeker dat je de VM manager wil afsluiten?" msgid "Add new system wizard" -msgstr "Assistent voor toevoegen van nieuw systeem" +msgstr "Wizard toevoegen van nieuw systeem" msgid "Introduction" msgstr "Introductie" @@ -1186,13 +1186,13 @@ msgid "Directory does not exist" msgstr "Map bestaat niet" msgid "A new directory for the system will be created in the selected directory above" -msgstr "Een nieuwe map voor het systeem wordt aangemaakt in de boven geselecteerde map" +msgstr "Een nieuwe map voor het systeem wordt aangemaakt in de hierboven geselecteerde map" msgid "System location:" msgstr "Systeemlocatie:" msgid "System name and location" -msgstr "Systeemnaam en -locatie" +msgstr "Systeemnaam en locatie" msgid "Enter the name of the system and choose the location" msgstr "Voer de naam in van het systeem en kies een locatie" @@ -1252,7 +1252,7 @@ msgid "Failed to create directory for cloned VM" msgstr "Map aanmaken voor gekloonde VM mislukt" msgid "Failed to clone VM." -msgstr "Kolen van VM mislukt." +msgstr "Klonen van VM mislukt." msgid "Directory in use" msgstr "Map in gebruik" @@ -1303,7 +1303,7 @@ msgid "&Kill" msgstr "&Gedwongen beĂ«indigen" msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" -msgstr "Gedwongen beĂ«indiging van een virtuele machine kan dataverlies veroorzaken. Doe dit alleen wanneer het 86Box process is vast gelopen.\n\nWeet je zeker dat je de virtuele machine \"%1\" wil beĂ«indigen?" +msgstr "Gedwongen beĂ«indiging van een virtuele machine kan dataverlies veroorzaken. Doe dit alleen wanneer het 86Box-proces is vast gelopen.\n\nWeet je zeker dat je de virtuele machine \"%1\" wil beĂ«indigen?" msgid "&Delete" msgstr "&Verwijderen" @@ -1345,10 +1345,10 @@ msgid "Audio:" msgstr "Audio:" msgid "ACPI shutdown" -msgstr "ACPI uitschakeling" +msgstr "ACPI-uitschakeling" msgid "ACP&I shutdown" -msgstr "ACP&I uitschakeling" +msgstr "ACP&I-uitschakeling" msgid "Hard disk (%1)" msgstr "Harde schijf (%1)" @@ -1375,7 +1375,7 @@ msgid "Disk images cannot be larger than 127 GB." msgstr "Schijfimages kunnen niet groter zijn dan 127 GB." msgid "Hard disk images" -msgstr "Harde schijf-image" +msgstr "Harde schijf-images" msgid "Unable to read file" msgstr "Kan bestand niet lezen" @@ -1384,7 +1384,7 @@ msgid "Unable to write file" msgstr "Kan bestand niet schrijven" msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "HDI- of HDX-image met een andere sectorgrootte dan 512 worden niet ondersteund." +msgstr "HDI- of HDX-images met een andere sectorgrootte dan 512 worden niet ondersteund." msgid "Disk image file already exists" msgstr "Schijfimagebestand bestaat al" @@ -1432,7 +1432,7 @@ msgid "Fixed-size VHD" msgstr "VHD met vaste grootte" msgid "Dynamic-size VHD" -msgstr "VHD met dynamisch grootte" +msgstr "VHD met dynamische grootte" msgid "Differencing VHD" msgstr "Verschil-VHD" @@ -1453,7 +1453,7 @@ msgid "Fixed-size VHD (.vhd)" msgstr "VHD met vaste grootte (.vhd)" msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD met dynamisch grootte (.vhd)" +msgstr "VHD met dynamische grootte (.vhd)" msgid "Differencing VHD (.vhd)" msgstr "Verschil-VHD (.vhd)" @@ -1639,7 +1639,7 @@ msgid "List of MCA devices:" msgstr "Lijst van MCA-apparaten:" msgid "&Tablet tool" -msgstr "Tablet-hulpmiddel" +msgstr "&Tablet-hulpmiddel" msgid "About &Qt" msgstr "Over &Qt" @@ -1648,10 +1648,10 @@ msgid "&MCA devices..." msgstr "MCA-apparaten..." msgid "Show non-&primary monitors" -msgstr "Toon niet-primaire monitors" +msgstr "Toon niet-primaire beeldschermen" msgid "Open screenshots &folder..." -msgstr "Map met schermafbeeldingen openen..." +msgstr "&Map met schermafbeeldingen openen..." msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Schakel de volledig scherm-uitrekmodus in bij maximaliseren" @@ -1663,7 +1663,7 @@ msgid "&Pen" msgstr "&Pen" msgid "&Host CD/DVD Drive (%1:)" -msgstr "&Host cd/dvd-station (%1:)" +msgstr "&Host CD/DVD-station (%1:)" msgid "&Connected" msgstr "&Verbonden" @@ -1672,7 +1672,7 @@ msgid "Clear image &history" msgstr "Imagegeschiedenis verwijderen(&H)" msgid "Create..." -msgstr "CreĂ«er..." +msgstr "Aanmaken..." msgid "Host CD/DVD Drive (%1)" msgstr "Host CD/DVD-station (%1)" @@ -1717,10 +1717,10 @@ msgid "Browse..." msgstr "Bladeren..." msgid "Couldn't create OpenGL context." -msgstr "Kan OpenGL context niet aanmaken." +msgstr "Kan OpenGL-context niet aanmaken." msgid "Couldn't switch to OpenGL context." -msgstr "Kan niet overschakelen naar OpenGL context." +msgstr "Kan niet overschakelen naar OpenGL-context." msgid "OpenGL version 3.0 or greater is required. Current version is %1.%2" msgstr "OpenGL versie 3.0 of hoger is vereist. De huidige versie is %1.%2" @@ -1783,7 +1783,7 @@ msgid "VDE Socket:" msgstr "VDE-socket:" msgid "86Box Unit Tester" -msgstr "86Box apparaattester" +msgstr "86Box Apparaattester" msgid "Novell NetWare 2.x Key Card" msgstr "Novell NetWare 2.x Key Card" @@ -1855,7 +1855,7 @@ msgid "Default Baud rate" msgstr "Standaard baudrate" msgid "[COM] Standard Hayes-compliant Modem" -msgstr "COM] Standaard Hayes-compatibele modem " +msgstr "[COM] Standaard Hayes-compatibele modem " msgid "Roland MT-32 Emulation" msgstr "Roland MT-32-emulatie" @@ -1939,7 +1939,7 @@ msgid "Parallel port IRQ" msgstr "Parallelle poort IRQ" msgid "BIOS Revision" -msgstr "BIOS Revisie" +msgstr "BIOS-Revisie" msgid "BIOS Version" msgstr "BIOS-versie" @@ -2557,16 +2557,16 @@ msgid "Apply overscan deltas" msgstr "Overscan-delta’s toepassen" msgid "Mono Interlaced" -msgstr "Mono geĂ¯nterlaced " +msgstr "Mono Interlaced " msgid "Mono Non-Interlaced" -msgstr "Mono niet geĂ¯nterlaced" +msgstr "Mono Niet-Interlaced" msgid "Color Interlaced" -msgstr "Kleur interlaced" +msgstr "Kleur Interlaced" msgid "Color Non-Interlaced" -msgstr "Kleur niet geĂ¯nterlaced" +msgstr "Kleur Niet-Interlaced" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo Graphics" @@ -2653,7 +2653,7 @@ msgid "E&ject %1" msgstr "&Uitwerpen %1" msgid "&Unmute" -msgstr "&Geluid aanzetten" +msgstr "&Dempen opheffen" msgid "Softfloat FPU" msgstr "Softfloat FPU" @@ -2779,7 +2779,7 @@ msgid "Keybind" msgstr "Toetskoppeling" msgid "Clear binding" -msgstr "Wis koppelinh" +msgstr "Wis koppeling" msgid "Bind" msgstr "Koppel" @@ -2794,7 +2794,7 @@ msgid "Bind conflict" msgstr "Koppelconflict" msgid "This key combo is already in use." -msgstr "Deze toetsencombinatie is al in gebruik" +msgstr "Deze toetsencombinatie is al in gebruik." msgid "Send Control+Alt+Del" msgstr "Stuur Control+Alt+Del" @@ -2812,7 +2812,7 @@ msgid "Release mouse pointer" msgstr "Geef muis vrij" msgid "Toggle pause" -msgstr "Pause omschakelen" +msgstr "Pauzeren omschakelen" msgid "Toggle mute" msgstr "Geluiddemping omschakelen" @@ -2833,13 +2833,13 @@ msgid "Remote Switch" msgstr "Externe Switch" msgid "Switch:" -msgstr "Switch" +msgstr "Switch:" msgid "Hub Mode" msgstr "Hub-modus" msgid "Hostname:" -msgstr "Hostname" +msgstr "Hostnaam" msgid "ISA RAM:" msgstr "ISA RAM:" @@ -2863,10 +2863,10 @@ msgid "An error occurred trying to wipe the NVRAM contents of the virtual machin msgstr "Fout bij Wissen van NVRAM-inhoud van de virtuele machine \"%1\"" msgid "%1 VM Manager" -msgstr "%1 VM Manager" +msgstr "%1 VM Beheerder" msgid "%n disk(s)" -msgstr "%n schijf(en)" +msgstr "%n schijf/schijven" msgid "Unknown Status" msgstr "Onbekende Status" @@ -2875,7 +2875,7 @@ msgid "No Machines Found!" msgstr "Geen Machines Gevonden!" msgid "Check for updates on startup" -msgstr "Controleer op updates bij start" +msgstr "Controleer op updates bij starten" msgid "Unable to determine release information" msgstr "Kan release-informatie niet bepalen" From 3485dd4676a5db7c7da8e82561871284137224ae Mon Sep 17 00:00:00 2001 From: kees-z Date: Tue, 14 Oct 2025 17:41:46 +0200 Subject: [PATCH 121/233] Fix typos and translation improvements (#6345) --- src/qt/languages/nl-NL.po | 132 +++++++++++++++++++------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 68bcbc2bf..ee57f32a1 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -43,7 +43,7 @@ msgid "&Hide status bar" msgstr "&Statusbalk verbergen" msgid "Hide &toolbar" -msgstr "Verberg &toolbar" +msgstr "&Toolbar verbergen" msgid "&Resizeable window" msgstr "&Venster met aanpasbare grootte" @@ -109,7 +109,7 @@ msgid "Fi<er method" msgstr "Filtermethode" msgid "&Nearest" -msgstr "&Dichtsbijzijnde" +msgstr "&Dichtstbijzijnde" msgid "&Linear" msgstr "&Lineair" @@ -220,7 +220,7 @@ msgid "Begin trace" msgstr "Begin traceren" msgid "End trace" -msgstr "Traceren beĂ«indigen" +msgstr "BeĂ«indig traceren" msgid "&Help" msgstr "&Help" @@ -232,19 +232,19 @@ msgid "&About 86Box..." msgstr "&Over 86Box..." msgid "&New image..." -msgstr "&Nieuw image..." +msgstr "&Nieuw imagebestand..." msgid "&Existing image..." -msgstr "&Bestaande image..." +msgstr "&Bestaande imagebestand..." msgid "Existing image (&Write-protected)..." -msgstr "Bestaande image (&Schrijfbeveiligd)..." +msgstr "Bestaand imagebestand (&Schrijfbeveiligd)..." msgid "&Record" msgstr "&Opnemen" msgid "&Play" -msgstr "&Play" +msgstr "&Afspelen" msgid "&Rewind to the beginning" msgstr "&Terugspoelen naar het begin" @@ -256,19 +256,19 @@ msgid "E&ject" msgstr "&Uitwerpen" msgid "&Image..." -msgstr "&Image..." +msgstr "&Imagebestand..." msgid "E&xport to 86F..." msgstr "E&xporteer naar 86F..." msgid "&Mute" -msgstr "&Mute" +msgstr "&Dempen" msgid "E&mpty" -msgstr "E&mpty" +msgstr "&Leeg" msgid "Reload previous image" -msgstr "Herlaad vorige image" +msgstr "Herlaad vorig imagebestand" msgid "&Folder..." msgstr "&Map..." @@ -301,7 +301,7 @@ msgid "&Select shader..." msgstr "&Selecteer shader..." msgid "&Remove shader" -msgstr "&Remove shader" +msgstr "&Verwijder shader" msgid "Preferences" msgstr "Voorkeuren" @@ -310,7 +310,7 @@ msgid "Sound Gain" msgstr "Geluidsversterking" msgid "New Image" -msgstr "Nieuw image" +msgstr "Nieuw imagebestand" msgid "Settings" msgstr "Instellingen" @@ -343,7 +343,7 @@ msgid "RPM mode:" msgstr "RPM-modus:" msgid "Progress:" -msgstr "Vooruitgang:" +msgstr "Voortgang:" msgid "Width:" msgstr "Breedte:" @@ -352,7 +352,7 @@ msgid "Height:" msgstr "Hoogte:" msgid "Lock to this size" -msgstr "Leg vast op deze grootte" +msgstr "Vergrendel deze grootte" msgid "Machine type:" msgstr "Machinetype:" @@ -403,10 +403,10 @@ msgid "Dynamic Recompiler" msgstr "Dynamische Recompiler" msgid "CPU frame size" -msgstr "CPU frame grootte" +msgstr "CPU framegrootte" msgid "Larger frames (less smooth)" -msgstr "Groter frames (minder vloeiend)" +msgstr "Grotere frames (minder vloeiend)" msgid "Smaller frames (smoother)" msgstr "Kleinere frames (vloeiender)" @@ -430,7 +430,7 @@ msgid "IBM PS/55 Display Adapter Graphics" msgstr "IBM PS/55 Display Adapter Graphics" msgid "Keyboard:" -msgstr "Toetsenbord" +msgstr "Toetsenbord:" msgid "Keyboard" msgstr "Toetsenbord" @@ -472,13 +472,13 @@ msgid "Sound card #4:" msgstr "Geluidskaart #4:" msgid "MIDI Out Device:" -msgstr "MIDI Out-apparaat:" +msgstr "MIDI Uitvoerapparaat:" msgid "MIDI In Device:" -msgstr "MIDI In-apparaat:" +msgstr "MIDI Invoerapparaat:" msgid "MIDI Out:" -msgstr "Midi Out:" +msgstr "Midi Uit:" msgid "Standalone MPU-401" msgstr "Standalone MPU-401" @@ -649,7 +649,7 @@ msgid "Removable disks:" msgstr "Verwisselbare schijven:" msgid "Removable disk drives:" -msgstr "Verwisselbare schijfstations" +msgstr "Verwisselbare schijfstations:" msgid "ZIP 250" msgstr "ZIP 250" @@ -712,13 +712,13 @@ msgid "&Removable disk %1 (%2): %3" msgstr "&Verwijderbare schijf %1 (%2): %3" msgid "Removable disk images" -msgstr "Verwijderbare schijf image" +msgstr "Verwijderbaar schijfimagebestand" msgid "Image %1" msgstr "Image %1" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box kon geen bruikbare ROM images vinden.\n\nDownload een ROM set en pak deze uit in de map \"roms\"." +msgstr "86Box kon geen bruikbare ROM imagebestanden vinden.\n\nDownload een ROM set en pak deze uit in de map \"roms\"." msgid "(empty)" msgstr "(leeg)" @@ -814,7 +814,7 @@ msgid "Click to capture mouse" msgstr "Klik om muis vast te leggen" msgid "Press %1 to release mouse" -msgstr "Druk op %1 om de muis los te laten" +msgstr "Druk op %1 om de muis vrij te geven" msgid "Press %1 or middle button to release mouse" msgstr "Druk op %1 of middelste knop om de muis los te laten" @@ -973,7 +973,7 @@ msgid "Do you want to save the settings?" msgstr "Wil je de instellingen opslaan?" msgid "This will hard reset the emulated machine." -msgstr "Dit zal de geĂ«muleerde machine een hard reset geven." +msgstr "Dit zal de geĂ«muleerde machine een harde reset geven." msgid "Save" msgstr "Opslaan" @@ -1054,10 +1054,10 @@ msgid "Cartridge images" msgstr "Cartridge-images" msgid "Resume execution" -msgstr "Hervat executie" +msgstr "Hervat uitvoering" msgid "Pause execution" -msgstr "Pauze executie" +msgstr "Pauzeer uitvoering" msgid "Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del" @@ -1084,7 +1084,7 @@ msgid "&Start" msgstr "&Start" msgid "Not running" -msgstr "Niet actied" +msgstr "Niet actief" msgid "Running" msgstr "Actief" @@ -1093,10 +1093,10 @@ msgid "Paused" msgstr "Gepauzeerd" msgid "Waiting" -msgstr "aan het wachtend" +msgstr "Aan het wachten" msgid "Powered Off" -msgstr "Sluit af" +msgstr "Uitgeschakeld" msgid "%n running" msgstr "%n actief" @@ -1126,7 +1126,7 @@ msgid "86Box configuration files (86box.cfg)" msgstr "86Box configuratiebestanden (86box.cfg)" msgid "Configuration read failed" -msgstr "Lezen configuratie mislukt" +msgstr "Lezen van configuratie mislukt" msgid "Unable to open the selected configuration file for reading: %1" msgstr "Openen van geselecteerd configuratiebestand voor lezen niet mogelijk: %1" @@ -1138,7 +1138,7 @@ msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM msgstr "%1 machine(s) zijn nu actief. Weet je zeker dat je de VM manager wil afsluiten?" msgid "Add new system wizard" -msgstr "Assistent voor toevoegen van nieuw systeem" +msgstr "Wizard toevoegen van nieuw systeem" msgid "Introduction" msgstr "Introductie" @@ -1186,13 +1186,13 @@ msgid "Directory does not exist" msgstr "Map bestaat niet" msgid "A new directory for the system will be created in the selected directory above" -msgstr "Een nieuwe map voor het systeem wordt aangemaakt in de boven geselecteerde map" +msgstr "Een nieuwe map voor het systeem wordt aangemaakt in de hierboven geselecteerde map" msgid "System location:" msgstr "Systeemlocatie:" msgid "System name and location" -msgstr "Systeemnaam en -locatie" +msgstr "Systeemnaam en locatie" msgid "Enter the name of the system and choose the location" msgstr "Voer de naam in van het systeem en kies een locatie" @@ -1252,7 +1252,7 @@ msgid "Failed to create directory for cloned VM" msgstr "Map aanmaken voor gekloonde VM mislukt" msgid "Failed to clone VM." -msgstr "Kolen van VM mislukt." +msgstr "Klonen van VM mislukt." msgid "Directory in use" msgstr "Map in gebruik" @@ -1303,7 +1303,7 @@ msgid "&Kill" msgstr "&Gedwongen beĂ«indigen" msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" -msgstr "Gedwongen beĂ«indiging van een virtuele machine kan dataverlies veroorzaken. Doe dit alleen wanneer het 86Box process is vast gelopen.\n\nWeet je zeker dat je de virtuele machine \"%1\" wil beĂ«indigen?" +msgstr "Gedwongen beĂ«indiging van een virtuele machine kan dataverlies veroorzaken. Doe dit alleen wanneer het 86Box-proces is vast gelopen.\n\nWeet je zeker dat je de virtuele machine \"%1\" wil beĂ«indigen?" msgid "&Delete" msgstr "&Verwijderen" @@ -1345,10 +1345,10 @@ msgid "Audio:" msgstr "Audio:" msgid "ACPI shutdown" -msgstr "ACPI uitschakeling" +msgstr "ACPI-uitschakeling" msgid "ACP&I shutdown" -msgstr "ACP&I uitschakeling" +msgstr "ACP&I-uitschakeling" msgid "Hard disk (%1)" msgstr "Harde schijf (%1)" @@ -1375,7 +1375,7 @@ msgid "Disk images cannot be larger than 127 GB." msgstr "Schijfimages kunnen niet groter zijn dan 127 GB." msgid "Hard disk images" -msgstr "Harde schijf-image" +msgstr "Harde schijf-images" msgid "Unable to read file" msgstr "Kan bestand niet lezen" @@ -1384,7 +1384,7 @@ msgid "Unable to write file" msgstr "Kan bestand niet schrijven" msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "HDI- of HDX-image met een andere sectorgrootte dan 512 worden niet ondersteund." +msgstr "HDI- of HDX-images met een andere sectorgrootte dan 512 worden niet ondersteund." msgid "Disk image file already exists" msgstr "Schijfimagebestand bestaat al" @@ -1432,7 +1432,7 @@ msgid "Fixed-size VHD" msgstr "VHD met vaste grootte" msgid "Dynamic-size VHD" -msgstr "VHD met dynamisch grootte" +msgstr "VHD met dynamische grootte" msgid "Differencing VHD" msgstr "Verschil-VHD" @@ -1453,7 +1453,7 @@ msgid "Fixed-size VHD (.vhd)" msgstr "VHD met vaste grootte (.vhd)" msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD met dynamisch grootte (.vhd)" +msgstr "VHD met dynamische grootte (.vhd)" msgid "Differencing VHD (.vhd)" msgstr "Verschil-VHD (.vhd)" @@ -1639,7 +1639,7 @@ msgid "List of MCA devices:" msgstr "Lijst van MCA-apparaten:" msgid "&Tablet tool" -msgstr "Tablet-hulpmiddel" +msgstr "&Tablet-hulpmiddel" msgid "About &Qt" msgstr "Over &Qt" @@ -1648,10 +1648,10 @@ msgid "&MCA devices..." msgstr "MCA-apparaten..." msgid "Show non-&primary monitors" -msgstr "Toon niet-primaire monitors" +msgstr "Toon niet-primaire beeldschermen" msgid "Open screenshots &folder..." -msgstr "Map met schermafbeeldingen openen..." +msgstr "&Map met schermafbeeldingen openen..." msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Schakel de volledig scherm-uitrekmodus in bij maximaliseren" @@ -1663,7 +1663,7 @@ msgid "&Pen" msgstr "&Pen" msgid "&Host CD/DVD Drive (%1:)" -msgstr "&Host cd/dvd-station (%1:)" +msgstr "&Host CD/DVD-station (%1:)" msgid "&Connected" msgstr "&Verbonden" @@ -1672,7 +1672,7 @@ msgid "Clear image &history" msgstr "Imagegeschiedenis verwijderen(&H)" msgid "Create..." -msgstr "CreĂ«er..." +msgstr "Aanmaken..." msgid "Host CD/DVD Drive (%1)" msgstr "Host CD/DVD-station (%1)" @@ -1717,10 +1717,10 @@ msgid "Browse..." msgstr "Bladeren..." msgid "Couldn't create OpenGL context." -msgstr "Kan OpenGL context niet aanmaken." +msgstr "Kan OpenGL-context niet aanmaken." msgid "Couldn't switch to OpenGL context." -msgstr "Kan niet overschakelen naar OpenGL context." +msgstr "Kan niet overschakelen naar OpenGL-context." msgid "OpenGL version 3.0 or greater is required. Current version is %1.%2" msgstr "OpenGL versie 3.0 of hoger is vereist. De huidige versie is %1.%2" @@ -1783,7 +1783,7 @@ msgid "VDE Socket:" msgstr "VDE-socket:" msgid "86Box Unit Tester" -msgstr "86Box apparaattester" +msgstr "86Box Apparaattester" msgid "Novell NetWare 2.x Key Card" msgstr "Novell NetWare 2.x Key Card" @@ -1855,7 +1855,7 @@ msgid "Default Baud rate" msgstr "Standaard baudrate" msgid "[COM] Standard Hayes-compliant Modem" -msgstr "COM] Standaard Hayes-compatibele modem " +msgstr "[COM] Standaard Hayes-compatibele modem " msgid "Roland MT-32 Emulation" msgstr "Roland MT-32-emulatie" @@ -1939,7 +1939,7 @@ msgid "Parallel port IRQ" msgstr "Parallelle poort IRQ" msgid "BIOS Revision" -msgstr "BIOS Revisie" +msgstr "BIOS-Revisie" msgid "BIOS Version" msgstr "BIOS-versie" @@ -2557,16 +2557,16 @@ msgid "Apply overscan deltas" msgstr "Overscan-delta’s toepassen" msgid "Mono Interlaced" -msgstr "Mono geĂ¯nterlaced " +msgstr "Mono Interlaced " msgid "Mono Non-Interlaced" -msgstr "Mono niet geĂ¯nterlaced" +msgstr "Mono Niet-Interlaced" msgid "Color Interlaced" -msgstr "Kleur interlaced" +msgstr "Kleur Interlaced" msgid "Color Non-Interlaced" -msgstr "Kleur niet geĂ¯nterlaced" +msgstr "Kleur Niet-Interlaced" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo Graphics" @@ -2653,7 +2653,7 @@ msgid "E&ject %1" msgstr "&Uitwerpen %1" msgid "&Unmute" -msgstr "&Geluid aanzetten" +msgstr "&Dempen opheffen" msgid "Softfloat FPU" msgstr "Softfloat FPU" @@ -2779,7 +2779,7 @@ msgid "Keybind" msgstr "Toetskoppeling" msgid "Clear binding" -msgstr "Wis koppelinh" +msgstr "Wis koppeling" msgid "Bind" msgstr "Koppel" @@ -2794,7 +2794,7 @@ msgid "Bind conflict" msgstr "Koppelconflict" msgid "This key combo is already in use." -msgstr "Deze toetsencombinatie is al in gebruik" +msgstr "Deze toetsencombinatie is al in gebruik." msgid "Send Control+Alt+Del" msgstr "Stuur Control+Alt+Del" @@ -2812,7 +2812,7 @@ msgid "Release mouse pointer" msgstr "Geef muis vrij" msgid "Toggle pause" -msgstr "Pause omschakelen" +msgstr "Pauzeren omschakelen" msgid "Toggle mute" msgstr "Geluiddemping omschakelen" @@ -2833,13 +2833,13 @@ msgid "Remote Switch" msgstr "Externe Switch" msgid "Switch:" -msgstr "Switch" +msgstr "Switch:" msgid "Hub Mode" msgstr "Hub-modus" msgid "Hostname:" -msgstr "Hostname" +msgstr "Hostnaam" msgid "ISA RAM:" msgstr "ISA RAM:" @@ -2863,10 +2863,10 @@ msgid "An error occurred trying to wipe the NVRAM contents of the virtual machin msgstr "Fout bij Wissen van NVRAM-inhoud van de virtuele machine \"%1\"" msgid "%1 VM Manager" -msgstr "%1 VM Manager" +msgstr "%1 VM Beheerder" msgid "%n disk(s)" -msgstr "%n schijf(en)" +msgstr "%n schijf/schijven" msgid "Unknown Status" msgstr "Onbekende Status" @@ -2875,7 +2875,7 @@ msgid "No Machines Found!" msgstr "Geen Machines Gevonden!" msgid "Check for updates on startup" -msgstr "Controleer op updates bij start" +msgstr "Controleer op updates bij starten" msgid "Unable to determine release information" msgstr "Kan release-informatie niet bepalen" From 33877c92b1cc14c820bf9db5a4e2af04902d947e Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Wed, 15 Oct 2025 15:37:33 +0800 Subject: [PATCH 122/233] Super I/O Chip Changes (October 15, 2025) (#6349) * sio_fdc37m60x.c: FDC37C93x -> FDC37M60x Rename the Super I/O chip name "SMC FDC37C93x Super I/O" to "SMC FDC37M60x Super I/O". * sio_w83977.c: SMC FDC37C93x -> Winbond W83977 Rename "SMC FDC37C93x Super I/O" to "Winbond W83977 Super I/O". * sio_w83977.c: W83977 -> W83977F/TF/EF --- src/sio/sio_fdc37m60x.c | 2 +- src/sio/sio_w83977.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sio/sio_fdc37m60x.c b/src/sio/sio_fdc37m60x.c index e6470a6ea..f3c2a0a7d 100644 --- a/src/sio/sio_fdc37m60x.c +++ b/src/sio/sio_fdc37m60x.c @@ -685,7 +685,7 @@ fdc37m60x_init(const device_t *info) } const device_t fdc37m60x_device = { - .name = "SMC FDC37C93x Super I/O", + .name = "SMC FDC37M60x Super I/O", .internal_name = "fdc37m60x", .flags = 0, .local = 0, diff --git a/src/sio/sio_w83977.c b/src/sio/sio_w83977.c index a14e50942..07fda5d4e 100644 --- a/src/sio/sio_w83977.c +++ b/src/sio/sio_w83977.c @@ -1330,7 +1330,7 @@ w83977_init(const device_t *info) } const device_t w83977_device = { - .name = "SMC FDC37C93x Super I/O", + .name = "Winbond W83977F/TF/EF Super I/O", .internal_name = "w83977", .flags = 0, .local = 0, From 812ee8d75a7205f4d7f551ce5e6aa67ea7275768 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Wed, 15 Oct 2025 14:37:52 +0700 Subject: [PATCH 123/233] ECS P6BXT-A+ overhaul + additional BIOSes for machines & a misc. change (#6347) * Added beta v4.51G BIOS to P5MP3 * Added the earliest 4.51PG BIOS to AX59 Pro Also internal_name corrections * Added the non-OEM(?) BIOS to 6110Zu * Added the non-OEM 4.51PG and unofficial 6.00PG BIOSes to Compaq Compaq ProSignia S31x, which is renamed into ECS P6BXT-A+. Also unblock Cyrix CPUs as well as unofficial 6.00PG BIOS supports them. * Removed the v4.51PG due to POST failure Also slightly changed the maximum voltage bus to 124MHz per unofficial v6.00 BIOS, corrected the BIOS name per the BIOS screen on that BIOS, and added the author credit. Also lowered the minimum memory on LG IBM MS-6106 to 8mb. * Added the 050591 BIOS to DataExpert 386WB * Renamed 386WB to 386C * Make configurations intact Per OBattler. --- src/include/86box/machine.h | 12 +++++ src/machine/m_at_386dx.c | 64 ++++++++++++++++++++++++-- src/machine/m_at_slot1.c | 65 ++++++++++++++++++++++++-- src/machine/m_at_slot1_socket370.c | 74 ++++++++++++++++++++++++++++-- src/machine/m_at_socket4.c | 65 ++++++++++++++++++++++++-- src/machine/m_at_socket5.c | 4 +- src/machine/m_at_socket7_3v.c | 4 +- src/machine/m_at_sockets7.c | 6 +-- src/machine/machine_table.c | 25 +++++----- 9 files changed, 279 insertions(+), 40 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 1f8aaeae3..7011841fc 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -635,6 +635,9 @@ extern int machine_at_tandy4000_init(const machine_t *); extern int machine_at_ecs386v_init(const machine_t *); /* OPTi 391 */ +#ifdef EMU_DEVICE_H +extern const device_t dataexpert386wb_device; +#endif extern int machine_at_dataexpert386wb_init(const machine_t *); /* OPTi 495SLC */ @@ -866,6 +869,9 @@ extern const device_t v12p_device; #endif extern int machine_at_v12p_init(const machine_t *); extern int machine_at_excaliburpci_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t p5mp3_device; +#endif extern int machine_at_p5mp3_init(const machine_t *); extern int machine_at_opti560l_init(const machine_t *); extern void machine_at_award_common_init(const machine_t *); @@ -1213,6 +1219,9 @@ extern const device_t s1846_device; extern int machine_at_s1846_init(const machine_t *); /* i440ZX */ +#ifdef EMU_DEVICE_H +extern const device_t vei8_device; +#endif extern int machine_at_vei8_init(const machine_t *); extern int machine_at_ms6168_init(const machine_t *); extern int machine_at_borapro_init(const machine_t *); @@ -1240,6 +1249,9 @@ extern int machine_at_fw6400gx_init(const machine_t *); /* m_at_slot1_socket370.c */ /* i440BX */ +#ifdef EMU_DEVICE_H +extern const device_t prosignias31x_device; +#endif extern int machine_at_prosignias31x_bx_init(const machine_t *); extern int machine_at_s1857_init(const machine_t *); diff --git a/src/machine/m_at_386dx.c b/src/machine/m_at_386dx.c index 5816204ed..3070c19c1 100644 --- a/src/machine/m_at_386dx.c +++ b/src/machine/m_at_386dx.c @@ -332,17 +332,71 @@ machine_at_ecs386v_init(const machine_t *model) } /* OPTi 391 */ +static const device_config_t dataexpert386wb_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "dataexpert386wb", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 050591", + .internal_name = "ami386wb", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/dataexpert386wb/386-OPTI-386WB-10.BIN", "" } + }, + { + .name = "MR BIOS V1.26", + .internal_name = "dataexpert386wb", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { "roms/machines/dataexpert386wb/st0386-wb-ver2-0-618f078c738cb397184464.bin", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t dataexpert386wb_device = { + .name = "DataExpert 386WB", + .internal_name = "dataexpert386wb_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = dataexpert386wb_config +}; + int machine_at_dataexpert386wb_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/dataexpert386wb/st0386-wb-ver2-0-618f078c738cb397184464.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000f0000, 65536, 0); + machine_at_common_init(model); device_add(&opti391_device); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 5345724d6..a89044af7 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -1085,18 +1085,73 @@ machine_at_s1846_init(const machine_t *model) return ret; } +static const device_config_t vei8_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "vei8", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v6.00PG - Revision QHW.10.01 (HP Sherwood-B)", + .internal_name = "vei8", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/vei8/QHW1001.BIN", "" } + }, + { + .name = "Award Modular BIOS v6.00PG - Revision R804", + .internal_name = "6110zu", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/vei8/r804.bin", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t vei8_device = { + .name = "MiTAC/Trigon 6110Zu", + .internal_name = "vei8_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = vei8_config +}; + /* i440ZX */ int machine_at_vei8_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/vei8/QHW1001.BIN", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/m_at_slot1_socket370.c b/src/machine/m_at_slot1_socket370.c index cf689fd08..a9006c5e7 100644 --- a/src/machine/m_at_slot1_socket370.c +++ b/src/machine/m_at_slot1_socket370.c @@ -39,17 +39,81 @@ #include <86box/snd_ac97.h> /* i440BX */ +static const device_config_t prosignias31x_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "prosignias31x_bx", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.51PG - Revision 5.3", + .internal_name = "p6bxt", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/prosignias31x_bx/bxt53s.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 5.5 (Compaq ProSignia/Deskpro 440BX)", + .internal_name = "prosignias31x_bx", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/prosignias31x_bx/p6bxt-ap-092600.bin", "" } + }, + { + .name = "Phoenix - AwardBIOS v6.00PG - Unofficial Version 6.0 (by rushieda)", + .internal_name = "p6bxt_600pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/prosignias31x_bx/p6bxtap-600-67b8bfdce5de3470118202.bin", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t prosignias31x_device = { + .name = "ECS P6BXT-A+", + .internal_name = "prosignias31x_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = prosignias31x_config +}; + int machine_at_prosignias31x_bx_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/prosignias31x_bx/p6bxt-ap-092600.bin", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index d518ac5dd..1d77d99a4 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -158,17 +158,72 @@ machine_at_excaliburpci_init(const machine_t *model) return ret; } +static const device_config_t p5mp3_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "p5mp3", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.50 - Revision 0205", + .internal_name = "p5mp3", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/p5mp3/0205.bin", "" } + }, + { + .name = "Award Modular BIOS v4.51G - Revision 0402 (Beta)", + .internal_name = "p5mp3_beta", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/p5mp3/0402.001", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t p5mp3_device = { + .name = "ASUS P/I-P5MP3", + .internal_name = "p5mp3_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = p5mp3_config +}; + int machine_at_p5mp3_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/p5mp3/0205.bin", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 1d8f50a76..50a28a9c8 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -566,7 +566,7 @@ static const device_config_t pt2000_config[] = { .bios = { { .name = "Award Modular BIOS v4.50GP - Revision T1.01", - .internal_name = "pt2000_450gp", + .internal_name = "pt2000", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -575,7 +575,7 @@ static const device_config_t pt2000_config[] = { }, { .name = "Award Modular BIOS v4.51PG - Revision 3.072C806", - .internal_name = "pt2000", + .internal_name = "pt2000_451pg", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index fb24f5a43..02461d072 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -690,7 +690,7 @@ static const device_config_t ms5119_config[] = { }, { .name = "Award Modular BIOS v4.51PG - Release 2.3 (by Rainbow)", - .internal_name = "ms5119_v451pg", + .internal_name = "ms5119_451pg", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -871,7 +871,7 @@ static const device_config_t fmb_config[] = { }, { .name = "Award Modular BIOS v4.51PG - 2001 Release (by Rainbow)", - .internal_name = "fmb_v451pg", + .internal_name = "fmb_451pg", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 07b3c59af..550da59b9 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -200,7 +200,7 @@ static const device_config_t g5x_config[] = { }, { .name = "Phoenix - AwardBIOS v6.00PG - Release 4.1 (by eSupport)", - .internal_name = "5ax_esupport", + .internal_name = "5ax_600pg", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -312,7 +312,7 @@ static const device_config_t delhi3_config[] = { .bios = { { .name = "AMIBIOS 6 (071595) - Revision 1.01", - .internal_name = "delhi3", + .internal_name = "delhi3_nonoem", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -321,7 +321,7 @@ static const device_config_t delhi3_config[] = { }, { .name = "AMIBIOS 6 (071595) - Revision 1.20 (eMachines eTower 3__k)", - .internal_name = "etower", + .internal_name = "delhi3", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 7333e6846..e65db4fa4 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -6627,7 +6627,7 @@ const machine_t machines[] = { }, /* Has AMIKey 'F' KBC firmware. */ { - .name = "[OPTi 391] DataExpert 386WB", + .name = "[OPTi 391] DataExpert 386C", .internal_name = "dataexpert386wb", .type = MACHINE_TYPE_386DX, .chipset = MACHINE_CHIPSET_OPTI_391, @@ -6661,7 +6661,7 @@ const machine_t machines[] = { .kbc_p1 = 0x000004f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &dataexpert386wb_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -11350,7 +11350,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &p5mp3_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -17433,7 +17433,7 @@ const machine_t machines[] = { .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal SCSI: Adaptec AIC-7880U */ .ram = { - .min = 40960, + .min = 8192, .max = 524288, .step = 8192 }, @@ -18408,7 +18408,7 @@ const machine_t machines[] = { /* Has a SM(S)C FDC37M60x Super I/O chip with on-chip KBC with most likely AMIKey-2 KBC firmware. */ { - .name = "[i440ZX] HP Sherwood-B (MiTAC/Trigon 6110Zu)", + .name = "[i440ZX] MiTAC/Trigon 6110Zu", .internal_name = "vei8", .type = MACHINE_TYPE_SLOT1, .chipset = MACHINE_CHIPSET_INTEL_440ZX, @@ -18442,7 +18442,7 @@ const machine_t machines[] = { .kbc_p1 = 0x000044f0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &vei8_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, @@ -18910,13 +18910,12 @@ const machine_t machines[] = { /* Slot 1/Socket 370 machines */ /* 440BX */ - /* OEM version of ECS P6BXT-A+ REV 1.3x/2.2x. Has a Winbond W83977EF Super - I/O chip with on-chip KBC with AMIKey-2 KBC firmware.*/ + /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware.*/ { - .name = "[i440BX] Compaq ProSignia S316/318 (Intel)", + .name = "[i440BX] ECS P6BXT-A+", .internal_name = "prosignias31x_bx", .type = MACHINE_TYPE_SLOT1_370, - .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133, + .chipset = MACHINE_CHIPSET_INTEL_440BX, .init = machine_at_prosignias31x_bx_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, @@ -18924,9 +18923,9 @@ const machine_t machines[] = { .gpio_acpi_handler = NULL, .cpu = { .package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370, - .block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_CYRIX3S), /* Instability issues with PPro, and garbled text in POST with Cyrix */ + .block = CPU_BLOCK(CPU_PENTIUMPRO), /* Instability issues with PPro, and garbled text in POST with Cyrix (latter supported on unofficial v6.00PG BIOS) */ .min_bus = 66666667, - .max_bus = 100000000, + .max_bus = 124242424, .min_voltage = 1300, .max_voltage = 3500, .min_multi = 1.5, @@ -18947,7 +18946,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &prosignias31x_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From ae7191ed75ca785a01d43b22f5febc1699697931 Mon Sep 17 00:00:00 2001 From: Maxwell Scott Date: Wed, 15 Oct 2025 22:12:28 +0700 Subject: [PATCH 124/233] Reverted MS-6106 memory change and added note (#6351) --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index e65db4fa4..aae2e6b9f 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -17433,7 +17433,7 @@ const machine_t machines[] = { .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal SCSI: Adaptec AIC-7880U */ .ram = { - .min = 8192, + .min = 40960, /* does not POST with lower than 40MB; Award and AMI retail BIOSes not affected(?) */ .max = 524288, .step = 8192 }, From 3493d5fc737e5d009f097f7bdd437a9059d881f9 Mon Sep 17 00:00:00 2001 From: bozoscum Date: Wed, 15 Oct 2025 23:12:39 +0800 Subject: [PATCH 125/233] add Multitech PC-900 BIOS ROM V2.07B and V3.01B (#6350) --- src/machine/m_at_286.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/machine/m_at_286.c b/src/machine/m_at_286.c index 20baec312..357a0f872 100644 --- a/src/machine/m_at_286.c +++ b/src/machine/m_at_286.c @@ -367,7 +367,26 @@ static const device_config_t pc900_config[] = { .local = 0, .size = 32768, .files = { "roms/machines/pc900/cbm_pc40_v207a_xc.bin", "" } - } + }, + { + .name = "BIOS V2.07B", + .internal_name = "pc900_v207b", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { "roms/machines/pc900/mpf_pc900_v207b.bin", "" } + }, + { + .name = "BIOS V3.01B", + .internal_name = "pc900_v301b", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { "roms/machines/pc900/cbm_pc40_v301b.bin", "" } + }, + { .files_no = 0 } }, }, { .name = "", .description = "", .type = CONFIG_END } From a8f98772d8ca1ff89caa50457adecd66b5ca5f26 Mon Sep 17 00:00:00 2001 From: WNT50 <173389620+WNT50@users.noreply.github.com> Date: Thu, 16 Oct 2025 22:45:28 +0800 Subject: [PATCH 126/233] Add IBM 512KB/2MB 286 Memory Expansion Adapter emulation (#6354) --- src/machine/m_ps2_mca.c | 118 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index f02dd265a..09241a2b4 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -99,6 +99,7 @@ static struct ps2_t { uint8_t mem_pos_regs[8]; uint8_t mem_2mb_pos_regs[8]; + uint8_t mem_2mb_pos_cache[1024]; int pending_cache_miss; @@ -1061,6 +1062,111 @@ ps2_mem_expansion_feedb(UNUSED(void *priv)) return (ps2.mem_pos_regs[2] & 1); } +static uint8_t +ps2_mem_2mb_cache_read(void) +{ + uint8_t cache_addr_lo = ps2.mem_2mb_pos_regs[6]; + uint8_t cache_addr_hi = ps2.mem_2mb_pos_regs[7]; + uint16_t cache_addr = (cache_addr_hi << 8) | cache_addr_lo; + + ps2_mca_log("ps2_mem_2mb_cache_read: addr=%04x %02x %04x:%04x\n", cache_addr, ps2.mem_2mb_pos_cache[cache_addr & 0x3ff], CS, cpu_state.pc); + return ps2.mem_2mb_pos_cache[cache_addr & 0x3ff]; +} + +static void +ps2_mem_2mb_cache_write(uint8_t val) +{ + uint8_t cache_addr_lo = ps2.mem_2mb_pos_regs[6]; + uint8_t cache_addr_hi = ps2.mem_2mb_pos_regs[7]; + uint16_t cache_addr = (cache_addr_hi << 8) | cache_addr_lo; + + ps2_mca_log("ps2_mem_2mb_cache_write: addr=%04x %02x %04x:%04x\n", cache_addr, val, CS, cpu_state.pc); + ps2.mem_2mb_pos_cache[cache_addr & 0x3ff] = val; +} + +static uint8_t +ps2_mem_2mb_expansion_read(int port, UNUSED(void *priv)) +{ + if (port == 0x103) + ps2.mem_2mb_pos_regs[3] = ps2_mem_2mb_cache_read(); + return ps2.mem_2mb_pos_regs[port & 7]; +} + +static void +ps2_mem_2mb_expansion_write(int port, uint8_t val, UNUSED(void *priv)) +{ + if (port < 0x102) + return; + + if (port == 0x103) + ps2_mem_2mb_cache_write(val); + else if (port == 0x102) + ps2.mem_2mb_pos_regs[2] = (ps2.mem_2mb_pos_regs[2] & 0xfe) | (val & 0x01); + else if (port == 0x105) + ps2.mem_2mb_pos_regs[5] = (ps2.mem_2mb_pos_regs[2] & 0x01) | (val & 0xfe); + else + ps2.mem_2mb_pos_regs[port & 7] = val; + + if (ps2.mem_2mb_pos_regs[2] & 1) + mem_mapping_enable(&ps2.expansion_mapping); + else + mem_mapping_disable(&ps2.expansion_mapping); +} + +static uint8_t +ps2_mem_2mb_expansion_feedb(UNUSED(void *priv)) +{ + return (ps2.mem_2mb_pos_regs[2] & 1); +} + +static void +ps2_mca_mem_fefe_init(int start_mb) +{ + uint32_t planar_size; + uint32_t expansion_start; + + planar_size = (start_mb - 1) << 20; + expansion_start = start_mb << 20; + + mem_mapping_set_addr(&ram_high_mapping, 0x100000, planar_size); + + ps2.mem_2mb_pos_regs[0] = 0xfe; + ps2.mem_2mb_pos_regs[1] = 0xfe; + + switch ((mem_size / 1024) - start_mb) { + case 0:/*256Kx2 = 11 11 11 10*/ + ps2.mem_2mb_pos_regs[2] = 0xfe; + ps2.mem_2mb_pos_regs[5] = 0xfe; + break; + case 1:/*256Kx4 = 11 11 10 10*/ + ps2.mem_2mb_pos_regs[2] = 0xfa; + ps2.mem_2mb_pos_regs[5] = 0xfe; + break; + case 2:/*256Kx8 = 10 10 10 10*/ + ps2.mem_2mb_pos_regs[2] = 0xaa; + ps2.mem_2mb_pos_regs[5] = 0xfe; + break; + + default: + break; + } + + mca_add(ps2_mem_2mb_expansion_read, ps2_mem_2mb_expansion_write, ps2_mem_2mb_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_fffc_init(int start_mb) { @@ -1188,7 +1294,11 @@ ps2_mca_board_model_50_init(void) 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 > 4096) { + ps2_mca_mem_fffc_init(2); + } else { + ps2_mca_mem_fefe_init(2); + } } if (gfxcard[0] == VID_INTERNAL) @@ -1235,7 +1345,11 @@ ps2_mca_board_model_60_init(void) if (mem_size > 4096) { /* Only 4 MB supported on planar, create a memory expansion card for the rest */ - ps2_mca_mem_fffc_init(4); + if (mem_size > 6144) { + ps2_mca_mem_fffc_init(4); + } else { + ps2_mca_mem_fefe_init(4); + } } device_add(&ps2_nvr_55ls_device); From f58164db1b118f9c089e04b39e8a7e65bccf7e12 Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Sat, 18 Oct 2025 00:50:13 +0300 Subject: [PATCH 127/233] Trigger baseline calibration on mode change instead of on specific CRTC register writes --- src/video/vid_tandy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index c3737eba3..14d6d8e69 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -231,8 +231,6 @@ tandy_vid_out(uint16_t addr, uint8_t val, void *priv) vid->fullchange = changeframecount; recalc_timings(dev); } - if (vid->crtcreg == 0x01 || vid->crtcreg == 0x06) - baseline_calib_start(vid); if (vid->crtcreg == 0x02 || vid->crtcreg == 0x07) vid_update_display_offset(vid, vid->crtcreg); } @@ -241,6 +239,8 @@ tandy_vid_out(uint16_t addr, uint8_t val, void *priv) case 0x03d8: old = vid->mode; vid->mode = val; + if (old != val) + baseline_calib_start(vid); if ((old ^ val) & 0x01) recalc_timings(dev); if (!dev->is_sl2) From a8b4aa0602a685865a347b737542c679590e7b11 Mon Sep 17 00:00:00 2001 From: WNT50 <173389620+WNT50@users.noreply.github.com> Date: Sat, 18 Oct 2025 07:11:09 +0800 Subject: [PATCH 128/233] Revert "Add IBM 512KB/2MB 286 Memory Expansion Adapter emulation (#6354)" (#6357) This reverts commit a8f98772d8ca1ff89caa50457adecd66b5ca5f26. --- src/machine/m_ps2_mca.c | 118 +--------------------------------------- 1 file changed, 2 insertions(+), 116 deletions(-) diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index 09241a2b4..f02dd265a 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -99,7 +99,6 @@ static struct ps2_t { uint8_t mem_pos_regs[8]; uint8_t mem_2mb_pos_regs[8]; - uint8_t mem_2mb_pos_cache[1024]; int pending_cache_miss; @@ -1062,111 +1061,6 @@ ps2_mem_expansion_feedb(UNUSED(void *priv)) return (ps2.mem_pos_regs[2] & 1); } -static uint8_t -ps2_mem_2mb_cache_read(void) -{ - uint8_t cache_addr_lo = ps2.mem_2mb_pos_regs[6]; - uint8_t cache_addr_hi = ps2.mem_2mb_pos_regs[7]; - uint16_t cache_addr = (cache_addr_hi << 8) | cache_addr_lo; - - ps2_mca_log("ps2_mem_2mb_cache_read: addr=%04x %02x %04x:%04x\n", cache_addr, ps2.mem_2mb_pos_cache[cache_addr & 0x3ff], CS, cpu_state.pc); - return ps2.mem_2mb_pos_cache[cache_addr & 0x3ff]; -} - -static void -ps2_mem_2mb_cache_write(uint8_t val) -{ - uint8_t cache_addr_lo = ps2.mem_2mb_pos_regs[6]; - uint8_t cache_addr_hi = ps2.mem_2mb_pos_regs[7]; - uint16_t cache_addr = (cache_addr_hi << 8) | cache_addr_lo; - - ps2_mca_log("ps2_mem_2mb_cache_write: addr=%04x %02x %04x:%04x\n", cache_addr, val, CS, cpu_state.pc); - ps2.mem_2mb_pos_cache[cache_addr & 0x3ff] = val; -} - -static uint8_t -ps2_mem_2mb_expansion_read(int port, UNUSED(void *priv)) -{ - if (port == 0x103) - ps2.mem_2mb_pos_regs[3] = ps2_mem_2mb_cache_read(); - return ps2.mem_2mb_pos_regs[port & 7]; -} - -static void -ps2_mem_2mb_expansion_write(int port, uint8_t val, UNUSED(void *priv)) -{ - if (port < 0x102) - return; - - if (port == 0x103) - ps2_mem_2mb_cache_write(val); - else if (port == 0x102) - ps2.mem_2mb_pos_regs[2] = (ps2.mem_2mb_pos_regs[2] & 0xfe) | (val & 0x01); - else if (port == 0x105) - ps2.mem_2mb_pos_regs[5] = (ps2.mem_2mb_pos_regs[2] & 0x01) | (val & 0xfe); - else - ps2.mem_2mb_pos_regs[port & 7] = val; - - if (ps2.mem_2mb_pos_regs[2] & 1) - mem_mapping_enable(&ps2.expansion_mapping); - else - mem_mapping_disable(&ps2.expansion_mapping); -} - -static uint8_t -ps2_mem_2mb_expansion_feedb(UNUSED(void *priv)) -{ - return (ps2.mem_2mb_pos_regs[2] & 1); -} - -static void -ps2_mca_mem_fefe_init(int start_mb) -{ - uint32_t planar_size; - uint32_t expansion_start; - - planar_size = (start_mb - 1) << 20; - expansion_start = start_mb << 20; - - mem_mapping_set_addr(&ram_high_mapping, 0x100000, planar_size); - - ps2.mem_2mb_pos_regs[0] = 0xfe; - ps2.mem_2mb_pos_regs[1] = 0xfe; - - switch ((mem_size / 1024) - start_mb) { - case 0:/*256Kx2 = 11 11 11 10*/ - ps2.mem_2mb_pos_regs[2] = 0xfe; - ps2.mem_2mb_pos_regs[5] = 0xfe; - break; - case 1:/*256Kx4 = 11 11 10 10*/ - ps2.mem_2mb_pos_regs[2] = 0xfa; - ps2.mem_2mb_pos_regs[5] = 0xfe; - break; - case 2:/*256Kx8 = 10 10 10 10*/ - ps2.mem_2mb_pos_regs[2] = 0xaa; - ps2.mem_2mb_pos_regs[5] = 0xfe; - break; - - default: - break; - } - - mca_add(ps2_mem_2mb_expansion_read, ps2_mem_2mb_expansion_write, ps2_mem_2mb_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_fffc_init(int start_mb) { @@ -1294,11 +1188,7 @@ ps2_mca_board_model_50_init(void) if (mem_size > 2048) { /* Only 2 MB supported on planar, create a memory expansion card for the rest */ - if (mem_size > 4096) { - ps2_mca_mem_fffc_init(2); - } else { - ps2_mca_mem_fefe_init(2); - } + ps2_mca_mem_fffc_init(2); } if (gfxcard[0] == VID_INTERNAL) @@ -1345,11 +1235,7 @@ ps2_mca_board_model_60_init(void) if (mem_size > 4096) { /* Only 4 MB supported on planar, create a memory expansion card for the rest */ - if (mem_size > 6144) { - ps2_mca_mem_fffc_init(4); - } else { - ps2_mca_mem_fefe_init(4); - } + ps2_mca_mem_fffc_init(4); } device_add(&ps2_nvr_55ls_device); From f7a3ca4ccdb2ab55b49cf364cdea6bf6e80eb85d Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sat, 18 Oct 2025 03:09:34 +0200 Subject: [PATCH 129/233] Corrections to displays (October 18th, 2025) (rebase) 1. In the STG code, separated the STG1703 without its built-in clock as 1702 while keeping the one with the clock as 1703. 2. Added the ICS2494AN-324 clock generator used by the et4000w32 series. 3. Return 0x98 as the ID of the ATT498 ramdac. 4. Corrected the pixel clocks of the IBM RGB528 while keeping its current compatibility and exactness of the refresh rates of its clocks. 5. Added a variable reference clock of the SDAC/GenDAC for future use. 6. The clocks of the TVP3026 have been implemented for a while. Some corrections have been made (plus color key r/w). 7. Mach64 enhanced mode doesn't use scrollcache (bits 0-3 of attrregs 0x13), fixes some pixels being off (mainly in win3.1x) 8. Reorganized the cirrus 54xx built-in clock for proper refresh rates. 9. Proper reorganization of the et4000w32 series of chipsets and their cards supporting them, from cursor to clocks to ramdacs plus a 24bpp acceleration fix for the w32p series (about pixels being processed in bitblt). 10. Removed the PCI videomagic card as its bios doesn't have the PCIR header while making sure the plain ISA/VLB w32 and ISA only w32i (now named Axis Microdevice) support 2mb of vram properly. 11. Added the Hercules Dynamite VL Pro based on the w32i chip (and VLB). 12. Initialize the et4000w32 cards with misc bit 0 set as well as crtc31 bit 6 for rs2 connection to the ramdac. 13. Refactored the S3 Pre-ViRGE code to have proper refresh rates and clocks and added the 805I as a member of the chips (ID 0xa8). 14. Replaced the S3 805I Elsa Winner 1000 ISA bios with a more supported one for our code using the SDAC. 15. Added proper 24bpp acceleration to the Visionx68 chips. 16. Fixed wrong colors in the 911/924 15/16bpp acceleration when used for the first time. 17. Match the ViRGE mapping to the pre-ViRGE one per manual/datasheet. 18. Correct as best as possible the TGUI9400 clocks. --- src/include/86box/vid_svga.h | 5 +- src/include/86box/video.h | 24 +- src/video/clockgen/vid_clockgen_ics2494.c | 35 +- src/video/ramdac/vid_ramdac_att20c49x.c | 8 +- src/video/ramdac/vid_ramdac_att2xc498.c | 6 +- src/video/ramdac/vid_ramdac_bt48x.c | 7 +- src/video/ramdac/vid_ramdac_sdac.c | 14 +- src/video/ramdac/vid_ramdac_stg1702.c | 47 +- src/video/ramdac/vid_ramdac_tvp3026.c | 51 +- src/video/vid_ati_mach64.c | 1 + src/video/vid_cl54xx.c | 61 +- src/video/vid_et4000w32.c | 698 ++++---- src/video/vid_s3.c | 1879 +++++++++++++++------ src/video/vid_s3_virge.c | 120 +- src/video/vid_table.c | 24 +- src/video/vid_tgui9440.c | 26 +- 16 files changed, 2072 insertions(+), 934 deletions(-) diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 61a5697d5..e0ae5ed6f 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -474,6 +474,7 @@ extern uint8_t sc1502x_rs2_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t extern void sdac_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *priv, svga_t *svga); extern uint8_t sdac_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t *svga); extern float sdac_getclock(int clock, void *priv); +extern void sdac_set_ref_clock(void *priv, float ref_clock); extern void stg_ramdac_out(uint16_t addr, uint8_t val, void *priv, svga_t *svga); extern uint8_t stg_ramdac_in(uint16_t addr, void *priv, svga_t *svga); @@ -507,6 +508,7 @@ extern const device_t bt485a_ramdac_device; extern const device_t gendac_ramdac_device; extern const device_t ibm_rgb528_ramdac_device; extern const device_t ics2494an_305_device; +extern const device_t ics2494an_324_device; extern const device_t ati18810_28800_device; extern const device_t ati18811_0_28800_device; extern const device_t ati18811_1_28800_device; @@ -523,7 +525,8 @@ extern const device_t sc11484_nors2_ramdac_device; extern const device_t sc1502x_ramdac_device; extern const device_t sc1502x_rs2_ramdac_device; extern const device_t sdac_ramdac_device; -extern const device_t stg_ramdac_device; +extern const device_t stg1702_ramdac_device; +extern const device_t stg1703_ramdac_device; extern const device_t tkd8001_ramdac_device; extern const device_t tseng_ics5301_ramdac_device; extern const device_t tseng_ics5341_ramdac_device; diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 840b95249..acaf7cdc4 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -436,20 +436,20 @@ extern const device_t et4000_kasan_isa_device; extern const device_t et4000_mca_device; /* Tseng ET4000-W32x */ -extern const device_t et4000w32_device; +extern const device_t et4000w32_machspeed_vga_gui_2400s_isa_device; +extern const device_t et4000w32_machspeed_vga_gui_2400s_vlb_device; extern const device_t et4000w32_onboard_device; -extern const device_t et4000w32i_isa_device; -extern const device_t et4000w32i_vlb_device; +extern const device_t et4000w32i_axis_microdevice_isa_device; +extern const device_t et4000w32i_hercules_dynamite_pro_vlb_device; extern const device_t et4000w32p_videomagic_revb_vlb_device; -extern const device_t et4000w32p_videomagic_revb_pci_device; -extern const device_t et4000w32p_revc_vlb_device; -extern const device_t et4000w32p_revc_pci_device; -extern const device_t et4000w32p_vlb_device; -extern const device_t et4000w32p_pci_device; -extern const device_t et4000w32p_noncardex_vlb_device; -extern const device_t et4000w32p_noncardex_pci_device; -extern const device_t et4000w32p_cardex_vlb_device; -extern const device_t et4000w32p_cardex_pci_device; +extern const device_t et4000w32p_cardex_revc_vlb_device; +extern const device_t et4000w32p_cardex_revc_pci_device; +extern const device_t et4000w32p_cardex_revd_vlb_device; +extern const device_t et4000w32p_cardex_revd_pci_device; +extern const device_t et4000w32p_diamond_revd_vlb_device; +extern const device_t et4000w32p_diamond_revd_pci_device; +extern const device_t et4000w32p_generic_revd_vlb_device; +extern const device_t et4000w32p_generic_revd_pci_device; /* MDSI Genius VHR */ extern const device_t genius_device; diff --git a/src/video/clockgen/vid_clockgen_ics2494.c b/src/video/clockgen/vid_clockgen_ics2494.c index f9f4fbcb1..0776d97ca 100644 --- a/src/video/clockgen/vid_clockgen_ics2494.c +++ b/src/video/clockgen/vid_clockgen_ics2494.c @@ -290,7 +290,7 @@ ics2494_init(const device_t *info) ics2494->freq[15] = 65000000.0; break; case 305: - /* ICS2494A(N)-205 for S3 86C924 */ + /* ICS2494A(N)-305 for S3 86C924 */ ics2494->freq[0x0] = 25175000.0; ics2494->freq[0x1] = 28322000.0; ics2494->freq[0x2] = 40000000.0; @@ -308,6 +308,25 @@ ics2494_init(const device_t *info) ics2494->freq[0xe] = 75000000.0; ics2494->freq[0xf] = 94500000.0; break; + case 324: + /* ICS2494A(N)-324 for Tseng ET4000/W32 series */ + ics2494->freq[0x0] = 50000000.0; + ics2494->freq[0x1] = 56644000.0; + ics2494->freq[0x2] = 65000000.0; + ics2494->freq[0x3] = 72000000.0; + ics2494->freq[0x4] = 80000000.0; + ics2494->freq[0x5] = 89800000.0; + ics2494->freq[0x6] = 63000000.0; + ics2494->freq[0x7] = 75000000.0; + ics2494->freq[0x8] = 83078000.0; + ics2494->freq[0x9] = 93463000.0; + ics2494->freq[0xa] = 100000000.0; + ics2494->freq[0xb] = 104000000.0; + ics2494->freq[0xc] = 108000000.0; + ics2494->freq[0xd] = 120000000.0; + ics2494->freq[0xe] = 130000000.0; + ics2494->freq[0xf] = 134700000.0; + break; default: break; @@ -339,6 +358,20 @@ const device_t ics2494an_305_device = { .config = NULL }; +const device_t ics2494an_324_device = { + .name = "ICS2494AN-324 Clock Generator", + .internal_name = "ics2494an_324", + .flags = 0, + .local = 324, + .init = ics2494_init, + .close = ics2494_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t ati18810_28800_device = { .name = "ATI 18810 (ATI 28800) Clock Generator", .internal_name = "ati18810_28800", diff --git a/src/video/ramdac/vid_ramdac_att20c49x.c b/src/video/ramdac/vid_ramdac_att20c49x.c index 2d8d6a304..3776e6616 100644 --- a/src/video/ramdac/vid_ramdac_att20c49x.c +++ b/src/video/ramdac/vid_ramdac_att20c49x.c @@ -42,12 +42,6 @@ att49x_ramdac_control(uint8_t val, void *priv, svga_t *svga) att49x_ramdac_t *ramdac = (att49x_ramdac_t *) priv; ramdac->ctrl = val; switch ((ramdac->ctrl >> 5) & 7) { - case 0: - case 1: - case 2: - case 3: - svga->bpp = 8; - break; case 4: case 5: svga->bpp = 15; @@ -60,10 +54,12 @@ att49x_ramdac_control(uint8_t val, void *priv, svga_t *svga) break; default: + svga->bpp = 8; break; } if (ramdac->type == ATT_490 || ramdac->type == ATT_491) svga_set_ramdac_type(svga, (val & 2) ? RAMDAC_8BIT : RAMDAC_6BIT); + svga_recalctimings(svga); } diff --git a/src/video/ramdac/vid_ramdac_att2xc498.c b/src/video/ramdac/vid_ramdac_att2xc498.c index 141ffa4b4..21c6770a3 100644 --- a/src/video/ramdac/vid_ramdac_att2xc498.c +++ b/src/video/ramdac/vid_ramdac_att2xc498.c @@ -45,7 +45,7 @@ att498_ramdac_control(uint8_t val, void *priv, svga_t *svga) svga->bpp = 8; break; case 1: - if (ramdac->ctrl & 4) + if (ramdac->ctrl & 0x04) svga->bpp = 15; else svga->bpp = 8; @@ -63,7 +63,7 @@ att498_ramdac_control(uint8_t val, void *priv, svga_t *svga) break; } - svga_set_ramdac_type(svga, (ramdac->ctrl & 2) ? RAMDAC_8BIT : RAMDAC_6BIT); + svga_set_ramdac_type(svga, (ramdac->ctrl & 0x02) ? RAMDAC_8BIT : RAMDAC_6BIT); svga_recalctimings(svga); } @@ -132,7 +132,7 @@ att498_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t *svga) ramdac->state++; break; case 6: - temp = ramdac->ctrl; + temp = 0x98; ramdac->state = 0; break; default: diff --git a/src/video/ramdac/vid_ramdac_bt48x.c b/src/video/ramdac/vid_ramdac_bt48x.c index be6499990..64bc2b5b7 100644 --- a/src/video/ramdac/vid_ramdac_bt48x.c +++ b/src/video/ramdac/vid_ramdac_bt48x.c @@ -366,15 +366,14 @@ bt48x_recalctimings(void *priv, svga_t *svga) svga->clock_multiplier = 0; svga->multiplexing_rate = 0; svga->true_color_bypass = 0; - if (ramdac->cmd_r3 & 0x08) { /* x2 clock multiplier */ - //pclog("2x multiplier.\n"); + if (ramdac->cmd_r3 & 0x08) /* x2 clock multiplier */ svga->clock_multiplier = 1; - } + svga->multiplexing_rate = (ramdac->cmd_r1 & 0x60) >> 5; if (svga->bpp >= 15) svga->true_color_bypass = !!(ramdac->cmd_r1 & 0x10); - //pclog("CR0=%02x, CR1=%02x, CR2=%02x.\n", ramdac->cmd_r0, ramdac->cmd_r1, ramdac->cmd_r2); + pclog("CR0=%02x, CR1=%02x, CR2=%02x.\n", ramdac->cmd_r0, ramdac->cmd_r1, ramdac->cmd_r2); } void diff --git a/src/video/ramdac/vid_ramdac_sdac.c b/src/video/ramdac/vid_ramdac_sdac.c index 2b2890307..a88cdcaef 100644 --- a/src/video/ramdac/vid_ramdac_sdac.c +++ b/src/video/ramdac/vid_ramdac_sdac.c @@ -49,6 +49,7 @@ typedef struct sdac_ramdac_t { int rs2; uint8_t type; uint8_t command; + float ref_clock; } sdac_ramdac_t; static void @@ -275,11 +276,21 @@ sdac_getclock(int clock, void *priv) n1 = ((ramdac->regs[clock] >> 8) & 0x1f) + 2; n2 = ((ramdac->regs[clock] >> 13) & 0x07); n2 = (1 << n2); - t = (14318184.0f * (float) m) / (float) (n1 * n2); + t = (ramdac->ref_clock * (float) m) / (float) (n1 * n2); + //pclog("SDACClock=%d, regs val=%04x.\n", clock, ramdac->regs[clock]); return t; } +void +sdac_set_ref_clock(void *priv, float ref_clock) +{ + sdac_ramdac_t *ramdac = (sdac_ramdac_t *) priv; + + if (ramdac != NULL) + ramdac->ref_clock = ref_clock; +} + void * sdac_ramdac_init(const device_t *info) { @@ -288,6 +299,7 @@ sdac_ramdac_init(const device_t *info) ramdac->type = info->local; + ramdac->ref_clock = 14318184.0f; ramdac->regs[0] = 0x6128; ramdac->regs[1] = 0x623d; diff --git a/src/video/ramdac/vid_ramdac_stg1702.c b/src/video/ramdac/vid_ramdac_stg1702.c index 8a2d008dd..6c0945704 100644 --- a/src/video/ramdac/vid_ramdac_stg1702.c +++ b/src/video/ramdac/vid_ramdac_stg1702.c @@ -31,6 +31,7 @@ typedef struct stg_ramdac_t { int magic_count, index; uint8_t regs[256]; uint8_t command; + int type; } stg_ramdac_t; static int stg_state_read[2][8] = { @@ -46,6 +47,8 @@ stg_ramdac_set_bpp(svga_t *svga, stg_ramdac_t *ramdac) switch (ramdac->regs[3]) { default: case 0: + svga->bpp = 8; + break; case 5: case 7: svga->bpp = 8; @@ -176,7 +179,7 @@ stg_ramdac_in(uint16_t addr, void *priv, svga_t *svga) temp = 0x44; break; case 1: - temp = 0x03; + temp = ramdac->type; break; case 7: temp = 0x88; @@ -216,22 +219,24 @@ stg_getclock(int clock, void *priv) float t; int m; int n; - int n2; - const uint16_t *c; + int d; + int d2; + uint16_t c; if (clock == 0) return 25175000.0; if (clock == 1) return 28322000.0; - clock ^= 1; /*Clocks 2 and 3 seem to be reversed*/ - c = (uint16_t *) &ramdac->regs[0x20 + (clock << 1)]; - m = (*c & 0xff) + 2; /* B+2 */ - n = ((*c >> 8) & 0x1f) + 2; /* N1+2 */ - n2 = ((*c >> 13) & 0x07); /* D */ - n2 = (1 << n2); - t = (14318184.0f * (float) m) / (float) (n * n2); + c = ramdac->regs[0x20 + (clock << 1)]; + c |= (ramdac->regs[0x21 + (clock << 1)] << 8); + m = (c & 0xff) + 2; /* B+2 */ + n = ((c >> 8) & 0x1f) + 2; /* N1+2 */ + d = ((c >> 13) & 0x07); /* D */ + d2 = (1 << d); + t = (14318184.0f * (float) m) / (float) (n * d2); + //pclog("RAMDAC vclk val=0x%02x, vclk v=%d low, D=%d, t=%f.\n", ramdac->regs[0x20 + (clock << 1)], clock, d2, t); return t; } @@ -241,6 +246,8 @@ stg_ramdac_init(UNUSED(const device_t *info)) stg_ramdac_t *ramdac = (stg_ramdac_t *) malloc(sizeof(stg_ramdac_t)); memset(ramdac, 0, sizeof(stg_ramdac_t)); + ramdac->type = info->local & 0xff; + return ramdac; } @@ -253,11 +260,25 @@ stg_ramdac_close(void *priv) free(ramdac); } -const device_t stg_ramdac_device = { - .name = "SGS-Thompson STG170x RAMDAC", +const device_t stg1702_ramdac_device = { + .name = "SGS-Thompson STG1702 RAMDAC", .internal_name = "stg_ramdac", .flags = 0, - .local = 0, + .local = 2, + .init = stg_ramdac_init, + .close = stg_ramdac_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t stg1703_ramdac_device = { + .name = "SGS-Thompson STG1703 RAMDAC", + .internal_name = "stg_ramdac", + .flags = 0, + .local = 3, .init = stg_ramdac_init, .close = stg_ramdac_close, .reset = NULL, diff --git a/src/video/ramdac/vid_ramdac_tvp3026.c b/src/video/ramdac/vid_ramdac_tvp3026.c index 1958fa588..73af99075 100644 --- a/src/video/ramdac/vid_ramdac_tvp3026.c +++ b/src/video/ramdac/vid_ramdac_tvp3026.c @@ -9,7 +9,6 @@ * Emulation of the Texas Instruments TVP3026 true colour RAMDAC * family. * - * TODO: Clock and other parts. * * Authors: TheCollector1995, * @@ -49,6 +48,7 @@ typedef struct tvp3026_ramdac_t { uint8_t mode; uint8_t pll_addr; uint8_t clock_sel; + uint8_t color_key_ctrl; struct { uint8_t m; uint8_t n; @@ -171,25 +171,24 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *priv, svg svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; svga->dac_hwcursor.ena = !!(val & 0x03); ramdac->mode = val & 0x03; + //pclog("0x09: DACEna=%02x, MainEna=%02x.\n", svga->dac_hwcursor.ena, svga->hwcursor.ena); } break; case 0x0a: /* Indexed Data (RS value = 1010) */ switch (ramdac->ind_idx) { case 0x06: /* Indirect Cursor Control */ ramdac->ccr = val; + svga->dac_hwcursor.cur_xsize = svga->dac_hwcursor.cur_ysize = 64; + svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.cur_xsize; + svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; if (!(ramdac->ccr & 0x80)) { - svga->dac_hwcursor.cur_xsize = svga->dac_hwcursor.cur_ysize = 64; - svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.cur_xsize; - svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; svga->dac_hwcursor.ena = !!(val & 0x03); ramdac->mode = val & 0x03; } else { - svga->dac_hwcursor.cur_xsize = svga->dac_hwcursor.cur_ysize = 64; - svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.cur_xsize; - svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; svga->dac_hwcursor.ena = !!(ramdac->dcc & 0x03); ramdac->mode = ramdac->dcc & 0x03; } + //pclog("0x0a, indirect 0x06: DACEna=%02x, MainEna=%02x.\n", svga->dac_hwcursor.ena, svga->hwcursor.ena); break; case 0x0f: /* Latch Control */ ramdac->latch_cntl = val; @@ -279,6 +278,9 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *priv, svg } ramdac->pll_addr = ((ramdac->pll_addr + 0x10) & 0x30) | (ramdac->pll_addr & 0xcf); break; + case 0x38: /* Color-Key Control */ + ramdac->color_key_ctrl = val; + break; case 0x39: /* MCLK/Loop Clock Control */ ramdac->mclk = val; break; @@ -470,6 +472,9 @@ tvp3026_ramdac_in(uint16_t addr, int rs2, int rs3, void *priv, svga_t *svga) break; } break; + case 0x38: /* Color-Key Control */ + temp = ramdac->color_key_ctrl; + break; case 0x39: /* MCLK/Loop Clock Control */ temp = ramdac->mclk; break; @@ -516,11 +521,39 @@ tvp3026_recalctimings(void *priv, svga_t *svga) svga->interlace = !!(ramdac->ccr & 0x40); /* TODO: Figure out gamma correction for 15/16 bpp color. */ svga->lut_map = !!((svga->bpp >= 15 && (svga->bpp != 24)) && (ramdac->true_color & 0xf0) != 0x00); + svga->clock_multiplier = 0; + + //pclog("RAMDAC CLOCKSEL=%02x, MCR=%02x, LoopMCLK=%02x, Latch=%02x.\n", ramdac->clock_sel, ramdac->mcr, ramdac->mclk, ramdac->latch_cntl); if (!(ramdac->clock_sel & 0x70)) { if (ramdac->mcr != 0x98) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; + switch ((ramdac->clock_sel >> 4) & 7) { + case 0: + svga->clock_multiplier = 1; + break; + case 1: + svga->clock_multiplier = 2; + break; + case 2: + svga->clock_multiplier = 4; + break; + case 3: + svga->clock_multiplier = 8; + break; + case 4: + svga->clock_multiplier = 16; + break; + case 5: + svga->clock_multiplier = 32; + break; + case 6: + svga->clock_multiplier = 64; + break; + case 7: + default: + svga->clock_multiplier = 0; + break; + } } } } diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index bd65a1376..95a32dabe 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -547,6 +547,7 @@ mach64_recalctimings(svga_t *svga) svga->rowcount = mach64->crtc_gen_cntl & 1; svga->lut_map = (mach64->type >= MACH64_VT); svga->rowoffset <<= 1; + svga->attrregs[0x13] &= ~0x0f; if (mach64->type == MACH64_GX) ati68860_ramdac_set_render(svga->ramdac, svga); diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index abdde1622..95f9e7bf6 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -1824,6 +1824,9 @@ gd54xx_recalctimings(svga_t *svga) uint8_t clocksel; uint8_t rdmask; uint8_t linedbl = svga->dispend * 9 / 10 >= svga->hdisp; + uint8_t m = 0; + int d = 0; + int n = 0; svga->hblankstart = svga->crtc[2]; @@ -1865,6 +1868,34 @@ gd54xx_recalctimings(svga_t *svga) svga->interlace = 0; } + clocksel = (svga->miscout >> 2) & 3; + + if (!gd54xx->vclk_n[clocksel] || !gd54xx->vclk_d[clocksel]) + svga->clock = (cpuclock * (float) (1ULL << 32)) / + ((svga->miscout & 0xc) ? 28322000.0 : 25175000.0); + else { + n = gd54xx->vclk_n[clocksel] & 0x7f; + d = (gd54xx->vclk_d[clocksel] & 0x3e) >> 1; + m = gd54xx->vclk_d[clocksel] & 0x01 ? 2 : 1; + float freq = (14318184.0F * ((float) n / ((float) d * m))); + if (gd54xx_is_5422(svga)) { + switch (svga->seqregs[0x07] & (gd54xx_is_5434(svga) ? 0xe : 6)) { + case 2: + freq /= 2.0F; + break; + case 4: + if (!gd54xx_is_5434(svga)) + freq /= 3.0F; + break; + + default: + break; + } + } + svga->clock = (cpuclock * (double) (1ULL << 32)) / freq; + } + + svga->bpp = 8; svga->map8 = svga->pallook; if (svga->seqregs[0x07] & CIRRUS_SR7_BPP_SVGA) { if (linedbl) @@ -1874,6 +1905,7 @@ gd54xx_recalctimings(svga_t *svga) if ((svga->dispend == 512) && !svga->interlace && gd54xx_is_5434(svga)) { svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock *= 2.0; } } } else if (svga->gdcreg[5] & 0x40) @@ -1881,8 +1913,6 @@ gd54xx_recalctimings(svga_t *svga) svga->memaddr_latch |= ((svga->crtc[0x1b] & 0x01) << 16) | ((svga->crtc[0x1b] & 0xc) << 15); - svga->bpp = 8; - if (gd54xx->ramdac.ctrl & 0x80) { if (gd54xx->ramdac.ctrl & 0x40) { if ((svga->crtc[0x27] >= CIRRUS_ID_CLGD5428) || (svga->crtc[0x27] == CIRRUS_ID_CLGD5426)) @@ -2023,33 +2053,6 @@ gd54xx_recalctimings(svga_t *svga) } } - clocksel = (svga->miscout >> 2) & 3; - - if (!gd54xx->vclk_n[clocksel] || !gd54xx->vclk_d[clocksel]) - svga->clock = (cpuclock * (float) (1ULL << 32)) / - ((svga->miscout & 0xc) ? 28322000.0 : 25175000.0); - else { - int n = gd54xx->vclk_n[clocksel] & 0x7f; - int d = (gd54xx->vclk_d[clocksel] & 0x3e) >> 1; - uint8_t m = gd54xx->vclk_d[clocksel] & 0x01 ? 2 : 1; - float freq = (14318184.0F * ((float) n / ((float) d * m))); - if (gd54xx_is_5422(svga)) { - switch (svga->seqregs[0x07] & (gd54xx_is_5434(svga) ? 0xe : 6)) { - case 2: - freq /= 2.0F; - break; - case 4: - if (!gd54xx_is_5434(svga)) - freq /= 3.0F; - break; - - default: - break; - } - } - svga->clock = (cpuclock * (double) (1ULL << 32)) / freq; - } - svga->vram_display_mask = (svga->crtc[0x1b] & 2) ? gd54xx->vram_mask : 0x3ffff; if (svga->crtc[0x27] >= CIRRUS_ID_CLGD5430) diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index 05de0dbea..4b95ba04e 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -10,6 +10,8 @@ * * Known bugs: Accelerator doesn't work in planar modes * + * + * * Authors: Sarah Walker, * Miran Grca, * @@ -35,30 +37,46 @@ #include <86box/vid_svga.h> #include <86box/vid_svga_render.h> -#define BIOS_ROM_PATH_DIAMOND "roms/video/et4000w32/et4000w32.bin" -#define BIOS_ROM_PATH_CARDEX "roms/video/et4000w32/cardex.vbi" -#define BIOS_ROM_PATH_W32 "roms/video/et4000w32/ET4000W32VLB_bios_MX27C512.BIN" -#define BIOS_ROM_PATH_W32I_ISA "roms/video/et4000w32/ET4KW32I.VBI" -#define BIOS_ROM_PATH_W32I_VLB "roms/video/et4000w32/tseng.u41.bin" -#define BIOS_ROM_PATH_W32P_VIDEOMAGIC_REVB_VLB "roms/video/et4000w32/VideoMagic-BioS-HXIRTW32PWSRL.bin" -#define BIOS_ROM_PATH_W32P "roms/video/et4000w32/ET4K_W32.BIN" -#define BIOS_ROM_PATH_W32P_REVC "roms/video/et4000w32/et4000w32pcardex.BIN" +#define BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S "roms/video/et4000w32/ET4000W32VLB_bios_MX27C512.BIN" +#define BIOS_ROM_PATH_W32I_REVB_AXIS_MICRODEVICE "roms/video/et4000w32/ET4KW32I.VBI" +#define BIOS_ROM_PATH_W32I_REVB_HERCULES_DYNAMITE_VLB_PRO "roms/video/et4000w32/Hercules Dynamite VL Pro v8.00 c 1993 Hercules.bin" +#define BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC "roms/video/et4000w32/VideoMagic-BioS-HXIRTW32PWSRL.bin" +#define BIOS_ROM_PATH_W32P_REVC_CARDEX "roms/video/et4000w32/et4000w32pcardex.BIN" +#define BIOS_ROM_PATH_W32P_REVD "roms/video/et4000w32/ET4K_W32.BIN" +#define BIOS_ROM_PATH_W32P_REVD_CARDEX "roms/video/et4000w32/cardex.vbi" +#define BIOS_ROM_PATH_W32P_REVD_DIAMOND "roms/video/et4000w32/et4000w32.bin" #define ACL_WRST 1 #define ACL_RDST 2 #define ACL_XYST 4 #define ACL_SSO 8 +typedef enum { + ET4000W32 = 0, + ET4000W32I_REVB = 3, + ET4000W32P_REVB = 5, + ET4000W32P_REVC = 7, + ET4000W32P_REVD = 6 +} et4000w32_chip_type; + enum { - ET4000W32, - ET4000W32I, - ET4000W32P_REVC, - ET4000W32P_VIDEOMAGIC_REVB, - ET4000W32P, - ET4000W32P_CARDEX, - ET4000W32P_DIAMOND + MACHSPEED_VGA_GUI_2400S = 0, + AXIS_MICRODEVICE_ET4W32_5, + HERCULES_DYNAMITE_PRO_VLB, + VIDEOMAGIC_ETW32PVS, + CARDEX_REVC, + GENERIC_REVD, + CARDEX_REVD, + DIAMOND_STEALTH_32 }; +typedef enum { + BUILT_IN = 0, + ATT49X, + STG170X, + ET4K_SDAC +} et4000w32_ramdac_type; + typedef struct et4000w32p_t { mem_mapping_t linear_mapping; mem_mapping_t mmu_mapping; @@ -68,15 +86,21 @@ typedef struct et4000w32p_t { svga_t svga; uint8_t banking, banking2, adjust_cursor, rev, pci_slot; + uint8_t adjust_cursor_x; uint8_t regs[256], pci_regs[256]; int index, vlb, pci, interleaved, - bank, type; + bank; + int vram_size; uint32_t linearbase; uint32_t vram_mask; + int card_type; + et4000w32_chip_type chip_type; + et4000w32_ramdac_type ramdac_type; + /* Accelerator */ struct { struct { @@ -135,6 +159,7 @@ static void et4000w32_blit_start(et4000w32p_t *et4000); static void et4000w32p_blit_start(et4000w32p_t *et4000); static void et4000w32_blit(int count, int cpu_input, uint32_t src_dat, uint32_t mix_dat, et4000w32p_t *et4000); static void et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32p_t *et4000); +void et4000w32p_out(uint16_t addr, uint8_t val, void *priv); uint8_t et4000w32p_in(uint16_t addr, void *priv); #ifdef ENABLE_ET4000W32_LOG @@ -168,18 +193,28 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) switch (addr) { case 0x3c2: - if (et4000->type == ET4000W32P_DIAMOND) - icd2061_write(svga->clock_gen, (val >> 2) & 3); + if (svga->getclock == icd2061_getclock) + icd2061_write(svga->clock_gen, ((val >> 2) & 0x03) | ((svga->crtc[0x34] << 1) & 0x04)| ((svga->crtc[0x31] >> 3) & 0x08)); break; case 0x3c6: case 0x3c7: case 0x3c8: case 0x3c9: - if (et4000->type <= ET4000W32P_REVC) - sdac_ramdac_out(addr, 0, val, svga->ramdac, svga); - else - stg_ramdac_out(addr, val, svga->ramdac, svga); + switch (et4000->ramdac_type) { + case ATT49X: + att49x_ramdac_out(addr, !!(svga->crtc[0x31] & 0x40), val, svga->ramdac, svga); + break; + case STG170X: + stg_ramdac_out(addr, val, svga->ramdac, svga); + break; + case ET4K_SDAC: + sdac_ramdac_out(addr, !!(svga->crtc[0x31] & 0x40), val, svga->ramdac, svga); + break; + default: + svga_out(addr, val, svga); + break; + } return; case 0x3cb: /* Banking extension */ @@ -244,13 +279,13 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) } } if (svga->crtcreg == 0x30) { - if (et4000->pci && (et4000->rev != 5)) + if (et4000->pci && (et4000->rev != ET4000W32P_REVB)) et4000->linearbase = (et4000->linearbase & 0xc0000000) | ((val & 0xfc) << 22); else et4000->linearbase = val << 22; et4000w32p_recalcmapping(et4000); } - if (svga->crtcreg == 0x32 || svga->crtcreg == 0x36) + if ((svga->crtcreg == 0x32) || (svga->crtcreg == 0x36)) et4000w32p_recalcmapping(et4000); break; @@ -264,6 +299,7 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) case 0x217a: et4000->index = val; return; + case 0x210b: case 0x211b: case 0x212b: @@ -278,18 +314,29 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) svga->hwcursor.ena = !!(et4000->regs[0xF7] & 0x80); svga->hwcursor.xoff = et4000->regs[0xE2]; svga->hwcursor.yoff = et4000->regs[0xE6]; - svga->hwcursor.cur_xsize = svga->hwcursor.cur_ysize = ((et4000->regs[0xEF] & 4) || ((et4000->type == ET4000W32) && (et4000->regs[0xe2] >= 0x1f) && (et4000->regs[0xe6] >= 0x1f))) ? 128 : 64; + svga->hwcursor.cur_xsize = svga->hwcursor.cur_ysize = ((et4000->regs[0xEF] & 4) || ((et4000->rev == ET4000W32) && (et4000->regs[0xe2] >= 0x1f) && (et4000->regs[0xe6] >= 0x1f))) ? 128 : 64; - if (et4000->type == ET4000W32) { + if (et4000->rev == ET4000W32) { if ((svga->bpp == 15) || (svga->bpp == 16)) { svga->hwcursor.cur_xsize = svga->hwcursor.cur_ysize = 128; + if (et4000->adjust_cursor_x == 1) + svga->hwcursor.x += 0x100; + else if (et4000->adjust_cursor_x == 2) + svga->hwcursor.x += 8; + } + } else if (et4000->rev == ET4000W32I_REVB) { + if (((svga->bpp == 15) || (svga->bpp == 16))) { + if (et4000->adjust_cursor_x == 1) + svga->hwcursor.x += 0x100; + else if (et4000->adjust_cursor_x == 2) + svga->hwcursor.x += 8; } } - if ((et4000->type == ET4000W32) && (svga->hwcursor.cur_xsize == 128)) { + if ((et4000->rev == ET4000W32) && (svga->hwcursor.cur_xsize == 128)) { switch (svga->bpp) { case 8: - svga->hwcursor.xoff += 32; + svga->hwcursor.xoff += 0x20; break; default: @@ -300,16 +347,14 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) if (svga->hwcursor.cur_xsize == 128) { svga->hwcursor.xoff &= 0x7f; svga->hwcursor.yoff &= 0x7f; - if (et4000->type > ET4000W32P_REVC) { - if (svga->bpp == 24) { + if ((et4000->rev > ET4000W32P_REVC) || (et4000->rev == ET4000W32P_REVB)) { + if (svga->bpp == 24) et4000->adjust_cursor = 2; - } } } else { - if (et4000->type > ET4000W32P_REVC) { - if ((svga->bpp == 24) && et4000->adjust_cursor) { + if ((et4000->rev > ET4000W32P_REVC) || (et4000->rev == ET4000W32P_REVB)) { + if ((svga->bpp == 24) && et4000->adjust_cursor) et4000->adjust_cursor = 0; - } } svga->hwcursor.xoff &= 0x3f; svga->hwcursor.yoff &= 0x3f; @@ -332,6 +377,7 @@ et4000w32p_in(uint16_t addr, void *priv) { et4000w32p_t *et4000 = (et4000w32p_t *) priv; svga_t *svga = &et4000->svga; + uint8_t temp = 0x00; if (((addr & 0xfff0) == 0x3d0 || (addr & 0xfff0) == 0x3b0) && !(svga->miscout & 1)) addr ^= 0x60; @@ -346,10 +392,17 @@ et4000w32p_in(uint16_t addr, void *priv) case 0x3c7: case 0x3c8: case 0x3c9: - if (et4000->type <= ET4000W32P_REVC) - return sdac_ramdac_in(addr, 0, svga->ramdac, svga); - else - return stg_ramdac_in(addr, svga->ramdac, svga); + switch (et4000->ramdac_type) { + case ATT49X: + return att49x_ramdac_in(addr, !!(svga->crtc[0x31] & 0x40), svga->ramdac, svga); + case STG170X: + return stg_ramdac_in(addr, svga->ramdac, svga); + case ET4K_SDAC: + return sdac_ramdac_in(addr, !!(svga->crtc[0x31] & 0x40), svga->ramdac, svga); + default: + return svga_in(addr, svga); + } + break; case 0x3cb: return et4000->banking2; @@ -358,9 +411,22 @@ et4000w32p_in(uint16_t addr, void *priv) case 0x3d4: return svga->crtcreg; case 0x3d5: - if (et4000->type == ET4000W32) { - if (svga->crtcreg == 0x37) - return 0x09; + if ((et4000->card_type == MACHSPEED_VGA_GUI_2400S) || + (et4000->card_type == AXIS_MICRODEVICE_ET4W32_5)) { + if (svga->crtcreg == 0x37) { + temp = svga->crtc[0x37]; + temp &= ~0x09; + switch (et4000->vram_size) { + case 1: + temp |= 0x09; + break; + case 2: + break; + default: + break; + } + return temp; + } } return svga->crtc[svga->crtcreg]; @@ -368,15 +434,18 @@ et4000w32p_in(uint16_t addr, void *priv) uint8_t ret = 0xff; svga->attrff = 0; - /*Bit 1 of the Input Status Register is required by the OS/2 and NT ET4000W32/I drivers to be set otherwise - the guest will loop infinitely upon reaching the GUI*/ if (svga->cgastat & 0x01) - svga->cgastat &= ~0x32; + svga->cgastat &= ~0x30; else - svga->cgastat ^= 0x32; + svga->cgastat ^= 0x30; ret = svga->cgastat; + /*Bit 1 of the Input Status Register is required by the OS/2 and NT ET4000W32/I drivers to be set otherwise + the guest will loop infinitely upon reaching the GUI*/ + if (svga->hdisp_on) + ret |= 0x02; + if ((svga->fcr & 0x08) && svga->dispon) ret |= 0x08; @@ -396,17 +465,18 @@ et4000w32p_in(uint16_t addr, void *priv) case 0x216a: case 0x217a: return et4000->index; - case 0x210B: - case 0x211B: - case 0x212B: - case 0x213B: - case 0x214B: - case 0x215B: - case 0x216B: - case 0x217B: - if (et4000->index == 0xec) { + + case 0x210b: + case 0x211b: + case 0x212b: + case 0x213b: + case 0x214b: + case 0x215b: + case 0x216b: + case 0x217b: + if (et4000->index == 0xec) return (et4000->regs[0xec] & 0xf) | (et4000->rev << 4); - } + if (et4000->index == 0xee) { if (svga->bpp == 8) { if ((svga->gdcreg[5] & 0x60) >= 0x40) @@ -415,7 +485,7 @@ et4000w32p_in(uint16_t addr, void *priv) return 1; else return 2; - } else if (svga->bpp == 15 || svga->bpp == 16) + } else if ((svga->bpp == 15) || (svga->bpp == 16)) return 4; else break; @@ -439,6 +509,7 @@ void et4000w32p_recalctimings(svga_t *svga) { et4000w32p_t *et4000 = (et4000w32p_t *) svga->priv; + int clk_sel = ((svga->miscout >> 2) & 0x03) | ((svga->crtc[0x34] << 1) & 0x04)| ((svga->crtc[0x31] >> 3) & 0x08); svga->memaddr_latch |= (svga->crtc[0x33] & 0x7) << 16; @@ -463,36 +534,33 @@ et4000w32p_recalctimings(svga_t *svga) svga->dots_per_clock <<= 1; } - svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock((svga->miscout >> 2) & 3, svga->clock_gen); + et4000->adjust_cursor = 0; + et4000->adjust_cursor_x = 0; - if (et4000->type != ET4000W32P_DIAMOND && et4000->type != ET4000W32P_VIDEOMAGIC_REVB && et4000->type != ET4000W32P_CARDEX && et4000->type != ET4000W32P) { - if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { - if (svga->gdcreg[5] & 0x40) { - switch (svga->bpp) { - case 8: - svga->clock *= 2; - break; - case 15: - case 16: - svga->clock *= 3; - break; - case 24: - svga->clock *= 4; - break; - - default: - break; - } - } + svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clk_sel, svga->clock_gen); + if (svga->getclock == ics2494_getclock) { + if (et4000->card_type == HERCULES_DYNAMITE_PRO_VLB) { + if (clk_sel < 2) + svga->clock *= 2.0; } } - if (et4000->type == ET4000W32) { - if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { - if (svga->gdcreg[5] & 0x40) { + if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { + if (et4000->card_type != HERCULES_DYNAMITE_PRO_VLB) { + if (!(svga->crtc[0x35] & 0x80)) { + if (clk_sel >= 2) { + if (svga->seqregs[7] & 0x01) + svga->clock *= 4.0; + else if (svga->seqregs[7] & 0x40) + svga->clock *= 2.0; + } + } + } + if (svga->gdcreg[5] & 0x40) { + if (et4000->rev == ET4000W32) { switch (svga->bpp) { case 8: - if (svga->hdisp == 640 || svga->hdisp == 800 || svga->hdisp == 1024) + if ((svga->hdisp == 640) || (svga->hdisp == 800) || (svga->hdisp == 1024)) break; svga->hdisp -= 24; break; @@ -501,39 +569,45 @@ et4000w32p_recalctimings(svga_t *svga) break; } } + switch (svga->bpp) { + case 15: + case 16: + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + if (et4000->rev <= ET4000W32P_REVC) { + if (et4000->rev != ET4000W32P_REVB) { + if (et4000->rev == ET4000W32P_REVC) { + if (svga->hdisp != 1024) + et4000->adjust_cursor = 1; + } else { + et4000->adjust_cursor = 1; + if (et4000->rev <= ET4000W32I_REVB) { + if (svga->hdisp == 800) + et4000->adjust_cursor_x = 1; + else if (svga->hdisp == 640) + et4000->adjust_cursor_x = 2; + } + } + } + } + break; + case 24: + svga->hdisp /= 3; + svga->dots_per_clock /= 3; + if (et4000->rev <= ET4000W32P_REVC) { + if (et4000->rev != ET4000W32P_REVB) + et4000->adjust_cursor = 2; + } + if ((et4000->card_type == DIAMOND_STEALTH_32) && ((svga->hdisp == (640 / 2)) || (svga->hdisp == 1232))) + svga->hdisp = 640; + break; + default: + break; + } + //pclog("ClkSel=%d, crtc34 bits 0-1=%02x, crtc31 bits 6-7=%02x, seq7=%02x, interlace=%02x.\n", clk_sel, svga->crtc[0x34] & 0x03, svga->crtc[0x31] & 0xc0, svga->seqregs[7], svga->crtc[0x35] & 0x80); } - } - - et4000->adjust_cursor = 0; - - switch (svga->bpp) { - case 15: - case 16: - if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - } - if (et4000->type <= ET4000W32P_REVC) { - if (et4000->type == ET4000W32P_REVC) { - if (svga->hdisp != 1024) - et4000->adjust_cursor = 1; - } else - et4000->adjust_cursor = 1; - } - break; - case 24: - svga->hdisp /= 3; - svga->dots_per_clock /= 3; - if (et4000->type <= ET4000W32P_REVC) - et4000->adjust_cursor = 2; - if ((et4000->type == ET4000W32P_DIAMOND) && ((svga->hdisp == (640 / 2)) || (svga->hdisp == 1232))) { - svga->hdisp = 640; - } - break; - - default: - break; - } + }//else + // pclog("CLOCK translate=%02x, EGA VGA=%02x, clk=%d.\n", svga->crtc[0x34], svga->seqregs[7] & 0x80, clk_sel); svga->render = svga_render_blank; if (!svga->scrblank && svga->attr_palette_enable) { @@ -558,9 +632,7 @@ et4000w32p_recalctimings(svga_t *svga) break; case 0x40: case 0x60: /* 256+ colours */ - if (et4000->type <= ET4000W32P_REVC) - svga->clock /= 2; - + //pclog("BPP=%d.\n", svga->bpp); switch (svga->bpp) { case 8: svga->map8 = svga->pallook; @@ -638,6 +710,7 @@ et4000w32p_recalcmapping(et4000w32p_t *et4000) map |= 4; if (svga->crtc[0x36] & 0x08) map |= 8; + mem_mapping_disable(&et4000->linear_mapping); switch (map) { case 0x0: @@ -742,13 +815,13 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) et4000->acl.queued.dest_off = (et4000->acl.queued.dest_off & 0x00ff) | (val << 8); break; case 0x8e: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) et4000->acl.queued.pixel_depth = val & 0x30; else et4000->acl.queued.vbus = val & 0x03; break; case 0x8f: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) et4000->acl.queued.xy_dir = val & 0xb7; else et4000->acl.queued.xy_dir = val & 0x03; @@ -772,7 +845,7 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) et4000->acl.queued.count_y = (et4000->acl.queued.count_y & 0x00ff) | (val << 8); break; case 0x9c: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) et4000->acl.queued.ctrl_routing = val & 0xdb; else et4000->acl.queued.ctrl_routing = val & 0xb7; @@ -798,14 +871,14 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) case 0xa3: et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0x00ffffff) | (val << 24); et4000->acl.internal = et4000->acl.queued; - if (et4000->type >= ET4000W32P_REVC) { + if (et4000->rev >= ET4000W32P_REVB) { et4000w32p_blit_start(et4000); et4000w32_log("Destination Address write and start XY Block, xcnt = %i, ycnt = %i\n", et4000->acl.x_count + 1, et4000->acl.y_count + 1); if (!(et4000->acl.queued.ctrl_routing & 0x43)) { - et4000w32p_blit(0xffffff, ~0, 0, 0, et4000); + et4000w32p_blit(-1, 0xffffffff, 0, 0, et4000); } if ((et4000->acl.queued.ctrl_routing & 0x40) && !(et4000->acl.internal.ctrl_routing & 3)) { - et4000w32p_blit(4, ~0, 0, 0, et4000); + et4000w32p_blit(4, 0xffffffff, 0, 0, et4000); } } else { et4000w32_blit_start(et4000); @@ -862,7 +935,7 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) static void et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val, uint8_t bank) { - if (et4000->type >= ET4000W32P_REVC) { + if (et4000->rev >= ET4000W32P_REVB) { if (!(et4000->acl.status & ACL_XYST)) { et4000w32_log("XY MMU block not started\n"); return; @@ -872,7 +945,7 @@ et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val, uin if ((et4000->acl.internal.ctrl_routing & 3) == 2) /*CPU data is Mix data*/ et4000w32p_blit(8 - (et4000->acl.mix_addr & 7), val >> (et4000->acl.mix_addr & 7), 0, 1, et4000); else if ((et4000->acl.internal.ctrl_routing & 3) == 1) /*CPU data is Source data*/ - et4000w32p_blit(1, ~0, val, 2, et4000); + et4000w32p_blit(1, 0xffffffff, val, 2, et4000); } } else { if (!(et4000->acl.status & ACL_XYST)) { @@ -885,9 +958,8 @@ et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val, uin if (!(et4000->acl.queued.ctrl_routing & 0x37)) { et4000->acl.mmu_start = 1; et4000w32_blit(-1, 0, 0, 0xffffffff, et4000); - } else { + } else et4000->acl.mmu_start = 0; - } } if (et4000->acl.internal.ctrl_routing & 7) { @@ -932,9 +1004,9 @@ et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *priv) case 0x2000: /* MMU 1 */ case 0x4000: /* MMU 2 */ et4000->bank = (addr >> 13) & 3; - if (et4000->mmu.ctrl & (1 << et4000->bank)) { + if (et4000->mmu.ctrl & (1 << et4000->bank)) et4000w32p_accel_write_mmu(et4000, addr & 0x7fff, val, et4000->bank); - } else { + else { if (((addr & 0x1fff) + et4000->mmu.base[et4000->bank]) < svga->vram_max) { svga->vram[((addr & 0x1fff) + et4000->mmu.base[et4000->bank]) & et4000->vram_mask] = val; svga->changedvram[(((addr & 0x1fff) + et4000->mmu.base[et4000->bank]) & et4000->vram_mask) >> 12] = changeframecount; @@ -942,9 +1014,9 @@ et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *priv) } break; case 0x6000: - if ((addr & 0xff) >= 0x80) { + if ((addr & 0xff) >= 0x80) et4000w32p_accel_write_fifo(et4000, addr & 0x7fff, val); - } else { + else { switch (addr & 0xff) { case 0x00: et4000->mmu.base[0] = (et4000->mmu.base[0] & 0xffffff00) | val; @@ -1069,6 +1141,7 @@ et4000w32p_mmu_read(uint32_t addr, void *priv) et4000->acl.fifo_queue = 0; } else et4000->acl.status &= ~ACL_RDST; + return et4000->acl.status; case 0x80: @@ -1100,8 +1173,9 @@ et4000w32p_mmu_read(uint32_t addr, void *priv) case 0x8d: return et4000->acl.internal.dest_off >> 8; case 0x8e: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) return et4000->acl.internal.pixel_depth; + return et4000->acl.internal.vbus; case 0x8f: return et4000->acl.internal.xy_dir; @@ -1172,9 +1246,9 @@ et4000w32_blit_start(et4000w32p_t *et4000) et4000->acl.pattern_back = et4000->acl.pattern_addr; if (!(et4000->acl.internal.pattern_wrap & 0x40)) { - if ((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) == 0x00) { /*This is to avoid a division by zero crash*/ + if ((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) == 0x00) /*This is to avoid a division by zero crash*/ et4000->acl.pattern_y = (et4000->acl.pattern_addr / (0x7f + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1); - } else + else et4000->acl.pattern_y = (et4000->acl.pattern_addr / (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1); et4000->acl.pattern_back &= ~(((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) * et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7]) - 1); } @@ -1187,9 +1261,9 @@ et4000w32_blit_start(et4000w32p_t *et4000) et4000->acl.source_back = et4000->acl.source_addr; if (!(et4000->acl.internal.source_wrap & 0x40)) { - if ((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) == 0x00) { /*This is to avoid a division by zero crash*/ + if ((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) == 0x00) /*This is to avoid a division by zero crash*/ et4000->acl.source_y = (et4000->acl.source_addr / (0x7f + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1); - } else + else et4000->acl.source_y = (et4000->acl.source_addr / (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1); et4000->acl.source_back &= ~(((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) * et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7]) - 1); } @@ -1265,6 +1339,7 @@ et4000w32p_blit_start(et4000w32p_t *et4000) et4000w32_max_x[2] = (et4000->acl.internal.pixel_depth == 0x20) ? 3 : 4; et4000->acl.internal.count_x += (et4000->acl.internal.pixel_depth >> 4) & 3; + et4000->acl.x_count = et4000->acl.internal.count_x; et4000->acl.cpu_dat_pos = 0; et4000->acl.cpu_dat = 0; @@ -2278,9 +2353,8 @@ et4000w32_blit(int count, int cpu_input, uint32_t src_dat, uint32_t mix_dat, et4 return; } - if (cpu_input) { + if (cpu_input) return; - } } } } @@ -2293,7 +2367,7 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 uint8_t pattern; uint8_t source; uint8_t dest; - uint8_t out; + uint8_t out = 0; uint8_t rop; int mixdat; @@ -2307,14 +2381,15 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 while (count--) { et4000w32_log("%i,%i : ", et4000->acl.internal.pos_x, et4000->acl.internal.pos_y); pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; - source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; + et4000w32_log("%06X %06X ", (et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask, (et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask); if (cpu_input == 2) { source = sdat & 0xff; sdat >>= 8; - } + } else + source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; + dest = svga->vram[et4000->acl.dest_addr & et4000->vram_mask]; - out = 0; et4000w32_log("%06X ", et4000->acl.dest_addr); if ((et4000->acl.internal.ctrl_routing & 0xa) == 8) { mixdat = svga->vram[(et4000->acl.mix_addr >> 3) & et4000->vram_mask] & (1 << (et4000->acl.mix_addr & 7)); @@ -2416,7 +2491,7 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 } } else { et4000w32_log("BitBLT: count = %i\n", count); - while (count-- && et4000->acl.y_count >= 0) { + while (count-- && (et4000->acl.y_count >= 0)) { pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; if (cpu_input == 2) { @@ -2426,8 +2501,6 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; dest = svga->vram[et4000->acl.dest_addr & et4000->vram_mask]; - out = 0; - if ((et4000->acl.internal.ctrl_routing & 0xa) == 8) { mixdat = svga->vram[(et4000->acl.mix_addr >> 3) & et4000->vram_mask] & (1 << (et4000->acl.mix_addr & 7)); } else { @@ -2455,6 +2528,8 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 et4000->acl.x_count--; if (et4000->acl.x_count == 0xffff) { + et4000->acl.x_count = et4000->acl.internal.count_x; + if (et4000->acl.internal.xy_dir & 2) { et4000w32_decy(et4000); et4000->acl.mix_back = et4000->acl.mix_addr = et4000->acl.mix_back - (et4000->acl.internal.mix_off + 1); @@ -2469,7 +2544,6 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 et4000->acl.source_x = et4000->acl.source_x_back; et4000->acl.y_count--; - et4000->acl.x_count = et4000->acl.internal.count_x; if (et4000->acl.y_count == 0xffff) { et4000w32_log("BitBLT end\n"); et4000->acl.status &= ~(ACL_XYST | ACL_SSO); @@ -2481,7 +2555,7 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 if (et4000->acl.internal.ctrl_routing & 0x40) { if (et4000->acl.cpu_dat_pos & 3) - et4000->acl.cpu_dat_pos += 4 - (et4000->acl.cpu_dat_pos & 3); + et4000->acl.cpu_dat_pos += (4 - (et4000->acl.cpu_dat_pos & 3)); return; } } @@ -2505,7 +2579,7 @@ et4000w32p_hwcursor_draw(svga_t *svga, int displine) offset = svga->hwcursor_latch.xoff; - if ((et4000->type == ET4000W32) && (pitch == 32)) { + if ((et4000->rev == ET4000W32) && (pitch == 32)) { switch (svga->bpp) { case 8: minus_width = 0; @@ -2681,6 +2755,7 @@ et4000w32p_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) et4000w32p_io_set(et4000); else et4000w32p_io_remove(et4000); + et4000w32p_recalcmapping(et4000); break; @@ -2697,9 +2772,9 @@ et4000w32p_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) case 0x33: et4000->pci_regs[addr] = val; if (et4000->pci_regs[0x30] & 0x01) { - uint32_t addr = (et4000->pci_regs[0x32] << 16) | (et4000->pci_regs[0x33] << 24); - et4000w32_log("ET4000 bios_rom enabled at %08x\n", addr); - mem_mapping_set_addr(&et4000->bios_rom.mapping, addr, 0x8000); + uint32_t biosaddr = (et4000->pci_regs[0x32] << 16) | (et4000->pci_regs[0x33] << 24); + et4000w32_log("ET4000 bios_rom enabled at %08x\n", biosaddr); + mem_mapping_set_addr(&et4000->bios_rom.mapping, biosaddr, 0x8000); } else { et4000w32_log("ET4000 bios_rom disabled\n"); mem_mapping_disable(&et4000->bios_rom.mapping); @@ -2714,21 +2789,13 @@ et4000w32p_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) void * et4000w32p_init(const device_t *info) { - int vram_size; et4000w32p_t *et4000 = malloc(sizeof(et4000w32p_t)); memset(et4000, 0, sizeof(et4000w32p_t)); et4000->pci = (info->flags & DEVICE_PCI) ? 0x80 : 0x00; et4000->vlb = (info->flags & DEVICE_VLB) ? 0x40 : 0x00; - /*The ET4000/W32i ISA BIOS seems to not support 2MB of VRAM*/ - if ((info->local == ET4000W32) || ((info->local == ET4000W32I) && !(et4000->vlb))) - vram_size = 1; - else - vram_size = device_get_config_int("memory"); - - /*The interleaved VRAM was introduced by the ET4000/W32i*/ - et4000->interleaved = ((vram_size == 2) && (info->local != ET4000W32)) ? 1 : 0; + et4000->vram_size = device_get_config_int("memory"); if (info->flags & DEVICE_PCI) video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_et4000w32_pci); @@ -2737,112 +2804,141 @@ et4000w32p_init(const device_t *info) else video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_et4000w32_isa); - svga_init(info, &et4000->svga, et4000, vram_size << 20, + svga_init(info, &et4000->svga, et4000, et4000->vram_size << 20, et4000w32p_recalctimings, et4000w32p_in, et4000w32p_out, et4000w32p_hwcursor_draw, NULL); - et4000->vram_mask = (vram_size << 20) - 1; - et4000->svga.decode_mask = (vram_size << 20) - 1; + et4000->vram_mask = (et4000->vram_size << 20) - 1; + et4000->svga.decode_mask = (et4000->vram_size << 20) - 1; - et4000->type = info->local; + et4000->card_type = info->local & 0xff; + et4000->ramdac_type = BUILT_IN; + et4000->svga.crtc[0x31] = 0x40; + et4000->svga.miscout = 0x01; + et4000->svga.bpp = 8; - switch (et4000->type) { - case ET4000W32: + switch (et4000->card_type) { + case MACHSPEED_VGA_GUI_2400S: /* ET4000/W32 */ - et4000->rev = 0; + et4000->rev = ET4000W32; + et4000->ramdac_type = ET4K_SDAC; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); et4000->svga.ramdac = device_add(&tseng_ics5301_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = sdac_getclock; + sdac_set_ref_clock(et4000->svga.ramdac, 14318184.0f); + svga_recalctimings(&et4000->svga); break; - case ET4000W32I: + case AXIS_MICRODEVICE_ET4W32_5: /* ET4000/W32i rev B */ - et4000->rev = 3; + et4000->rev = ET4000W32I_REVB; + et4000->ramdac_type = ET4K_SDAC; - if (et4000->vlb) { - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_VLB, 0xc0000, 0x8000, 0x7fff, 0, - MEM_MAPPING_EXTERNAL); - } else { - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_ISA, 0xc0000, 0x8000, 0x7fff, 0, - MEM_MAPPING_EXTERNAL); - } + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_REVB_AXIS_MICRODEVICE, 0xc0000, 0x8000, 0x7fff, 0, + MEM_MAPPING_EXTERNAL); et4000->svga.ramdac = device_add(&tseng_ics5301_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = sdac_getclock; + sdac_set_ref_clock(et4000->svga.ramdac, 14318184.0f); + svga_recalctimings(&et4000->svga); break; - case ET4000W32P_VIDEOMAGIC_REVB: - /* ET4000/W32p rev B */ - et4000->rev = 5; + case HERCULES_DYNAMITE_PRO_VLB: + /* ET4000/W32i rev B */ + et4000->rev = ET4000W32I_REVB; + et4000->ramdac_type = ATT49X; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_VIDEOMAGIC_REVB_VLB, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_REVB_HERCULES_DYNAMITE_VLB_PRO, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - et4000->svga.ramdac = device_add(&stg_ramdac_device); + et4000->svga.ramdac = device_add(&att490_ramdac_device); + et4000->svga.clock_gen = device_add(&ics2494an_324_device); + et4000->svga.getclock = ics2494_getclock; + break; + + case VIDEOMAGIC_ETW32PVS: + /* ET4000/W32p rev B */ + et4000->rev = ET4000W32P_REVB; + et4000->ramdac_type = STG170X; + + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC, 0xc0000, 0x8000, 0x7fff, 0, + MEM_MAPPING_EXTERNAL); + + et4000->svga.ramdac = device_add(&stg1703_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = stg_getclock; break; - case ET4000W32P_REVC: + case CARDEX_REVC: /* ET4000/W32p rev C */ - et4000->rev = 7; + et4000->rev = ET4000W32P_REVC; + et4000->ramdac_type = ET4K_SDAC; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVC, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVC_CARDEX, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); et4000->svga.ramdac = device_add(&tseng_ics5341_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = sdac_getclock; + sdac_set_ref_clock(et4000->svga.ramdac, 14318184.0f); + svga_recalctimings(&et4000->svga); break; - case ET4000W32P: + case CARDEX_REVD: /* ET4000/W32p rev D */ - et4000->rev = 6; + et4000->rev = ET4000W32P_REVD; + et4000->ramdac_type = STG170X; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVD_CARDEX, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - et4000->svga.ramdac = device_add(&stg_ramdac_device); + et4000->svga.ramdac = device_add(&stg1703_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = stg_getclock; break; - case ET4000W32P_CARDEX: + case DIAMOND_STEALTH_32: /* ET4000/W32p rev D */ - et4000->rev = 6; + et4000->rev = ET4000W32P_REVD; + et4000->ramdac_type = STG170X; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_CARDEX, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVD_DIAMOND, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - et4000->svga.ramdac = device_add(&stg_ramdac_device); - et4000->svga.clock_gen = et4000->svga.ramdac; - et4000->svga.getclock = stg_getclock; - break; - - case ET4000W32P_DIAMOND: - /* ET4000/W32p rev D */ - et4000->rev = 6; - - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_DIAMOND, 0xc0000, 0x8000, 0x7fff, 0, - MEM_MAPPING_EXTERNAL); - - et4000->svga.ramdac = device_add(&stg_ramdac_device); + et4000->svga.ramdac = device_add(&stg1702_ramdac_device); et4000->svga.clock_gen = device_add(&icd2061_device); et4000->svga.getclock = icd2061_getclock; icd2061_set_ref_clock(et4000->svga.ramdac, 14318184.0f); svga_recalctimings(&et4000->svga); break; + case GENERIC_REVD: + /* ET4000/W32p rev D */ + et4000->rev = ET4000W32P_REVD; + et4000->ramdac_type = STG170X; + + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVD, 0xc0000, 0x8000, 0x7fff, 0, + MEM_MAPPING_EXTERNAL); + + et4000->svga.ramdac = device_add(&stg1703_ramdac_device); + et4000->svga.clock_gen = et4000->svga.ramdac; + et4000->svga.getclock = stg_getclock; + break; + default: break; } + + /*The interleaved VRAM was introduced by the ET4000/W32i*/ + et4000->interleaved = ((et4000->vram_size == 2) && (et4000->rev != ET4000W32)) ? 1 : 0; + if (info->flags & DEVICE_PCI) mem_mapping_disable(&et4000->bios_rom.mapping); @@ -2875,51 +2971,51 @@ et4000w32p_init(const device_t *info) } int -et4000w32_available(void) +et4000w32_machspeed_vga_gui_2400s_available(void) { - return rom_present(BIOS_ROM_PATH_W32); + return rom_present(BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S); } int -et4000w32i_isa_available(void) +et4000w32i_axis_microdevice_available(void) { - return rom_present(BIOS_ROM_PATH_W32I_ISA); + return rom_present(BIOS_ROM_PATH_W32I_REVB_AXIS_MICRODEVICE); } int -et4000w32i_vlb_available(void) +et4000w32i_hercules_dynamite_pro_vlb_available(void) { - return rom_present(BIOS_ROM_PATH_W32I_VLB); + return rom_present(BIOS_ROM_PATH_W32I_REVB_HERCULES_DYNAMITE_VLB_PRO); } int -et4000w32p_videomagic_revb_vlb_available(void) +et4000w32p_videomagic_revb_available(void) { - return rom_present(BIOS_ROM_PATH_W32P_VIDEOMAGIC_REVB_VLB); + return rom_present(BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC); } int -et4000w32p_revc_available(void) +et4000w32p_cardex_revc_available(void) { - return rom_present(BIOS_ROM_PATH_W32P_REVC); + return rom_present(BIOS_ROM_PATH_W32P_REVC_CARDEX); } int -et4000w32p_noncardex_available(void) +et4000w32p_diamond_revd_available(void) { - return rom_present(BIOS_ROM_PATH_W32P); + return rom_present(BIOS_ROM_PATH_W32P_REVD_DIAMOND); } int -et4000w32p_available(void) +et4000w32p_cardex_revd_available(void) { - return rom_present(BIOS_ROM_PATH_DIAMOND); + return rom_present(BIOS_ROM_PATH_W32P_REVD_CARDEX); } int -et4000w32p_cardex_available(void) +et4000w32p_generic_revd_available(void) { - return rom_present(BIOS_ROM_PATH_CARDEX); + return rom_present(BIOS_ROM_PATH_W32P_REVD); } void @@ -2969,197 +3065,197 @@ static const device_config_t et4000w32p_config[] = { // clang-format on }; -const device_t et4000w32_device = { - .name = "Tseng Labs ET4000/w32 ISA", +const device_t et4000w32_machspeed_vga_gui_2400s_isa_device = { + .name = "Tseng Labs ET4000/w32 ISA (MachSpeed VGA GUI 2400S)", .internal_name = "et4000w32", .flags = DEVICE_ISA16, - .local = ET4000W32, + .local = MACHSPEED_VGA_GUI_2400S, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32_available, + .available = et4000w32_machspeed_vga_gui_2400s_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, - .config = NULL + .config = et4000w32p_config +}; + +const device_t et4000w32_machspeed_vga_gui_2400s_vlb_device = { + .name = "Tseng Labs ET4000/w32 VLB (MachSpeed VGA GUI 2400S)", + .internal_name = "et4000w32_vlb", + .flags = DEVICE_VLB, + .local = MACHSPEED_VGA_GUI_2400S, + .init = et4000w32p_init, + .close = et4000w32p_close, + .reset = NULL, + .available = et4000w32_machspeed_vga_gui_2400s_available, + .speed_changed = et4000w32p_speed_changed, + .force_redraw = et4000w32p_force_redraw, + .config = et4000w32p_config }; const device_t et4000w32_onboard_device = { - .name = "Tseng Labs ET4000/w32 (ISA) (On-Board)", + .name = "Tseng Labs ET4000/w32 ISA (On-Board)", .internal_name = "et4000w32_onboard", .flags = DEVICE_ISA16, - .local = ET4000W32, + .local = MACHSPEED_VGA_GUI_2400S | 0x100, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32_available, + .available = et4000w32_machspeed_vga_gui_2400s_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, - .config = NULL + .config = et4000w32p_config }; -const device_t et4000w32i_isa_device = { - .name = "Tseng Labs ET4000/w32i Rev. B ISA", +const device_t et4000w32i_axis_microdevice_isa_device = { + .name = "Tseng Labs ET4000/w32i Rev. B ISA (Axis MicroDevice)", .internal_name = "et4000w32i", .flags = DEVICE_ISA16, - .local = ET4000W32I, + .local = AXIS_MICRODEVICE_ET4W32_5, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32i_isa_available, + .available = et4000w32i_axis_microdevice_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, - .config = NULL + .config = et4000w32p_config }; -const device_t et4000w32i_vlb_device = { - .name = "Tseng Labs ET4000/w32i Rev. B VLB", +const device_t et4000w32i_hercules_dynamite_pro_vlb_device = { + .name = "Tseng Labs ET4000/w32i Rev. B VLB (Hercules Dynamite Pro)", .internal_name = "et4000w32i_vlb", .flags = DEVICE_VLB, - .local = ET4000W32I, + .local = HERCULES_DYNAMITE_PRO_VLB, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32i_vlb_available, + .available = et4000w32i_hercules_dynamite_pro_vlb_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; const device_t et4000w32p_videomagic_revb_vlb_device = { - .name = "Tseng Labs ET4000/w32p Rev. B VLB (VideoMagic)", + .name = "Tseng Labs ET4000/w32p Rev. B VLB (VideoMagic ETW32PVS)", .internal_name = "et4000w32p_videomagic_revb_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_VIDEOMAGIC_REVB, + .local = VIDEOMAGIC_ETW32PVS, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_videomagic_revb_vlb_available, + .available = et4000w32p_videomagic_revb_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_videomagic_revb_pci_device = { - .name = "Tseng Labs ET4000/w32p Rev. B PCI (VideoMagic)", - .internal_name = "et4000w32p_videomagic_revb_pci", - .flags = DEVICE_PCI, - .local = ET4000W32P_VIDEOMAGIC_REVB, - .init = et4000w32p_init, - .close = et4000w32p_close, - .reset = NULL, - .available = et4000w32p_videomagic_revb_vlb_available, - .speed_changed = et4000w32p_speed_changed, - .force_redraw = et4000w32p_force_redraw, - .config = et4000w32p_config -}; - -const device_t et4000w32p_revc_vlb_device = { +const device_t et4000w32p_cardex_revc_vlb_device = { .name = "Tseng Labs ET4000/w32p Rev. C VLB (Cardex)", .internal_name = "et4000w32p_revc_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_REVC, + .local = CARDEX_REVC, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_revc_available, + .available = et4000w32p_cardex_revc_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_revc_pci_device = { +const device_t et4000w32p_cardex_revc_pci_device = { .name = "Tseng Labs ET4000/w32p Rev. C PCI (Cardex)", - .internal_name = "et4000w32p_revc_pci", + .internal_name = "et4000w32p_revc_vlb", .flags = DEVICE_PCI, - .local = ET4000W32P_REVC, + .local = CARDEX_REVC, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_revc_available, + .available = et4000w32p_cardex_revc_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_noncardex_vlb_device = { - .name = "Tseng Labs ET4000/w32p Rev. D VLB", - .internal_name = "et4000w32p_nc_vlb", - .flags = DEVICE_VLB, - .local = ET4000W32P, - .init = et4000w32p_init, - .close = et4000w32p_close, - .reset = NULL, - .available = et4000w32p_noncardex_available, - .speed_changed = et4000w32p_speed_changed, - .force_redraw = et4000w32p_force_redraw, - .config = et4000w32p_config -}; - -const device_t et4000w32p_noncardex_pci_device = { - .name = "Tseng Labs ET4000/w32p Rev. D PCI", - .internal_name = "et4000w32p_nc_pci", - .flags = DEVICE_PCI, - .local = ET4000W32P, - .init = et4000w32p_init, - .close = et4000w32p_close, - .reset = NULL, - .available = et4000w32p_noncardex_available, - .speed_changed = et4000w32p_speed_changed, - .force_redraw = et4000w32p_force_redraw, - .config = et4000w32p_config -}; - -const device_t et4000w32p_cardex_vlb_device = { +const device_t et4000w32p_cardex_revd_vlb_device = { .name = "Tseng Labs ET4000/w32p Rev. D VLB (Cardex)", .internal_name = "et4000w32p_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_CARDEX, + .local = CARDEX_REVD, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_cardex_available, + .available = et4000w32p_cardex_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_cardex_pci_device = { +const device_t et4000w32p_cardex_revd_pci_device = { .name = "Tseng Labs ET4000/w32p Rev. D PCI (Cardex)", .internal_name = "et4000w32p_pci", .flags = DEVICE_PCI, - .local = ET4000W32P_CARDEX, + .local = CARDEX_REVD, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_cardex_available, + .available = et4000w32p_cardex_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_vlb_device = { +const device_t et4000w32p_diamond_revd_vlb_device = { .name = "Tseng Labs ET4000/w32p Rev. D VLB (Diamond Stealth32)", .internal_name = "stealth32_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_DIAMOND, + .local = DIAMOND_STEALTH_32, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_available, + .available = et4000w32p_diamond_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_pci_device = { +const device_t et4000w32p_diamond_revd_pci_device = { .name = "Tseng Labs ET4000/w32p Rev. D PCI (Diamond Stealth32)", .internal_name = "stealth32_pci", .flags = DEVICE_PCI, - .local = ET4000W32P_DIAMOND, + .local = DIAMOND_STEALTH_32, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_available, + .available = et4000w32p_diamond_revd_available, + .speed_changed = et4000w32p_speed_changed, + .force_redraw = et4000w32p_force_redraw, + .config = et4000w32p_config +}; + +const device_t et4000w32p_generic_revd_vlb_device = { + .name = "Tseng Labs ET4000/w32p Rev. D VLB", + .internal_name = "et4000w32p_nc_vlb", + .flags = DEVICE_VLB, + .local = GENERIC_REVD, + .init = et4000w32p_init, + .close = et4000w32p_close, + .reset = NULL, + .available = et4000w32p_generic_revd_available, + .speed_changed = et4000w32p_speed_changed, + .force_redraw = et4000w32p_force_redraw, + .config = et4000w32p_config +}; + +const device_t et4000w32p_generic_revd_pci_device = { + .name = "Tseng Labs ET4000/w32p Rev. D PCI", + .internal_name = "et4000w32p_nc_pci", + .flags = DEVICE_PCI, + .local = GENERIC_REVD, + .init = et4000w32p_init, + .close = et4000w32p_close, + .reset = NULL, + .available = et4000w32p_generic_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 2333d68b7..210a9f625 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -60,7 +60,7 @@ #define ROM_MIROCRYSTAL20SV_964_PCI "roms/video/s3/mirocrystal.VBI" #define ROM_MIROCRYSTAL20SD_864_VLB "roms/video/s3/Miro20SD.BIN" #define ROM_PHOENIX_86C80X "roms/video/s3/805.VBI" -#define ROM_WINNER1000_805 "roms/video/s3/v01_05_00-C.BIN" +#define ROM_WINNER1000_805 "roms/video/s3/W1000ISA 01.03.00-B.BIN" #define ROM_PARADISE_BAHAMAS64 "roms/video/s3/bahamas64.bin" #define ROM_PHOENIX_VISION864 "roms/video/s3/86c864p.bin" #define ROM_DIAMOND_STEALTH64_964 "roms/video/s3/964_107h.rom" @@ -138,6 +138,7 @@ enum { S3_86C928PCI = 0x06, S3_86C801 = 0x07, S3_86C805 = 0x08, + S3_86C805I = 0x09, S3_VISION964 = 0x18, S3_VISION968 = 0x20, S3_VISION864 = 0x28, @@ -291,6 +292,7 @@ typedef struct s3_t { int16_t px, py; int16_t sx, sy; int16_t dx, dy; + int16_t sx_inc; uint32_t src, dest, pattern; int poly_cx, poly_cx2; @@ -314,7 +316,7 @@ typedef struct s3_t { int color_16bit_check; int color_16bit_check_pixtrans; int16_t minus; - int16_t minus_src_24bpp; + int16_t blit_24bpp; int rd_mask_16bit_check; int start; int mix_dat_upper; @@ -528,8 +530,9 @@ s3_queue(s3_t *s3, uint32_t addr, uint32_t val, uint32_t type) if (FIFO_FULL) { thread_reset_event(s3->fifo_not_full_event); - if (FIFO_FULL) + if (FIFO_FULL) { thread_wait_event(s3->fifo_not_full_event, -1); /*Wait for room in ringbuffer*/ + } } fifo->val = val; @@ -656,7 +659,7 @@ s3_accel_out_pixtrans_w(s3_t *s3, uint16_t val) s3->accel_start(8, 1, val | (val << 16), 0, s3); } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) val = (val >> 8) | (val << 8); @@ -671,7 +674,7 @@ s3_accel_out_pixtrans_w(s3_t *s3, uint16_t val) s3->accel_start(1, 1, 0xffffffff, val | (val << 16), s3); } } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) val = (val >> 8) | (val << 8); @@ -723,6 +726,7 @@ s3_accel_out_pixtrans_w(s3_t *s3, uint16_t val) case 0x400: if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 0x02)) { if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) { + s3_log("WORD WritePIXTRANS 32=%04x, SX=%d, SY=%d.\n", val, s3->accel.sx, s3->accel.sy); if (s3->accel.cmd & 0x1000) val = (val >> 8) | (val << 8); @@ -794,8 +798,10 @@ s3_accel_out_pixtrans_l(s3_t *s3, uint32_t val) case 0x400: if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 2)) { if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) { + s3_log("LONG WritePIXTRANS 32=%08x.\n", val); if (s3->accel.cmd & 0x1000) val = ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24); + s3->accel_start(32, 1, val, 0, s3); } else s3->accel_start(4, 1, 0xffffffff, val, s3); @@ -832,14 +838,15 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) switch (port) { case 0x8148: case 0x82e8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.cur_y = (s3->accel.cur_y & 0xf00) | val; s3->accel.poly_cy = s3->accel.cur_y; break; case 0x8149: case 0x82e9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.cur_y = (s3->accel.cur_y & 0xff) | ((val & 0x0f) << 8); s3->accel.poly_cy = s3->accel.cur_y; - s3_log("[%04X:%08X] OUT PORTB=%04x, valy=%d.\n", CS, cpu_state.pc, port - 1, s3->accel.cur_y); break; case 0x814a: case 0x82ea: @@ -854,18 +861,19 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) case 0x8548: case 0x86e8: - s3->accel.cur_x = (s3->accel.cur_x & 0xf00) | val; + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); + s3->accel.cur_x = (s3->accel.cur_x & 0xf00) | val; s3->accel.cur_x_overflow = (s3->accel.cur_x_overflow & 0xff00) | val; - s3->accel.poly_cx = s3->accel.cur_x << 20; - s3->accel.poly_x = s3->accel.poly_cx >> 20; + s3->accel.poly_cx = s3->accel.cur_x << 20; + s3->accel.poly_x = s3->accel.poly_cx >> 20; break; case 0x8549: case 0x86e9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.cur_x = (s3->accel.cur_x & 0xff) | ((val & 0x0f) << 8); s3->accel.cur_x_overflow = (s3->accel.cur_x_overflow & 0xff) | (val << 8); s3->accel.poly_cx = s3->accel.poly_x = s3->accel.cur_x << 20; - s3->accel.poly_x = s3->accel.poly_cx >> 20; - s3_log("[%04X:%08X] OUT PORTB=%04x, valx=%d, valxover=%d.\n", CS, cpu_state.pc, port - 1, s3->accel.cur_x, s3->accel.cur_x_overflow); + s3->accel.poly_x = s3->accel.poly_cx >> 20; break; case 0x854a: case 0x86ea: @@ -881,15 +889,18 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) case 0xcae8: case 0x8948: case 0x8ae8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.desty_axstp = (s3->accel.desty_axstp & 0x3f00) | val; s3->accel.point_1_updated = 1; break; case 0xcae9: case 0x8949: case 0x8ae9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.desty_axstp = (s3->accel.desty_axstp & 0xff) | ((val & 0x3f) << 8); if (val & 0x20) s3->accel.desty_axstp |= ~0x3fff; + s3->accel.point_1_updated = 1; break; case 0x894a: @@ -902,21 +913,25 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) s3->accel.desty_axstp2 = (s3->accel.desty_axstp2 & 0xff) | ((val & 0x3f) << 8); if (val & 0x20) s3->accel.desty_axstp2 |= ~0x3fff; + s3->accel.point_2_updated = 1; break; case 0x8d48: case 0x8ee8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.destx_distp = (s3->accel.destx_distp & 0x3f00) | val; s3->accel.destx_overflow = (s3->accel.destx_overflow & 0xff00) | val; s3->accel.point_1_updated = 1; break; case 0x8d49: case 0x8ee9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.destx_distp = (s3->accel.destx_distp & 0xff) | ((val & 0x3f) << 8); s3->accel.destx_overflow = (s3->accel.destx_overflow & 0xff) | (val << 8); if (val & 0x20) s3->accel.destx_distp |= ~0x3fff; + s3->accel.point_1_updated = 1; break; case 0x8d4a: @@ -980,6 +995,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) s3->accel.cmd = (s3->accel.cmd & 0xff) | (val << 8); s3->accel.ssv_state = 0; if (s3->bpp == 3) { + s3_log("Command Misc1=%04x.\n", s3->accel.multifunc[0xe]); if (!(s3->accel.multifunc[0xe] & 0x200)) s3->accel.multifunc[0xe] &= ~0x10; } @@ -1235,6 +1251,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) break; case 0xa94a: case 0xaaea: + s3_log("[%04X:%08X] OUT PORTB=%04x (Write Mask), val=%02x.\n", CS, cpu_state.pc, port, val); if (s3->chip >= S3_VISION964) { if (s3->accel.multifunc[0xe] & 0x200) s3->accel.wrt_mask = (s3->accel.wrt_mask & ~0x00ff0000) | (val << 16); @@ -1515,14 +1532,26 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) case 0xb548: case 0xb6e8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); s3->accel.bkgd_mix = val; break; + case 0xb549: + case 0xb6e9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); + break; + case 0xb948: case 0xbae8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); s3->accel.frgd_mix = val; break; + case 0xb949: + case 0xbae9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); + break; + case 0xbd48: case 0xbee8: s3->accel.multifunc_cntl = (s3->accel.multifunc_cntl & 0xff00) | val; @@ -1598,18 +1627,22 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) break; case 0xe948: case 0xeae8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_y = (s3->accel.pat_y & 0xf00) | val; break; case 0xe949: case 0xeae9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_y = (s3->accel.pat_y & 0xff) | ((val & 0x0f) << 8); break; case 0xe94a: case 0xeaea: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_x = (s3->accel.pat_x & 0xf00) | val; break; case 0xe94b: case 0xeaeb: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_x = (s3->accel.pat_x & 0xff) | ((val & 0x0f) << 8); break; case 0xed48: @@ -1681,7 +1714,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) else s3->accel_start(1, 1, 0xffffffff, s3->accel.pix_trans[0], s3); } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { s3->accel.pix_trans[1] = svga->vram[dword_remap(svga, (s3->accel.dest + s3->accel.cx - s3->accel.minus)) & s3->vram_mask]; if (s3->accel.cmd & 0x1000) { @@ -2177,7 +2210,9 @@ s3_accel_write_fifo_w(s3_t *s3, uint32_t addr, uint16_t val) s3_accel_out_fifo_w(s3, 0x9ee8, val); } else if (((addr & 0x1fffe) >= 0x8000) && (addr & 0x1fffe) < 0x10000) { if (((addr & 0x1fffe) == 0xe2e8) || ((addr & 0x1fffe) == 0xe2ea)) { - if ((s3->chip == S3_86C801) || (s3->chip == S3_86C805) || (s3->chip == S3_86C928) || (s3->chip == S3_86C928PCI)) + if ((s3->chip == S3_86C801) || (s3->chip == S3_86C805) || + (s3->chip == S3_86C928) || + (s3->chip == S3_86C928PCI)) s3_accel_out_pixtrans_w(s3, val); else { s3_accel_write_fifo(s3, addr, val); @@ -2306,9 +2341,10 @@ s3_hwcursor_draw(svga_t *svga, int displine) case 15: fg = video_15to32[s3->hwc_fg_col & 0xffff]; bg = video_15to32[s3->hwc_bg_col & 0xffff]; - if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805)) { + if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805I)) { if (!s3->color_16bit) { - if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805)) { + if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805) && + (s3->card_type != S3_WINNER1000_805)) { if (!(svga->crtc[0x45] & 0x04)) { shift = 2; width = 8; @@ -2331,9 +2367,10 @@ s3_hwcursor_draw(svga_t *svga, int displine) case 16: fg = video_16to32[s3->hwc_fg_col & 0xffff]; bg = video_16to32[s3->hwc_bg_col & 0xffff]; - if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805)) { + if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805I)) { if (!s3->color_16bit) { - if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805)) { + if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805) && + (s3->card_type != S3_WINNER1000_805)) { if (!(svga->crtc[0x45] & 0x04)) { shift = 2; width = 8; @@ -2357,7 +2394,7 @@ s3_hwcursor_draw(svga_t *svga, int displine) break; case 24: - if (s3->chip <= S3_86C805) { + if (s3->chip <= S3_86C805I) { fg = svga->pallook[svga->crtc[0xe]]; bg = svga->pallook[svga->crtc[0xf]]; } else { @@ -3131,7 +3168,7 @@ s3_out(uint16_t addr, uint8_t val, void *priv) case 0x50: s3->bpp = (svga->crtc[0x50] >> 4) & 3; - s3_log("S3 BPP=%d.\n", s3->bpp); + s3_log("S3 BPP=%d, VGA=%d, Misc1=%04x.\n", s3->bpp, svga->bpp, s3->accel.multifunc[0xe]); if (s3->bpp == 3) { if (!(s3->accel.multifunc[0xe] & 0x200)) /*On True Color mode change, reset bit 4 of Misc Index register*/ s3->accel.multifunc[0xe] &= ~0x10; @@ -3166,7 +3203,8 @@ s3_out(uint16_t addr, uint8_t val, void *priv) break; case 0x51: - if (s3->chip == S3_86C801 || s3->chip == S3_86C805) { + if ((s3->chip == S3_86C801) || (s3->chip == S3_86C805) || + (s3->chip == S3_86C805I)) { s3->bank = (s3->bank & 0x6f) | ((val & 0x4) << 2); s3->ma_ext = (s3->ma_ext & ~0x4) | ((val & 1) << 2); } else { @@ -3190,10 +3228,10 @@ s3_out(uint16_t addr, uint8_t val, void *priv) break; case 0x45: + s3_log("Write CRTC45=%02x.\n", val); if ((s3->chip == S3_VISION964) || (s3->chip == S3_VISION968)) break; svga->hwcursor.ena = val & 1; - s3_log("Write CRTC45=%02x.\n", val); break; case 0x46: case 0x47: @@ -3295,7 +3333,7 @@ s3_out(uint16_t addr, uint8_t val, void *priv) case 0x43: if (s3->chip < S3_VISION964) { - if (s3->chip <= S3_86C805) + if (s3->chip <= S3_86C805I) svga_recalctimings(svga); s3_io_remove_alt(s3); @@ -3423,8 +3461,8 @@ s3_in(uint16_t addr, void *priv) temp = att498_ramdac_in(addr, rs2, svga->ramdac, svga); break; case BT48X: - if (s3->chip == S3_86C928) - rs3 = !!(svga->crtc[0x55] & 0x28) || !!(svga->crtc[0x45] & 0x20) || !!(svga->crtc[0x55] & 0x02); /*Quite insane but Win95's S3 driver wants it set at all costs for 8bpp+ mode*/ + if (s3->card_type == S3_METHEUS_86C928) + rs3 = !!(svga->crtc[0x55] & 0x28) || !!(svga->crtc[0x45] & 0x20) || !!(svga->crtc[0x55] & 0x02); /*Quite insane but Win95's S3 driver wants it set at all costs for 8bpp+ mode in the Metheus card*/ else rs3 = !!(svga->crtc[0x55] & 0x02); @@ -3658,9 +3696,10 @@ s3_readl(uint32_t addr, void *priv) static void s3_recalctimings(svga_t *svga) { - s3_t *s3 = (s3_t *) svga->priv; - int clk_sel = (svga->miscout >> 2) & 3; + s3_t *s3 = (s3_t *) svga->priv; + int clk_sel = (svga->miscout >> 2) & 3; uint8_t mask = 0xc0; + int enhanced_8bpp_modes = 0x00; if (svga->crtc[0x33] & 0x20) { /* In this mode, the dots per clock are always 8 or 16, never 9 or 18. */ @@ -3737,12 +3776,12 @@ s3_recalctimings(svga_t *svga) break; } - if (s3->chip >= S3_TRIO32) { + if ((s3->chip >= S3_TRIO32) || (s3->chip == S3_86C805I)) { switch (svga->crtc[0x67] >> 4) { case 3: case 5: case 7: - svga->clock /= 2; + svga->clock /= 2.0; break; default: @@ -3750,7 +3789,38 @@ s3_recalctimings(svga_t *svga) } } - if (s3->chip <= S3_86C805) { + enhanced_8bpp_modes = !!((svga->crtc[0x3a] & 0x10) && !svga->lowres); + + if (s3->chip >= S3_86C928) { + if (s3->chip != S3_86C801) + mask |= 0x01; + + switch (svga->crtc[0x50] & mask) { + case 0x00: + s3->width = (svga->crtc[0x31] & 0x02) ? 2048 : 1024; + break; + case 0x01: + s3->width = 1152; + break; + case 0x40: + s3->width = 640; + break; + case 0x80: + /*For later chips, bit 2 of port 0x4ae8 means 1600x1200x4bpp if the original width is 800 (per Vision864 manual).*/ + s3->width = ((s3->chip > S3_86C805I) && (s3->accel.advfunc_cntl & 0x04) && !enhanced_8bpp_modes) ? 1600 : 800; + break; + case 0x81: + s3->width = 1600; + break; + case 0xc0: + s3->width = 1280; + break; + default: + break; + } + } + + if (s3->chip <= S3_86C805I) { s3->color_16bit = !!(svga->crtc[0x43] & 0x08); s3_log("Color 16bit=%x, bpp=%d, 256color=%x.\n", s3->color_16bit, svga->bpp, (svga->attrregs[0x10] & 0x40)); if ((svga->bpp == 24) || (svga->bpp == 8)) @@ -3764,36 +3834,6 @@ s3_recalctimings(svga_t *svga) } } - if (s3->chip >= S3_86C928) { - if (s3->chip != S3_86C801) - mask |= 0x01; - - switch (svga->crtc[0x50] & mask) { - case 0x00: - s3->width = (svga->crtc[0x31] & 0x02) ? 2048 : 1024; - if (s3->color_16bit) - s3->width = 1024; - break; - case 0x01: - s3->width = 1152; - break; - case 0x40: - s3->width = 640; - break; - case 0x80: - s3->width = ((s3->chip > S3_86C805) && (s3->accel.advfunc_cntl & 0x04)) ? 1600 : 800; - break; - case 0x81: - s3->width = 1600; - break; - case 0xc0: - s3->width = 1280; - break; - default: - break; - } - } - if (svga->crtc[0x33] & 0x20) { /* The S3 version of the Cirrus' special blanking mode, with identical behavior. */ svga->hblankstart = (((svga->crtc[0x5d] & 0x02) >> 1) << 8) + svga->crtc[1]/* + @@ -3822,11 +3862,11 @@ s3_recalctimings(svga_t *svga) } } - if ((svga->crtc[0x3a] & 0x10) && !svga->lowres) { + if (enhanced_8bpp_modes) { s3_log("BPP=%d, pitch=%d, width=%02x, double?=%x, 16bit?=%d, highres?=%d, " - "attr=%02x, hdisp=%d, dotsperclock=%x, clksel=%x, clockmultiplier=%d, multiplexingrate=%d.\n", svga->bpp, s3->width, svga->crtc[0x50], + "attr=%02x, hdisp=%d, dotsperclock=%x, clksel=%x, clockmultiplier=%d, multiplexingrate=%d, xadd=%d, overscanx=%d.\n", svga->bpp, s3->width, svga->crtc[0x50], svga->crtc[0x31] & 0x02, s3->color_16bit, s3->accel.advfunc_cntl & 0x04, - svga->attrregs[0x10] & 0x40, svga->hdisp, svga->dots_per_clock, clk_sel, svga->clock_multiplier, svga->multiplexing_rate); + svga->attrregs[0x10] & 0x40, svga->hdisp, svga->dots_per_clock, clk_sel, svga->clock_multiplier, svga->multiplexing_rate, svga->x_add, svga->monitor->mon_overscan_x); switch (svga->bpp) { case 8: svga->render = svga_render_8bpp_highres; @@ -3839,8 +3879,10 @@ s3_recalctimings(svga_t *svga) if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ if ((svga->clock_multiplier == 1) || (s3->width >= 1024)) { if (svga->multiplexing_rate == 2) { - svga->hdisp <<= 2; - svga->dots_per_clock <<= 2; + if (svga->clock_multiplier == 1) { + svga->hdisp <<= 2; + svga->dots_per_clock <<= 2; + } } else { if (!svga->clock_multiplier) { svga->hdisp <<= 1; @@ -3875,70 +3917,61 @@ s3_recalctimings(svga_t *svga) break; } break; + case S3_86C801: + case S3_86C805: + case S3_86C805I: case S3_86C928PCI: if (!svga->chain4) svga->chain4 |= 0x08; break; case S3_VISION964: - switch (s3->card_type) { - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - default: - break; + switch (s3->ramdac_type) { + case BT48X: /*BT485 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + } + break; + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + break; + default: + break; + } + break; + case S3_VISION868: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + if (s3->width >= 1024) + svga->clock /= 2.0; } break; - default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_ELSAWIN2KPROX: - s3_log("S3 width 8bpp=%d, hdisp=%d.\n", s3->width, svga->hdisp); - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; - + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + s3_log("TVP3026 968 8bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -3958,45 +3991,35 @@ s3_recalctimings(svga_t *svga) break; case S3_86C801: - switch (s3->card_type) { - case S3_PHOENIX_86C801: + case S3_86C805: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - + case ATT49X: /*AT&T 490/1/2 RAMDAC*/ + if (svga->dots_per_clock != 16) { + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } else { + svga->clock *= 2.0; + svga->dots_per_clock >>= 2; + } + break; default: break; } break; - case S3_86C805: - switch (s3->card_type) { - case S3_MIROCRYSTAL8S_805: - case S3_MIROCRYSTAL10SD_805: - case S3_WINNER1000_805: - case S3_PHOENIX_86C805: - case S3_86C805_ONBOARD: + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - - case S3_SPEA_MIRAGE_86C805: - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - switch (s3->width) { - case 800: - case 1024: - if (svga->hdisp == 400) { - /*SPEA specific drivers + its VBE RAM BIOS...*/ - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock /= 2.0; - } - break; - default: - break; - } - break; - default: break; } @@ -4085,93 +4108,62 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; case S3_VISION964: - switch (s3->card_type) { - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case BT48X: /*BT485 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); } break; - + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + break; default: break; } break; case S3_VISION868: - switch (s3->card_type) { - case S3_PHOENIX_VISION868: - case S3_NUMBER9_9FX_531: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + svga->clock /= 2.0; + } + break; + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; svga->clock /= 2.0; break; - default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - /* TODO: Is this still needed? */ - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - - case S3_ELSAWIN2KPROX: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + s3_log("TVP3026 968 15bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -4197,43 +4189,35 @@ s3_recalctimings(svga_t *svga) break; case S3_86C801: - switch (s3->card_type) { - case S3_PHOENIX_86C801: + case S3_86C805: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - + case ATT49X: /*AT&T 490/1/2 RAMDAC*/ + if (svga->dots_per_clock != 16) { + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } else { + svga->clock *= 2.0; + svga->dots_per_clock >>= 2; + } + break; default: break; } break; - case S3_86C805: - switch (s3->card_type) { - case S3_MIROCRYSTAL8S_805: - case S3_MIROCRYSTAL10SD_805: - case S3_WINNER1000_805: - case S3_PHOENIX_86C805: - case S3_86C805_ONBOARD: + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - - case S3_SPEA_MIRAGE_86C805: - svga->hdisp >>= 1; - switch (s3->width) { - case 800: - case 1024: - if (svga->hdisp == 400) { - /*SPEA specific drivers + its VBE RAM BIOS...*/ - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - break; - default: - break; - } - break; - default: break; } @@ -4322,92 +4306,62 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; case S3_VISION868: - switch (s3->card_type) { - case S3_PHOENIX_VISION868: - case S3_NUMBER9_9FX_531: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + svga->clock /= 2.0; + } + break; + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; - default: break; } break; case S3_VISION964: - switch (s3->card_type) { - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case BT48X: /*BT485 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); } break; - + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + break; default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - /* TODO: Is this still needed? */ - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - - case S3_ELSAWIN2KPROX: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + s3_log("TVP3026 968 16bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -4440,26 +4394,15 @@ s3_recalctimings(svga_t *svga) } break; case S3_86C801: - switch (s3->card_type) { - case S3_PHOENIX_86C801: - case S3_SPEA_MIRAGE_86C801: - svga->hdisp = (svga->hdisp << 1) / 3; - svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - break; - default: - break; - } - break; case S3_86C805: - switch (s3->card_type) { - case S3_MIROCRYSTAL8S_805: - case S3_MIROCRYSTAL10SD_805: - case S3_WINNER1000_805: - case S3_PHOENIX_86C805: - case S3_SPEA_MIRAGE_86C805: - case S3_86C805_ONBOARD: + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: svga->hdisp = (svga->hdisp << 1) / 3; svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; + svga->clock = (svga->clock * 4.0) / 3.0; break; default: break; @@ -4470,21 +4413,24 @@ s3_recalctimings(svga_t *svga) svga->chain4 |= 0x08; break; case S3_86C928PCI: /*Technically the 928 cards don't support 24bpp.*/ - switch (s3->card_type) { - case S3_ELSAWIN1KPCI_86C928: - if (svga->dots_per_clock == 16) { - svga->dots_per_clock >>= 1; + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case SC1502X: /*SC15025 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + if (svga->dots_per_clock == 16) { + svga->dots_per_clock >>= 1; + svga->hdisp = (svga->hdisp << 1) / 3; + svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; + svga->clock = (svga->clock * 4.0) / 3.0; + if (svga->hdisp == 640) + s3->width = 640; + } + } else if (svga->getclock == av9194_getclock) { /*AV9194 clock chip*/ svga->hdisp = (svga->hdisp << 1) / 3; svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - svga->clock /= (2.0 / 3.0); - if (svga->hdisp == 640) - s3->width = 640; } break; - case S3_SPEA_MERCURY_LITE_PCI: - svga->hdisp = (svga->hdisp << 1) / 3; - svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - break; default: break; } @@ -4492,14 +4438,23 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp = (svga->hdisp << 1) / 3; svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - svga->clock /= (2.0 / 3.0); + svga->clock = (svga->clock * 4.0) / 3.0; break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - svga->hdisp = (svga->hdisp / 3) << 2; - svga->dots_per_clock = (svga->hdisp / 3) << 2; + switch (s3->ramdac_type) { + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + svga->hdisp = (svga->hdisp << 1) / 3; + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock = (svga->clock * 4.0) / 3.0; + } + svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; + + s3_log("TVP3026 968 24bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (svga->hdisp == 832) + svga->hdisp -= 32; break; default: break; @@ -4519,6 +4474,25 @@ s3_recalctimings(svga_t *svga) case 32: svga->render = svga_render_32bpp_highres; switch (s3->chip) { + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ + svga->hdisp >>= 2; + svga->dots_per_clock >>= 2; + if (s3->width == 800) { + if ((svga->crtc[0x67] >> 4) == 7) { + svga->clock *= 2.0; + s3_log("800x600: MEMLatch=%08x, htotal=%x.\n", svga->memaddr_latch, svga->htotal); + } + } + break; + default: + break; + } + break; + case S3_86C928: if (!svga->chain4) svga->chain4 |= 0x08; @@ -4576,103 +4550,54 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp >>= 2; svga->dots_per_clock >>= 2; + svga->clock /= 2.0; break; case S3_VISION868: - switch (s3->card_type) { - case S3_PHOENIX_VISION868: - case S3_NUMBER9_9FX_531: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } + break; + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; - svga->clock /= 2.0; break; default: break; } break; case S3_VISION964: - switch (s3->card_type) { - case S3_MIROCRYSTAL20SV_964: - switch (s3->width) { - case 800: - case 1024: - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - svga->clock /= 2.0; - break; - default: - break; - } - break; - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; - } + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); break; default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - /* TODO: Is this still needed? */ - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - - case S3_ELSAWIN2KPROX: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + s3_log("TVP3026 968 32bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -4703,10 +4628,13 @@ s3_recalctimings(svga_t *svga) svga->write_bank = 0; svga->read_bank = 0; } + /*In non-enhanced/IBM VGA modes, reset the misc index registers.*/ + s3->accel.multifunc[0xd] = 0xd000; + s3->accel.multifunc[0xe] = 0xe000; } } - if ((((s3->card_type == S3_ELSAWIN1K_86C928) || (s3->card_type == S3_ELSAWIN1KPCI_86C928)) && (svga->bpp == 32)) || + if ((s3->elsa_eeprom && (svga->bpp == 32)) || (s3->chip == S3_TRIO32) || (s3->chip == S3_TRIO64) || (s3->chip == S3_VISION864) || (s3->chip == S3_VISION868) || (s3->chip == S3_VISION968)) svga->hoverride = 1; else @@ -4976,7 +4904,7 @@ s3_updatemapping(s3_t *s3) if (s3->chip >= S3_86C928) { s3->linear_base = (svga->crtc[0x5a] << 16) | (svga->crtc[0x59] << 24); - if (s3->chip <= S3_86C805) { + if (s3->chip <= S3_86C805I) { if (s3->vlb) s3->linear_base &= 0x03ffffff; else if (!s3->pci) @@ -5036,8 +4964,8 @@ s3_updatemapping(s3_t *s3) } svga->fb_only = 1; } else { - svga->fb_only = 0; mem_mapping_disable(&s3->linear_mapping); + svga->fb_only = 0; } /* Memory mapped I/O. */ @@ -5122,11 +5050,10 @@ s3_accel_out(uint16_t port, uint8_t val, void *priv) case 0x4948: case 0x4ae8: s3->accel.advfunc_cntl = val; - if ((s3->chip > S3_86C805) && ((svga->crtc[0x50] & 0xc1) == 0x80)) { - s3->width = (val & 4) ? 1600 : 800; + if ((s3->chip > S3_86C805I) && ((svga->crtc[0x50] & 0xc1) == 0x80)) { svga->fullchange = svga->monitor->mon_changeframecount; svga_recalctimings(svga); - } else if (s3->chip <= S3_86C805) { + } else if (s3->chip <= S3_86C805I) { svga->fullchange = svga->monitor->mon_changeframecount; svga_recalctimings(svga); } @@ -6256,7 +6183,7 @@ s3_accel_in_w(uint16_t port, void *priv) s3->accel_start(8, 1, temp | (temp << 16), 0, s3); } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) temp = (temp >> 8) | (temp << 8); @@ -6266,7 +6193,7 @@ s3_accel_in_w(uint16_t port, void *priv) s3->accel_start(1, 1, 0xffffffff, temp | (temp << 16), s3); } } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) temp = (temp >> 8) | (temp << 8); @@ -6443,6 +6370,7 @@ s3_accel_write_w(uint32_t addr, uint16_t val, void *priv) s3_accel_write_fifo(s3, addr, val); break; default: + s3_log("FIFOWORD Write=%04x, val=%04x.\n", addr & (addr_mask - 1), val); s3_queue(s3, addr & addr_mask, val, FIFO_WRITE_WORD); break; } @@ -6607,6 +6535,7 @@ s3_accel_write_l(uint32_t addr, uint32_t val, void *priv) break; default: + s3_log("FIFOLONG Write=%04x, val=%08x.\n", addr & (addr_mask - 3), val); s3_queue(s3, addr & addr_mask, val, FIFO_WRITE_DWORD); break; } @@ -6962,7 +6891,7 @@ polygon_setup(s3_t *s3) } #define READ(addr, dat) \ - if (((s3->bpp == 0) && !s3->color_16bit) || (s3->bpp == 2)) \ + if (((s3->bpp == 0) && !s3->color_16bit)) \ dat = svga->vram[dword_remap(svga, addr) & s3->vram_mask]; \ else if ((s3->bpp == 1) || s3->color_16bit) \ dat = vram_w[dword_remap_w(svga, addr) & (s3->vram_mask >> 1)]; \ @@ -7807,12 +7736,10 @@ polygon_setup(s3_t *s3) { \ old_dest_dat = dest_dat; \ ROPMIX_READ(dest_dat, pat_dat, src_dat); \ - out = (out & s3->accel.wrt_mask) | (old_dest_dat & ~s3->accel.wrt_mask); \ - out &= 0xFFFFFF; \ } #define WRITE(addr, dat) \ - if (((s3->bpp == 0) && !s3->color_16bit) || (s3->bpp == 2)) { \ + if (((s3->bpp == 0) && !s3->color_16bit)) { \ svga->vram[dword_remap(svga, addr) & s3->vram_mask] = dat; \ svga->changedvram[(dword_remap(svga, addr) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; \ } else if ((s3->bpp == 1) || s3->color_16bit) { \ @@ -8041,7 +7968,7 @@ s3_visionx68_video_engine_op(uint32_t cpu_dat, s3_t *s3) s3->videoengine.busy = 1; if (host) { - if (idf == 0 && odf == 0) { + if ((idf == 0) && (odf == 0)) { if (s3->bpp == 0) count = 4; else if (s3->bpp == 1) @@ -8093,6 +8020,7 @@ s3_visionx68_video_engine_op(uint32_t cpu_dat, s3_t *s3) s3->videoengine.dx = 0.0; } + s3_log("VideoEngine count=%d.\n", count); while (count) { if (host) { /*Source data is CPU*/ src = cpu_dat; @@ -8235,6 +8163,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi int clip_r = s3->accel.multifunc[4] & 0xfff; int vram_mask = (s3->accel.multifunc[0xa] & 0xc0) == 0xc0; uint32_t mix_mask = 0; + uint8_t *vram_b = svga->vram; uint16_t *vram_w = (uint16_t *) svga->vram; uint32_t *vram_l = (uint32_t *) svga->vram; uint32_t compare = s3->accel.color_cmp; @@ -8279,21 +8208,23 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (!cpu_input) s3->accel.dat_count = 0; - if (cpu_input && (((s3->accel.multifunc[0xa] & 0xc0) != 0x80) || (!(s3->accel.cmd & 0x02)))) { - if ((s3->bpp == 3) && (count == 2)) { - if (s3->accel.dat_count) { - cpu_dat = ((cpu_dat & 0xffff) << 16) | s3->accel.dat_buf; - count = 4; - s3->accel.dat_count = 0; - } else { - s3->accel.dat_buf = cpu_dat & 0xffff; - s3->accel.dat_count = 1; + if (cpu_input) { + if (((s3->accel.multifunc[0xa] & 0xc0) != 0x80) || (!(s3->accel.cmd & 0x02))) { + if ((s3->bpp == 3) && (count == 2)) { + if (s3->accel.dat_count) { + cpu_dat = ((cpu_dat & 0xffff) << 16) | s3->accel.dat_buf; + count = 4; + s3->accel.dat_count = 0; + } else { + s3->accel.dat_buf = cpu_dat & 0xffff; + s3->accel.dat_count = 1; + } } + if ((s3->bpp == 1) || s3->color_16bit) + count >>= 1; + else if (s3->bpp == 3) + count >>= 2; } - if ((s3->bpp == 1) || s3->color_16bit) - count >>= 1; - else if (s3->bpp == 3) - count >>= 2; } if ((s3->bpp == 0) && !s3->color_16bit) @@ -8327,7 +8258,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi /*Bit 4 of the Command register is the draw yes bit, which enables writing to memory/reading from memory when enabled. When this bit is disabled, no writing to memory/reading from memory is allowed. (This bit is almost meaningless on the NOP command)*/ - s3_log("CMD=%d, full=%04x, s3bpp=%x, clr=%d, clb=%d, sourcedisplay=%02x, mmio=%02x, srcbase=%08x, dstbase=%08x, cpu=%04x, mix=%04x, count=%d, rd_mask=%04x, wrt_mask=%04x, width=%d, s=%d,%d, c=%d,%d, d=%d,%d, 16bitcolor=%x, frgdcolor=%04x, bkgdcolor=%04x, frgdsel=%d, bkgdsel=%d, frgdmix=%02x, curx=%d, cury=%d, cll=%d, b2e8pix=%x.\n", cmd, s3->accel.cmd, s3->bpp, clip_r, clip_b, s3->accel.multifunc[0x0a] & 0xc4, svga->crtc[0x53] & 0x18, srcbase, dstbase, cpu_dat & 0xffff, mix_dat & 0xffff, count, rd_mask, wrt_mask, s3->width, s3->accel.sx, s3->accel.sy, s3->accel.cx, s3->accel.cy, s3->accel.dx, s3->accel.dy, s3->color_16bit, frgd_color, bkgd_color, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.cur_x, s3->accel.cur_y, clip_l, s3->accel.b2e8_pix); + s3_log("CMD=%d, full=%04x, cnt=%d, s3bpp=%x, clr=%d, clb=%d, sourcedisplay=%02x, mmio=%02x, srcbase=%08x, dstbase=%08x, cpu=%08x, mix=%08x, count=%d, rd_mask=%08x, wrt_mask=%08x, width=%d, s=%d,%d, c=%d,%d, d=%d,%d, 16bitcolor=%x, frgdcolor=%08x, bkgdcolor=%08x, frgdsel=%d, bkgdsel=%d, frgdmix=%02x, curx=%d, cury=%d, cll=%d, b2e8pix=%x.\n", cmd, s3->accel.cmd, count, s3->bpp, clip_r, clip_b, s3->accel.multifunc[0x0a] & 0xc4, svga->crtc[0x53] & 0x18, srcbase, dstbase, cpu_dat & 0xffffffff, mix_dat & 0xffffffff, count, rd_mask, wrt_mask, s3->width, s3->accel.sx, s3->accel.sy, s3->accel.cx, s3->accel.cy, s3->accel.destx_distp, s3->accel.desty_axstp, s3->color_16bit, frgd_color, bkgd_color, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.cur_x, s3->accel.cur_y, clip_l, s3->accel.b2e8_pix); switch (cmd) { case 0: /*NOP (Short Stroke Vectors)*/ @@ -8444,6 +8375,11 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.cx *= 3; + s3->accel.cy *= 3; + } + s3->accel.sy = s3->accel.maj_axis_pcnt; if ((s3->bpp == 0) && s3->color_16bit) { s3->accel.rd_mask_16bit_check = ((rd_mask & 0xff00) != 0xff00) && rd_mask; @@ -8468,7 +8404,120 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi } if (s3->accel.cmd & 0x08) { /*Radial*/ - if ((s3->bpp == 0) && s3->color_16bit) { + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if ((rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) + rd_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.cx & 0xfff) >= (clip_l * 3) && (s3->accel.cx & 0xfff) <= (clip_r * 3) && (s3->accel.cy & 0xfff) >= (clip_t * 3) && (s3->accel.cy & 0xfff) <= (clip_b * 3)) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = 0; + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask]) & 0xffffff; + + old_dest_dat = dest_dat; + MIX + + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 1 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 2 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[(((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + + mix_dat <<= 1; + mix_dat |= 1; + cpu_dat >>= 16; + + if (!s3->accel.sy) { + if (s3->accel.rd_mask_16bit_check) { + if (s3->accel.minus) + s3->accel.color_16bit_check = 0; + else + s3->accel.color_16bit_check = 1; + } + break; + } + + switch (s3->accel.cmd & 0xe0) { + case 0x00: + s3->accel.cx += 3; + break; + case 0x20: + s3->accel.cx += 3; + s3->accel.cy -= 3; + break; + case 0x40: + s3->accel.cy -= 3; + break; + case 0x60: + s3->accel.cx -= 3; + s3->accel.cy -= 3; + break; + case 0x80: + s3->accel.cx -= 3; + break; + case 0xa0: + s3->accel.cx -= 3; + s3->accel.cy += 3; + break; + case 0xc0: + s3->accel.cy += 3; + break; + case 0xe0: + s3->accel.cx += 3; + s3->accel.cy += 3; + break; + + default: + break; + } + s3->accel.sy--; + s3->accel.cx &= 0xfff; + s3->accel.cy &= 0xfff; + } + s3->accel.cur_x = (s3->accel.cx / 3) & 0xfff; + s3->accel.cur_y = (s3->accel.cy / 3) & 0xfff; + break; + } + + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -8589,7 +8638,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (s3->accel.b2e8_pix && s3_cpu_src(s3) && (count == 16)) { /*Pattern on pixtrans (911/924)*/ count = s3->accel.maj_axis_pcnt + 1; s3->accel.temp_cnt = 16; - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -8605,7 +8654,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi break; } } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -8625,6 +8674,132 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (!s3->accel.b2e8_pix) s3_log("CMDFULL=%04x, FRGDMIX=%x, FRGDCOLR=%04x, RDMASK=%04x, MINUS=%d, WRTMASK=%04X, MIX=%04x, CX=%d, CY=%d, SX=%d, SY=%d, PIXCNTL=%02x, 16BITCOLOR=%x, RDCHECK=%x, CLIPL=%d, CLIPR=%d, CLIPT=%d, CLIPB=%d.\n", s3->accel.cmd, frgd_mix, s3->accel.frgd_color, rd_mask, s3->accel.minus, wrt_mask, mix_dat & 0xffff, s3->accel.cx, s3->accel.cy, s3->accel.sx, s3->accel.sy, s3->accel.multifunc[0x0a] & 0xc4, s3->accel.color_16bit_check, s3->accel.rd_mask_16bit_check, clip_l, clip_r, clip_t, clip_b); + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if ((rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) + rd_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { + mix_dat >>= 16; + s3->accel.temp_cnt = 16; + } + + if (s3->accel.minus) + s3_log("Total pixel cx=%d, cy=%d.\n", s3->accel.cx - s3->accel.minus, s3->accel.cy); + + if ((s3->accel.cx & 0xfff) >= (clip_l * 3) && (s3->accel.cx & 0xfff) <= (clip_r * 3) && (s3->accel.cy & 0xfff) >= (clip_t * 3) && (s3->accel.cy & 0xfff) <= (clip_b * 3)) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = 0; + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask]) & 0xffffff; + + old_dest_dat = dest_dat; + MIX + + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 1 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 2 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[(((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + + if (s3->accel.b2e8_pix && s3_cpu_src(s3)) { + if (s3->accel.temp_cnt > 0) { + s3->accel.temp_cnt--; + mix_dat <<= 1; + mix_dat |= 1; + } + } else { + mix_dat <<= 1; + mix_dat |= 1; + } + + cpu_dat >>= 16; + + if (!s3->accel.sy) { + if (s3->accel.rd_mask_16bit_check) { + if (s3->accel.minus) + s3->accel.color_16bit_check = 0; + else + s3->accel.color_16bit_check = 1; + } + break; + } + + if (s3->accel.cmd & 0x40) { + if (s3->accel.cmd & 0x80) + s3->accel.cy += 3; + else + s3->accel.cy -= 3; + + if (s3->accel.err_term >= s3->accel.maj_axis_pcnt) { + s3->accel.err_term += s3->accel.destx_distp; + if (s3->accel.cmd & 0x20) + s3->accel.cx += 3; + else + s3->accel.cx -= 3; + } else + s3->accel.err_term += s3->accel.desty_axstp; + } else { + if (s3->accel.cmd & 0x20) + s3->accel.cx += 3; + else + s3->accel.cx -= 3; + + if (s3->accel.err_term >= s3->accel.maj_axis_pcnt) { + s3->accel.err_term += s3->accel.destx_distp; + if (s3->accel.cmd & 0x80) + s3->accel.cy += 3; + else + s3->accel.cy -= 3; + } else + s3->accel.err_term += s3->accel.desty_axstp; + } + + s3->accel.sy--; + s3->accel.cx &= 0xfff; + s3->accel.cy &= 0xfff; + } + s3->accel.cur_x = (s3->accel.cx / 3) & 0xfff; + s3->accel.cur_y = (s3->accel.cy / 3) & 0xfff; + break; + } while (count-- && (s3->accel.sy >= 0)) { if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { mix_dat >>= 16; @@ -8754,11 +8929,20 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.cx *= 3; + s3->accel.cy *= 3; + } else if ((s3->bpp == 0) && (svga->bpp == 24)) + s3_log("24bpp 80x rectfill: BKGDCOLOR=%04x, FRGDCOLOR=%04x.\n", bkgd_color, frgd_color); + s3->accel.dest = dstbase + s3->accel.cy * s3->width; if ((s3->bpp == 0) && s3->color_16bit) { + if (!rd_mask && (clip_r == 0x7ff)) + rd_mask = 0xff; + s3->accel.rd_mask_16bit_check = ((rd_mask & 0xff00) != 0xff00) && rd_mask; - s3_log("CMD2: RDMASK16CHECK=%d, rdmask=%04x.\n", s3->accel.rd_mask_16bit_check, rd_mask); + s3_log("CMD2: %04X: RDMASK16CHECK=%d, rdmask=%04x, clip_r=%04x.\n", s3->accel.cmd, s3->accel.rd_mask_16bit_check, rd_mask, clip_r); if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cmd == 0x41b3) { if (frgd_mix == 0) { @@ -8822,19 +9006,21 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (s3->accel.b2e8_pix && s3_cpu_src(s3) && (count == 16)) { /*Pattern on pixtrans (911/924)*/ count = s3->accel.maj_axis_pcnt + 1; s3->accel.temp_cnt = 16; - if (s3->accel.rd_mask_16bit_check) { - if (s3->accel.minus) { - wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); - frgd_color = (s3->accel.frgd_color_actual[1] << 8); - bkgd_color = (s3->accel.bkgd_color_actual[1] << 8); - } else { - wrt_mask = s3->accel.wrt_mask_actual[0]; - frgd_color = s3->accel.frgd_color_actual[0]; - bkgd_color = s3->accel.bkgd_color_actual[0]; - } - rd_mask &= 0x00ff; - } else if (!s3->accel.rd_mask_16bit_check && (s3->accel.cur_x & 0x400)) - break; + if ((s3->bpp == 0) && s3->color_16bit) { + if (s3->accel.rd_mask_16bit_check) { + if (s3->accel.minus) { + wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); + frgd_color = (s3->accel.frgd_color_actual[1] << 8); + bkgd_color = (s3->accel.bkgd_color_actual[1] << 8); + } else { + wrt_mask = s3->accel.wrt_mask_actual[0]; + frgd_color = s3->accel.frgd_color_actual[0]; + bkgd_color = s3->accel.bkgd_color_actual[0]; + } + rd_mask &= 0x00ff; + } else if (!s3->accel.rd_mask_16bit_check && (s3->accel.cur_x & 0x400)) + break; + } } else { if ((s3->bpp == 0) && s3->color_16bit) { if (s3->accel.cmd == 0x41b3) { @@ -8884,7 +9070,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3_log("FIXME: S3 911/924 15/16bpp documentation needed.\n"); } else { if (!cpu_input && (s3->accel.cur_x & 0x400)) { - s3_log("No Input.\n"); + s3_log("No Input on %04x.\n", s3->accel.cmd); break; } else if (cpu_input && (s3->accel.cmd == 0x53b3) && (s3->accel.cur_x & 0x400)) break; @@ -8896,6 +9082,123 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3_log("CMDFULL=%04x, FRGDSEL=%x, BKGDSEL=%x, FRGDMIX=%02x, BKGDMIX=%02x, MASKCHECK=%x, RDMASK=%04x, MINUS=%d, WRTMASK=%04X, MIX=%04x, CX=%d, CY=%d, DX=%d, DY=%d, SX=%d, SY=%d, PIXCNTL=%02x, 16BITCOLOR=%x, RDCHECK=%x, CLIPL=%d, CLIPR=%d, OVERFLOW=%d, pitch=%d.\n", s3->accel.cmd, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.bkgd_mix & 0x0f, s3->accel.rd_mask_16bit_check, rd_mask, s3->accel.minus, wrt_mask, mix_dat & 0xffff, s3->accel.cx, s3->accel.cy, s3->accel.dx, s3->accel.dy, s3->accel.sx, s3->accel.sy, s3->accel.multifunc[0x0a] & 0xc4, s3->accel.color_16bit_check, s3->accel.rd_mask_16bit_check, clip_l, clip_r, (s3->accel.destx_overflow & 0xc00) == 0xc00, s3->width); + if ((s3->bpp == 2) || (svga->bpp == 24)) { + int multiplier = 1; + if (s3->bpp == 2) { + multiplier = 3; + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if ((rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) + rd_mask = 0xffffffff; + } + + while (count-- && (s3->accel.sy >= 0)) { + if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { + mix_dat >>= 16; + s3->accel.temp_cnt = 16; + } + + if ((((s3->accel.cx >= (clip_l * multiplier)) && (s3->accel.cx <= (clip_r * multiplier)) && (s3->accel.cy >= (clip_t * multiplier)) && (s3->accel.cy <= (clip_b * multiplier))) && !(s3->accel.multifunc[0xe] & 0x20)) || + (((s3->accel.cx < (clip_l * multiplier)) && (s3->accel.cx > (clip_r * multiplier)) && (s3->accel.cy < (clip_t * multiplier)) && (s3->accel.cy > (clip_b * multiplier))) && (s3->accel.multifunc[0xe] & 0x20)) ) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = 0; + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + if (s3->bpp == 2) + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.dest + s3->accel.cx, dest_dat); + } + + old_dest_dat = dest_dat; + MIX + + if (s3->accel.cmd & 0x10) { + if (s3->bpp == 2) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.cx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.cx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.cx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.cx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } else { + WRITE(s3->accel.dest + s3->accel.cx, dest_dat); + } + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) + s3->accel.cx += multiplier; + else + s3->accel.cx -= multiplier; + + s3->accel.cx &= 0xfff; + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.cx *= multiplier; + + if (s3->accel.cmd & 0x80) + s3->accel.cy += multiplier; + else + s3->accel.cy -= multiplier; + + s3->accel.cy &= 0xfff; + s3->accel.dest = dstbase + s3->accel.cy * s3->width; + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.cur_x = s3->accel.cx / multiplier; + s3->accel.cur_y = s3->accel.cy / multiplier; + return; + } + } + } + break; + } + while (count-- && (s3->accel.sy >= 0)) { if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { mix_dat >>= 16; @@ -9151,7 +9454,6 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi case 6: /*BitBlt*/ if (!cpu_input) { /*!cpu_input is trigger to start operation*/ s3->accel.minus = 0; - s3->accel.minus_src_24bpp = 0; s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; s3->accel.sy = s3->accel.multifunc[0] & 0xfff; @@ -9161,6 +9463,18 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.dx *= 3; + s3->accel.dy *= 3; + s3->accel.cx *= 3; + s3->accel.cy *= 3; + s3->accel.blit_24bpp = 0; + } else if ((s3->bpp == 0) && (svga->bpp == 24)) { + s3_log("BitBLT bpp%d: 24bpp params=%04x, dwidth=%d, dheight=%d, swidth=%d, sheight=%d, lwidth=%d, lheight=%d, srcbase=%08x, dstbase=%08x, blit24 times=%d, moddx=%d, modcx=%d.\n", s3->bpp, s3->accel.cmd, s3->accel.dx / 3, s3->accel.dy, s3->accel.cx / 3, s3->accel.cy, s3->accel.sx / 3, s3->accel.sy, srcbase, dstbase, s3->accel.blit_24bpp, s3->accel.dx % 3, s3->accel.cx % 3); + s3->accel.blit_24bpp = (s3->accel.blit_24bpp + 1) & 3; + } else + s3->accel.blit_24bpp = 0; + if ((s3->bpp == 0) && s3->color_16bit) { s3->accel.rd_mask_16bit_check = ((rd_mask & 0xff00) != 0xff00) && rd_mask; s3_log("CMD6: RDMASK16CHECK=%d.\n", s3->accel.rd_mask_16bit_check); @@ -9193,7 +9507,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if ((s3->accel.cmd & 0x100) && !cpu_input) return; /*Wait for data from CPU*/ - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit)) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -9211,6 +9525,203 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3_log("CMDFULL=%04x, FRGDSEL=%x, BKGDSEL=%x, FRGDMIX=%02x, BKGDMIX=%02x, MASKCHECK=%x, RDMASK=%04x, MINUS=%d, WRTMASK=%04X, MIX=%04x, CX=%d, CY=%d, DX=%d, DY=%d, SX=%d, SY=%d, PIXCNTL=%02x, 16BITCOLOR=%x, RDCHECK=%x, CLIPL=%d, CLIPR=%d, OVERFLOW=%d, pitch=%d.\n", s3->accel.cmd, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.bkgd_mix & 0x0f, s3->accel.rd_mask_16bit_check, rd_mask, s3->accel.minus, wrt_mask, mix_dat & 0xffff, s3->accel.cx, s3->accel.cy, s3->accel.dx, s3->accel.dy, s3->accel.sx, s3->accel.sy, s3->accel.multifunc[0x0a] & 0xc4, s3->accel.color_16bit_check, s3->accel.rd_mask_16bit_check, clip_l, clip_r, (s3->accel.destx_overflow & 0xc00) == 0xc00, s3->width); + if ((s3->bpp == 2) || (svga->bpp == 24)) { + int multiplier = 1; + if (s3->bpp == 2) { + multiplier = 3; + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if (rd_mask == 0x0000ffff) + rd_mask = 0xffffffff; + } + + if (!cpu_input && (frgd_mix == 3) && !vram_mask && !(s3->accel.multifunc[0xe] & 0x100) && ((s3->accel.cmd & 0xa0) == 0xa0) && ((s3->accel.frgd_mix & 0xf) == 7) && ((s3->accel.bkgd_mix & 0xf) == 7)) { + s3_log("Special BitBLT24, wrtmask=%04x.\n", wrt_mask); + while (1) { + if ((s3->accel.dx >= (clip_l * multiplier)) && (s3->accel.dx <= (clip_r * multiplier)) && (s3->accel.dy >= (clip_t * multiplier)) && (s3->accel.dy <= (clip_b * multiplier))) { + if (s3->bpp == 2) { + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + } else { + READ(s3->accel.src + s3->accel.cx, src_dat); + READ(s3->accel.dest + s3->accel.dx, dest_dat); + } + dest_dat = (src_dat & wrt_mask) | (dest_dat & ~wrt_mask); + + if (s3->accel.cmd & 0x10) { + s3_log("CMD6 special bitblt24 bpp%d: dest=%02x, src=%06x, dx=%d, dy=%d, cx=%d, cy=%d, sx=%d, sy=%d.\n", s3->bpp, dest_dat, src_dat, s3->accel.dx, s3->accel.dy, s3->accel.cx, s3->accel.cy, s3->accel.sx, s3->accel.sy); + if (s3->bpp == 2) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } else { + WRITE(s3->accel.dest + s3->accel.dx, dest_dat); + } + } + } + + s3->accel.cx += multiplier; + s3->accel.dx += multiplier; + s3->accel.sx--; + + s3->accel.dx &= 0xfff; + + if (s3->accel.sx < 0) { + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + + s3->accel.cx *= multiplier; + s3->accel.dx *= multiplier; + + s3->accel.cy += multiplier; + s3->accel.dy += multiplier; + + s3->accel.src = srcbase + (s3->accel.cy * s3->width); + s3->accel.dest = dstbase + (s3->accel.dy * s3->width); + + s3->accel.sy--; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / multiplier; + s3->accel.desty_axstp = s3->accel.dy / multiplier; + return; + } + } + } + } else { + s3_log("Normal24 blit, srcbase=%08x, dstbase=%08x, full=%04x, wrt_mask=%08x, extmultifunc0e=%03x, frgdmixval=%02x.\n", srcbase, dstbase, s3->accel.cmd, wrt_mask, s3->accel.multifunc[0x0e] & 0x180, s3->accel.frgd_mix); + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.dx >= (clip_l * multiplier)) && (s3->accel.dx <= (clip_r * multiplier)) && ((s3->accel.dy >= clip_t * multiplier)) && (s3->accel.dy <= (clip_b * multiplier))) { + if (vram_mask && (s3->accel.cmd & 0x10)) { + if (s3->bpp == 2) + mix_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.src + s3->accel.cx, mix_dat); + } + mix_dat = ((mix_dat & rd_mask) == rd_mask); + mix_dat = mix_dat ? mix_mask : 0; + } + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + if (s3->bpp == 2) + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.src + s3->accel.cx, src_dat); + } + if (vram_mask && (s3->accel.cmd & 0x10)) + src_dat = ((src_dat & rd_mask) == rd_mask); + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + if (s3->bpp == 2) + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.dest + s3->accel.dx, dest_dat); + } + + old_dest_dat = dest_dat; + MIX + + if ((!(s3->accel.cmd & 0x10) && vram_mask) || (s3->accel.cmd & 0x10)) { + s3_log("CMD6 %04x: normal bitblt24 bpp%d: dest=%02x, src=%02x, old=%02x, dx=%d, dy=%d, cx=%d, cy=%d, sx=%d, sy=%d, moddx=%d, modcx=%d, frgdmix=%02x, bkgdmix=%02x.\n", s3->accel.cmd, s3->bpp, dest_dat, src_dat, old_dest_dat, s3->accel.dx / 3, s3->accel.dy, s3->accel.cx / 3, s3->accel.cy, s3->accel.sx / 3, s3->accel.sy, s3->accel.dx % 3, s3->accel.cx % 3, s3->accel.frgd_mix, s3->accel.bkgd_mix); + if (s3->bpp == 2) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } else { + if (s3->accel.blit_24bpp == 5) { + WRITE(s3->accel.dest + s3->accel.dx, dest_dat); + } + } + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) { + s3->accel.cx += multiplier; + s3->accel.dx += multiplier; + } else { + s3->accel.cx -= multiplier; + s3->accel.dx -= multiplier; + } + + s3->accel.dx &= 0xfff; + + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + + s3->accel.cx *= multiplier; + s3->accel.dx *= multiplier; + + if (s3->accel.cmd & 0x80) { + s3->accel.cy += multiplier; + s3->accel.dy += multiplier; + } else { + s3->accel.cy -= multiplier; + s3->accel.dy -= multiplier; + } + + s3->accel.src = srcbase + s3->accel.cy * s3->width; + s3->accel.dest = dstbase + s3->accel.dy * s3->width; + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / multiplier; + s3->accel.desty_axstp = s3->accel.dy / multiplier; + return; + } + } + } + } + break; + } + if (!cpu_input && (frgd_mix == 3) && !vram_mask && !(s3->accel.multifunc[0xe] & 0x100) && ((s3->accel.cmd & 0xa0) == 0xa0) && ((s3->accel.frgd_mix & 0xf) == 7) && ((s3->accel.bkgd_mix & 0xf) == 7)) { s3_log("Special BitBLT.\n"); while (1) { @@ -9398,6 +9909,13 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.dx *= 3; + s3->accel.dy *= 3; + s3->accel.cx *= 3; + s3->accel.cy *= 3; + } + /*Align source with destination*/ s3->accel.pattern = (s3->accel.cy * s3->width) + s3->accel.cx; s3->accel.dest = dstbase + s3->accel.dy * s3->width; @@ -9411,6 +9929,119 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if ((s3->accel.cmd & 0x100) && !cpu_input) return; /*Wait for data from CPU*/ + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if (rd_mask == 0x0000ffff) + rd_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.dx >= (clip_l * 3)) && (s3->accel.dx <= (clip_r * 3)) && (s3->accel.dy >= (clip_t * 3)) && (s3->accel.dy <= (clip_b * 3))) { + if (vram_mask) { + mix_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + mix_dat = ((mix_dat & rd_mask) == rd_mask); + mix_dat = mix_dat ? mix_mask : 0; + } + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + if (vram_mask) + src_dat = ((src_dat & rd_mask) == rd_mask); + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + + old_dest_dat = dest_dat; + MIX + + if (s3->accel.cmd & 0x10) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) { + s3->accel.cx = ((s3->accel.cx + 3) & 7) | (s3->accel.cx & ~7); + s3->accel.dx += 3; + } else { + s3->accel.cx = ((s3->accel.cx - 3) & 7) | (s3->accel.cx & ~7); + s3->accel.dx -= 3; + } + s3->accel.dx &= 0xfff; + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + + s3->accel.cx *= 3; + s3->accel.dx *= 3; + + if (s3->accel.cmd & 0x80) { + s3->accel.cy = ((s3->accel.cy + 3) & 7) | (s3->accel.cy & ~7); + s3->accel.dy += 3; + } else { + s3->accel.cy = ((s3->accel.cy - 3) & 7) | (s3->accel.cy & ~7); + s3->accel.dy -= 3; + } + + s3->accel.src = srcbase + s3->accel.pattern + (s3->accel.cy * s3->width); + s3->accel.dest = dstbase + s3->accel.dy * s3->width; + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / 3; + s3->accel.desty_axstp = s3->accel.dy / 3; + return; + } + } + } + break; + } + while (count-- && (s3->accel.sy >= 0)) { if ((s3->accel.dx >= clip_l) && (s3->accel.dx <= clip_r) && (s3->accel.dy >= clip_t) && (s3->accel.dy <= clip_b)) { if (vram_mask) { @@ -9756,8 +10387,11 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi case 14: /*ROPBlt (Vision868/968 only)*/ ; - uint32_t mono_pattern[64] = { 0 }; - if (s3->chip != S3_VISION968 && s3->chip != S3_VISION868) + uint32_t mono_pattern[8][8] = { 0 }; + int use_rop_mix = 0; + uint32_t vram_dat = 0; + + if ((s3->chip != S3_VISION968) && (s3->chip != S3_VISION868)) break; if (!cpu_input) /*!cpu_input is trigger to start operation*/ @@ -9774,18 +10408,26 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.px = s3->accel.pat_x & 0xfff; s3->accel.py = s3->accel.pat_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.dx *= 3; + s3->accel.dy *= 3; + s3->accel.cx *= 3; + s3->accel.cy *= 3; + s3->accel.px *= 3; + s3->accel.py *= 3; + } + s3->accel.dest = dstbase + (s3->accel.dy * s3->width); s3->accel.src = srcbase + (s3->accel.cy * s3->width); s3->accel.pattern = (s3->accel.py * s3->width); - s3_log("ROPBLT=%04x, PIXCntl=%04x, Misc1=%04x, PATBKGDCOL=%08x, PATFRGDCOL=%08x, COLBKGDCOL=%08x, COLFRGDCOL=%08x, PX=%d, PY=%d, DX=%d, DY=%d, CX=%d, CY=%d, FRGDSEL=%x, BKGDSEL=%x, RDMASK=%08x, WRTMASK=%08x, ROPMIX=%03x, pitch=%d.\n", s3->accel.cmd, s3->accel.multifunc[0xa], s3->accel.multifunc[0xe], s3->accel.pat_bg_color, s3->accel.pat_fg_color, s3->accel.bkgd_color, s3->accel.frgd_color, s3->accel.px, s3->accel.py, s3->accel.dx, s3->accel.dy, s3->accel.cx, s3->accel.cy, frgd_mix, bkgd_mix, s3->accel.rd_mask, s3->accel.wrt_mask, s3->accel.ropmix, s3->width); + + s3_log("ROPBLT=%04x, BPP=%d, PIXCntl=%04x, Misc1=%04x, PATBKGDCOL=%08x, PATFRGDCOL=%08x, COLBKGDCOL=%08x, COLFRGDCOL=%08x, SX=%d, SY=%d, PX=%d, PY=%d, DX=%d, DY=%d, CX=%d, CY=%d, FRGDSEL=%02x, BKGDSEL=%02x, RDMASK=%08x, WRTMASK=%08x, ROPMIX=%03x, pitch=%d.\n", s3->accel.cmd, s3->bpp, s3->accel.multifunc[0xa], s3->accel.multifunc[0xe], s3->accel.pat_bg_color, s3->accel.pat_fg_color, s3->accel.bkgd_color, s3->accel.frgd_color, s3->accel.sx, s3->accel.sy, s3->accel.pat_x, s3->accel.pat_y, s3->accel.dx, s3->accel.dy, s3->accel.cx, s3->accel.cy, s3->accel.frgd_mix, s3->accel.bkgd_mix, s3->accel.rd_mask, s3->accel.wrt_mask, s3->accel.ropmix, s3->width); } if ((s3->accel.cmd & 0x100) && !cpu_input) return; /*Wait for data from CPU*/ if (s3->accel.ropmix & 0x100) { - int x; - int y; switch (s3->accel.cmd & 0x600) { case 0x000: case 0x600: @@ -9798,13 +10440,246 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi break; } - for (y = 0; y < 8; y++) { - for (x = 0; x < 8; x++) { - mono_pattern[y * 8 + (7 - x)] = (mix_dat & (1 << (x + y * 8))) & 0x80000000; + if (cpu_input) { + if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 0x02)) { + if ((frgd_mix < 2) || (bkgd_mix < 2)) + use_rop_mix = 3; + } else { + if ((frgd_mix == 2) || (bkgd_mix == 2)) + use_rop_mix = 2; + } + } else { + if ((s3->accel.multifunc[0xa] & 0xc0) != 0x80) { + if ((frgd_mix == 3) || (bkgd_mix == 3)) + use_rop_mix = 1; + } + } + + if (use_rop_mix == 3) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + mono_pattern[y][7 - x] = (mix_dat & (1 << (x + y * 8))) & 0x80000000; + } + } + } else if (use_rop_mix == 2) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + mono_pattern[y][7 - x] = (cpu_dat & (1 << (x + y * 8))) & 0x80000000; + } + } + } else if (use_rop_mix <= 1) { + if (use_rop_mix == 0) + frgd_mix = 3; + + if (s3->bpp == 2) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = (*(uint32_t *) &vram_b[(((s3->accel.py + (y * 3)) * s3->width) + s3->accel.px + (x * 3)) & s3->vram_mask]) & 0xffffff; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x800000; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x800000); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x800000); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x800000; + + if (s3->accel.pat_bg_color != s3->accel.pat_fg_color) + s3_log("MonoPattern Screen=%08x, y=%d, x=%d, sel=%08x, vram=%08x.\n", mono_pattern[y][7 - x], y, 7 - x, vram_dat & 0x800000, vram_dat); + } + } + } else if (s3->bpp == 1) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = vram_w[(((s3->accel.py + y) * s3->width) + s3->accel.px + x) & (s3->vram_mask >> 1)]; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x8000; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x8000); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x8000); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80000; + } + } + } else if (s3->bpp == 3) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = vram_l[(((s3->accel.py + y) * s3->width) + s3->accel.px + x) & (s3->vram_mask >> 2)]; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80000000; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80000000); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80000000); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80000000; + } + } + } else { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = svga->vram[(((s3->accel.py + y) * s3->width) + s3->accel.px + x) & s3->vram_mask]; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x800; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80; + } + } } } } - while (count-- && s3->accel.sy >= 0) { + + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.dx >= (clip_l * 3)) && (s3->accel.dx <= (clip_r * 3)) && (s3->accel.dy >= (clip_t * 3)) && (s3->accel.dy <= (clip_b * 3))) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = s3->accel.bkgd_color; + break; + case 1: + src_dat = s3->accel.frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + break; + + default: + break; + } + + if (s3->accel.ropmix & 0x100) { /*Mono pattern used*/ + if (use_rop_mix <= 1) { + pat_dat = mono_pattern[(s3->accel.py / 3) & 7][(s3->accel.px / 3) & 7] ? s3->accel.pat_fg_color : s3->accel.pat_bg_color; + if (s3->accel.pat_bg_color != s3->accel.pat_fg_color) + s3_log("PatternData=%06x, PX=%d, PY=%d, MonoSel=%06x.\n", pat_dat, (s3->accel.px / 3) & 7, (s3->accel.py / 3) & 7, vram_dat); + } else { + switch (mono_pattern[(s3->accel.py / 3) & 7][(s3->accel.px / 3) & 7] ? (frgd_mix & 1) : (bkgd_mix & 1)) { + case 0: + pat_dat = s3->accel.pat_bg_color; + break; + case 1: + pat_dat = s3->accel.pat_fg_color; + break; + default: + break; + } + } + } else { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + pat_dat = s3->accel.bkgd_color; + break; + case 1: + pat_dat = s3->accel.frgd_color; + break; + case 2: + pat_dat = cpu_dat; + break; + case 3: + pat_dat = (*(uint32_t *) &vram_b[(s3->accel.pattern + s3->accel.px) & s3->vram_mask]) & 0xffffff; + break; + + default: + break; + } + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + + ROPMIX + out = (out & wrt_mask) | (old_dest_dat & ~wrt_mask); + + if (s3->accel.cmd & 0x10) { + s3_log("ROPBLT24 ROPSET=%03x, DX=%d, DY=%d, OUT=%02x, SRCC=%08x, DSTC=%08x.\n", s3->accel.ropmix, s3->accel.dx, s3->accel.dy, out, (s3->accel.src + s3->accel.cx) & (s3->vram_mask >> 2), (s3->accel.dest + s3->accel.dx) & (s3->vram_mask >> 2)); + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = out & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (out >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (out >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) { + s3->accel.cx += 3; + s3->accel.dx += 3; + s3->accel.px += 3; + } else { + s3->accel.cx -= 3; + s3->accel.dx -= 3; + s3->accel.px -= 3; + } + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.px = s3->accel.pat_x & 0xfff; + + s3->accel.dx *= 3; + s3->accel.cx *= 3; + s3->accel.px *= 3; + + if (s3->accel.cmd & 0x80) { + s3->accel.cy += 3; + s3->accel.dy += 3; + s3->accel.py += 3; + } else { + s3->accel.cy -= 3; + s3->accel.dy -= 3; + s3->accel.py -= 3; + } + s3->accel.dest = dstbase + (s3->accel.dy * s3->width); + s3->accel.src = srcbase + (s3->accel.cy * s3->width); + s3->accel.pattern = (s3->accel.py * s3->width); + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / 3; + s3->accel.desty_axstp = s3->accel.dy / 3; + return; + } + } + } + break; + } + while (count-- && (s3->accel.sy >= 0)) { if ((s3->accel.dx >= clip_l) && (s3->accel.dx <= clip_r) && (s3->accel.dy >= clip_t) && (s3->accel.dy <= clip_b)) { switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { case 0: @@ -9825,17 +10700,20 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi } if (s3->accel.ropmix & 0x100) { /*Mono pattern used*/ - switch (mono_pattern[(s3->accel.py & 7) * 8 + (s3->accel.px & 7)] ? (frgd_mix & 1) : (bkgd_mix & 1)) { - case 0: - pat_dat = s3->accel.pat_bg_color; - break; - case 1: - pat_dat = s3->accel.pat_fg_color; - break; - default: - break; + if (use_rop_mix <= 1) + pat_dat = mono_pattern[s3->accel.py & 7][s3->accel.px & 7] ? s3->accel.pat_fg_color : s3->accel.pat_bg_color; + else { + switch (mono_pattern[s3->accel.py & 7][s3->accel.px & 7] ? (frgd_mix & 1) : (bkgd_mix & 1)) { + case 0: + pat_dat = s3->accel.pat_bg_color; + break; + case 1: + pat_dat = s3->accel.pat_fg_color; + break; + default: + break; + } } - s3_log("MonoMIX=%08x, PX=%d, PY=%d.\n", mix_dat, s3->accel.px & 7, s3->accel.py & 7); } else { switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { case 0: @@ -9875,8 +10753,8 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi READ(s3->accel.dest + s3->accel.dx, dest_dat); ROPMIX + out = (out & s3->accel.wrt_mask) | (old_dest_dat & ~s3->accel.wrt_mask); - s3_log("Destination=%08x, Source=%08x, Pattern=%08x, OUT=%08x, mix=%08x, count=%d.\n", dest_dat, src_dat, pat_dat, out, mix_dat, count); if (s3->accel.cmd & 0x10) { WRITE(s3->accel.dest + s3->accel.dx, out); } @@ -9928,8 +10806,9 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.sy--; - if (cpu_input /* && (s3->accel.multifunc[0xa] & 0xc0) == 0x80*/) + if (cpu_input) return; + if (s3->accel.sy < 0) { s3->accel.destx_distp = s3->accel.dx; s3->accel.desty_axstp = s3->accel.dy; @@ -10293,7 +11172,7 @@ s3_init(const device_t *info) break; case S3_WINNER1000_805: bios_fn = ROM_WINNER1000_805; - chip = S3_86C801; + chip = S3_86C805I; video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_86c801); break; case S3_86C805_ONBOARD: @@ -10731,7 +11610,6 @@ s3_init(const device_t *info) s3->id_ext = stepping; s3->id_ext_pci = 0; s3->packed_mmio = 0; - s3->accel.rd_mask = 0xff; svga->ramdac = device_add(&sc11483_ramdac_device); s3->ramdac_type = SC1148X; @@ -10754,7 +11632,6 @@ s3_init(const device_t *info) s3->id_ext = stepping; s3->id_ext_pci = 0; s3->packed_mmio = 0; - s3->accel.rd_mask = 0xff; svga->ramdac = device_add(&sc11483_ramdac_device); s3->ramdac_type = SC1148X; @@ -10776,11 +11653,12 @@ s3_init(const device_t *info) s3->ramdac_type = S3_SDAC; svga->clock_gen = svga->ramdac; svga->getclock = sdac_getclock; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); + svga_recalctimings(svga); break; case S3_SPEA_MIRAGE_86C801: case S3_SPEA_MIRAGE_86C805: - case S3_WINNER1000_805: svga->decode_mask = (2 << 20) - 1; stepping = 0xa2; /*86C801/86C805*/ s3->id = stepping; @@ -10793,8 +11671,24 @@ s3_init(const device_t *info) s3->ramdac_type = ATT49X; svga->clock_gen = device_add(&av9194_device); svga->getclock = av9194_getclock; - if (info->local == S3_WINNER1000_805) - s3->elsa_eeprom = 1; + break; + + case S3_WINNER1000_805: + svga->decode_mask = (2 << 20) - 1; + stepping = 0xa8; /*86C801I/86C805I*/ + s3->id = stepping; + s3->id_ext = stepping; + s3->id_ext_pci = 0; + s3->packed_mmio = 0; + svga->crtc[0x5a] = 0x0a; + + svga->ramdac = device_add(&sdac_ramdac_device); + s3->ramdac_type = S3_SDAC; + svga->clock_gen = svga->ramdac; + svga->getclock = sdac_getclock; + s3->elsa_eeprom = 1; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); + svga_recalctimings(svga); break; case S3_86C805_ONBOARD: @@ -10924,6 +11818,8 @@ s3_init(const device_t *info) s3->ramdac_type = S3_SDAC; svga->clock_gen = svga->ramdac; svga->getclock = sdac_getclock; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); + svga_recalctimings(svga); break; case S3_DIAMOND_STEALTH64_964: @@ -11031,13 +11927,14 @@ s3_init(const device_t *info) svga->clock_gen = device_add(&icd2061_device); svga->getclock = icd2061_getclock; icd2061_set_ref_clock(svga->ramdac, 14318184.0f); - svga_recalctimings(svga); } else { svga->ramdac = device_add(&sdac_ramdac_device); s3->ramdac_type = S3_SDAC; svga->clock_gen = svga->ramdac; svga->getclock = sdac_getclock; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); } + svga_recalctimings(svga); break; case S3_PHOENIX_TRIO32: diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index daf59aea6..dcf380ff8 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1063,32 +1063,49 @@ s3_virge_updatemapping(virge_t *virge) return; } - switch (svga->gdcreg[6] & 0xc) { /*Banked framebuffer*/ - case 0x0: /*128k at A0000*/ - mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); - svga->banked_mask = 0xffff; - break; - case 0x4: /*64k at A0000*/ - mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); - svga->banked_mask = 0xffff; - if (xga_active && (svga->xga != NULL)) { - xga->on = 0; - mem_mapping_set_handler(&svga->mapping, svga->read, svga->readw, svga->readl, svga->write, svga->writew, svga->writel); - } - break; - case 0x8: /*32k at B0000*/ - mem_mapping_set_addr(&svga->mapping, 0xb0000, 0x08000); - svga->banked_mask = 0x7fff; - break; - case 0xC: /*32k at B8000*/ - mem_mapping_set_addr(&svga->mapping, 0xb8000, 0x08000); - svga->banked_mask = 0x7fff; - break; - } + /*Banked framebuffer*/ + if (svga->crtc[0x31] & 0x08) /*Enhanced mode mappings*/ + { + /* Enhanced mode forces 64kb at 0xa0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + svga->banked_mask = 0xffff; + if (xga_active && (svga->xga != NULL)) { + xga->on = 0; + mem_mapping_set_handler(&svga->mapping, svga->read, svga->readw, svga->readl, svga->write, svga->writew, svga->writel); + } + } else + switch (svga->gdcreg[6] & 0xc) { /*VGA mapping*/ + case 0x0: /*128k at A0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); + svga->banked_mask = 0xffff; + break; + case 0x4: /*64k at A0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + svga->banked_mask = 0xffff; + if (xga_active && (svga->xga != NULL)) { + xga->on = 0; + mem_mapping_set_handler(&svga->mapping, svga->read, svga->readw, svga->readl, svga->write, svga->writew, svga->writel); + } + break; + case 0x8: /*32k at B0000*/ + mem_mapping_set_addr(&svga->mapping, 0xb0000, 0x08000); + svga->banked_mask = 0x7fff; + break; + case 0xC: /*32k at B8000*/ + mem_mapping_set_addr(&svga->mapping, 0xb8000, 0x08000); + svga->banked_mask = 0x7fff; + break; + + default: + break; + } virge->linear_base = (svga->crtc[0x5a] << 16) | (svga->crtc[0x59] << 24); if ((svga->crtc[0x58] & 0x10) || (virge->advfunc_cntl & 0x10)) { /*Linear framebuffer*/ + /*Linear framebuffer*/ + mem_mapping_disable(&svga->mapping); + switch (svga->crtc[0x58] & 7) { case 0: /*64k*/ virge->linear_size = 0x10000; @@ -1110,11 +1127,19 @@ s3_virge_updatemapping(virge_t *virge) break; } virge->linear_base &= ~(virge->linear_size - 1); - if (virge->linear_base == 0xa0000) { - mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + //pclog("CR58 & 7=%x, base=%08x.\n", svga->crtc[0x58] & 7, virge->linear_base); + if ((virge->linear_base == 0xa0000) || (virge->linear_size == 0x10000)) { mem_mapping_disable(&virge->linear_mapping); - } else - mem_mapping_set_addr(&virge->linear_mapping, virge->linear_base, virge->linear_size); + if (!(svga->crtc[0x53] & 0x10)) { + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + svga->banked_mask = 0xffff; + } + } else { + if (virge->linear_base) + mem_mapping_set_addr(&virge->linear_mapping, virge->linear_base, virge->linear_size); + else + mem_mapping_disable(&virge->linear_mapping); + } svga->fb_only = 1; } else { mem_mapping_disable(&virge->linear_mapping); @@ -1122,6 +1147,7 @@ s3_virge_updatemapping(virge_t *virge) } if ((svga->crtc[0x53] & 0x10) || (virge->advfunc_cntl & 0x20)) { /*Old MMIO*/ + mem_mapping_disable(&svga->mapping); if (svga->crtc[0x53] & 0x20) mem_mapping_set_addr(&virge->mmio_mapping, 0xb8000, 0x8000); else @@ -1129,9 +1155,12 @@ s3_virge_updatemapping(virge_t *virge) } else mem_mapping_disable(&virge->mmio_mapping); - if (svga->crtc[0x53] & 0x08) /*New MMIO*/ - mem_mapping_set_addr(&virge->new_mmio_mapping, virge->linear_base + 0x1000000, 0x10000); - else + if (svga->crtc[0x53] & 0x08) { /*New MMIO*/ + if (virge->linear_base) + mem_mapping_set_addr(&virge->new_mmio_mapping, virge->linear_base + 0x1000000, 0x10000); + else + mem_mapping_disable(&virge->new_mmio_mapping); + } else mem_mapping_disable(&virge->new_mmio_mapping); } @@ -1946,9 +1975,9 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) break; case 0x8190: virge->streams.sec_ctrl = val; - virge->streams.dda_horiz_accumulator = val & 0x7ff; - if (val & 0x800) - virge->streams.dda_horiz_accumulator |= ~0x7ff; + virge->streams.dda_horiz_accumulator = val & 0xfff; + if (val & 0x1000) + virge->streams.dda_horiz_accumulator |= ~0xfff; virge->streams.sdif = (val >> 24) & 7; break; @@ -1961,9 +1990,9 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) if (val & 0x800) virge->streams.k1_horiz_scale |= ~0x7ff; - virge->streams.k2_horiz_scale = (val >> 16) & 0x3ff; - if ((val >> 16) & 0x400) - virge->streams.k2_horiz_scale |= ~0x3ff; + virge->streams.k2_horiz_scale = (val >> 16) & 0x7ff; + if ((val >> 16) & 0x800) + virge->streams.k2_horiz_scale |= ~0x7ff; svga_recalctimings(svga); svga->fullchange = changeframecount; @@ -2019,14 +2048,14 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) virge->streams.k1_vert_scale |= ~0x7ff; break; case 0x81e4: - virge->streams.k2_vert_scale = val & 0x3ff; - if (val & 0x400) - virge->streams.k2_vert_scale |= ~0x3ff; + virge->streams.k2_vert_scale = val & 0x7ff; + if (val & 0x800) + virge->streams.k2_vert_scale |= ~0x7ff; break; case 0x81e8: - virge->streams.dda_vert_accumulator = val & 0x7ff; - if (val & 0x800) - virge->streams.dda_vert_accumulator |= ~0x7ff; + virge->streams.dda_vert_accumulator = val & 0xfff; + if (val & 0x1000) + virge->streams.dda_vert_accumulator |= ~0xfff; svga_recalctimings(svga); svga->fullchange = changeframecount; @@ -3124,7 +3153,7 @@ s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat) case 0: case CMD_SET_MS: READ(src_addr, source); - if ((virge->s3d.cmd_set & CMD_SET_TP) && source == src_fg_clr) + if ((virge->s3d.cmd_set & CMD_SET_TP) && (source == src_fg_clr)) update = 0; break; case CMD_SET_IDS: @@ -3150,7 +3179,7 @@ s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat) count = 0; } } - if ((virge->s3d.cmd_set & CMD_SET_TP) && source == src_fg_clr) + if ((virge->s3d.cmd_set & CMD_SET_TP) && (source == src_fg_clr)) update = 0; break; case CMD_SET_IDS | CMD_SET_MS: @@ -4829,7 +4858,7 @@ s3_virge_colorkey(virge_t* virge, uint32_t x, uint32_t y) return true; else if (!(virge->streams.chroma_ctrl & (1 << 28))) return true; - + comp_r = (virge->streams.chroma_ctrl >> 16) & 0xFF; comp_g = (virge->streams.chroma_ctrl >> 8) & 0xFF; comp_b = (virge->streams.chroma_ctrl) & 0xFF; @@ -4853,7 +4882,7 @@ s3_virge_colorkey(virge_t* virge, uint32_t x, uint32_t y) */ uint8_t index = virge->streams.chroma_ctrl & 0xFF; alpha_key = (virge->chip < S3_VIRGEGX2) ? (virge->streams.chroma_ctrl & (1 << 29)) : ((virge->streams.chroma_ctrl >> 29) & 3) == 1; - + if (alpha_key) { comp_r = comp_g = comp_b = index; comp_r_h = comp_g_h = comp_b_h = index; @@ -5188,6 +5217,7 @@ s3_virge_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) svga->crtc[0x59] = (svga->crtc[0x59] & 0x01) | (val & 0xfe); else svga->crtc[0x59] = (svga->crtc[0x59] & 0x03) | (val & 0xfc); + s3_virge_updatemapping(virge); return; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 35f42c2ee..db8b33e18 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -134,8 +134,8 @@ video_cards[] = { { .device = &s3_phoenix_86c801_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_spea_mirage_86c801_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_winner1000_805_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32i_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32_machspeed_vga_gui_2400s_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32i_axis_microdevice_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, /* MCA */ { .device = &mach32_mca_device, .flags = VIDEO_FLAG_TYPE_8514 }, { .device = &gd5426_mca_device, .flags = VIDEO_FLAG_TYPE_NONE }, @@ -145,12 +145,13 @@ video_cards[] = { /* VLB */ { .device = &mach32_vlb_device, .flags = VIDEO_FLAG_TYPE_8514 }, { .device = &mach64gx_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32i_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32_machspeed_vga_gui_2400s_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32i_hercules_dynamite_pro_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &et4000w32p_videomagic_revb_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_revc_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_cardex_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_noncardex_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revc_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_generic_revd_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revd_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_diamond_revd_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5424_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5426_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5428_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, @@ -196,11 +197,10 @@ video_cards[] = { { .device = &gd5446_pci_device, .flags = VIDEO_FLAG_TYPE_SECONDARY }, { .device = &gd5446_stb_pci_device, .flags = VIDEO_FLAG_TYPE_SECONDARY }, { .device = &gd5480_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_videomagic_revb_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_revc_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_cardex_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_noncardex_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revc_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_generic_revd_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revd_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_diamond_revd_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_elsa_winner1000_86c928_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_spea_mercury_lite_86c928_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_diamond_stealth64_964_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, diff --git a/src/video/vid_tgui9440.c b/src/video/vid_tgui9440.c index 2fd4ba482..30f76abfa 100644 --- a/src/video/vid_tgui9440.c +++ b/src/video/vid_tgui9440.c @@ -692,6 +692,7 @@ tgui_recalctimings(svga_t *svga) const tgui_t *tgui = (tgui_t *) svga->priv; uint8_t ger22lower = (tgui->accel.ger22 & 0xff); uint8_t ger22upper = (tgui->accel.ger22 >> 8); + int std_vga_clock = 1; if (tgui->type >= TGUI_9440) { if ((svga->crtc[0x38] & 0x19) == 0x09) @@ -767,10 +768,11 @@ tgui_recalctimings(svga_t *svga) svga->clock = (cpuclock * (double) (1ULL << 32)) / (((tgui->clock_n + 8) * 14318180.0) / ((tgui->clock_m + 2) * (1 << tgui->clock_k))); if (svga->gdcreg[0xf] & 0x08) - svga->clock *= 2; + svga->clock *= 2.0; else if (svga->gdcreg[0xf] & 0x40) - svga->clock *= 3; + svga->clock *= 3.0; } else { + //pclog("TGUI9400CXi: Clock double=%d.\n", (((svga->miscout >> 2) & 3) | ((tgui->newctrl2 << 2) & 4) | ((tgui->newctrl2 >> 3) & 8))); switch (((svga->miscout >> 2) & 3) | ((tgui->newctrl2 << 2) & 4) | ((tgui->newctrl2 >> 3) & 8)) { case 0x02: svga->clock = (cpuclock * (double) (1ULL << 32)) / 44900000.0; @@ -816,6 +818,7 @@ tgui_recalctimings(svga_t *svga) break; default: + std_vga_clock = 0; break; } @@ -823,6 +826,9 @@ tgui_recalctimings(svga_t *svga) svga->htotal <<= 1; svga->hdisp <<= 1; svga->hdisp_time <<= 1; + svga->dots_per_clock <<= 1; + if (std_vga_clock) + svga->clock /= 2.0; } } @@ -843,6 +849,7 @@ tgui_recalctimings(svga_t *svga) svga->htotal <<= 1; svga->hdisp <<= 1; svga->hdisp_time <<= 1; + svga->dots_per_clock <<= 1; break; default: break; @@ -866,6 +873,7 @@ tgui_recalctimings(svga_t *svga) svga->htotal <<= 1; svga->hdisp <<= 1; svga->hdisp_time <<= 1; + svga->dots_per_clock <<= 1; } switch (svga->hdisp) { case 640: @@ -880,18 +888,24 @@ tgui_recalctimings(svga_t *svga) break; case 15: svga->render = svga_render_15bpp_highres; - if (tgui->type < TGUI_9440) + if (tgui->type < TGUI_9440) { svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } break; case 16: svga->render = svga_render_16bpp_highres; - if (tgui->type < TGUI_9440) + if (tgui->type < TGUI_9440) { svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } break; case 24: svga->render = svga_render_24bpp_highres; - if (tgui->type < TGUI_9440) - svga->hdisp = (svga->hdisp << 1) / 3; + if (tgui->type < TGUI_9440) { + svga->hdisp /= 3; + svga->dots_per_clock /= 3; + } break; case 32: if (svga->rowoffset == 0x100) From 6e282068b98da8dd5451a3d0ff163b3602724368 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sat, 18 Oct 2025 03:26:11 +0200 Subject: [PATCH 130/233] Corrections to displays (October 18th, 2025) (rebase) (#6358) 1. In the STG code, separated the STG1703 without its built-in clock as 1702 while keeping the one with the clock as 1703. 2. Added the ICS2494AN-324 clock generator used by the et4000w32 series. 3. Return 0x98 as the ID of the ATT498 ramdac. 4. Corrected the pixel clocks of the IBM RGB528 while keeping its current compatibility and exactness of the refresh rates of its clocks. 5. Added a variable reference clock of the SDAC/GenDAC for future use. 6. The clocks of the TVP3026 have been implemented for a while. Some corrections have been made (plus color key r/w). 7. Mach64 enhanced mode doesn't use scrollcache (bits 0-3 of attrregs 0x13), fixes some pixels being off (mainly in win3.1x) 8. Reorganized the cirrus 54xx built-in clock for proper refresh rates. 9. Proper reorganization of the et4000w32 series of chipsets and their cards supporting them, from cursor to clocks to ramdacs plus a 24bpp acceleration fix for the w32p series (about pixels being processed in bitblt). 10. Removed the PCI videomagic card as its bios doesn't have the PCIR header while making sure the plain ISA/VLB w32 and ISA only w32i (now named Axis Microdevice) support 2mb of vram properly. 11. Added the Hercules Dynamite VL Pro based on the w32i chip (and VLB). 12. Initialize the et4000w32 cards with misc bit 0 set as well as crtc31 bit 6 for rs2 connection to the ramdac. 13. Refactored the S3 Pre-ViRGE code to have proper refresh rates and clocks and added the 805I as a member of the chips (ID 0xa8). 14. Replaced the S3 805I Elsa Winner 1000 ISA bios with a more supported one for our code using the SDAC. 15. Added proper 24bpp acceleration to the Visionx68 chips. 16. Fixed wrong colors in the 911/924 15/16bpp acceleration when used for the first time. 17. Match the ViRGE mapping to the pre-ViRGE one per manual/datasheet. 18. Correct as best as possible the TGUI9400 clocks. --- src/include/86box/vid_svga.h | 5 +- src/include/86box/video.h | 24 +- src/video/clockgen/vid_clockgen_ics2494.c | 35 +- src/video/ramdac/vid_ramdac_att20c49x.c | 8 +- src/video/ramdac/vid_ramdac_att2xc498.c | 6 +- src/video/ramdac/vid_ramdac_bt48x.c | 7 +- src/video/ramdac/vid_ramdac_sdac.c | 14 +- src/video/ramdac/vid_ramdac_stg1702.c | 47 +- src/video/ramdac/vid_ramdac_tvp3026.c | 51 +- src/video/vid_ati_mach64.c | 1 + src/video/vid_cl54xx.c | 61 +- src/video/vid_et4000w32.c | 698 ++++---- src/video/vid_s3.c | 1879 +++++++++++++++------ src/video/vid_s3_virge.c | 120 +- src/video/vid_table.c | 24 +- src/video/vid_tgui9440.c | 26 +- 16 files changed, 2072 insertions(+), 934 deletions(-) diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 61a5697d5..e0ae5ed6f 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -474,6 +474,7 @@ extern uint8_t sc1502x_rs2_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t extern void sdac_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *priv, svga_t *svga); extern uint8_t sdac_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t *svga); extern float sdac_getclock(int clock, void *priv); +extern void sdac_set_ref_clock(void *priv, float ref_clock); extern void stg_ramdac_out(uint16_t addr, uint8_t val, void *priv, svga_t *svga); extern uint8_t stg_ramdac_in(uint16_t addr, void *priv, svga_t *svga); @@ -507,6 +508,7 @@ extern const device_t bt485a_ramdac_device; extern const device_t gendac_ramdac_device; extern const device_t ibm_rgb528_ramdac_device; extern const device_t ics2494an_305_device; +extern const device_t ics2494an_324_device; extern const device_t ati18810_28800_device; extern const device_t ati18811_0_28800_device; extern const device_t ati18811_1_28800_device; @@ -523,7 +525,8 @@ extern const device_t sc11484_nors2_ramdac_device; extern const device_t sc1502x_ramdac_device; extern const device_t sc1502x_rs2_ramdac_device; extern const device_t sdac_ramdac_device; -extern const device_t stg_ramdac_device; +extern const device_t stg1702_ramdac_device; +extern const device_t stg1703_ramdac_device; extern const device_t tkd8001_ramdac_device; extern const device_t tseng_ics5301_ramdac_device; extern const device_t tseng_ics5341_ramdac_device; diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 840b95249..acaf7cdc4 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -436,20 +436,20 @@ extern const device_t et4000_kasan_isa_device; extern const device_t et4000_mca_device; /* Tseng ET4000-W32x */ -extern const device_t et4000w32_device; +extern const device_t et4000w32_machspeed_vga_gui_2400s_isa_device; +extern const device_t et4000w32_machspeed_vga_gui_2400s_vlb_device; extern const device_t et4000w32_onboard_device; -extern const device_t et4000w32i_isa_device; -extern const device_t et4000w32i_vlb_device; +extern const device_t et4000w32i_axis_microdevice_isa_device; +extern const device_t et4000w32i_hercules_dynamite_pro_vlb_device; extern const device_t et4000w32p_videomagic_revb_vlb_device; -extern const device_t et4000w32p_videomagic_revb_pci_device; -extern const device_t et4000w32p_revc_vlb_device; -extern const device_t et4000w32p_revc_pci_device; -extern const device_t et4000w32p_vlb_device; -extern const device_t et4000w32p_pci_device; -extern const device_t et4000w32p_noncardex_vlb_device; -extern const device_t et4000w32p_noncardex_pci_device; -extern const device_t et4000w32p_cardex_vlb_device; -extern const device_t et4000w32p_cardex_pci_device; +extern const device_t et4000w32p_cardex_revc_vlb_device; +extern const device_t et4000w32p_cardex_revc_pci_device; +extern const device_t et4000w32p_cardex_revd_vlb_device; +extern const device_t et4000w32p_cardex_revd_pci_device; +extern const device_t et4000w32p_diamond_revd_vlb_device; +extern const device_t et4000w32p_diamond_revd_pci_device; +extern const device_t et4000w32p_generic_revd_vlb_device; +extern const device_t et4000w32p_generic_revd_pci_device; /* MDSI Genius VHR */ extern const device_t genius_device; diff --git a/src/video/clockgen/vid_clockgen_ics2494.c b/src/video/clockgen/vid_clockgen_ics2494.c index f9f4fbcb1..0776d97ca 100644 --- a/src/video/clockgen/vid_clockgen_ics2494.c +++ b/src/video/clockgen/vid_clockgen_ics2494.c @@ -290,7 +290,7 @@ ics2494_init(const device_t *info) ics2494->freq[15] = 65000000.0; break; case 305: - /* ICS2494A(N)-205 for S3 86C924 */ + /* ICS2494A(N)-305 for S3 86C924 */ ics2494->freq[0x0] = 25175000.0; ics2494->freq[0x1] = 28322000.0; ics2494->freq[0x2] = 40000000.0; @@ -308,6 +308,25 @@ ics2494_init(const device_t *info) ics2494->freq[0xe] = 75000000.0; ics2494->freq[0xf] = 94500000.0; break; + case 324: + /* ICS2494A(N)-324 for Tseng ET4000/W32 series */ + ics2494->freq[0x0] = 50000000.0; + ics2494->freq[0x1] = 56644000.0; + ics2494->freq[0x2] = 65000000.0; + ics2494->freq[0x3] = 72000000.0; + ics2494->freq[0x4] = 80000000.0; + ics2494->freq[0x5] = 89800000.0; + ics2494->freq[0x6] = 63000000.0; + ics2494->freq[0x7] = 75000000.0; + ics2494->freq[0x8] = 83078000.0; + ics2494->freq[0x9] = 93463000.0; + ics2494->freq[0xa] = 100000000.0; + ics2494->freq[0xb] = 104000000.0; + ics2494->freq[0xc] = 108000000.0; + ics2494->freq[0xd] = 120000000.0; + ics2494->freq[0xe] = 130000000.0; + ics2494->freq[0xf] = 134700000.0; + break; default: break; @@ -339,6 +358,20 @@ const device_t ics2494an_305_device = { .config = NULL }; +const device_t ics2494an_324_device = { + .name = "ICS2494AN-324 Clock Generator", + .internal_name = "ics2494an_324", + .flags = 0, + .local = 324, + .init = ics2494_init, + .close = ics2494_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t ati18810_28800_device = { .name = "ATI 18810 (ATI 28800) Clock Generator", .internal_name = "ati18810_28800", diff --git a/src/video/ramdac/vid_ramdac_att20c49x.c b/src/video/ramdac/vid_ramdac_att20c49x.c index 2d8d6a304..3776e6616 100644 --- a/src/video/ramdac/vid_ramdac_att20c49x.c +++ b/src/video/ramdac/vid_ramdac_att20c49x.c @@ -42,12 +42,6 @@ att49x_ramdac_control(uint8_t val, void *priv, svga_t *svga) att49x_ramdac_t *ramdac = (att49x_ramdac_t *) priv; ramdac->ctrl = val; switch ((ramdac->ctrl >> 5) & 7) { - case 0: - case 1: - case 2: - case 3: - svga->bpp = 8; - break; case 4: case 5: svga->bpp = 15; @@ -60,10 +54,12 @@ att49x_ramdac_control(uint8_t val, void *priv, svga_t *svga) break; default: + svga->bpp = 8; break; } if (ramdac->type == ATT_490 || ramdac->type == ATT_491) svga_set_ramdac_type(svga, (val & 2) ? RAMDAC_8BIT : RAMDAC_6BIT); + svga_recalctimings(svga); } diff --git a/src/video/ramdac/vid_ramdac_att2xc498.c b/src/video/ramdac/vid_ramdac_att2xc498.c index 141ffa4b4..21c6770a3 100644 --- a/src/video/ramdac/vid_ramdac_att2xc498.c +++ b/src/video/ramdac/vid_ramdac_att2xc498.c @@ -45,7 +45,7 @@ att498_ramdac_control(uint8_t val, void *priv, svga_t *svga) svga->bpp = 8; break; case 1: - if (ramdac->ctrl & 4) + if (ramdac->ctrl & 0x04) svga->bpp = 15; else svga->bpp = 8; @@ -63,7 +63,7 @@ att498_ramdac_control(uint8_t val, void *priv, svga_t *svga) break; } - svga_set_ramdac_type(svga, (ramdac->ctrl & 2) ? RAMDAC_8BIT : RAMDAC_6BIT); + svga_set_ramdac_type(svga, (ramdac->ctrl & 0x02) ? RAMDAC_8BIT : RAMDAC_6BIT); svga_recalctimings(svga); } @@ -132,7 +132,7 @@ att498_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t *svga) ramdac->state++; break; case 6: - temp = ramdac->ctrl; + temp = 0x98; ramdac->state = 0; break; default: diff --git a/src/video/ramdac/vid_ramdac_bt48x.c b/src/video/ramdac/vid_ramdac_bt48x.c index be6499990..64bc2b5b7 100644 --- a/src/video/ramdac/vid_ramdac_bt48x.c +++ b/src/video/ramdac/vid_ramdac_bt48x.c @@ -366,15 +366,14 @@ bt48x_recalctimings(void *priv, svga_t *svga) svga->clock_multiplier = 0; svga->multiplexing_rate = 0; svga->true_color_bypass = 0; - if (ramdac->cmd_r3 & 0x08) { /* x2 clock multiplier */ - //pclog("2x multiplier.\n"); + if (ramdac->cmd_r3 & 0x08) /* x2 clock multiplier */ svga->clock_multiplier = 1; - } + svga->multiplexing_rate = (ramdac->cmd_r1 & 0x60) >> 5; if (svga->bpp >= 15) svga->true_color_bypass = !!(ramdac->cmd_r1 & 0x10); - //pclog("CR0=%02x, CR1=%02x, CR2=%02x.\n", ramdac->cmd_r0, ramdac->cmd_r1, ramdac->cmd_r2); + pclog("CR0=%02x, CR1=%02x, CR2=%02x.\n", ramdac->cmd_r0, ramdac->cmd_r1, ramdac->cmd_r2); } void diff --git a/src/video/ramdac/vid_ramdac_sdac.c b/src/video/ramdac/vid_ramdac_sdac.c index 2b2890307..a88cdcaef 100644 --- a/src/video/ramdac/vid_ramdac_sdac.c +++ b/src/video/ramdac/vid_ramdac_sdac.c @@ -49,6 +49,7 @@ typedef struct sdac_ramdac_t { int rs2; uint8_t type; uint8_t command; + float ref_clock; } sdac_ramdac_t; static void @@ -275,11 +276,21 @@ sdac_getclock(int clock, void *priv) n1 = ((ramdac->regs[clock] >> 8) & 0x1f) + 2; n2 = ((ramdac->regs[clock] >> 13) & 0x07); n2 = (1 << n2); - t = (14318184.0f * (float) m) / (float) (n1 * n2); + t = (ramdac->ref_clock * (float) m) / (float) (n1 * n2); + //pclog("SDACClock=%d, regs val=%04x.\n", clock, ramdac->regs[clock]); return t; } +void +sdac_set_ref_clock(void *priv, float ref_clock) +{ + sdac_ramdac_t *ramdac = (sdac_ramdac_t *) priv; + + if (ramdac != NULL) + ramdac->ref_clock = ref_clock; +} + void * sdac_ramdac_init(const device_t *info) { @@ -288,6 +299,7 @@ sdac_ramdac_init(const device_t *info) ramdac->type = info->local; + ramdac->ref_clock = 14318184.0f; ramdac->regs[0] = 0x6128; ramdac->regs[1] = 0x623d; diff --git a/src/video/ramdac/vid_ramdac_stg1702.c b/src/video/ramdac/vid_ramdac_stg1702.c index 8a2d008dd..6c0945704 100644 --- a/src/video/ramdac/vid_ramdac_stg1702.c +++ b/src/video/ramdac/vid_ramdac_stg1702.c @@ -31,6 +31,7 @@ typedef struct stg_ramdac_t { int magic_count, index; uint8_t regs[256]; uint8_t command; + int type; } stg_ramdac_t; static int stg_state_read[2][8] = { @@ -46,6 +47,8 @@ stg_ramdac_set_bpp(svga_t *svga, stg_ramdac_t *ramdac) switch (ramdac->regs[3]) { default: case 0: + svga->bpp = 8; + break; case 5: case 7: svga->bpp = 8; @@ -176,7 +179,7 @@ stg_ramdac_in(uint16_t addr, void *priv, svga_t *svga) temp = 0x44; break; case 1: - temp = 0x03; + temp = ramdac->type; break; case 7: temp = 0x88; @@ -216,22 +219,24 @@ stg_getclock(int clock, void *priv) float t; int m; int n; - int n2; - const uint16_t *c; + int d; + int d2; + uint16_t c; if (clock == 0) return 25175000.0; if (clock == 1) return 28322000.0; - clock ^= 1; /*Clocks 2 and 3 seem to be reversed*/ - c = (uint16_t *) &ramdac->regs[0x20 + (clock << 1)]; - m = (*c & 0xff) + 2; /* B+2 */ - n = ((*c >> 8) & 0x1f) + 2; /* N1+2 */ - n2 = ((*c >> 13) & 0x07); /* D */ - n2 = (1 << n2); - t = (14318184.0f * (float) m) / (float) (n * n2); + c = ramdac->regs[0x20 + (clock << 1)]; + c |= (ramdac->regs[0x21 + (clock << 1)] << 8); + m = (c & 0xff) + 2; /* B+2 */ + n = ((c >> 8) & 0x1f) + 2; /* N1+2 */ + d = ((c >> 13) & 0x07); /* D */ + d2 = (1 << d); + t = (14318184.0f * (float) m) / (float) (n * d2); + //pclog("RAMDAC vclk val=0x%02x, vclk v=%d low, D=%d, t=%f.\n", ramdac->regs[0x20 + (clock << 1)], clock, d2, t); return t; } @@ -241,6 +246,8 @@ stg_ramdac_init(UNUSED(const device_t *info)) stg_ramdac_t *ramdac = (stg_ramdac_t *) malloc(sizeof(stg_ramdac_t)); memset(ramdac, 0, sizeof(stg_ramdac_t)); + ramdac->type = info->local & 0xff; + return ramdac; } @@ -253,11 +260,25 @@ stg_ramdac_close(void *priv) free(ramdac); } -const device_t stg_ramdac_device = { - .name = "SGS-Thompson STG170x RAMDAC", +const device_t stg1702_ramdac_device = { + .name = "SGS-Thompson STG1702 RAMDAC", .internal_name = "stg_ramdac", .flags = 0, - .local = 0, + .local = 2, + .init = stg_ramdac_init, + .close = stg_ramdac_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t stg1703_ramdac_device = { + .name = "SGS-Thompson STG1703 RAMDAC", + .internal_name = "stg_ramdac", + .flags = 0, + .local = 3, .init = stg_ramdac_init, .close = stg_ramdac_close, .reset = NULL, diff --git a/src/video/ramdac/vid_ramdac_tvp3026.c b/src/video/ramdac/vid_ramdac_tvp3026.c index 1958fa588..73af99075 100644 --- a/src/video/ramdac/vid_ramdac_tvp3026.c +++ b/src/video/ramdac/vid_ramdac_tvp3026.c @@ -9,7 +9,6 @@ * Emulation of the Texas Instruments TVP3026 true colour RAMDAC * family. * - * TODO: Clock and other parts. * * Authors: TheCollector1995, * @@ -49,6 +48,7 @@ typedef struct tvp3026_ramdac_t { uint8_t mode; uint8_t pll_addr; uint8_t clock_sel; + uint8_t color_key_ctrl; struct { uint8_t m; uint8_t n; @@ -171,25 +171,24 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *priv, svg svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; svga->dac_hwcursor.ena = !!(val & 0x03); ramdac->mode = val & 0x03; + //pclog("0x09: DACEna=%02x, MainEna=%02x.\n", svga->dac_hwcursor.ena, svga->hwcursor.ena); } break; case 0x0a: /* Indexed Data (RS value = 1010) */ switch (ramdac->ind_idx) { case 0x06: /* Indirect Cursor Control */ ramdac->ccr = val; + svga->dac_hwcursor.cur_xsize = svga->dac_hwcursor.cur_ysize = 64; + svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.cur_xsize; + svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; if (!(ramdac->ccr & 0x80)) { - svga->dac_hwcursor.cur_xsize = svga->dac_hwcursor.cur_ysize = 64; - svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.cur_xsize; - svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; svga->dac_hwcursor.ena = !!(val & 0x03); ramdac->mode = val & 0x03; } else { - svga->dac_hwcursor.cur_xsize = svga->dac_hwcursor.cur_ysize = 64; - svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.cur_xsize; - svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.cur_ysize; svga->dac_hwcursor.ena = !!(ramdac->dcc & 0x03); ramdac->mode = ramdac->dcc & 0x03; } + //pclog("0x0a, indirect 0x06: DACEna=%02x, MainEna=%02x.\n", svga->dac_hwcursor.ena, svga->hwcursor.ena); break; case 0x0f: /* Latch Control */ ramdac->latch_cntl = val; @@ -279,6 +278,9 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *priv, svg } ramdac->pll_addr = ((ramdac->pll_addr + 0x10) & 0x30) | (ramdac->pll_addr & 0xcf); break; + case 0x38: /* Color-Key Control */ + ramdac->color_key_ctrl = val; + break; case 0x39: /* MCLK/Loop Clock Control */ ramdac->mclk = val; break; @@ -470,6 +472,9 @@ tvp3026_ramdac_in(uint16_t addr, int rs2, int rs3, void *priv, svga_t *svga) break; } break; + case 0x38: /* Color-Key Control */ + temp = ramdac->color_key_ctrl; + break; case 0x39: /* MCLK/Loop Clock Control */ temp = ramdac->mclk; break; @@ -516,11 +521,39 @@ tvp3026_recalctimings(void *priv, svga_t *svga) svga->interlace = !!(ramdac->ccr & 0x40); /* TODO: Figure out gamma correction for 15/16 bpp color. */ svga->lut_map = !!((svga->bpp >= 15 && (svga->bpp != 24)) && (ramdac->true_color & 0xf0) != 0x00); + svga->clock_multiplier = 0; + + //pclog("RAMDAC CLOCKSEL=%02x, MCR=%02x, LoopMCLK=%02x, Latch=%02x.\n", ramdac->clock_sel, ramdac->mcr, ramdac->mclk, ramdac->latch_cntl); if (!(ramdac->clock_sel & 0x70)) { if (ramdac->mcr != 0x98) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; + switch ((ramdac->clock_sel >> 4) & 7) { + case 0: + svga->clock_multiplier = 1; + break; + case 1: + svga->clock_multiplier = 2; + break; + case 2: + svga->clock_multiplier = 4; + break; + case 3: + svga->clock_multiplier = 8; + break; + case 4: + svga->clock_multiplier = 16; + break; + case 5: + svga->clock_multiplier = 32; + break; + case 6: + svga->clock_multiplier = 64; + break; + case 7: + default: + svga->clock_multiplier = 0; + break; + } } } } diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index bd65a1376..95a32dabe 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -547,6 +547,7 @@ mach64_recalctimings(svga_t *svga) svga->rowcount = mach64->crtc_gen_cntl & 1; svga->lut_map = (mach64->type >= MACH64_VT); svga->rowoffset <<= 1; + svga->attrregs[0x13] &= ~0x0f; if (mach64->type == MACH64_GX) ati68860_ramdac_set_render(svga->ramdac, svga); diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index abdde1622..95f9e7bf6 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -1824,6 +1824,9 @@ gd54xx_recalctimings(svga_t *svga) uint8_t clocksel; uint8_t rdmask; uint8_t linedbl = svga->dispend * 9 / 10 >= svga->hdisp; + uint8_t m = 0; + int d = 0; + int n = 0; svga->hblankstart = svga->crtc[2]; @@ -1865,6 +1868,34 @@ gd54xx_recalctimings(svga_t *svga) svga->interlace = 0; } + clocksel = (svga->miscout >> 2) & 3; + + if (!gd54xx->vclk_n[clocksel] || !gd54xx->vclk_d[clocksel]) + svga->clock = (cpuclock * (float) (1ULL << 32)) / + ((svga->miscout & 0xc) ? 28322000.0 : 25175000.0); + else { + n = gd54xx->vclk_n[clocksel] & 0x7f; + d = (gd54xx->vclk_d[clocksel] & 0x3e) >> 1; + m = gd54xx->vclk_d[clocksel] & 0x01 ? 2 : 1; + float freq = (14318184.0F * ((float) n / ((float) d * m))); + if (gd54xx_is_5422(svga)) { + switch (svga->seqregs[0x07] & (gd54xx_is_5434(svga) ? 0xe : 6)) { + case 2: + freq /= 2.0F; + break; + case 4: + if (!gd54xx_is_5434(svga)) + freq /= 3.0F; + break; + + default: + break; + } + } + svga->clock = (cpuclock * (double) (1ULL << 32)) / freq; + } + + svga->bpp = 8; svga->map8 = svga->pallook; if (svga->seqregs[0x07] & CIRRUS_SR7_BPP_SVGA) { if (linedbl) @@ -1874,6 +1905,7 @@ gd54xx_recalctimings(svga_t *svga) if ((svga->dispend == 512) && !svga->interlace && gd54xx_is_5434(svga)) { svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock *= 2.0; } } } else if (svga->gdcreg[5] & 0x40) @@ -1881,8 +1913,6 @@ gd54xx_recalctimings(svga_t *svga) svga->memaddr_latch |= ((svga->crtc[0x1b] & 0x01) << 16) | ((svga->crtc[0x1b] & 0xc) << 15); - svga->bpp = 8; - if (gd54xx->ramdac.ctrl & 0x80) { if (gd54xx->ramdac.ctrl & 0x40) { if ((svga->crtc[0x27] >= CIRRUS_ID_CLGD5428) || (svga->crtc[0x27] == CIRRUS_ID_CLGD5426)) @@ -2023,33 +2053,6 @@ gd54xx_recalctimings(svga_t *svga) } } - clocksel = (svga->miscout >> 2) & 3; - - if (!gd54xx->vclk_n[clocksel] || !gd54xx->vclk_d[clocksel]) - svga->clock = (cpuclock * (float) (1ULL << 32)) / - ((svga->miscout & 0xc) ? 28322000.0 : 25175000.0); - else { - int n = gd54xx->vclk_n[clocksel] & 0x7f; - int d = (gd54xx->vclk_d[clocksel] & 0x3e) >> 1; - uint8_t m = gd54xx->vclk_d[clocksel] & 0x01 ? 2 : 1; - float freq = (14318184.0F * ((float) n / ((float) d * m))); - if (gd54xx_is_5422(svga)) { - switch (svga->seqregs[0x07] & (gd54xx_is_5434(svga) ? 0xe : 6)) { - case 2: - freq /= 2.0F; - break; - case 4: - if (!gd54xx_is_5434(svga)) - freq /= 3.0F; - break; - - default: - break; - } - } - svga->clock = (cpuclock * (double) (1ULL << 32)) / freq; - } - svga->vram_display_mask = (svga->crtc[0x1b] & 2) ? gd54xx->vram_mask : 0x3ffff; if (svga->crtc[0x27] >= CIRRUS_ID_CLGD5430) diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index 05de0dbea..4b95ba04e 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -10,6 +10,8 @@ * * Known bugs: Accelerator doesn't work in planar modes * + * + * * Authors: Sarah Walker, * Miran Grca, * @@ -35,30 +37,46 @@ #include <86box/vid_svga.h> #include <86box/vid_svga_render.h> -#define BIOS_ROM_PATH_DIAMOND "roms/video/et4000w32/et4000w32.bin" -#define BIOS_ROM_PATH_CARDEX "roms/video/et4000w32/cardex.vbi" -#define BIOS_ROM_PATH_W32 "roms/video/et4000w32/ET4000W32VLB_bios_MX27C512.BIN" -#define BIOS_ROM_PATH_W32I_ISA "roms/video/et4000w32/ET4KW32I.VBI" -#define BIOS_ROM_PATH_W32I_VLB "roms/video/et4000w32/tseng.u41.bin" -#define BIOS_ROM_PATH_W32P_VIDEOMAGIC_REVB_VLB "roms/video/et4000w32/VideoMagic-BioS-HXIRTW32PWSRL.bin" -#define BIOS_ROM_PATH_W32P "roms/video/et4000w32/ET4K_W32.BIN" -#define BIOS_ROM_PATH_W32P_REVC "roms/video/et4000w32/et4000w32pcardex.BIN" +#define BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S "roms/video/et4000w32/ET4000W32VLB_bios_MX27C512.BIN" +#define BIOS_ROM_PATH_W32I_REVB_AXIS_MICRODEVICE "roms/video/et4000w32/ET4KW32I.VBI" +#define BIOS_ROM_PATH_W32I_REVB_HERCULES_DYNAMITE_VLB_PRO "roms/video/et4000w32/Hercules Dynamite VL Pro v8.00 c 1993 Hercules.bin" +#define BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC "roms/video/et4000w32/VideoMagic-BioS-HXIRTW32PWSRL.bin" +#define BIOS_ROM_PATH_W32P_REVC_CARDEX "roms/video/et4000w32/et4000w32pcardex.BIN" +#define BIOS_ROM_PATH_W32P_REVD "roms/video/et4000w32/ET4K_W32.BIN" +#define BIOS_ROM_PATH_W32P_REVD_CARDEX "roms/video/et4000w32/cardex.vbi" +#define BIOS_ROM_PATH_W32P_REVD_DIAMOND "roms/video/et4000w32/et4000w32.bin" #define ACL_WRST 1 #define ACL_RDST 2 #define ACL_XYST 4 #define ACL_SSO 8 +typedef enum { + ET4000W32 = 0, + ET4000W32I_REVB = 3, + ET4000W32P_REVB = 5, + ET4000W32P_REVC = 7, + ET4000W32P_REVD = 6 +} et4000w32_chip_type; + enum { - ET4000W32, - ET4000W32I, - ET4000W32P_REVC, - ET4000W32P_VIDEOMAGIC_REVB, - ET4000W32P, - ET4000W32P_CARDEX, - ET4000W32P_DIAMOND + MACHSPEED_VGA_GUI_2400S = 0, + AXIS_MICRODEVICE_ET4W32_5, + HERCULES_DYNAMITE_PRO_VLB, + VIDEOMAGIC_ETW32PVS, + CARDEX_REVC, + GENERIC_REVD, + CARDEX_REVD, + DIAMOND_STEALTH_32 }; +typedef enum { + BUILT_IN = 0, + ATT49X, + STG170X, + ET4K_SDAC +} et4000w32_ramdac_type; + typedef struct et4000w32p_t { mem_mapping_t linear_mapping; mem_mapping_t mmu_mapping; @@ -68,15 +86,21 @@ typedef struct et4000w32p_t { svga_t svga; uint8_t banking, banking2, adjust_cursor, rev, pci_slot; + uint8_t adjust_cursor_x; uint8_t regs[256], pci_regs[256]; int index, vlb, pci, interleaved, - bank, type; + bank; + int vram_size; uint32_t linearbase; uint32_t vram_mask; + int card_type; + et4000w32_chip_type chip_type; + et4000w32_ramdac_type ramdac_type; + /* Accelerator */ struct { struct { @@ -135,6 +159,7 @@ static void et4000w32_blit_start(et4000w32p_t *et4000); static void et4000w32p_blit_start(et4000w32p_t *et4000); static void et4000w32_blit(int count, int cpu_input, uint32_t src_dat, uint32_t mix_dat, et4000w32p_t *et4000); static void et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32p_t *et4000); +void et4000w32p_out(uint16_t addr, uint8_t val, void *priv); uint8_t et4000w32p_in(uint16_t addr, void *priv); #ifdef ENABLE_ET4000W32_LOG @@ -168,18 +193,28 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) switch (addr) { case 0x3c2: - if (et4000->type == ET4000W32P_DIAMOND) - icd2061_write(svga->clock_gen, (val >> 2) & 3); + if (svga->getclock == icd2061_getclock) + icd2061_write(svga->clock_gen, ((val >> 2) & 0x03) | ((svga->crtc[0x34] << 1) & 0x04)| ((svga->crtc[0x31] >> 3) & 0x08)); break; case 0x3c6: case 0x3c7: case 0x3c8: case 0x3c9: - if (et4000->type <= ET4000W32P_REVC) - sdac_ramdac_out(addr, 0, val, svga->ramdac, svga); - else - stg_ramdac_out(addr, val, svga->ramdac, svga); + switch (et4000->ramdac_type) { + case ATT49X: + att49x_ramdac_out(addr, !!(svga->crtc[0x31] & 0x40), val, svga->ramdac, svga); + break; + case STG170X: + stg_ramdac_out(addr, val, svga->ramdac, svga); + break; + case ET4K_SDAC: + sdac_ramdac_out(addr, !!(svga->crtc[0x31] & 0x40), val, svga->ramdac, svga); + break; + default: + svga_out(addr, val, svga); + break; + } return; case 0x3cb: /* Banking extension */ @@ -244,13 +279,13 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) } } if (svga->crtcreg == 0x30) { - if (et4000->pci && (et4000->rev != 5)) + if (et4000->pci && (et4000->rev != ET4000W32P_REVB)) et4000->linearbase = (et4000->linearbase & 0xc0000000) | ((val & 0xfc) << 22); else et4000->linearbase = val << 22; et4000w32p_recalcmapping(et4000); } - if (svga->crtcreg == 0x32 || svga->crtcreg == 0x36) + if ((svga->crtcreg == 0x32) || (svga->crtcreg == 0x36)) et4000w32p_recalcmapping(et4000); break; @@ -264,6 +299,7 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) case 0x217a: et4000->index = val; return; + case 0x210b: case 0x211b: case 0x212b: @@ -278,18 +314,29 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) svga->hwcursor.ena = !!(et4000->regs[0xF7] & 0x80); svga->hwcursor.xoff = et4000->regs[0xE2]; svga->hwcursor.yoff = et4000->regs[0xE6]; - svga->hwcursor.cur_xsize = svga->hwcursor.cur_ysize = ((et4000->regs[0xEF] & 4) || ((et4000->type == ET4000W32) && (et4000->regs[0xe2] >= 0x1f) && (et4000->regs[0xe6] >= 0x1f))) ? 128 : 64; + svga->hwcursor.cur_xsize = svga->hwcursor.cur_ysize = ((et4000->regs[0xEF] & 4) || ((et4000->rev == ET4000W32) && (et4000->regs[0xe2] >= 0x1f) && (et4000->regs[0xe6] >= 0x1f))) ? 128 : 64; - if (et4000->type == ET4000W32) { + if (et4000->rev == ET4000W32) { if ((svga->bpp == 15) || (svga->bpp == 16)) { svga->hwcursor.cur_xsize = svga->hwcursor.cur_ysize = 128; + if (et4000->adjust_cursor_x == 1) + svga->hwcursor.x += 0x100; + else if (et4000->adjust_cursor_x == 2) + svga->hwcursor.x += 8; + } + } else if (et4000->rev == ET4000W32I_REVB) { + if (((svga->bpp == 15) || (svga->bpp == 16))) { + if (et4000->adjust_cursor_x == 1) + svga->hwcursor.x += 0x100; + else if (et4000->adjust_cursor_x == 2) + svga->hwcursor.x += 8; } } - if ((et4000->type == ET4000W32) && (svga->hwcursor.cur_xsize == 128)) { + if ((et4000->rev == ET4000W32) && (svga->hwcursor.cur_xsize == 128)) { switch (svga->bpp) { case 8: - svga->hwcursor.xoff += 32; + svga->hwcursor.xoff += 0x20; break; default: @@ -300,16 +347,14 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *priv) if (svga->hwcursor.cur_xsize == 128) { svga->hwcursor.xoff &= 0x7f; svga->hwcursor.yoff &= 0x7f; - if (et4000->type > ET4000W32P_REVC) { - if (svga->bpp == 24) { + if ((et4000->rev > ET4000W32P_REVC) || (et4000->rev == ET4000W32P_REVB)) { + if (svga->bpp == 24) et4000->adjust_cursor = 2; - } } } else { - if (et4000->type > ET4000W32P_REVC) { - if ((svga->bpp == 24) && et4000->adjust_cursor) { + if ((et4000->rev > ET4000W32P_REVC) || (et4000->rev == ET4000W32P_REVB)) { + if ((svga->bpp == 24) && et4000->adjust_cursor) et4000->adjust_cursor = 0; - } } svga->hwcursor.xoff &= 0x3f; svga->hwcursor.yoff &= 0x3f; @@ -332,6 +377,7 @@ et4000w32p_in(uint16_t addr, void *priv) { et4000w32p_t *et4000 = (et4000w32p_t *) priv; svga_t *svga = &et4000->svga; + uint8_t temp = 0x00; if (((addr & 0xfff0) == 0x3d0 || (addr & 0xfff0) == 0x3b0) && !(svga->miscout & 1)) addr ^= 0x60; @@ -346,10 +392,17 @@ et4000w32p_in(uint16_t addr, void *priv) case 0x3c7: case 0x3c8: case 0x3c9: - if (et4000->type <= ET4000W32P_REVC) - return sdac_ramdac_in(addr, 0, svga->ramdac, svga); - else - return stg_ramdac_in(addr, svga->ramdac, svga); + switch (et4000->ramdac_type) { + case ATT49X: + return att49x_ramdac_in(addr, !!(svga->crtc[0x31] & 0x40), svga->ramdac, svga); + case STG170X: + return stg_ramdac_in(addr, svga->ramdac, svga); + case ET4K_SDAC: + return sdac_ramdac_in(addr, !!(svga->crtc[0x31] & 0x40), svga->ramdac, svga); + default: + return svga_in(addr, svga); + } + break; case 0x3cb: return et4000->banking2; @@ -358,9 +411,22 @@ et4000w32p_in(uint16_t addr, void *priv) case 0x3d4: return svga->crtcreg; case 0x3d5: - if (et4000->type == ET4000W32) { - if (svga->crtcreg == 0x37) - return 0x09; + if ((et4000->card_type == MACHSPEED_VGA_GUI_2400S) || + (et4000->card_type == AXIS_MICRODEVICE_ET4W32_5)) { + if (svga->crtcreg == 0x37) { + temp = svga->crtc[0x37]; + temp &= ~0x09; + switch (et4000->vram_size) { + case 1: + temp |= 0x09; + break; + case 2: + break; + default: + break; + } + return temp; + } } return svga->crtc[svga->crtcreg]; @@ -368,15 +434,18 @@ et4000w32p_in(uint16_t addr, void *priv) uint8_t ret = 0xff; svga->attrff = 0; - /*Bit 1 of the Input Status Register is required by the OS/2 and NT ET4000W32/I drivers to be set otherwise - the guest will loop infinitely upon reaching the GUI*/ if (svga->cgastat & 0x01) - svga->cgastat &= ~0x32; + svga->cgastat &= ~0x30; else - svga->cgastat ^= 0x32; + svga->cgastat ^= 0x30; ret = svga->cgastat; + /*Bit 1 of the Input Status Register is required by the OS/2 and NT ET4000W32/I drivers to be set otherwise + the guest will loop infinitely upon reaching the GUI*/ + if (svga->hdisp_on) + ret |= 0x02; + if ((svga->fcr & 0x08) && svga->dispon) ret |= 0x08; @@ -396,17 +465,18 @@ et4000w32p_in(uint16_t addr, void *priv) case 0x216a: case 0x217a: return et4000->index; - case 0x210B: - case 0x211B: - case 0x212B: - case 0x213B: - case 0x214B: - case 0x215B: - case 0x216B: - case 0x217B: - if (et4000->index == 0xec) { + + case 0x210b: + case 0x211b: + case 0x212b: + case 0x213b: + case 0x214b: + case 0x215b: + case 0x216b: + case 0x217b: + if (et4000->index == 0xec) return (et4000->regs[0xec] & 0xf) | (et4000->rev << 4); - } + if (et4000->index == 0xee) { if (svga->bpp == 8) { if ((svga->gdcreg[5] & 0x60) >= 0x40) @@ -415,7 +485,7 @@ et4000w32p_in(uint16_t addr, void *priv) return 1; else return 2; - } else if (svga->bpp == 15 || svga->bpp == 16) + } else if ((svga->bpp == 15) || (svga->bpp == 16)) return 4; else break; @@ -439,6 +509,7 @@ void et4000w32p_recalctimings(svga_t *svga) { et4000w32p_t *et4000 = (et4000w32p_t *) svga->priv; + int clk_sel = ((svga->miscout >> 2) & 0x03) | ((svga->crtc[0x34] << 1) & 0x04)| ((svga->crtc[0x31] >> 3) & 0x08); svga->memaddr_latch |= (svga->crtc[0x33] & 0x7) << 16; @@ -463,36 +534,33 @@ et4000w32p_recalctimings(svga_t *svga) svga->dots_per_clock <<= 1; } - svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock((svga->miscout >> 2) & 3, svga->clock_gen); + et4000->adjust_cursor = 0; + et4000->adjust_cursor_x = 0; - if (et4000->type != ET4000W32P_DIAMOND && et4000->type != ET4000W32P_VIDEOMAGIC_REVB && et4000->type != ET4000W32P_CARDEX && et4000->type != ET4000W32P) { - if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { - if (svga->gdcreg[5] & 0x40) { - switch (svga->bpp) { - case 8: - svga->clock *= 2; - break; - case 15: - case 16: - svga->clock *= 3; - break; - case 24: - svga->clock *= 4; - break; - - default: - break; - } - } + svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clk_sel, svga->clock_gen); + if (svga->getclock == ics2494_getclock) { + if (et4000->card_type == HERCULES_DYNAMITE_PRO_VLB) { + if (clk_sel < 2) + svga->clock *= 2.0; } } - if (et4000->type == ET4000W32) { - if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { - if (svga->gdcreg[5] & 0x40) { + if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { + if (et4000->card_type != HERCULES_DYNAMITE_PRO_VLB) { + if (!(svga->crtc[0x35] & 0x80)) { + if (clk_sel >= 2) { + if (svga->seqregs[7] & 0x01) + svga->clock *= 4.0; + else if (svga->seqregs[7] & 0x40) + svga->clock *= 2.0; + } + } + } + if (svga->gdcreg[5] & 0x40) { + if (et4000->rev == ET4000W32) { switch (svga->bpp) { case 8: - if (svga->hdisp == 640 || svga->hdisp == 800 || svga->hdisp == 1024) + if ((svga->hdisp == 640) || (svga->hdisp == 800) || (svga->hdisp == 1024)) break; svga->hdisp -= 24; break; @@ -501,39 +569,45 @@ et4000w32p_recalctimings(svga_t *svga) break; } } + switch (svga->bpp) { + case 15: + case 16: + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + if (et4000->rev <= ET4000W32P_REVC) { + if (et4000->rev != ET4000W32P_REVB) { + if (et4000->rev == ET4000W32P_REVC) { + if (svga->hdisp != 1024) + et4000->adjust_cursor = 1; + } else { + et4000->adjust_cursor = 1; + if (et4000->rev <= ET4000W32I_REVB) { + if (svga->hdisp == 800) + et4000->adjust_cursor_x = 1; + else if (svga->hdisp == 640) + et4000->adjust_cursor_x = 2; + } + } + } + } + break; + case 24: + svga->hdisp /= 3; + svga->dots_per_clock /= 3; + if (et4000->rev <= ET4000W32P_REVC) { + if (et4000->rev != ET4000W32P_REVB) + et4000->adjust_cursor = 2; + } + if ((et4000->card_type == DIAMOND_STEALTH_32) && ((svga->hdisp == (640 / 2)) || (svga->hdisp == 1232))) + svga->hdisp = 640; + break; + default: + break; + } + //pclog("ClkSel=%d, crtc34 bits 0-1=%02x, crtc31 bits 6-7=%02x, seq7=%02x, interlace=%02x.\n", clk_sel, svga->crtc[0x34] & 0x03, svga->crtc[0x31] & 0xc0, svga->seqregs[7], svga->crtc[0x35] & 0x80); } - } - - et4000->adjust_cursor = 0; - - switch (svga->bpp) { - case 15: - case 16: - if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - } - if (et4000->type <= ET4000W32P_REVC) { - if (et4000->type == ET4000W32P_REVC) { - if (svga->hdisp != 1024) - et4000->adjust_cursor = 1; - } else - et4000->adjust_cursor = 1; - } - break; - case 24: - svga->hdisp /= 3; - svga->dots_per_clock /= 3; - if (et4000->type <= ET4000W32P_REVC) - et4000->adjust_cursor = 2; - if ((et4000->type == ET4000W32P_DIAMOND) && ((svga->hdisp == (640 / 2)) || (svga->hdisp == 1232))) { - svga->hdisp = 640; - } - break; - - default: - break; - } + }//else + // pclog("CLOCK translate=%02x, EGA VGA=%02x, clk=%d.\n", svga->crtc[0x34], svga->seqregs[7] & 0x80, clk_sel); svga->render = svga_render_blank; if (!svga->scrblank && svga->attr_palette_enable) { @@ -558,9 +632,7 @@ et4000w32p_recalctimings(svga_t *svga) break; case 0x40: case 0x60: /* 256+ colours */ - if (et4000->type <= ET4000W32P_REVC) - svga->clock /= 2; - + //pclog("BPP=%d.\n", svga->bpp); switch (svga->bpp) { case 8: svga->map8 = svga->pallook; @@ -638,6 +710,7 @@ et4000w32p_recalcmapping(et4000w32p_t *et4000) map |= 4; if (svga->crtc[0x36] & 0x08) map |= 8; + mem_mapping_disable(&et4000->linear_mapping); switch (map) { case 0x0: @@ -742,13 +815,13 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) et4000->acl.queued.dest_off = (et4000->acl.queued.dest_off & 0x00ff) | (val << 8); break; case 0x8e: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) et4000->acl.queued.pixel_depth = val & 0x30; else et4000->acl.queued.vbus = val & 0x03; break; case 0x8f: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) et4000->acl.queued.xy_dir = val & 0xb7; else et4000->acl.queued.xy_dir = val & 0x03; @@ -772,7 +845,7 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) et4000->acl.queued.count_y = (et4000->acl.queued.count_y & 0x00ff) | (val << 8); break; case 0x9c: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) et4000->acl.queued.ctrl_routing = val & 0xdb; else et4000->acl.queued.ctrl_routing = val & 0xb7; @@ -798,14 +871,14 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) case 0xa3: et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0x00ffffff) | (val << 24); et4000->acl.internal = et4000->acl.queued; - if (et4000->type >= ET4000W32P_REVC) { + if (et4000->rev >= ET4000W32P_REVB) { et4000w32p_blit_start(et4000); et4000w32_log("Destination Address write and start XY Block, xcnt = %i, ycnt = %i\n", et4000->acl.x_count + 1, et4000->acl.y_count + 1); if (!(et4000->acl.queued.ctrl_routing & 0x43)) { - et4000w32p_blit(0xffffff, ~0, 0, 0, et4000); + et4000w32p_blit(-1, 0xffffffff, 0, 0, et4000); } if ((et4000->acl.queued.ctrl_routing & 0x40) && !(et4000->acl.internal.ctrl_routing & 3)) { - et4000w32p_blit(4, ~0, 0, 0, et4000); + et4000w32p_blit(4, 0xffffffff, 0, 0, et4000); } } else { et4000w32_blit_start(et4000); @@ -862,7 +935,7 @@ et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) static void et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val, uint8_t bank) { - if (et4000->type >= ET4000W32P_REVC) { + if (et4000->rev >= ET4000W32P_REVB) { if (!(et4000->acl.status & ACL_XYST)) { et4000w32_log("XY MMU block not started\n"); return; @@ -872,7 +945,7 @@ et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val, uin if ((et4000->acl.internal.ctrl_routing & 3) == 2) /*CPU data is Mix data*/ et4000w32p_blit(8 - (et4000->acl.mix_addr & 7), val >> (et4000->acl.mix_addr & 7), 0, 1, et4000); else if ((et4000->acl.internal.ctrl_routing & 3) == 1) /*CPU data is Source data*/ - et4000w32p_blit(1, ~0, val, 2, et4000); + et4000w32p_blit(1, 0xffffffff, val, 2, et4000); } } else { if (!(et4000->acl.status & ACL_XYST)) { @@ -885,9 +958,8 @@ et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val, uin if (!(et4000->acl.queued.ctrl_routing & 0x37)) { et4000->acl.mmu_start = 1; et4000w32_blit(-1, 0, 0, 0xffffffff, et4000); - } else { + } else et4000->acl.mmu_start = 0; - } } if (et4000->acl.internal.ctrl_routing & 7) { @@ -932,9 +1004,9 @@ et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *priv) case 0x2000: /* MMU 1 */ case 0x4000: /* MMU 2 */ et4000->bank = (addr >> 13) & 3; - if (et4000->mmu.ctrl & (1 << et4000->bank)) { + if (et4000->mmu.ctrl & (1 << et4000->bank)) et4000w32p_accel_write_mmu(et4000, addr & 0x7fff, val, et4000->bank); - } else { + else { if (((addr & 0x1fff) + et4000->mmu.base[et4000->bank]) < svga->vram_max) { svga->vram[((addr & 0x1fff) + et4000->mmu.base[et4000->bank]) & et4000->vram_mask] = val; svga->changedvram[(((addr & 0x1fff) + et4000->mmu.base[et4000->bank]) & et4000->vram_mask) >> 12] = changeframecount; @@ -942,9 +1014,9 @@ et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *priv) } break; case 0x6000: - if ((addr & 0xff) >= 0x80) { + if ((addr & 0xff) >= 0x80) et4000w32p_accel_write_fifo(et4000, addr & 0x7fff, val); - } else { + else { switch (addr & 0xff) { case 0x00: et4000->mmu.base[0] = (et4000->mmu.base[0] & 0xffffff00) | val; @@ -1069,6 +1141,7 @@ et4000w32p_mmu_read(uint32_t addr, void *priv) et4000->acl.fifo_queue = 0; } else et4000->acl.status &= ~ACL_RDST; + return et4000->acl.status; case 0x80: @@ -1100,8 +1173,9 @@ et4000w32p_mmu_read(uint32_t addr, void *priv) case 0x8d: return et4000->acl.internal.dest_off >> 8; case 0x8e: - if (et4000->type >= ET4000W32P_REVC) + if (et4000->rev >= ET4000W32P_REVB) return et4000->acl.internal.pixel_depth; + return et4000->acl.internal.vbus; case 0x8f: return et4000->acl.internal.xy_dir; @@ -1172,9 +1246,9 @@ et4000w32_blit_start(et4000w32p_t *et4000) et4000->acl.pattern_back = et4000->acl.pattern_addr; if (!(et4000->acl.internal.pattern_wrap & 0x40)) { - if ((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) == 0x00) { /*This is to avoid a division by zero crash*/ + if ((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) == 0x00) /*This is to avoid a division by zero crash*/ et4000->acl.pattern_y = (et4000->acl.pattern_addr / (0x7f + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1); - } else + else et4000->acl.pattern_y = (et4000->acl.pattern_addr / (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1); et4000->acl.pattern_back &= ~(((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) * et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7]) - 1); } @@ -1187,9 +1261,9 @@ et4000w32_blit_start(et4000w32p_t *et4000) et4000->acl.source_back = et4000->acl.source_addr; if (!(et4000->acl.internal.source_wrap & 0x40)) { - if ((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) == 0x00) { /*This is to avoid a division by zero crash*/ + if ((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) == 0x00) /*This is to avoid a division by zero crash*/ et4000->acl.source_y = (et4000->acl.source_addr / (0x7f + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1); - } else + else et4000->acl.source_y = (et4000->acl.source_addr / (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1); et4000->acl.source_back &= ~(((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) * et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7]) - 1); } @@ -1265,6 +1339,7 @@ et4000w32p_blit_start(et4000w32p_t *et4000) et4000w32_max_x[2] = (et4000->acl.internal.pixel_depth == 0x20) ? 3 : 4; et4000->acl.internal.count_x += (et4000->acl.internal.pixel_depth >> 4) & 3; + et4000->acl.x_count = et4000->acl.internal.count_x; et4000->acl.cpu_dat_pos = 0; et4000->acl.cpu_dat = 0; @@ -2278,9 +2353,8 @@ et4000w32_blit(int count, int cpu_input, uint32_t src_dat, uint32_t mix_dat, et4 return; } - if (cpu_input) { + if (cpu_input) return; - } } } } @@ -2293,7 +2367,7 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 uint8_t pattern; uint8_t source; uint8_t dest; - uint8_t out; + uint8_t out = 0; uint8_t rop; int mixdat; @@ -2307,14 +2381,15 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 while (count--) { et4000w32_log("%i,%i : ", et4000->acl.internal.pos_x, et4000->acl.internal.pos_y); pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; - source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; + et4000w32_log("%06X %06X ", (et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask, (et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask); if (cpu_input == 2) { source = sdat & 0xff; sdat >>= 8; - } + } else + source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; + dest = svga->vram[et4000->acl.dest_addr & et4000->vram_mask]; - out = 0; et4000w32_log("%06X ", et4000->acl.dest_addr); if ((et4000->acl.internal.ctrl_routing & 0xa) == 8) { mixdat = svga->vram[(et4000->acl.mix_addr >> 3) & et4000->vram_mask] & (1 << (et4000->acl.mix_addr & 7)); @@ -2416,7 +2491,7 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 } } else { et4000w32_log("BitBLT: count = %i\n", count); - while (count-- && et4000->acl.y_count >= 0) { + while (count-- && (et4000->acl.y_count >= 0)) { pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; if (cpu_input == 2) { @@ -2426,8 +2501,6 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; dest = svga->vram[et4000->acl.dest_addr & et4000->vram_mask]; - out = 0; - if ((et4000->acl.internal.ctrl_routing & 0xa) == 8) { mixdat = svga->vram[(et4000->acl.mix_addr >> 3) & et4000->vram_mask] & (1 << (et4000->acl.mix_addr & 7)); } else { @@ -2455,6 +2528,8 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 et4000->acl.x_count--; if (et4000->acl.x_count == 0xffff) { + et4000->acl.x_count = et4000->acl.internal.count_x; + if (et4000->acl.internal.xy_dir & 2) { et4000w32_decy(et4000); et4000->acl.mix_back = et4000->acl.mix_addr = et4000->acl.mix_back - (et4000->acl.internal.mix_off + 1); @@ -2469,7 +2544,6 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 et4000->acl.source_x = et4000->acl.source_x_back; et4000->acl.y_count--; - et4000->acl.x_count = et4000->acl.internal.count_x; if (et4000->acl.y_count == 0xffff) { et4000w32_log("BitBLT end\n"); et4000->acl.status &= ~(ACL_XYST | ACL_SSO); @@ -2481,7 +2555,7 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 if (et4000->acl.internal.ctrl_routing & 0x40) { if (et4000->acl.cpu_dat_pos & 3) - et4000->acl.cpu_dat_pos += 4 - (et4000->acl.cpu_dat_pos & 3); + et4000->acl.cpu_dat_pos += (4 - (et4000->acl.cpu_dat_pos & 3)); return; } } @@ -2505,7 +2579,7 @@ et4000w32p_hwcursor_draw(svga_t *svga, int displine) offset = svga->hwcursor_latch.xoff; - if ((et4000->type == ET4000W32) && (pitch == 32)) { + if ((et4000->rev == ET4000W32) && (pitch == 32)) { switch (svga->bpp) { case 8: minus_width = 0; @@ -2681,6 +2755,7 @@ et4000w32p_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) et4000w32p_io_set(et4000); else et4000w32p_io_remove(et4000); + et4000w32p_recalcmapping(et4000); break; @@ -2697,9 +2772,9 @@ et4000w32p_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) case 0x33: et4000->pci_regs[addr] = val; if (et4000->pci_regs[0x30] & 0x01) { - uint32_t addr = (et4000->pci_regs[0x32] << 16) | (et4000->pci_regs[0x33] << 24); - et4000w32_log("ET4000 bios_rom enabled at %08x\n", addr); - mem_mapping_set_addr(&et4000->bios_rom.mapping, addr, 0x8000); + uint32_t biosaddr = (et4000->pci_regs[0x32] << 16) | (et4000->pci_regs[0x33] << 24); + et4000w32_log("ET4000 bios_rom enabled at %08x\n", biosaddr); + mem_mapping_set_addr(&et4000->bios_rom.mapping, biosaddr, 0x8000); } else { et4000w32_log("ET4000 bios_rom disabled\n"); mem_mapping_disable(&et4000->bios_rom.mapping); @@ -2714,21 +2789,13 @@ et4000w32p_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) void * et4000w32p_init(const device_t *info) { - int vram_size; et4000w32p_t *et4000 = malloc(sizeof(et4000w32p_t)); memset(et4000, 0, sizeof(et4000w32p_t)); et4000->pci = (info->flags & DEVICE_PCI) ? 0x80 : 0x00; et4000->vlb = (info->flags & DEVICE_VLB) ? 0x40 : 0x00; - /*The ET4000/W32i ISA BIOS seems to not support 2MB of VRAM*/ - if ((info->local == ET4000W32) || ((info->local == ET4000W32I) && !(et4000->vlb))) - vram_size = 1; - else - vram_size = device_get_config_int("memory"); - - /*The interleaved VRAM was introduced by the ET4000/W32i*/ - et4000->interleaved = ((vram_size == 2) && (info->local != ET4000W32)) ? 1 : 0; + et4000->vram_size = device_get_config_int("memory"); if (info->flags & DEVICE_PCI) video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_et4000w32_pci); @@ -2737,112 +2804,141 @@ et4000w32p_init(const device_t *info) else video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_et4000w32_isa); - svga_init(info, &et4000->svga, et4000, vram_size << 20, + svga_init(info, &et4000->svga, et4000, et4000->vram_size << 20, et4000w32p_recalctimings, et4000w32p_in, et4000w32p_out, et4000w32p_hwcursor_draw, NULL); - et4000->vram_mask = (vram_size << 20) - 1; - et4000->svga.decode_mask = (vram_size << 20) - 1; + et4000->vram_mask = (et4000->vram_size << 20) - 1; + et4000->svga.decode_mask = (et4000->vram_size << 20) - 1; - et4000->type = info->local; + et4000->card_type = info->local & 0xff; + et4000->ramdac_type = BUILT_IN; + et4000->svga.crtc[0x31] = 0x40; + et4000->svga.miscout = 0x01; + et4000->svga.bpp = 8; - switch (et4000->type) { - case ET4000W32: + switch (et4000->card_type) { + case MACHSPEED_VGA_GUI_2400S: /* ET4000/W32 */ - et4000->rev = 0; + et4000->rev = ET4000W32; + et4000->ramdac_type = ET4K_SDAC; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); et4000->svga.ramdac = device_add(&tseng_ics5301_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = sdac_getclock; + sdac_set_ref_clock(et4000->svga.ramdac, 14318184.0f); + svga_recalctimings(&et4000->svga); break; - case ET4000W32I: + case AXIS_MICRODEVICE_ET4W32_5: /* ET4000/W32i rev B */ - et4000->rev = 3; + et4000->rev = ET4000W32I_REVB; + et4000->ramdac_type = ET4K_SDAC; - if (et4000->vlb) { - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_VLB, 0xc0000, 0x8000, 0x7fff, 0, - MEM_MAPPING_EXTERNAL); - } else { - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_ISA, 0xc0000, 0x8000, 0x7fff, 0, - MEM_MAPPING_EXTERNAL); - } + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_REVB_AXIS_MICRODEVICE, 0xc0000, 0x8000, 0x7fff, 0, + MEM_MAPPING_EXTERNAL); et4000->svga.ramdac = device_add(&tseng_ics5301_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = sdac_getclock; + sdac_set_ref_clock(et4000->svga.ramdac, 14318184.0f); + svga_recalctimings(&et4000->svga); break; - case ET4000W32P_VIDEOMAGIC_REVB: - /* ET4000/W32p rev B */ - et4000->rev = 5; + case HERCULES_DYNAMITE_PRO_VLB: + /* ET4000/W32i rev B */ + et4000->rev = ET4000W32I_REVB; + et4000->ramdac_type = ATT49X; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_VIDEOMAGIC_REVB_VLB, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32I_REVB_HERCULES_DYNAMITE_VLB_PRO, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - et4000->svga.ramdac = device_add(&stg_ramdac_device); + et4000->svga.ramdac = device_add(&att490_ramdac_device); + et4000->svga.clock_gen = device_add(&ics2494an_324_device); + et4000->svga.getclock = ics2494_getclock; + break; + + case VIDEOMAGIC_ETW32PVS: + /* ET4000/W32p rev B */ + et4000->rev = ET4000W32P_REVB; + et4000->ramdac_type = STG170X; + + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC, 0xc0000, 0x8000, 0x7fff, 0, + MEM_MAPPING_EXTERNAL); + + et4000->svga.ramdac = device_add(&stg1703_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = stg_getclock; break; - case ET4000W32P_REVC: + case CARDEX_REVC: /* ET4000/W32p rev C */ - et4000->rev = 7; + et4000->rev = ET4000W32P_REVC; + et4000->ramdac_type = ET4K_SDAC; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVC, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVC_CARDEX, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); et4000->svga.ramdac = device_add(&tseng_ics5341_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = sdac_getclock; + sdac_set_ref_clock(et4000->svga.ramdac, 14318184.0f); + svga_recalctimings(&et4000->svga); break; - case ET4000W32P: + case CARDEX_REVD: /* ET4000/W32p rev D */ - et4000->rev = 6; + et4000->rev = ET4000W32P_REVD; + et4000->ramdac_type = STG170X; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVD_CARDEX, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - et4000->svga.ramdac = device_add(&stg_ramdac_device); + et4000->svga.ramdac = device_add(&stg1703_ramdac_device); et4000->svga.clock_gen = et4000->svga.ramdac; et4000->svga.getclock = stg_getclock; break; - case ET4000W32P_CARDEX: + case DIAMOND_STEALTH_32: /* ET4000/W32p rev D */ - et4000->rev = 6; + et4000->rev = ET4000W32P_REVD; + et4000->ramdac_type = STG170X; - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_CARDEX, 0xc0000, 0x8000, 0x7fff, 0, + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVD_DIAMOND, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - et4000->svga.ramdac = device_add(&stg_ramdac_device); - et4000->svga.clock_gen = et4000->svga.ramdac; - et4000->svga.getclock = stg_getclock; - break; - - case ET4000W32P_DIAMOND: - /* ET4000/W32p rev D */ - et4000->rev = 6; - - rom_init(&et4000->bios_rom, BIOS_ROM_PATH_DIAMOND, 0xc0000, 0x8000, 0x7fff, 0, - MEM_MAPPING_EXTERNAL); - - et4000->svga.ramdac = device_add(&stg_ramdac_device); + et4000->svga.ramdac = device_add(&stg1702_ramdac_device); et4000->svga.clock_gen = device_add(&icd2061_device); et4000->svga.getclock = icd2061_getclock; icd2061_set_ref_clock(et4000->svga.ramdac, 14318184.0f); svga_recalctimings(&et4000->svga); break; + case GENERIC_REVD: + /* ET4000/W32p rev D */ + et4000->rev = ET4000W32P_REVD; + et4000->ramdac_type = STG170X; + + rom_init(&et4000->bios_rom, BIOS_ROM_PATH_W32P_REVD, 0xc0000, 0x8000, 0x7fff, 0, + MEM_MAPPING_EXTERNAL); + + et4000->svga.ramdac = device_add(&stg1703_ramdac_device); + et4000->svga.clock_gen = et4000->svga.ramdac; + et4000->svga.getclock = stg_getclock; + break; + default: break; } + + /*The interleaved VRAM was introduced by the ET4000/W32i*/ + et4000->interleaved = ((et4000->vram_size == 2) && (et4000->rev != ET4000W32)) ? 1 : 0; + if (info->flags & DEVICE_PCI) mem_mapping_disable(&et4000->bios_rom.mapping); @@ -2875,51 +2971,51 @@ et4000w32p_init(const device_t *info) } int -et4000w32_available(void) +et4000w32_machspeed_vga_gui_2400s_available(void) { - return rom_present(BIOS_ROM_PATH_W32); + return rom_present(BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S); } int -et4000w32i_isa_available(void) +et4000w32i_axis_microdevice_available(void) { - return rom_present(BIOS_ROM_PATH_W32I_ISA); + return rom_present(BIOS_ROM_PATH_W32I_REVB_AXIS_MICRODEVICE); } int -et4000w32i_vlb_available(void) +et4000w32i_hercules_dynamite_pro_vlb_available(void) { - return rom_present(BIOS_ROM_PATH_W32I_VLB); + return rom_present(BIOS_ROM_PATH_W32I_REVB_HERCULES_DYNAMITE_VLB_PRO); } int -et4000w32p_videomagic_revb_vlb_available(void) +et4000w32p_videomagic_revb_available(void) { - return rom_present(BIOS_ROM_PATH_W32P_VIDEOMAGIC_REVB_VLB); + return rom_present(BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC); } int -et4000w32p_revc_available(void) +et4000w32p_cardex_revc_available(void) { - return rom_present(BIOS_ROM_PATH_W32P_REVC); + return rom_present(BIOS_ROM_PATH_W32P_REVC_CARDEX); } int -et4000w32p_noncardex_available(void) +et4000w32p_diamond_revd_available(void) { - return rom_present(BIOS_ROM_PATH_W32P); + return rom_present(BIOS_ROM_PATH_W32P_REVD_DIAMOND); } int -et4000w32p_available(void) +et4000w32p_cardex_revd_available(void) { - return rom_present(BIOS_ROM_PATH_DIAMOND); + return rom_present(BIOS_ROM_PATH_W32P_REVD_CARDEX); } int -et4000w32p_cardex_available(void) +et4000w32p_generic_revd_available(void) { - return rom_present(BIOS_ROM_PATH_CARDEX); + return rom_present(BIOS_ROM_PATH_W32P_REVD); } void @@ -2969,197 +3065,197 @@ static const device_config_t et4000w32p_config[] = { // clang-format on }; -const device_t et4000w32_device = { - .name = "Tseng Labs ET4000/w32 ISA", +const device_t et4000w32_machspeed_vga_gui_2400s_isa_device = { + .name = "Tseng Labs ET4000/w32 ISA (MachSpeed VGA GUI 2400S)", .internal_name = "et4000w32", .flags = DEVICE_ISA16, - .local = ET4000W32, + .local = MACHSPEED_VGA_GUI_2400S, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32_available, + .available = et4000w32_machspeed_vga_gui_2400s_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, - .config = NULL + .config = et4000w32p_config +}; + +const device_t et4000w32_machspeed_vga_gui_2400s_vlb_device = { + .name = "Tseng Labs ET4000/w32 VLB (MachSpeed VGA GUI 2400S)", + .internal_name = "et4000w32_vlb", + .flags = DEVICE_VLB, + .local = MACHSPEED_VGA_GUI_2400S, + .init = et4000w32p_init, + .close = et4000w32p_close, + .reset = NULL, + .available = et4000w32_machspeed_vga_gui_2400s_available, + .speed_changed = et4000w32p_speed_changed, + .force_redraw = et4000w32p_force_redraw, + .config = et4000w32p_config }; const device_t et4000w32_onboard_device = { - .name = "Tseng Labs ET4000/w32 (ISA) (On-Board)", + .name = "Tseng Labs ET4000/w32 ISA (On-Board)", .internal_name = "et4000w32_onboard", .flags = DEVICE_ISA16, - .local = ET4000W32, + .local = MACHSPEED_VGA_GUI_2400S | 0x100, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32_available, + .available = et4000w32_machspeed_vga_gui_2400s_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, - .config = NULL + .config = et4000w32p_config }; -const device_t et4000w32i_isa_device = { - .name = "Tseng Labs ET4000/w32i Rev. B ISA", +const device_t et4000w32i_axis_microdevice_isa_device = { + .name = "Tseng Labs ET4000/w32i Rev. B ISA (Axis MicroDevice)", .internal_name = "et4000w32i", .flags = DEVICE_ISA16, - .local = ET4000W32I, + .local = AXIS_MICRODEVICE_ET4W32_5, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32i_isa_available, + .available = et4000w32i_axis_microdevice_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, - .config = NULL + .config = et4000w32p_config }; -const device_t et4000w32i_vlb_device = { - .name = "Tseng Labs ET4000/w32i Rev. B VLB", +const device_t et4000w32i_hercules_dynamite_pro_vlb_device = { + .name = "Tseng Labs ET4000/w32i Rev. B VLB (Hercules Dynamite Pro)", .internal_name = "et4000w32i_vlb", .flags = DEVICE_VLB, - .local = ET4000W32I, + .local = HERCULES_DYNAMITE_PRO_VLB, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32i_vlb_available, + .available = et4000w32i_hercules_dynamite_pro_vlb_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; const device_t et4000w32p_videomagic_revb_vlb_device = { - .name = "Tseng Labs ET4000/w32p Rev. B VLB (VideoMagic)", + .name = "Tseng Labs ET4000/w32p Rev. B VLB (VideoMagic ETW32PVS)", .internal_name = "et4000w32p_videomagic_revb_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_VIDEOMAGIC_REVB, + .local = VIDEOMAGIC_ETW32PVS, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_videomagic_revb_vlb_available, + .available = et4000w32p_videomagic_revb_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_videomagic_revb_pci_device = { - .name = "Tseng Labs ET4000/w32p Rev. B PCI (VideoMagic)", - .internal_name = "et4000w32p_videomagic_revb_pci", - .flags = DEVICE_PCI, - .local = ET4000W32P_VIDEOMAGIC_REVB, - .init = et4000w32p_init, - .close = et4000w32p_close, - .reset = NULL, - .available = et4000w32p_videomagic_revb_vlb_available, - .speed_changed = et4000w32p_speed_changed, - .force_redraw = et4000w32p_force_redraw, - .config = et4000w32p_config -}; - -const device_t et4000w32p_revc_vlb_device = { +const device_t et4000w32p_cardex_revc_vlb_device = { .name = "Tseng Labs ET4000/w32p Rev. C VLB (Cardex)", .internal_name = "et4000w32p_revc_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_REVC, + .local = CARDEX_REVC, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_revc_available, + .available = et4000w32p_cardex_revc_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_revc_pci_device = { +const device_t et4000w32p_cardex_revc_pci_device = { .name = "Tseng Labs ET4000/w32p Rev. C PCI (Cardex)", - .internal_name = "et4000w32p_revc_pci", + .internal_name = "et4000w32p_revc_vlb", .flags = DEVICE_PCI, - .local = ET4000W32P_REVC, + .local = CARDEX_REVC, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_revc_available, + .available = et4000w32p_cardex_revc_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_noncardex_vlb_device = { - .name = "Tseng Labs ET4000/w32p Rev. D VLB", - .internal_name = "et4000w32p_nc_vlb", - .flags = DEVICE_VLB, - .local = ET4000W32P, - .init = et4000w32p_init, - .close = et4000w32p_close, - .reset = NULL, - .available = et4000w32p_noncardex_available, - .speed_changed = et4000w32p_speed_changed, - .force_redraw = et4000w32p_force_redraw, - .config = et4000w32p_config -}; - -const device_t et4000w32p_noncardex_pci_device = { - .name = "Tseng Labs ET4000/w32p Rev. D PCI", - .internal_name = "et4000w32p_nc_pci", - .flags = DEVICE_PCI, - .local = ET4000W32P, - .init = et4000w32p_init, - .close = et4000w32p_close, - .reset = NULL, - .available = et4000w32p_noncardex_available, - .speed_changed = et4000w32p_speed_changed, - .force_redraw = et4000w32p_force_redraw, - .config = et4000w32p_config -}; - -const device_t et4000w32p_cardex_vlb_device = { +const device_t et4000w32p_cardex_revd_vlb_device = { .name = "Tseng Labs ET4000/w32p Rev. D VLB (Cardex)", .internal_name = "et4000w32p_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_CARDEX, + .local = CARDEX_REVD, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_cardex_available, + .available = et4000w32p_cardex_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_cardex_pci_device = { +const device_t et4000w32p_cardex_revd_pci_device = { .name = "Tseng Labs ET4000/w32p Rev. D PCI (Cardex)", .internal_name = "et4000w32p_pci", .flags = DEVICE_PCI, - .local = ET4000W32P_CARDEX, + .local = CARDEX_REVD, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_cardex_available, + .available = et4000w32p_cardex_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_vlb_device = { +const device_t et4000w32p_diamond_revd_vlb_device = { .name = "Tseng Labs ET4000/w32p Rev. D VLB (Diamond Stealth32)", .internal_name = "stealth32_vlb", .flags = DEVICE_VLB, - .local = ET4000W32P_DIAMOND, + .local = DIAMOND_STEALTH_32, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_available, + .available = et4000w32p_diamond_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config }; -const device_t et4000w32p_pci_device = { +const device_t et4000w32p_diamond_revd_pci_device = { .name = "Tseng Labs ET4000/w32p Rev. D PCI (Diamond Stealth32)", .internal_name = "stealth32_pci", .flags = DEVICE_PCI, - .local = ET4000W32P_DIAMOND, + .local = DIAMOND_STEALTH_32, .init = et4000w32p_init, .close = et4000w32p_close, .reset = NULL, - .available = et4000w32p_available, + .available = et4000w32p_diamond_revd_available, + .speed_changed = et4000w32p_speed_changed, + .force_redraw = et4000w32p_force_redraw, + .config = et4000w32p_config +}; + +const device_t et4000w32p_generic_revd_vlb_device = { + .name = "Tseng Labs ET4000/w32p Rev. D VLB", + .internal_name = "et4000w32p_nc_vlb", + .flags = DEVICE_VLB, + .local = GENERIC_REVD, + .init = et4000w32p_init, + .close = et4000w32p_close, + .reset = NULL, + .available = et4000w32p_generic_revd_available, + .speed_changed = et4000w32p_speed_changed, + .force_redraw = et4000w32p_force_redraw, + .config = et4000w32p_config +}; + +const device_t et4000w32p_generic_revd_pci_device = { + .name = "Tseng Labs ET4000/w32p Rev. D PCI", + .internal_name = "et4000w32p_nc_pci", + .flags = DEVICE_PCI, + .local = GENERIC_REVD, + .init = et4000w32p_init, + .close = et4000w32p_close, + .reset = NULL, + .available = et4000w32p_generic_revd_available, .speed_changed = et4000w32p_speed_changed, .force_redraw = et4000w32p_force_redraw, .config = et4000w32p_config diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 2333d68b7..210a9f625 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -60,7 +60,7 @@ #define ROM_MIROCRYSTAL20SV_964_PCI "roms/video/s3/mirocrystal.VBI" #define ROM_MIROCRYSTAL20SD_864_VLB "roms/video/s3/Miro20SD.BIN" #define ROM_PHOENIX_86C80X "roms/video/s3/805.VBI" -#define ROM_WINNER1000_805 "roms/video/s3/v01_05_00-C.BIN" +#define ROM_WINNER1000_805 "roms/video/s3/W1000ISA 01.03.00-B.BIN" #define ROM_PARADISE_BAHAMAS64 "roms/video/s3/bahamas64.bin" #define ROM_PHOENIX_VISION864 "roms/video/s3/86c864p.bin" #define ROM_DIAMOND_STEALTH64_964 "roms/video/s3/964_107h.rom" @@ -138,6 +138,7 @@ enum { S3_86C928PCI = 0x06, S3_86C801 = 0x07, S3_86C805 = 0x08, + S3_86C805I = 0x09, S3_VISION964 = 0x18, S3_VISION968 = 0x20, S3_VISION864 = 0x28, @@ -291,6 +292,7 @@ typedef struct s3_t { int16_t px, py; int16_t sx, sy; int16_t dx, dy; + int16_t sx_inc; uint32_t src, dest, pattern; int poly_cx, poly_cx2; @@ -314,7 +316,7 @@ typedef struct s3_t { int color_16bit_check; int color_16bit_check_pixtrans; int16_t minus; - int16_t minus_src_24bpp; + int16_t blit_24bpp; int rd_mask_16bit_check; int start; int mix_dat_upper; @@ -528,8 +530,9 @@ s3_queue(s3_t *s3, uint32_t addr, uint32_t val, uint32_t type) if (FIFO_FULL) { thread_reset_event(s3->fifo_not_full_event); - if (FIFO_FULL) + if (FIFO_FULL) { thread_wait_event(s3->fifo_not_full_event, -1); /*Wait for room in ringbuffer*/ + } } fifo->val = val; @@ -656,7 +659,7 @@ s3_accel_out_pixtrans_w(s3_t *s3, uint16_t val) s3->accel_start(8, 1, val | (val << 16), 0, s3); } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) val = (val >> 8) | (val << 8); @@ -671,7 +674,7 @@ s3_accel_out_pixtrans_w(s3_t *s3, uint16_t val) s3->accel_start(1, 1, 0xffffffff, val | (val << 16), s3); } } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) val = (val >> 8) | (val << 8); @@ -723,6 +726,7 @@ s3_accel_out_pixtrans_w(s3_t *s3, uint16_t val) case 0x400: if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 0x02)) { if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) { + s3_log("WORD WritePIXTRANS 32=%04x, SX=%d, SY=%d.\n", val, s3->accel.sx, s3->accel.sy); if (s3->accel.cmd & 0x1000) val = (val >> 8) | (val << 8); @@ -794,8 +798,10 @@ s3_accel_out_pixtrans_l(s3_t *s3, uint32_t val) case 0x400: if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 2)) { if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) { + s3_log("LONG WritePIXTRANS 32=%08x.\n", val); if (s3->accel.cmd & 0x1000) val = ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24); + s3->accel_start(32, 1, val, 0, s3); } else s3->accel_start(4, 1, 0xffffffff, val, s3); @@ -832,14 +838,15 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) switch (port) { case 0x8148: case 0x82e8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.cur_y = (s3->accel.cur_y & 0xf00) | val; s3->accel.poly_cy = s3->accel.cur_y; break; case 0x8149: case 0x82e9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.cur_y = (s3->accel.cur_y & 0xff) | ((val & 0x0f) << 8); s3->accel.poly_cy = s3->accel.cur_y; - s3_log("[%04X:%08X] OUT PORTB=%04x, valy=%d.\n", CS, cpu_state.pc, port - 1, s3->accel.cur_y); break; case 0x814a: case 0x82ea: @@ -854,18 +861,19 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) case 0x8548: case 0x86e8: - s3->accel.cur_x = (s3->accel.cur_x & 0xf00) | val; + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); + s3->accel.cur_x = (s3->accel.cur_x & 0xf00) | val; s3->accel.cur_x_overflow = (s3->accel.cur_x_overflow & 0xff00) | val; - s3->accel.poly_cx = s3->accel.cur_x << 20; - s3->accel.poly_x = s3->accel.poly_cx >> 20; + s3->accel.poly_cx = s3->accel.cur_x << 20; + s3->accel.poly_x = s3->accel.poly_cx >> 20; break; case 0x8549: case 0x86e9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.cur_x = (s3->accel.cur_x & 0xff) | ((val & 0x0f) << 8); s3->accel.cur_x_overflow = (s3->accel.cur_x_overflow & 0xff) | (val << 8); s3->accel.poly_cx = s3->accel.poly_x = s3->accel.cur_x << 20; - s3->accel.poly_x = s3->accel.poly_cx >> 20; - s3_log("[%04X:%08X] OUT PORTB=%04x, valx=%d, valxover=%d.\n", CS, cpu_state.pc, port - 1, s3->accel.cur_x, s3->accel.cur_x_overflow); + s3->accel.poly_x = s3->accel.poly_cx >> 20; break; case 0x854a: case 0x86ea: @@ -881,15 +889,18 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) case 0xcae8: case 0x8948: case 0x8ae8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.desty_axstp = (s3->accel.desty_axstp & 0x3f00) | val; s3->accel.point_1_updated = 1; break; case 0xcae9: case 0x8949: case 0x8ae9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.desty_axstp = (s3->accel.desty_axstp & 0xff) | ((val & 0x3f) << 8); if (val & 0x20) s3->accel.desty_axstp |= ~0x3fff; + s3->accel.point_1_updated = 1; break; case 0x894a: @@ -902,21 +913,25 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) s3->accel.desty_axstp2 = (s3->accel.desty_axstp2 & 0xff) | ((val & 0x3f) << 8); if (val & 0x20) s3->accel.desty_axstp2 |= ~0x3fff; + s3->accel.point_2_updated = 1; break; case 0x8d48: case 0x8ee8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.destx_distp = (s3->accel.destx_distp & 0x3f00) | val; s3->accel.destx_overflow = (s3->accel.destx_overflow & 0xff00) | val; s3->accel.point_1_updated = 1; break; case 0x8d49: case 0x8ee9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x.\n", CS, cpu_state.pc, port, val); s3->accel.destx_distp = (s3->accel.destx_distp & 0xff) | ((val & 0x3f) << 8); s3->accel.destx_overflow = (s3->accel.destx_overflow & 0xff) | (val << 8); if (val & 0x20) s3->accel.destx_distp |= ~0x3fff; + s3->accel.point_1_updated = 1; break; case 0x8d4a: @@ -980,6 +995,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) s3->accel.cmd = (s3->accel.cmd & 0xff) | (val << 8); s3->accel.ssv_state = 0; if (s3->bpp == 3) { + s3_log("Command Misc1=%04x.\n", s3->accel.multifunc[0xe]); if (!(s3->accel.multifunc[0xe] & 0x200)) s3->accel.multifunc[0xe] &= ~0x10; } @@ -1235,6 +1251,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) break; case 0xa94a: case 0xaaea: + s3_log("[%04X:%08X] OUT PORTB=%04x (Write Mask), val=%02x.\n", CS, cpu_state.pc, port, val); if (s3->chip >= S3_VISION964) { if (s3->accel.multifunc[0xe] & 0x200) s3->accel.wrt_mask = (s3->accel.wrt_mask & ~0x00ff0000) | (val << 16); @@ -1515,14 +1532,26 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) case 0xb548: case 0xb6e8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); s3->accel.bkgd_mix = val; break; + case 0xb549: + case 0xb6e9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); + break; + case 0xb948: case 0xbae8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); s3->accel.frgd_mix = val; break; + case 0xb949: + case 0xbae9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%02x, CMD=%04x, C(%d,%d).\n", CS, cpu_state.pc, port, val, s3->accel.cmd, s3->accel.cur_x, s3->accel.cur_y); + break; + case 0xbd48: case 0xbee8: s3->accel.multifunc_cntl = (s3->accel.multifunc_cntl & 0xff00) | val; @@ -1598,18 +1627,22 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) break; case 0xe948: case 0xeae8: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_y = (s3->accel.pat_y & 0xf00) | val; break; case 0xe949: case 0xeae9: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_y = (s3->accel.pat_y & 0xff) | ((val & 0x0f) << 8); break; case 0xe94a: case 0xeaea: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_x = (s3->accel.pat_x & 0xf00) | val; break; case 0xe94b: case 0xeaeb: + s3_log("[%04X:%08X] OUT PORTB=%04x, val=%04x.\n", CS, cpu_state.pc, port, s3->accel.cmd); s3->accel.pat_x = (s3->accel.pat_x & 0xff) | ((val & 0x0f) << 8); break; case 0xed48: @@ -1681,7 +1714,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) else s3->accel_start(1, 1, 0xffffffff, s3->accel.pix_trans[0], s3); } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { s3->accel.pix_trans[1] = svga->vram[dword_remap(svga, (s3->accel.dest + s3->accel.cx - s3->accel.minus)) & s3->vram_mask]; if (s3->accel.cmd & 0x1000) { @@ -2177,7 +2210,9 @@ s3_accel_write_fifo_w(s3_t *s3, uint32_t addr, uint16_t val) s3_accel_out_fifo_w(s3, 0x9ee8, val); } else if (((addr & 0x1fffe) >= 0x8000) && (addr & 0x1fffe) < 0x10000) { if (((addr & 0x1fffe) == 0xe2e8) || ((addr & 0x1fffe) == 0xe2ea)) { - if ((s3->chip == S3_86C801) || (s3->chip == S3_86C805) || (s3->chip == S3_86C928) || (s3->chip == S3_86C928PCI)) + if ((s3->chip == S3_86C801) || (s3->chip == S3_86C805) || + (s3->chip == S3_86C928) || + (s3->chip == S3_86C928PCI)) s3_accel_out_pixtrans_w(s3, val); else { s3_accel_write_fifo(s3, addr, val); @@ -2306,9 +2341,10 @@ s3_hwcursor_draw(svga_t *svga, int displine) case 15: fg = video_15to32[s3->hwc_fg_col & 0xffff]; bg = video_15to32[s3->hwc_bg_col & 0xffff]; - if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805)) { + if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805I)) { if (!s3->color_16bit) { - if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805)) { + if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805) && + (s3->card_type != S3_WINNER1000_805)) { if (!(svga->crtc[0x45] & 0x04)) { shift = 2; width = 8; @@ -2331,9 +2367,10 @@ s3_hwcursor_draw(svga_t *svga, int displine) case 16: fg = video_16to32[s3->hwc_fg_col & 0xffff]; bg = video_16to32[s3->hwc_bg_col & 0xffff]; - if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805)) { + if ((s3->chip >= S3_86C928) && (s3->chip <= S3_86C805I)) { if (!s3->color_16bit) { - if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805)) { + if ((s3->card_type != S3_MIROCRYSTAL10SD_805) && (s3->card_type != S3_MIROCRYSTAL8S_805) && + (s3->card_type != S3_WINNER1000_805)) { if (!(svga->crtc[0x45] & 0x04)) { shift = 2; width = 8; @@ -2357,7 +2394,7 @@ s3_hwcursor_draw(svga_t *svga, int displine) break; case 24: - if (s3->chip <= S3_86C805) { + if (s3->chip <= S3_86C805I) { fg = svga->pallook[svga->crtc[0xe]]; bg = svga->pallook[svga->crtc[0xf]]; } else { @@ -3131,7 +3168,7 @@ s3_out(uint16_t addr, uint8_t val, void *priv) case 0x50: s3->bpp = (svga->crtc[0x50] >> 4) & 3; - s3_log("S3 BPP=%d.\n", s3->bpp); + s3_log("S3 BPP=%d, VGA=%d, Misc1=%04x.\n", s3->bpp, svga->bpp, s3->accel.multifunc[0xe]); if (s3->bpp == 3) { if (!(s3->accel.multifunc[0xe] & 0x200)) /*On True Color mode change, reset bit 4 of Misc Index register*/ s3->accel.multifunc[0xe] &= ~0x10; @@ -3166,7 +3203,8 @@ s3_out(uint16_t addr, uint8_t val, void *priv) break; case 0x51: - if (s3->chip == S3_86C801 || s3->chip == S3_86C805) { + if ((s3->chip == S3_86C801) || (s3->chip == S3_86C805) || + (s3->chip == S3_86C805I)) { s3->bank = (s3->bank & 0x6f) | ((val & 0x4) << 2); s3->ma_ext = (s3->ma_ext & ~0x4) | ((val & 1) << 2); } else { @@ -3190,10 +3228,10 @@ s3_out(uint16_t addr, uint8_t val, void *priv) break; case 0x45: + s3_log("Write CRTC45=%02x.\n", val); if ((s3->chip == S3_VISION964) || (s3->chip == S3_VISION968)) break; svga->hwcursor.ena = val & 1; - s3_log("Write CRTC45=%02x.\n", val); break; case 0x46: case 0x47: @@ -3295,7 +3333,7 @@ s3_out(uint16_t addr, uint8_t val, void *priv) case 0x43: if (s3->chip < S3_VISION964) { - if (s3->chip <= S3_86C805) + if (s3->chip <= S3_86C805I) svga_recalctimings(svga); s3_io_remove_alt(s3); @@ -3423,8 +3461,8 @@ s3_in(uint16_t addr, void *priv) temp = att498_ramdac_in(addr, rs2, svga->ramdac, svga); break; case BT48X: - if (s3->chip == S3_86C928) - rs3 = !!(svga->crtc[0x55] & 0x28) || !!(svga->crtc[0x45] & 0x20) || !!(svga->crtc[0x55] & 0x02); /*Quite insane but Win95's S3 driver wants it set at all costs for 8bpp+ mode*/ + if (s3->card_type == S3_METHEUS_86C928) + rs3 = !!(svga->crtc[0x55] & 0x28) || !!(svga->crtc[0x45] & 0x20) || !!(svga->crtc[0x55] & 0x02); /*Quite insane but Win95's S3 driver wants it set at all costs for 8bpp+ mode in the Metheus card*/ else rs3 = !!(svga->crtc[0x55] & 0x02); @@ -3658,9 +3696,10 @@ s3_readl(uint32_t addr, void *priv) static void s3_recalctimings(svga_t *svga) { - s3_t *s3 = (s3_t *) svga->priv; - int clk_sel = (svga->miscout >> 2) & 3; + s3_t *s3 = (s3_t *) svga->priv; + int clk_sel = (svga->miscout >> 2) & 3; uint8_t mask = 0xc0; + int enhanced_8bpp_modes = 0x00; if (svga->crtc[0x33] & 0x20) { /* In this mode, the dots per clock are always 8 or 16, never 9 or 18. */ @@ -3737,12 +3776,12 @@ s3_recalctimings(svga_t *svga) break; } - if (s3->chip >= S3_TRIO32) { + if ((s3->chip >= S3_TRIO32) || (s3->chip == S3_86C805I)) { switch (svga->crtc[0x67] >> 4) { case 3: case 5: case 7: - svga->clock /= 2; + svga->clock /= 2.0; break; default: @@ -3750,7 +3789,38 @@ s3_recalctimings(svga_t *svga) } } - if (s3->chip <= S3_86C805) { + enhanced_8bpp_modes = !!((svga->crtc[0x3a] & 0x10) && !svga->lowres); + + if (s3->chip >= S3_86C928) { + if (s3->chip != S3_86C801) + mask |= 0x01; + + switch (svga->crtc[0x50] & mask) { + case 0x00: + s3->width = (svga->crtc[0x31] & 0x02) ? 2048 : 1024; + break; + case 0x01: + s3->width = 1152; + break; + case 0x40: + s3->width = 640; + break; + case 0x80: + /*For later chips, bit 2 of port 0x4ae8 means 1600x1200x4bpp if the original width is 800 (per Vision864 manual).*/ + s3->width = ((s3->chip > S3_86C805I) && (s3->accel.advfunc_cntl & 0x04) && !enhanced_8bpp_modes) ? 1600 : 800; + break; + case 0x81: + s3->width = 1600; + break; + case 0xc0: + s3->width = 1280; + break; + default: + break; + } + } + + if (s3->chip <= S3_86C805I) { s3->color_16bit = !!(svga->crtc[0x43] & 0x08); s3_log("Color 16bit=%x, bpp=%d, 256color=%x.\n", s3->color_16bit, svga->bpp, (svga->attrregs[0x10] & 0x40)); if ((svga->bpp == 24) || (svga->bpp == 8)) @@ -3764,36 +3834,6 @@ s3_recalctimings(svga_t *svga) } } - if (s3->chip >= S3_86C928) { - if (s3->chip != S3_86C801) - mask |= 0x01; - - switch (svga->crtc[0x50] & mask) { - case 0x00: - s3->width = (svga->crtc[0x31] & 0x02) ? 2048 : 1024; - if (s3->color_16bit) - s3->width = 1024; - break; - case 0x01: - s3->width = 1152; - break; - case 0x40: - s3->width = 640; - break; - case 0x80: - s3->width = ((s3->chip > S3_86C805) && (s3->accel.advfunc_cntl & 0x04)) ? 1600 : 800; - break; - case 0x81: - s3->width = 1600; - break; - case 0xc0: - s3->width = 1280; - break; - default: - break; - } - } - if (svga->crtc[0x33] & 0x20) { /* The S3 version of the Cirrus' special blanking mode, with identical behavior. */ svga->hblankstart = (((svga->crtc[0x5d] & 0x02) >> 1) << 8) + svga->crtc[1]/* + @@ -3822,11 +3862,11 @@ s3_recalctimings(svga_t *svga) } } - if ((svga->crtc[0x3a] & 0x10) && !svga->lowres) { + if (enhanced_8bpp_modes) { s3_log("BPP=%d, pitch=%d, width=%02x, double?=%x, 16bit?=%d, highres?=%d, " - "attr=%02x, hdisp=%d, dotsperclock=%x, clksel=%x, clockmultiplier=%d, multiplexingrate=%d.\n", svga->bpp, s3->width, svga->crtc[0x50], + "attr=%02x, hdisp=%d, dotsperclock=%x, clksel=%x, clockmultiplier=%d, multiplexingrate=%d, xadd=%d, overscanx=%d.\n", svga->bpp, s3->width, svga->crtc[0x50], svga->crtc[0x31] & 0x02, s3->color_16bit, s3->accel.advfunc_cntl & 0x04, - svga->attrregs[0x10] & 0x40, svga->hdisp, svga->dots_per_clock, clk_sel, svga->clock_multiplier, svga->multiplexing_rate); + svga->attrregs[0x10] & 0x40, svga->hdisp, svga->dots_per_clock, clk_sel, svga->clock_multiplier, svga->multiplexing_rate, svga->x_add, svga->monitor->mon_overscan_x); switch (svga->bpp) { case 8: svga->render = svga_render_8bpp_highres; @@ -3839,8 +3879,10 @@ s3_recalctimings(svga_t *svga) if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ if ((svga->clock_multiplier == 1) || (s3->width >= 1024)) { if (svga->multiplexing_rate == 2) { - svga->hdisp <<= 2; - svga->dots_per_clock <<= 2; + if (svga->clock_multiplier == 1) { + svga->hdisp <<= 2; + svga->dots_per_clock <<= 2; + } } else { if (!svga->clock_multiplier) { svga->hdisp <<= 1; @@ -3875,70 +3917,61 @@ s3_recalctimings(svga_t *svga) break; } break; + case S3_86C801: + case S3_86C805: + case S3_86C805I: case S3_86C928PCI: if (!svga->chain4) svga->chain4 |= 0x08; break; case S3_VISION964: - switch (s3->card_type) { - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - default: - break; + switch (s3->ramdac_type) { + case BT48X: /*BT485 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + } + break; + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + break; + default: + break; + } + break; + case S3_VISION868: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + if (s3->width >= 1024) + svga->clock /= 2.0; } break; - default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_ELSAWIN2KPROX: - s3_log("S3 width 8bpp=%d, hdisp=%d.\n", s3->width, svga->hdisp); - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; - + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + s3_log("TVP3026 968 8bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -3958,45 +3991,35 @@ s3_recalctimings(svga_t *svga) break; case S3_86C801: - switch (s3->card_type) { - case S3_PHOENIX_86C801: + case S3_86C805: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - + case ATT49X: /*AT&T 490/1/2 RAMDAC*/ + if (svga->dots_per_clock != 16) { + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } else { + svga->clock *= 2.0; + svga->dots_per_clock >>= 2; + } + break; default: break; } break; - case S3_86C805: - switch (s3->card_type) { - case S3_MIROCRYSTAL8S_805: - case S3_MIROCRYSTAL10SD_805: - case S3_WINNER1000_805: - case S3_PHOENIX_86C805: - case S3_86C805_ONBOARD: + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - - case S3_SPEA_MIRAGE_86C805: - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - switch (s3->width) { - case 800: - case 1024: - if (svga->hdisp == 400) { - /*SPEA specific drivers + its VBE RAM BIOS...*/ - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock /= 2.0; - } - break; - default: - break; - } - break; - default: break; } @@ -4085,93 +4108,62 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; case S3_VISION964: - switch (s3->card_type) { - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case BT48X: /*BT485 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); } break; - + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + break; default: break; } break; case S3_VISION868: - switch (s3->card_type) { - case S3_PHOENIX_VISION868: - case S3_NUMBER9_9FX_531: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + svga->clock /= 2.0; + } + break; + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; svga->clock /= 2.0; break; - default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - /* TODO: Is this still needed? */ - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - - case S3_ELSAWIN2KPROX: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + s3_log("TVP3026 968 15bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -4197,43 +4189,35 @@ s3_recalctimings(svga_t *svga) break; case S3_86C801: - switch (s3->card_type) { - case S3_PHOENIX_86C801: + case S3_86C805: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - + case ATT49X: /*AT&T 490/1/2 RAMDAC*/ + if (svga->dots_per_clock != 16) { + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } else { + svga->clock *= 2.0; + svga->dots_per_clock >>= 2; + } + break; default: break; } break; - case S3_86C805: - switch (s3->card_type) { - case S3_MIROCRYSTAL8S_805: - case S3_MIROCRYSTAL10SD_805: - case S3_WINNER1000_805: - case S3_PHOENIX_86C805: - case S3_86C805_ONBOARD: + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; break; - - case S3_SPEA_MIRAGE_86C805: - svga->hdisp >>= 1; - switch (s3->width) { - case 800: - case 1024: - if (svga->hdisp == 400) { - /*SPEA specific drivers + its VBE RAM BIOS...*/ - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - break; - default: - break; - } - break; - default: break; } @@ -4322,92 +4306,62 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; case S3_VISION868: - switch (s3->card_type) { - case S3_PHOENIX_VISION868: - case S3_NUMBER9_9FX_531: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + svga->clock /= 2.0; + } + break; + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; - default: break; } break; case S3_VISION964: - switch (s3->card_type) { - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case BT48X: /*BT485 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); } break; - + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + break; default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - /* TODO: Is this still needed? */ - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - - case S3_ELSAWIN2KPROX: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + s3_log("TVP3026 968 16bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -4440,26 +4394,15 @@ s3_recalctimings(svga_t *svga) } break; case S3_86C801: - switch (s3->card_type) { - case S3_PHOENIX_86C801: - case S3_SPEA_MIRAGE_86C801: - svga->hdisp = (svga->hdisp << 1) / 3; - svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - break; - default: - break; - } - break; case S3_86C805: - switch (s3->card_type) { - case S3_MIROCRYSTAL8S_805: - case S3_MIROCRYSTAL10SD_805: - case S3_WINNER1000_805: - case S3_PHOENIX_86C805: - case S3_SPEA_MIRAGE_86C805: - case S3_86C805_ONBOARD: + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: svga->hdisp = (svga->hdisp << 1) / 3; svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; + svga->clock = (svga->clock * 4.0) / 3.0; break; default: break; @@ -4470,21 +4413,24 @@ s3_recalctimings(svga_t *svga) svga->chain4 |= 0x08; break; case S3_86C928PCI: /*Technically the 928 cards don't support 24bpp.*/ - switch (s3->card_type) { - case S3_ELSAWIN1KPCI_86C928: - if (svga->dots_per_clock == 16) { - svga->dots_per_clock >>= 1; + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case SC1502X: /*SC15025 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + if (svga->dots_per_clock == 16) { + svga->dots_per_clock >>= 1; + svga->hdisp = (svga->hdisp << 1) / 3; + svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; + svga->clock = (svga->clock * 4.0) / 3.0; + if (svga->hdisp == 640) + s3->width = 640; + } + } else if (svga->getclock == av9194_getclock) { /*AV9194 clock chip*/ svga->hdisp = (svga->hdisp << 1) / 3; svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - svga->clock /= (2.0 / 3.0); - if (svga->hdisp == 640) - s3->width = 640; } break; - case S3_SPEA_MERCURY_LITE_PCI: - svga->hdisp = (svga->hdisp << 1) / 3; - svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - break; default: break; } @@ -4492,14 +4438,23 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp = (svga->hdisp << 1) / 3; svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; - svga->clock /= (2.0 / 3.0); + svga->clock = (svga->clock * 4.0) / 3.0; break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - svga->hdisp = (svga->hdisp / 3) << 2; - svga->dots_per_clock = (svga->hdisp / 3) << 2; + switch (s3->ramdac_type) { + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + svga->hdisp = (svga->hdisp << 1) / 3; + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock = (svga->clock * 4.0) / 3.0; + } + svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; + + s3_log("TVP3026 968 24bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (svga->hdisp == 832) + svga->hdisp -= 32; break; default: break; @@ -4519,6 +4474,25 @@ s3_recalctimings(svga_t *svga) case 32: svga->render = svga_render_32bpp_highres; switch (s3->chip) { + case S3_86C805I: + if (!svga->chain4) + svga->chain4 |= 0x08; + switch (s3->ramdac_type) { + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ + svga->hdisp >>= 2; + svga->dots_per_clock >>= 2; + if (s3->width == 800) { + if ((svga->crtc[0x67] >> 4) == 7) { + svga->clock *= 2.0; + s3_log("800x600: MEMLatch=%08x, htotal=%x.\n", svga->memaddr_latch, svga->htotal); + } + } + break; + default: + break; + } + break; + case S3_86C928: if (!svga->chain4) svga->chain4 |= 0x08; @@ -4576,103 +4550,54 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp >>= 2; svga->dots_per_clock >>= 2; + svga->clock /= 2.0; break; case S3_VISION868: - switch (s3->card_type) { - case S3_PHOENIX_VISION868: - case S3_NUMBER9_9FX_531: + switch (s3->ramdac_type) { + case ATT498: /*AT&T 498 RAMDAC*/ + if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } + break; + case S3_SDAC: /*S3 SDAC/GENDAC RAMDAC with its clock chip*/ svga->hdisp >>= 1; svga->dots_per_clock >>= 1; - svga->clock /= 2.0; break; default: break; } break; case S3_VISION964: - switch (s3->card_type) { - case S3_MIROCRYSTAL20SV_964: - switch (s3->width) { - case 800: - case 1024: - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - svga->clock /= 2.0; - break; - default: - break; - } - break; - case S3_ELSAWIN2KPROX_964: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; - } + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); break; default: break; } break; case S3_VISION968: - switch (s3->card_type) { - case S3_MIROVIDEO40SV_ERGO_968: - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - case S3_DIAMOND_STEALTH64_968: - case S3_NUMBER9_9FX_771: - case S3_PHOENIX_VISION968: - case S3_SPEA_MERCURY_P64V: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - svga->clock *= 2.0; - /* TODO: Is this still needed? */ - if (svga->hdisp == 832) - svga->hdisp -= 32; - break; - - case S3_ELSAWIN2KPROX: - switch (s3->width) { - case 1280: - case 1600: - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - break; - case 2048: - if (!svga->interlace) { - if (svga->dispend >= 1024) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } else { - if (svga->dispend >= 512) { - svga->hdisp <<= 1; - svga->dots_per_clock <<= 1; - } - } - break; - default: - break; + switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp *= (svga->clock_multiplier + 1); + svga->dots_per_clock *= (svga->clock_multiplier + 1); + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; } break; + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ + s3_log("TVP3026 968 32bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); + if (clk_sel == 2) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; + } + if (svga->hdisp == 832) + svga->hdisp -= 32; + break; default: break; } @@ -4703,10 +4628,13 @@ s3_recalctimings(svga_t *svga) svga->write_bank = 0; svga->read_bank = 0; } + /*In non-enhanced/IBM VGA modes, reset the misc index registers.*/ + s3->accel.multifunc[0xd] = 0xd000; + s3->accel.multifunc[0xe] = 0xe000; } } - if ((((s3->card_type == S3_ELSAWIN1K_86C928) || (s3->card_type == S3_ELSAWIN1KPCI_86C928)) && (svga->bpp == 32)) || + if ((s3->elsa_eeprom && (svga->bpp == 32)) || (s3->chip == S3_TRIO32) || (s3->chip == S3_TRIO64) || (s3->chip == S3_VISION864) || (s3->chip == S3_VISION868) || (s3->chip == S3_VISION968)) svga->hoverride = 1; else @@ -4976,7 +4904,7 @@ s3_updatemapping(s3_t *s3) if (s3->chip >= S3_86C928) { s3->linear_base = (svga->crtc[0x5a] << 16) | (svga->crtc[0x59] << 24); - if (s3->chip <= S3_86C805) { + if (s3->chip <= S3_86C805I) { if (s3->vlb) s3->linear_base &= 0x03ffffff; else if (!s3->pci) @@ -5036,8 +4964,8 @@ s3_updatemapping(s3_t *s3) } svga->fb_only = 1; } else { - svga->fb_only = 0; mem_mapping_disable(&s3->linear_mapping); + svga->fb_only = 0; } /* Memory mapped I/O. */ @@ -5122,11 +5050,10 @@ s3_accel_out(uint16_t port, uint8_t val, void *priv) case 0x4948: case 0x4ae8: s3->accel.advfunc_cntl = val; - if ((s3->chip > S3_86C805) && ((svga->crtc[0x50] & 0xc1) == 0x80)) { - s3->width = (val & 4) ? 1600 : 800; + if ((s3->chip > S3_86C805I) && ((svga->crtc[0x50] & 0xc1) == 0x80)) { svga->fullchange = svga->monitor->mon_changeframecount; svga_recalctimings(svga); - } else if (s3->chip <= S3_86C805) { + } else if (s3->chip <= S3_86C805I) { svga->fullchange = svga->monitor->mon_changeframecount; svga_recalctimings(svga); } @@ -6256,7 +6183,7 @@ s3_accel_in_w(uint16_t port, void *priv) s3->accel_start(8, 1, temp | (temp << 16), 0, s3); } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) temp = (temp >> 8) | (temp << 8); @@ -6266,7 +6193,7 @@ s3_accel_in_w(uint16_t port, void *priv) s3->accel_start(1, 1, 0xffffffff, temp | (temp << 16), s3); } } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cur_x & 0x400) temp = (temp >> 8) | (temp << 8); @@ -6443,6 +6370,7 @@ s3_accel_write_w(uint32_t addr, uint16_t val, void *priv) s3_accel_write_fifo(s3, addr, val); break; default: + s3_log("FIFOWORD Write=%04x, val=%04x.\n", addr & (addr_mask - 1), val); s3_queue(s3, addr & addr_mask, val, FIFO_WRITE_WORD); break; } @@ -6607,6 +6535,7 @@ s3_accel_write_l(uint32_t addr, uint32_t val, void *priv) break; default: + s3_log("FIFOLONG Write=%04x, val=%08x.\n", addr & (addr_mask - 3), val); s3_queue(s3, addr & addr_mask, val, FIFO_WRITE_DWORD); break; } @@ -6962,7 +6891,7 @@ polygon_setup(s3_t *s3) } #define READ(addr, dat) \ - if (((s3->bpp == 0) && !s3->color_16bit) || (s3->bpp == 2)) \ + if (((s3->bpp == 0) && !s3->color_16bit)) \ dat = svga->vram[dword_remap(svga, addr) & s3->vram_mask]; \ else if ((s3->bpp == 1) || s3->color_16bit) \ dat = vram_w[dword_remap_w(svga, addr) & (s3->vram_mask >> 1)]; \ @@ -7807,12 +7736,10 @@ polygon_setup(s3_t *s3) { \ old_dest_dat = dest_dat; \ ROPMIX_READ(dest_dat, pat_dat, src_dat); \ - out = (out & s3->accel.wrt_mask) | (old_dest_dat & ~s3->accel.wrt_mask); \ - out &= 0xFFFFFF; \ } #define WRITE(addr, dat) \ - if (((s3->bpp == 0) && !s3->color_16bit) || (s3->bpp == 2)) { \ + if (((s3->bpp == 0) && !s3->color_16bit)) { \ svga->vram[dword_remap(svga, addr) & s3->vram_mask] = dat; \ svga->changedvram[(dword_remap(svga, addr) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; \ } else if ((s3->bpp == 1) || s3->color_16bit) { \ @@ -8041,7 +7968,7 @@ s3_visionx68_video_engine_op(uint32_t cpu_dat, s3_t *s3) s3->videoengine.busy = 1; if (host) { - if (idf == 0 && odf == 0) { + if ((idf == 0) && (odf == 0)) { if (s3->bpp == 0) count = 4; else if (s3->bpp == 1) @@ -8093,6 +8020,7 @@ s3_visionx68_video_engine_op(uint32_t cpu_dat, s3_t *s3) s3->videoengine.dx = 0.0; } + s3_log("VideoEngine count=%d.\n", count); while (count) { if (host) { /*Source data is CPU*/ src = cpu_dat; @@ -8235,6 +8163,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi int clip_r = s3->accel.multifunc[4] & 0xfff; int vram_mask = (s3->accel.multifunc[0xa] & 0xc0) == 0xc0; uint32_t mix_mask = 0; + uint8_t *vram_b = svga->vram; uint16_t *vram_w = (uint16_t *) svga->vram; uint32_t *vram_l = (uint32_t *) svga->vram; uint32_t compare = s3->accel.color_cmp; @@ -8279,21 +8208,23 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (!cpu_input) s3->accel.dat_count = 0; - if (cpu_input && (((s3->accel.multifunc[0xa] & 0xc0) != 0x80) || (!(s3->accel.cmd & 0x02)))) { - if ((s3->bpp == 3) && (count == 2)) { - if (s3->accel.dat_count) { - cpu_dat = ((cpu_dat & 0xffff) << 16) | s3->accel.dat_buf; - count = 4; - s3->accel.dat_count = 0; - } else { - s3->accel.dat_buf = cpu_dat & 0xffff; - s3->accel.dat_count = 1; + if (cpu_input) { + if (((s3->accel.multifunc[0xa] & 0xc0) != 0x80) || (!(s3->accel.cmd & 0x02))) { + if ((s3->bpp == 3) && (count == 2)) { + if (s3->accel.dat_count) { + cpu_dat = ((cpu_dat & 0xffff) << 16) | s3->accel.dat_buf; + count = 4; + s3->accel.dat_count = 0; + } else { + s3->accel.dat_buf = cpu_dat & 0xffff; + s3->accel.dat_count = 1; + } } + if ((s3->bpp == 1) || s3->color_16bit) + count >>= 1; + else if (s3->bpp == 3) + count >>= 2; } - if ((s3->bpp == 1) || s3->color_16bit) - count >>= 1; - else if (s3->bpp == 3) - count >>= 2; } if ((s3->bpp == 0) && !s3->color_16bit) @@ -8327,7 +8258,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi /*Bit 4 of the Command register is the draw yes bit, which enables writing to memory/reading from memory when enabled. When this bit is disabled, no writing to memory/reading from memory is allowed. (This bit is almost meaningless on the NOP command)*/ - s3_log("CMD=%d, full=%04x, s3bpp=%x, clr=%d, clb=%d, sourcedisplay=%02x, mmio=%02x, srcbase=%08x, dstbase=%08x, cpu=%04x, mix=%04x, count=%d, rd_mask=%04x, wrt_mask=%04x, width=%d, s=%d,%d, c=%d,%d, d=%d,%d, 16bitcolor=%x, frgdcolor=%04x, bkgdcolor=%04x, frgdsel=%d, bkgdsel=%d, frgdmix=%02x, curx=%d, cury=%d, cll=%d, b2e8pix=%x.\n", cmd, s3->accel.cmd, s3->bpp, clip_r, clip_b, s3->accel.multifunc[0x0a] & 0xc4, svga->crtc[0x53] & 0x18, srcbase, dstbase, cpu_dat & 0xffff, mix_dat & 0xffff, count, rd_mask, wrt_mask, s3->width, s3->accel.sx, s3->accel.sy, s3->accel.cx, s3->accel.cy, s3->accel.dx, s3->accel.dy, s3->color_16bit, frgd_color, bkgd_color, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.cur_x, s3->accel.cur_y, clip_l, s3->accel.b2e8_pix); + s3_log("CMD=%d, full=%04x, cnt=%d, s3bpp=%x, clr=%d, clb=%d, sourcedisplay=%02x, mmio=%02x, srcbase=%08x, dstbase=%08x, cpu=%08x, mix=%08x, count=%d, rd_mask=%08x, wrt_mask=%08x, width=%d, s=%d,%d, c=%d,%d, d=%d,%d, 16bitcolor=%x, frgdcolor=%08x, bkgdcolor=%08x, frgdsel=%d, bkgdsel=%d, frgdmix=%02x, curx=%d, cury=%d, cll=%d, b2e8pix=%x.\n", cmd, s3->accel.cmd, count, s3->bpp, clip_r, clip_b, s3->accel.multifunc[0x0a] & 0xc4, svga->crtc[0x53] & 0x18, srcbase, dstbase, cpu_dat & 0xffffffff, mix_dat & 0xffffffff, count, rd_mask, wrt_mask, s3->width, s3->accel.sx, s3->accel.sy, s3->accel.cx, s3->accel.cy, s3->accel.destx_distp, s3->accel.desty_axstp, s3->color_16bit, frgd_color, bkgd_color, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.cur_x, s3->accel.cur_y, clip_l, s3->accel.b2e8_pix); switch (cmd) { case 0: /*NOP (Short Stroke Vectors)*/ @@ -8444,6 +8375,11 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.cx *= 3; + s3->accel.cy *= 3; + } + s3->accel.sy = s3->accel.maj_axis_pcnt; if ((s3->bpp == 0) && s3->color_16bit) { s3->accel.rd_mask_16bit_check = ((rd_mask & 0xff00) != 0xff00) && rd_mask; @@ -8468,7 +8404,120 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi } if (s3->accel.cmd & 0x08) { /*Radial*/ - if ((s3->bpp == 0) && s3->color_16bit) { + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if ((rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) + rd_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.cx & 0xfff) >= (clip_l * 3) && (s3->accel.cx & 0xfff) <= (clip_r * 3) && (s3->accel.cy & 0xfff) >= (clip_t * 3) && (s3->accel.cy & 0xfff) <= (clip_b * 3)) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = 0; + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask]) & 0xffffff; + + old_dest_dat = dest_dat; + MIX + + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 1 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 2 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[(((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + + mix_dat <<= 1; + mix_dat |= 1; + cpu_dat >>= 16; + + if (!s3->accel.sy) { + if (s3->accel.rd_mask_16bit_check) { + if (s3->accel.minus) + s3->accel.color_16bit_check = 0; + else + s3->accel.color_16bit_check = 1; + } + break; + } + + switch (s3->accel.cmd & 0xe0) { + case 0x00: + s3->accel.cx += 3; + break; + case 0x20: + s3->accel.cx += 3; + s3->accel.cy -= 3; + break; + case 0x40: + s3->accel.cy -= 3; + break; + case 0x60: + s3->accel.cx -= 3; + s3->accel.cy -= 3; + break; + case 0x80: + s3->accel.cx -= 3; + break; + case 0xa0: + s3->accel.cx -= 3; + s3->accel.cy += 3; + break; + case 0xc0: + s3->accel.cy += 3; + break; + case 0xe0: + s3->accel.cx += 3; + s3->accel.cy += 3; + break; + + default: + break; + } + s3->accel.sy--; + s3->accel.cx &= 0xfff; + s3->accel.cy &= 0xfff; + } + s3->accel.cur_x = (s3->accel.cx / 3) & 0xfff; + s3->accel.cur_y = (s3->accel.cy / 3) & 0xfff; + break; + } + + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -8589,7 +8638,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (s3->accel.b2e8_pix && s3_cpu_src(s3) && (count == 16)) { /*Pattern on pixtrans (911/924)*/ count = s3->accel.maj_axis_pcnt + 1; s3->accel.temp_cnt = 16; - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -8605,7 +8654,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi break; } } else { - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit || (svga->bpp == 24))) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -8625,6 +8674,132 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (!s3->accel.b2e8_pix) s3_log("CMDFULL=%04x, FRGDMIX=%x, FRGDCOLR=%04x, RDMASK=%04x, MINUS=%d, WRTMASK=%04X, MIX=%04x, CX=%d, CY=%d, SX=%d, SY=%d, PIXCNTL=%02x, 16BITCOLOR=%x, RDCHECK=%x, CLIPL=%d, CLIPR=%d, CLIPT=%d, CLIPB=%d.\n", s3->accel.cmd, frgd_mix, s3->accel.frgd_color, rd_mask, s3->accel.minus, wrt_mask, mix_dat & 0xffff, s3->accel.cx, s3->accel.cy, s3->accel.sx, s3->accel.sy, s3->accel.multifunc[0x0a] & 0xc4, s3->accel.color_16bit_check, s3->accel.rd_mask_16bit_check, clip_l, clip_r, clip_t, clip_b); + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if ((rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) + rd_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { + mix_dat >>= 16; + s3->accel.temp_cnt = 16; + } + + if (s3->accel.minus) + s3_log("Total pixel cx=%d, cy=%d.\n", s3->accel.cx - s3->accel.minus, s3->accel.cy); + + if ((s3->accel.cx & 0xfff) >= (clip_l * 3) && (s3->accel.cx & 0xfff) <= (clip_r * 3) && (s3->accel.cy & 0xfff) >= (clip_t * 3) && (s3->accel.cy & 0xfff) <= (clip_b * 3)) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = 0; + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask]) & 0xffffff; + + old_dest_dat = dest_dat; + MIX + + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 1 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[((s3->accel.cy * s3->width) + s3->accel.cx + 2 - (s3->accel.minus * 3)) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[(((s3->accel.cy * s3->width) + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + + if (s3->accel.b2e8_pix && s3_cpu_src(s3)) { + if (s3->accel.temp_cnt > 0) { + s3->accel.temp_cnt--; + mix_dat <<= 1; + mix_dat |= 1; + } + } else { + mix_dat <<= 1; + mix_dat |= 1; + } + + cpu_dat >>= 16; + + if (!s3->accel.sy) { + if (s3->accel.rd_mask_16bit_check) { + if (s3->accel.minus) + s3->accel.color_16bit_check = 0; + else + s3->accel.color_16bit_check = 1; + } + break; + } + + if (s3->accel.cmd & 0x40) { + if (s3->accel.cmd & 0x80) + s3->accel.cy += 3; + else + s3->accel.cy -= 3; + + if (s3->accel.err_term >= s3->accel.maj_axis_pcnt) { + s3->accel.err_term += s3->accel.destx_distp; + if (s3->accel.cmd & 0x20) + s3->accel.cx += 3; + else + s3->accel.cx -= 3; + } else + s3->accel.err_term += s3->accel.desty_axstp; + } else { + if (s3->accel.cmd & 0x20) + s3->accel.cx += 3; + else + s3->accel.cx -= 3; + + if (s3->accel.err_term >= s3->accel.maj_axis_pcnt) { + s3->accel.err_term += s3->accel.destx_distp; + if (s3->accel.cmd & 0x80) + s3->accel.cy += 3; + else + s3->accel.cy -= 3; + } else + s3->accel.err_term += s3->accel.desty_axstp; + } + + s3->accel.sy--; + s3->accel.cx &= 0xfff; + s3->accel.cy &= 0xfff; + } + s3->accel.cur_x = (s3->accel.cx / 3) & 0xfff; + s3->accel.cur_y = (s3->accel.cy / 3) & 0xfff; + break; + } while (count-- && (s3->accel.sy >= 0)) { if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { mix_dat >>= 16; @@ -8754,11 +8929,20 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.cx *= 3; + s3->accel.cy *= 3; + } else if ((s3->bpp == 0) && (svga->bpp == 24)) + s3_log("24bpp 80x rectfill: BKGDCOLOR=%04x, FRGDCOLOR=%04x.\n", bkgd_color, frgd_color); + s3->accel.dest = dstbase + s3->accel.cy * s3->width; if ((s3->bpp == 0) && s3->color_16bit) { + if (!rd_mask && (clip_r == 0x7ff)) + rd_mask = 0xff; + s3->accel.rd_mask_16bit_check = ((rd_mask & 0xff00) != 0xff00) && rd_mask; - s3_log("CMD2: RDMASK16CHECK=%d, rdmask=%04x.\n", s3->accel.rd_mask_16bit_check, rd_mask); + s3_log("CMD2: %04X: RDMASK16CHECK=%d, rdmask=%04x, clip_r=%04x.\n", s3->accel.cmd, s3->accel.rd_mask_16bit_check, rd_mask, clip_r); if (s3->accel.rd_mask_16bit_check) { if (s3->accel.cmd == 0x41b3) { if (frgd_mix == 0) { @@ -8822,19 +9006,21 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (s3->accel.b2e8_pix && s3_cpu_src(s3) && (count == 16)) { /*Pattern on pixtrans (911/924)*/ count = s3->accel.maj_axis_pcnt + 1; s3->accel.temp_cnt = 16; - if (s3->accel.rd_mask_16bit_check) { - if (s3->accel.minus) { - wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); - frgd_color = (s3->accel.frgd_color_actual[1] << 8); - bkgd_color = (s3->accel.bkgd_color_actual[1] << 8); - } else { - wrt_mask = s3->accel.wrt_mask_actual[0]; - frgd_color = s3->accel.frgd_color_actual[0]; - bkgd_color = s3->accel.bkgd_color_actual[0]; - } - rd_mask &= 0x00ff; - } else if (!s3->accel.rd_mask_16bit_check && (s3->accel.cur_x & 0x400)) - break; + if ((s3->bpp == 0) && s3->color_16bit) { + if (s3->accel.rd_mask_16bit_check) { + if (s3->accel.minus) { + wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); + frgd_color = (s3->accel.frgd_color_actual[1] << 8); + bkgd_color = (s3->accel.bkgd_color_actual[1] << 8); + } else { + wrt_mask = s3->accel.wrt_mask_actual[0]; + frgd_color = s3->accel.frgd_color_actual[0]; + bkgd_color = s3->accel.bkgd_color_actual[0]; + } + rd_mask &= 0x00ff; + } else if (!s3->accel.rd_mask_16bit_check && (s3->accel.cur_x & 0x400)) + break; + } } else { if ((s3->bpp == 0) && s3->color_16bit) { if (s3->accel.cmd == 0x41b3) { @@ -8884,7 +9070,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3_log("FIXME: S3 911/924 15/16bpp documentation needed.\n"); } else { if (!cpu_input && (s3->accel.cur_x & 0x400)) { - s3_log("No Input.\n"); + s3_log("No Input on %04x.\n", s3->accel.cmd); break; } else if (cpu_input && (s3->accel.cmd == 0x53b3) && (s3->accel.cur_x & 0x400)) break; @@ -8896,6 +9082,123 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3_log("CMDFULL=%04x, FRGDSEL=%x, BKGDSEL=%x, FRGDMIX=%02x, BKGDMIX=%02x, MASKCHECK=%x, RDMASK=%04x, MINUS=%d, WRTMASK=%04X, MIX=%04x, CX=%d, CY=%d, DX=%d, DY=%d, SX=%d, SY=%d, PIXCNTL=%02x, 16BITCOLOR=%x, RDCHECK=%x, CLIPL=%d, CLIPR=%d, OVERFLOW=%d, pitch=%d.\n", s3->accel.cmd, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.bkgd_mix & 0x0f, s3->accel.rd_mask_16bit_check, rd_mask, s3->accel.minus, wrt_mask, mix_dat & 0xffff, s3->accel.cx, s3->accel.cy, s3->accel.dx, s3->accel.dy, s3->accel.sx, s3->accel.sy, s3->accel.multifunc[0x0a] & 0xc4, s3->accel.color_16bit_check, s3->accel.rd_mask_16bit_check, clip_l, clip_r, (s3->accel.destx_overflow & 0xc00) == 0xc00, s3->width); + if ((s3->bpp == 2) || (svga->bpp == 24)) { + int multiplier = 1; + if (s3->bpp == 2) { + multiplier = 3; + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if ((rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) + rd_mask = 0xffffffff; + } + + while (count-- && (s3->accel.sy >= 0)) { + if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { + mix_dat >>= 16; + s3->accel.temp_cnt = 16; + } + + if ((((s3->accel.cx >= (clip_l * multiplier)) && (s3->accel.cx <= (clip_r * multiplier)) && (s3->accel.cy >= (clip_t * multiplier)) && (s3->accel.cy <= (clip_b * multiplier))) && !(s3->accel.multifunc[0xe] & 0x20)) || + (((s3->accel.cx < (clip_l * multiplier)) && (s3->accel.cx > (clip_r * multiplier)) && (s3->accel.cy < (clip_t * multiplier)) && (s3->accel.cy > (clip_b * multiplier))) && (s3->accel.multifunc[0xe] & 0x20)) ) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = 0; + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + if (s3->bpp == 2) + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.dest + s3->accel.cx, dest_dat); + } + + old_dest_dat = dest_dat; + MIX + + if (s3->accel.cmd & 0x10) { + if (s3->bpp == 2) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.cx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.cx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.cx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.cx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } else { + WRITE(s3->accel.dest + s3->accel.cx, dest_dat); + } + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) + s3->accel.cx += multiplier; + else + s3->accel.cx -= multiplier; + + s3->accel.cx &= 0xfff; + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.cx *= multiplier; + + if (s3->accel.cmd & 0x80) + s3->accel.cy += multiplier; + else + s3->accel.cy -= multiplier; + + s3->accel.cy &= 0xfff; + s3->accel.dest = dstbase + s3->accel.cy * s3->width; + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.cur_x = s3->accel.cx / multiplier; + s3->accel.cur_y = s3->accel.cy / multiplier; + return; + } + } + } + break; + } + while (count-- && (s3->accel.sy >= 0)) { if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { mix_dat >>= 16; @@ -9151,7 +9454,6 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi case 6: /*BitBlt*/ if (!cpu_input) { /*!cpu_input is trigger to start operation*/ s3->accel.minus = 0; - s3->accel.minus_src_24bpp = 0; s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; s3->accel.sy = s3->accel.multifunc[0] & 0xfff; @@ -9161,6 +9463,18 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.dx *= 3; + s3->accel.dy *= 3; + s3->accel.cx *= 3; + s3->accel.cy *= 3; + s3->accel.blit_24bpp = 0; + } else if ((s3->bpp == 0) && (svga->bpp == 24)) { + s3_log("BitBLT bpp%d: 24bpp params=%04x, dwidth=%d, dheight=%d, swidth=%d, sheight=%d, lwidth=%d, lheight=%d, srcbase=%08x, dstbase=%08x, blit24 times=%d, moddx=%d, modcx=%d.\n", s3->bpp, s3->accel.cmd, s3->accel.dx / 3, s3->accel.dy, s3->accel.cx / 3, s3->accel.cy, s3->accel.sx / 3, s3->accel.sy, srcbase, dstbase, s3->accel.blit_24bpp, s3->accel.dx % 3, s3->accel.cx % 3); + s3->accel.blit_24bpp = (s3->accel.blit_24bpp + 1) & 3; + } else + s3->accel.blit_24bpp = 0; + if ((s3->bpp == 0) && s3->color_16bit) { s3->accel.rd_mask_16bit_check = ((rd_mask & 0xff00) != 0xff00) && rd_mask; s3_log("CMD6: RDMASK16CHECK=%d.\n", s3->accel.rd_mask_16bit_check); @@ -9193,7 +9507,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if ((s3->accel.cmd & 0x100) && !cpu_input) return; /*Wait for data from CPU*/ - if ((s3->bpp == 0) && s3->color_16bit) { + if ((s3->bpp == 0) && (s3->color_16bit)) { if (s3->accel.rd_mask_16bit_check) { if (s3->accel.minus) { wrt_mask = (s3->accel.wrt_mask_actual[1] << 8); @@ -9211,6 +9525,203 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3_log("CMDFULL=%04x, FRGDSEL=%x, BKGDSEL=%x, FRGDMIX=%02x, BKGDMIX=%02x, MASKCHECK=%x, RDMASK=%04x, MINUS=%d, WRTMASK=%04X, MIX=%04x, CX=%d, CY=%d, DX=%d, DY=%d, SX=%d, SY=%d, PIXCNTL=%02x, 16BITCOLOR=%x, RDCHECK=%x, CLIPL=%d, CLIPR=%d, OVERFLOW=%d, pitch=%d.\n", s3->accel.cmd, frgd_mix, bkgd_mix, s3->accel.frgd_mix & 0x0f, s3->accel.bkgd_mix & 0x0f, s3->accel.rd_mask_16bit_check, rd_mask, s3->accel.minus, wrt_mask, mix_dat & 0xffff, s3->accel.cx, s3->accel.cy, s3->accel.dx, s3->accel.dy, s3->accel.sx, s3->accel.sy, s3->accel.multifunc[0x0a] & 0xc4, s3->accel.color_16bit_check, s3->accel.rd_mask_16bit_check, clip_l, clip_r, (s3->accel.destx_overflow & 0xc00) == 0xc00, s3->width); + if ((s3->bpp == 2) || (svga->bpp == 24)) { + int multiplier = 1; + if (s3->bpp == 2) { + multiplier = 3; + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if (rd_mask == 0x0000ffff) + rd_mask = 0xffffffff; + } + + if (!cpu_input && (frgd_mix == 3) && !vram_mask && !(s3->accel.multifunc[0xe] & 0x100) && ((s3->accel.cmd & 0xa0) == 0xa0) && ((s3->accel.frgd_mix & 0xf) == 7) && ((s3->accel.bkgd_mix & 0xf) == 7)) { + s3_log("Special BitBLT24, wrtmask=%04x.\n", wrt_mask); + while (1) { + if ((s3->accel.dx >= (clip_l * multiplier)) && (s3->accel.dx <= (clip_r * multiplier)) && (s3->accel.dy >= (clip_t * multiplier)) && (s3->accel.dy <= (clip_b * multiplier))) { + if (s3->bpp == 2) { + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + } else { + READ(s3->accel.src + s3->accel.cx, src_dat); + READ(s3->accel.dest + s3->accel.dx, dest_dat); + } + dest_dat = (src_dat & wrt_mask) | (dest_dat & ~wrt_mask); + + if (s3->accel.cmd & 0x10) { + s3_log("CMD6 special bitblt24 bpp%d: dest=%02x, src=%06x, dx=%d, dy=%d, cx=%d, cy=%d, sx=%d, sy=%d.\n", s3->bpp, dest_dat, src_dat, s3->accel.dx, s3->accel.dy, s3->accel.cx, s3->accel.cy, s3->accel.sx, s3->accel.sy); + if (s3->bpp == 2) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } else { + WRITE(s3->accel.dest + s3->accel.dx, dest_dat); + } + } + } + + s3->accel.cx += multiplier; + s3->accel.dx += multiplier; + s3->accel.sx--; + + s3->accel.dx &= 0xfff; + + if (s3->accel.sx < 0) { + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + + s3->accel.cx *= multiplier; + s3->accel.dx *= multiplier; + + s3->accel.cy += multiplier; + s3->accel.dy += multiplier; + + s3->accel.src = srcbase + (s3->accel.cy * s3->width); + s3->accel.dest = dstbase + (s3->accel.dy * s3->width); + + s3->accel.sy--; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / multiplier; + s3->accel.desty_axstp = s3->accel.dy / multiplier; + return; + } + } + } + } else { + s3_log("Normal24 blit, srcbase=%08x, dstbase=%08x, full=%04x, wrt_mask=%08x, extmultifunc0e=%03x, frgdmixval=%02x.\n", srcbase, dstbase, s3->accel.cmd, wrt_mask, s3->accel.multifunc[0x0e] & 0x180, s3->accel.frgd_mix); + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.dx >= (clip_l * multiplier)) && (s3->accel.dx <= (clip_r * multiplier)) && ((s3->accel.dy >= clip_t * multiplier)) && (s3->accel.dy <= (clip_b * multiplier))) { + if (vram_mask && (s3->accel.cmd & 0x10)) { + if (s3->bpp == 2) + mix_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.src + s3->accel.cx, mix_dat); + } + mix_dat = ((mix_dat & rd_mask) == rd_mask); + mix_dat = mix_dat ? mix_mask : 0; + } + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + if (s3->bpp == 2) + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.src + s3->accel.cx, src_dat); + } + if (vram_mask && (s3->accel.cmd & 0x10)) + src_dat = ((src_dat & rd_mask) == rd_mask); + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + if (s3->bpp == 2) + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + else { + READ(s3->accel.dest + s3->accel.dx, dest_dat); + } + + old_dest_dat = dest_dat; + MIX + + if ((!(s3->accel.cmd & 0x10) && vram_mask) || (s3->accel.cmd & 0x10)) { + s3_log("CMD6 %04x: normal bitblt24 bpp%d: dest=%02x, src=%02x, old=%02x, dx=%d, dy=%d, cx=%d, cy=%d, sx=%d, sy=%d, moddx=%d, modcx=%d, frgdmix=%02x, bkgdmix=%02x.\n", s3->accel.cmd, s3->bpp, dest_dat, src_dat, old_dest_dat, s3->accel.dx / 3, s3->accel.dy, s3->accel.cx / 3, s3->accel.cy, s3->accel.sx / 3, s3->accel.sy, s3->accel.dx % 3, s3->accel.cx % 3, s3->accel.frgd_mix, s3->accel.bkgd_mix); + if (s3->bpp == 2) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } else { + if (s3->accel.blit_24bpp == 5) { + WRITE(s3->accel.dest + s3->accel.dx, dest_dat); + } + } + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) { + s3->accel.cx += multiplier; + s3->accel.dx += multiplier; + } else { + s3->accel.cx -= multiplier; + s3->accel.dx -= multiplier; + } + + s3->accel.dx &= 0xfff; + + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + + s3->accel.cx *= multiplier; + s3->accel.dx *= multiplier; + + if (s3->accel.cmd & 0x80) { + s3->accel.cy += multiplier; + s3->accel.dy += multiplier; + } else { + s3->accel.cy -= multiplier; + s3->accel.dy -= multiplier; + } + + s3->accel.src = srcbase + s3->accel.cy * s3->width; + s3->accel.dest = dstbase + s3->accel.dy * s3->width; + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / multiplier; + s3->accel.desty_axstp = s3->accel.dy / multiplier; + return; + } + } + } + } + break; + } + if (!cpu_input && (frgd_mix == 3) && !vram_mask && !(s3->accel.multifunc[0xe] & 0x100) && ((s3->accel.cmd & 0xa0) == 0xa0) && ((s3->accel.frgd_mix & 0xf) == 7) && ((s3->accel.bkgd_mix & 0xf) == 7)) { s3_log("Special BitBLT.\n"); while (1) { @@ -9398,6 +9909,13 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cx = s3->accel.cur_x & 0xfff; s3->accel.cy = s3->accel.cur_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.dx *= 3; + s3->accel.dy *= 3; + s3->accel.cx *= 3; + s3->accel.cy *= 3; + } + /*Align source with destination*/ s3->accel.pattern = (s3->accel.cy * s3->width) + s3->accel.cx; s3->accel.dest = dstbase + s3->accel.dy * s3->width; @@ -9411,6 +9929,119 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if ((s3->accel.cmd & 0x100) && !cpu_input) return; /*Wait for data from CPU*/ + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + rd_mask = s3->accel.rd_mask; + + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + if (rd_mask == 0x0000ffff) + rd_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.dx >= (clip_l * 3)) && (s3->accel.dx <= (clip_r * 3)) && (s3->accel.dy >= (clip_t * 3)) && (s3->accel.dy <= (clip_b * 3))) { + if (vram_mask) { + mix_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + mix_dat = ((mix_dat & rd_mask) == rd_mask); + mix_dat = mix_dat ? mix_mask : 0; + } + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = bkgd_color; + break; + case 1: + src_dat = frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + if (vram_mask) + src_dat = ((src_dat & rd_mask) == rd_mask); + break; + + default: + break; + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + + old_dest_dat = dest_dat; + MIX + + if (s3->accel.cmd & 0x10) { + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = dest_dat & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (dest_dat >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (dest_dat >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) { + s3->accel.cx = ((s3->accel.cx + 3) & 7) | (s3->accel.cx & ~7); + s3->accel.dx += 3; + } else { + s3->accel.cx = ((s3->accel.cx - 3) & 7) | (s3->accel.cx & ~7); + s3->accel.dx -= 3; + } + s3->accel.dx &= 0xfff; + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + + s3->accel.cx *= 3; + s3->accel.dx *= 3; + + if (s3->accel.cmd & 0x80) { + s3->accel.cy = ((s3->accel.cy + 3) & 7) | (s3->accel.cy & ~7); + s3->accel.dy += 3; + } else { + s3->accel.cy = ((s3->accel.cy - 3) & 7) | (s3->accel.cy & ~7); + s3->accel.dy -= 3; + } + + s3->accel.src = srcbase + s3->accel.pattern + (s3->accel.cy * s3->width); + s3->accel.dest = dstbase + s3->accel.dy * s3->width; + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / 3; + s3->accel.desty_axstp = s3->accel.dy / 3; + return; + } + } + } + break; + } + while (count-- && (s3->accel.sy >= 0)) { if ((s3->accel.dx >= clip_l) && (s3->accel.dx <= clip_r) && (s3->accel.dy >= clip_t) && (s3->accel.dy <= clip_b)) { if (vram_mask) { @@ -9756,8 +10387,11 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi case 14: /*ROPBlt (Vision868/968 only)*/ ; - uint32_t mono_pattern[64] = { 0 }; - if (s3->chip != S3_VISION968 && s3->chip != S3_VISION868) + uint32_t mono_pattern[8][8] = { 0 }; + int use_rop_mix = 0; + uint32_t vram_dat = 0; + + if ((s3->chip != S3_VISION968) && (s3->chip != S3_VISION868)) break; if (!cpu_input) /*!cpu_input is trigger to start operation*/ @@ -9774,18 +10408,26 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.px = s3->accel.pat_x & 0xfff; s3->accel.py = s3->accel.pat_y & 0xfff; + if (s3->bpp == 2) { + s3->accel.dx *= 3; + s3->accel.dy *= 3; + s3->accel.cx *= 3; + s3->accel.cy *= 3; + s3->accel.px *= 3; + s3->accel.py *= 3; + } + s3->accel.dest = dstbase + (s3->accel.dy * s3->width); s3->accel.src = srcbase + (s3->accel.cy * s3->width); s3->accel.pattern = (s3->accel.py * s3->width); - s3_log("ROPBLT=%04x, PIXCntl=%04x, Misc1=%04x, PATBKGDCOL=%08x, PATFRGDCOL=%08x, COLBKGDCOL=%08x, COLFRGDCOL=%08x, PX=%d, PY=%d, DX=%d, DY=%d, CX=%d, CY=%d, FRGDSEL=%x, BKGDSEL=%x, RDMASK=%08x, WRTMASK=%08x, ROPMIX=%03x, pitch=%d.\n", s3->accel.cmd, s3->accel.multifunc[0xa], s3->accel.multifunc[0xe], s3->accel.pat_bg_color, s3->accel.pat_fg_color, s3->accel.bkgd_color, s3->accel.frgd_color, s3->accel.px, s3->accel.py, s3->accel.dx, s3->accel.dy, s3->accel.cx, s3->accel.cy, frgd_mix, bkgd_mix, s3->accel.rd_mask, s3->accel.wrt_mask, s3->accel.ropmix, s3->width); + + s3_log("ROPBLT=%04x, BPP=%d, PIXCntl=%04x, Misc1=%04x, PATBKGDCOL=%08x, PATFRGDCOL=%08x, COLBKGDCOL=%08x, COLFRGDCOL=%08x, SX=%d, SY=%d, PX=%d, PY=%d, DX=%d, DY=%d, CX=%d, CY=%d, FRGDSEL=%02x, BKGDSEL=%02x, RDMASK=%08x, WRTMASK=%08x, ROPMIX=%03x, pitch=%d.\n", s3->accel.cmd, s3->bpp, s3->accel.multifunc[0xa], s3->accel.multifunc[0xe], s3->accel.pat_bg_color, s3->accel.pat_fg_color, s3->accel.bkgd_color, s3->accel.frgd_color, s3->accel.sx, s3->accel.sy, s3->accel.pat_x, s3->accel.pat_y, s3->accel.dx, s3->accel.dy, s3->accel.cx, s3->accel.cy, s3->accel.frgd_mix, s3->accel.bkgd_mix, s3->accel.rd_mask, s3->accel.wrt_mask, s3->accel.ropmix, s3->width); } if ((s3->accel.cmd & 0x100) && !cpu_input) return; /*Wait for data from CPU*/ if (s3->accel.ropmix & 0x100) { - int x; - int y; switch (s3->accel.cmd & 0x600) { case 0x000: case 0x600: @@ -9798,13 +10440,246 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi break; } - for (y = 0; y < 8; y++) { - for (x = 0; x < 8; x++) { - mono_pattern[y * 8 + (7 - x)] = (mix_dat & (1 << (x + y * 8))) & 0x80000000; + if (cpu_input) { + if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 0x02)) { + if ((frgd_mix < 2) || (bkgd_mix < 2)) + use_rop_mix = 3; + } else { + if ((frgd_mix == 2) || (bkgd_mix == 2)) + use_rop_mix = 2; + } + } else { + if ((s3->accel.multifunc[0xa] & 0xc0) != 0x80) { + if ((frgd_mix == 3) || (bkgd_mix == 3)) + use_rop_mix = 1; + } + } + + if (use_rop_mix == 3) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + mono_pattern[y][7 - x] = (mix_dat & (1 << (x + y * 8))) & 0x80000000; + } + } + } else if (use_rop_mix == 2) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + mono_pattern[y][7 - x] = (cpu_dat & (1 << (x + y * 8))) & 0x80000000; + } + } + } else if (use_rop_mix <= 1) { + if (use_rop_mix == 0) + frgd_mix = 3; + + if (s3->bpp == 2) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = (*(uint32_t *) &vram_b[(((s3->accel.py + (y * 3)) * s3->width) + s3->accel.px + (x * 3)) & s3->vram_mask]) & 0xffffff; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x800000; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x800000); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x800000); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x800000; + + if (s3->accel.pat_bg_color != s3->accel.pat_fg_color) + s3_log("MonoPattern Screen=%08x, y=%d, x=%d, sel=%08x, vram=%08x.\n", mono_pattern[y][7 - x], y, 7 - x, vram_dat & 0x800000, vram_dat); + } + } + } else if (s3->bpp == 1) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = vram_w[(((s3->accel.py + y) * s3->width) + s3->accel.px + x) & (s3->vram_mask >> 1)]; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x8000; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x8000); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x8000); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80000; + } + } + } else if (s3->bpp == 3) { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = vram_l[(((s3->accel.py + y) * s3->width) + s3->accel.px + x) & (s3->vram_mask >> 2)]; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80000000; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80000000); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80000000); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80000000; + } + } + } else { + for (uint8_t y = 0; y < 8; y++) { + for (uint8_t x = 0; x < 8; x++) { + vram_dat = svga->vram[(((s3->accel.py + y) * s3->width) + s3->accel.px + x) & s3->vram_mask]; + if ((s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x800; + else if (!(s3->accel.dx & 1) && (s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80); + else if ((s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = !(vram_dat & 0x80); + else if (!(s3->accel.dx & 1) && !(s3->accel.dy & 1)) + mono_pattern[y][7 - x] = vram_dat & 0x80; + } + } } } } - while (count-- && s3->accel.sy >= 0) { + + if (s3->bpp == 2) { + wrt_mask = s3->accel.wrt_mask; + if (wrt_mask == 0x0000ffff) + wrt_mask = 0xffffffff; + + while (count-- && (s3->accel.sy >= 0)) { + if ((s3->accel.dx >= (clip_l * 3)) && (s3->accel.dx <= (clip_r * 3)) && (s3->accel.dy >= (clip_t * 3)) && (s3->accel.dy <= (clip_b * 3))) { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + src_dat = s3->accel.bkgd_color; + break; + case 1: + src_dat = s3->accel.frgd_color; + break; + case 2: + src_dat = cpu_dat; + break; + case 3: + src_dat = (*(uint32_t *) &vram_b[(s3->accel.src + s3->accel.cx) & s3->vram_mask]) & 0xffffff; + break; + + default: + break; + } + + if (s3->accel.ropmix & 0x100) { /*Mono pattern used*/ + if (use_rop_mix <= 1) { + pat_dat = mono_pattern[(s3->accel.py / 3) & 7][(s3->accel.px / 3) & 7] ? s3->accel.pat_fg_color : s3->accel.pat_bg_color; + if (s3->accel.pat_bg_color != s3->accel.pat_fg_color) + s3_log("PatternData=%06x, PX=%d, PY=%d, MonoSel=%06x.\n", pat_dat, (s3->accel.px / 3) & 7, (s3->accel.py / 3) & 7, vram_dat); + } else { + switch (mono_pattern[(s3->accel.py / 3) & 7][(s3->accel.px / 3) & 7] ? (frgd_mix & 1) : (bkgd_mix & 1)) { + case 0: + pat_dat = s3->accel.pat_bg_color; + break; + case 1: + pat_dat = s3->accel.pat_fg_color; + break; + default: + break; + } + } + } else { + switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { + case 0: + pat_dat = s3->accel.bkgd_color; + break; + case 1: + pat_dat = s3->accel.frgd_color; + break; + case 2: + pat_dat = cpu_dat; + break; + case 3: + pat_dat = (*(uint32_t *) &vram_b[(s3->accel.pattern + s3->accel.px) & s3->vram_mask]) & 0xffffff; + break; + + default: + break; + } + } + + if (s3->accel.multifunc[0xe] & 0x100) { + if (s3->accel.multifunc[0xe] & 0x80) { + if (src_dat != compare) + update = 0; + else + update = 1; + } else { + if (src_dat == compare) + update = 0; + else + update = 1; + } + } else + update = 1; + + if (update) { + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask]) & 0xffffff; + + ROPMIX + out = (out & wrt_mask) | (old_dest_dat & ~wrt_mask); + + if (s3->accel.cmd & 0x10) { + s3_log("ROPBLT24 ROPSET=%03x, DX=%d, DY=%d, OUT=%02x, SRCC=%08x, DSTC=%08x.\n", s3->accel.ropmix, s3->accel.dx, s3->accel.dy, out, (s3->accel.src + s3->accel.cx) & (s3->vram_mask >> 2), (s3->accel.dest + s3->accel.dx) & (s3->vram_mask >> 2)); + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx) & s3->vram_mask] = out & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 1) & s3->vram_mask] = (out >> 8) & 0xff; + *(uint8_t *) &vram_b[(s3->accel.dest + s3->accel.dx + 2) & s3->vram_mask] = (out >> 16) & 0xff; + svga->changedvram[((s3->accel.dest + s3->accel.dx) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; + } + } + } + + mix_dat <<= 1; + mix_dat |= 1; + + cpu_dat >>= 16; + + if (s3->accel.cmd & 0x20) { + s3->accel.cx += 3; + s3->accel.dx += 3; + s3->accel.px += 3; + } else { + s3->accel.cx -= 3; + s3->accel.dx -= 3; + s3->accel.px -= 3; + } + s3->accel.sx--; + if (s3->accel.sx < 0) { + s3->accel.sx = s3->accel.maj_axis_pcnt & 0xfff; + s3->accel.dx = s3->accel.destx_distp & 0xfff; + s3->accel.cx = s3->accel.cur_x & 0xfff; + s3->accel.px = s3->accel.pat_x & 0xfff; + + s3->accel.dx *= 3; + s3->accel.cx *= 3; + s3->accel.px *= 3; + + if (s3->accel.cmd & 0x80) { + s3->accel.cy += 3; + s3->accel.dy += 3; + s3->accel.py += 3; + } else { + s3->accel.cy -= 3; + s3->accel.dy -= 3; + s3->accel.py -= 3; + } + s3->accel.dest = dstbase + (s3->accel.dy * s3->width); + s3->accel.src = srcbase + (s3->accel.cy * s3->width); + s3->accel.pattern = (s3->accel.py * s3->width); + + s3->accel.sy--; + + if (cpu_input) + return; + + if (s3->accel.sy < 0) { + s3->accel.destx_distp = s3->accel.dx / 3; + s3->accel.desty_axstp = s3->accel.dy / 3; + return; + } + } + } + break; + } + while (count-- && (s3->accel.sy >= 0)) { if ((s3->accel.dx >= clip_l) && (s3->accel.dx <= clip_r) && (s3->accel.dy >= clip_t) && (s3->accel.dy <= clip_b)) { switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { case 0: @@ -9825,17 +10700,20 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi } if (s3->accel.ropmix & 0x100) { /*Mono pattern used*/ - switch (mono_pattern[(s3->accel.py & 7) * 8 + (s3->accel.px & 7)] ? (frgd_mix & 1) : (bkgd_mix & 1)) { - case 0: - pat_dat = s3->accel.pat_bg_color; - break; - case 1: - pat_dat = s3->accel.pat_fg_color; - break; - default: - break; + if (use_rop_mix <= 1) + pat_dat = mono_pattern[s3->accel.py & 7][s3->accel.px & 7] ? s3->accel.pat_fg_color : s3->accel.pat_bg_color; + else { + switch (mono_pattern[s3->accel.py & 7][s3->accel.px & 7] ? (frgd_mix & 1) : (bkgd_mix & 1)) { + case 0: + pat_dat = s3->accel.pat_bg_color; + break; + case 1: + pat_dat = s3->accel.pat_fg_color; + break; + default: + break; + } } - s3_log("MonoMIX=%08x, PX=%d, PY=%d.\n", mix_dat, s3->accel.px & 7, s3->accel.py & 7); } else { switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { case 0: @@ -9875,8 +10753,8 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi READ(s3->accel.dest + s3->accel.dx, dest_dat); ROPMIX + out = (out & s3->accel.wrt_mask) | (old_dest_dat & ~s3->accel.wrt_mask); - s3_log("Destination=%08x, Source=%08x, Pattern=%08x, OUT=%08x, mix=%08x, count=%d.\n", dest_dat, src_dat, pat_dat, out, mix_dat, count); if (s3->accel.cmd & 0x10) { WRITE(s3->accel.dest + s3->accel.dx, out); } @@ -9928,8 +10806,9 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.sy--; - if (cpu_input /* && (s3->accel.multifunc[0xa] & 0xc0) == 0x80*/) + if (cpu_input) return; + if (s3->accel.sy < 0) { s3->accel.destx_distp = s3->accel.dx; s3->accel.desty_axstp = s3->accel.dy; @@ -10293,7 +11172,7 @@ s3_init(const device_t *info) break; case S3_WINNER1000_805: bios_fn = ROM_WINNER1000_805; - chip = S3_86C801; + chip = S3_86C805I; video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_86c801); break; case S3_86C805_ONBOARD: @@ -10731,7 +11610,6 @@ s3_init(const device_t *info) s3->id_ext = stepping; s3->id_ext_pci = 0; s3->packed_mmio = 0; - s3->accel.rd_mask = 0xff; svga->ramdac = device_add(&sc11483_ramdac_device); s3->ramdac_type = SC1148X; @@ -10754,7 +11632,6 @@ s3_init(const device_t *info) s3->id_ext = stepping; s3->id_ext_pci = 0; s3->packed_mmio = 0; - s3->accel.rd_mask = 0xff; svga->ramdac = device_add(&sc11483_ramdac_device); s3->ramdac_type = SC1148X; @@ -10776,11 +11653,12 @@ s3_init(const device_t *info) s3->ramdac_type = S3_SDAC; svga->clock_gen = svga->ramdac; svga->getclock = sdac_getclock; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); + svga_recalctimings(svga); break; case S3_SPEA_MIRAGE_86C801: case S3_SPEA_MIRAGE_86C805: - case S3_WINNER1000_805: svga->decode_mask = (2 << 20) - 1; stepping = 0xa2; /*86C801/86C805*/ s3->id = stepping; @@ -10793,8 +11671,24 @@ s3_init(const device_t *info) s3->ramdac_type = ATT49X; svga->clock_gen = device_add(&av9194_device); svga->getclock = av9194_getclock; - if (info->local == S3_WINNER1000_805) - s3->elsa_eeprom = 1; + break; + + case S3_WINNER1000_805: + svga->decode_mask = (2 << 20) - 1; + stepping = 0xa8; /*86C801I/86C805I*/ + s3->id = stepping; + s3->id_ext = stepping; + s3->id_ext_pci = 0; + s3->packed_mmio = 0; + svga->crtc[0x5a] = 0x0a; + + svga->ramdac = device_add(&sdac_ramdac_device); + s3->ramdac_type = S3_SDAC; + svga->clock_gen = svga->ramdac; + svga->getclock = sdac_getclock; + s3->elsa_eeprom = 1; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); + svga_recalctimings(svga); break; case S3_86C805_ONBOARD: @@ -10924,6 +11818,8 @@ s3_init(const device_t *info) s3->ramdac_type = S3_SDAC; svga->clock_gen = svga->ramdac; svga->getclock = sdac_getclock; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); + svga_recalctimings(svga); break; case S3_DIAMOND_STEALTH64_964: @@ -11031,13 +11927,14 @@ s3_init(const device_t *info) svga->clock_gen = device_add(&icd2061_device); svga->getclock = icd2061_getclock; icd2061_set_ref_clock(svga->ramdac, 14318184.0f); - svga_recalctimings(svga); } else { svga->ramdac = device_add(&sdac_ramdac_device); s3->ramdac_type = S3_SDAC; svga->clock_gen = svga->ramdac; svga->getclock = sdac_getclock; + sdac_set_ref_clock(svga->ramdac, 14318184.0f); } + svga_recalctimings(svga); break; case S3_PHOENIX_TRIO32: diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index daf59aea6..dcf380ff8 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1063,32 +1063,49 @@ s3_virge_updatemapping(virge_t *virge) return; } - switch (svga->gdcreg[6] & 0xc) { /*Banked framebuffer*/ - case 0x0: /*128k at A0000*/ - mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); - svga->banked_mask = 0xffff; - break; - case 0x4: /*64k at A0000*/ - mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); - svga->banked_mask = 0xffff; - if (xga_active && (svga->xga != NULL)) { - xga->on = 0; - mem_mapping_set_handler(&svga->mapping, svga->read, svga->readw, svga->readl, svga->write, svga->writew, svga->writel); - } - break; - case 0x8: /*32k at B0000*/ - mem_mapping_set_addr(&svga->mapping, 0xb0000, 0x08000); - svga->banked_mask = 0x7fff; - break; - case 0xC: /*32k at B8000*/ - mem_mapping_set_addr(&svga->mapping, 0xb8000, 0x08000); - svga->banked_mask = 0x7fff; - break; - } + /*Banked framebuffer*/ + if (svga->crtc[0x31] & 0x08) /*Enhanced mode mappings*/ + { + /* Enhanced mode forces 64kb at 0xa0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + svga->banked_mask = 0xffff; + if (xga_active && (svga->xga != NULL)) { + xga->on = 0; + mem_mapping_set_handler(&svga->mapping, svga->read, svga->readw, svga->readl, svga->write, svga->writew, svga->writel); + } + } else + switch (svga->gdcreg[6] & 0xc) { /*VGA mapping*/ + case 0x0: /*128k at A0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); + svga->banked_mask = 0xffff; + break; + case 0x4: /*64k at A0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + svga->banked_mask = 0xffff; + if (xga_active && (svga->xga != NULL)) { + xga->on = 0; + mem_mapping_set_handler(&svga->mapping, svga->read, svga->readw, svga->readl, svga->write, svga->writew, svga->writel); + } + break; + case 0x8: /*32k at B0000*/ + mem_mapping_set_addr(&svga->mapping, 0xb0000, 0x08000); + svga->banked_mask = 0x7fff; + break; + case 0xC: /*32k at B8000*/ + mem_mapping_set_addr(&svga->mapping, 0xb8000, 0x08000); + svga->banked_mask = 0x7fff; + break; + + default: + break; + } virge->linear_base = (svga->crtc[0x5a] << 16) | (svga->crtc[0x59] << 24); if ((svga->crtc[0x58] & 0x10) || (virge->advfunc_cntl & 0x10)) { /*Linear framebuffer*/ + /*Linear framebuffer*/ + mem_mapping_disable(&svga->mapping); + switch (svga->crtc[0x58] & 7) { case 0: /*64k*/ virge->linear_size = 0x10000; @@ -1110,11 +1127,19 @@ s3_virge_updatemapping(virge_t *virge) break; } virge->linear_base &= ~(virge->linear_size - 1); - if (virge->linear_base == 0xa0000) { - mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + //pclog("CR58 & 7=%x, base=%08x.\n", svga->crtc[0x58] & 7, virge->linear_base); + if ((virge->linear_base == 0xa0000) || (virge->linear_size == 0x10000)) { mem_mapping_disable(&virge->linear_mapping); - } else - mem_mapping_set_addr(&virge->linear_mapping, virge->linear_base, virge->linear_size); + if (!(svga->crtc[0x53] & 0x10)) { + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + svga->banked_mask = 0xffff; + } + } else { + if (virge->linear_base) + mem_mapping_set_addr(&virge->linear_mapping, virge->linear_base, virge->linear_size); + else + mem_mapping_disable(&virge->linear_mapping); + } svga->fb_only = 1; } else { mem_mapping_disable(&virge->linear_mapping); @@ -1122,6 +1147,7 @@ s3_virge_updatemapping(virge_t *virge) } if ((svga->crtc[0x53] & 0x10) || (virge->advfunc_cntl & 0x20)) { /*Old MMIO*/ + mem_mapping_disable(&svga->mapping); if (svga->crtc[0x53] & 0x20) mem_mapping_set_addr(&virge->mmio_mapping, 0xb8000, 0x8000); else @@ -1129,9 +1155,12 @@ s3_virge_updatemapping(virge_t *virge) } else mem_mapping_disable(&virge->mmio_mapping); - if (svga->crtc[0x53] & 0x08) /*New MMIO*/ - mem_mapping_set_addr(&virge->new_mmio_mapping, virge->linear_base + 0x1000000, 0x10000); - else + if (svga->crtc[0x53] & 0x08) { /*New MMIO*/ + if (virge->linear_base) + mem_mapping_set_addr(&virge->new_mmio_mapping, virge->linear_base + 0x1000000, 0x10000); + else + mem_mapping_disable(&virge->new_mmio_mapping); + } else mem_mapping_disable(&virge->new_mmio_mapping); } @@ -1946,9 +1975,9 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) break; case 0x8190: virge->streams.sec_ctrl = val; - virge->streams.dda_horiz_accumulator = val & 0x7ff; - if (val & 0x800) - virge->streams.dda_horiz_accumulator |= ~0x7ff; + virge->streams.dda_horiz_accumulator = val & 0xfff; + if (val & 0x1000) + virge->streams.dda_horiz_accumulator |= ~0xfff; virge->streams.sdif = (val >> 24) & 7; break; @@ -1961,9 +1990,9 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) if (val & 0x800) virge->streams.k1_horiz_scale |= ~0x7ff; - virge->streams.k2_horiz_scale = (val >> 16) & 0x3ff; - if ((val >> 16) & 0x400) - virge->streams.k2_horiz_scale |= ~0x3ff; + virge->streams.k2_horiz_scale = (val >> 16) & 0x7ff; + if ((val >> 16) & 0x800) + virge->streams.k2_horiz_scale |= ~0x7ff; svga_recalctimings(svga); svga->fullchange = changeframecount; @@ -2019,14 +2048,14 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) virge->streams.k1_vert_scale |= ~0x7ff; break; case 0x81e4: - virge->streams.k2_vert_scale = val & 0x3ff; - if (val & 0x400) - virge->streams.k2_vert_scale |= ~0x3ff; + virge->streams.k2_vert_scale = val & 0x7ff; + if (val & 0x800) + virge->streams.k2_vert_scale |= ~0x7ff; break; case 0x81e8: - virge->streams.dda_vert_accumulator = val & 0x7ff; - if (val & 0x800) - virge->streams.dda_vert_accumulator |= ~0x7ff; + virge->streams.dda_vert_accumulator = val & 0xfff; + if (val & 0x1000) + virge->streams.dda_vert_accumulator |= ~0xfff; svga_recalctimings(svga); svga->fullchange = changeframecount; @@ -3124,7 +3153,7 @@ s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat) case 0: case CMD_SET_MS: READ(src_addr, source); - if ((virge->s3d.cmd_set & CMD_SET_TP) && source == src_fg_clr) + if ((virge->s3d.cmd_set & CMD_SET_TP) && (source == src_fg_clr)) update = 0; break; case CMD_SET_IDS: @@ -3150,7 +3179,7 @@ s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat) count = 0; } } - if ((virge->s3d.cmd_set & CMD_SET_TP) && source == src_fg_clr) + if ((virge->s3d.cmd_set & CMD_SET_TP) && (source == src_fg_clr)) update = 0; break; case CMD_SET_IDS | CMD_SET_MS: @@ -4829,7 +4858,7 @@ s3_virge_colorkey(virge_t* virge, uint32_t x, uint32_t y) return true; else if (!(virge->streams.chroma_ctrl & (1 << 28))) return true; - + comp_r = (virge->streams.chroma_ctrl >> 16) & 0xFF; comp_g = (virge->streams.chroma_ctrl >> 8) & 0xFF; comp_b = (virge->streams.chroma_ctrl) & 0xFF; @@ -4853,7 +4882,7 @@ s3_virge_colorkey(virge_t* virge, uint32_t x, uint32_t y) */ uint8_t index = virge->streams.chroma_ctrl & 0xFF; alpha_key = (virge->chip < S3_VIRGEGX2) ? (virge->streams.chroma_ctrl & (1 << 29)) : ((virge->streams.chroma_ctrl >> 29) & 3) == 1; - + if (alpha_key) { comp_r = comp_g = comp_b = index; comp_r_h = comp_g_h = comp_b_h = index; @@ -5188,6 +5217,7 @@ s3_virge_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) svga->crtc[0x59] = (svga->crtc[0x59] & 0x01) | (val & 0xfe); else svga->crtc[0x59] = (svga->crtc[0x59] & 0x03) | (val & 0xfc); + s3_virge_updatemapping(virge); return; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 35f42c2ee..db8b33e18 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -134,8 +134,8 @@ video_cards[] = { { .device = &s3_phoenix_86c801_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_spea_mirage_86c801_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_winner1000_805_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32i_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32_machspeed_vga_gui_2400s_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32i_axis_microdevice_isa_device, .flags = VIDEO_FLAG_TYPE_NONE }, /* MCA */ { .device = &mach32_mca_device, .flags = VIDEO_FLAG_TYPE_8514 }, { .device = &gd5426_mca_device, .flags = VIDEO_FLAG_TYPE_NONE }, @@ -145,12 +145,13 @@ video_cards[] = { /* VLB */ { .device = &mach32_vlb_device, .flags = VIDEO_FLAG_TYPE_8514 }, { .device = &mach64gx_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32i_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32_machspeed_vga_gui_2400s_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32i_hercules_dynamite_pro_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &et4000w32p_videomagic_revb_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_revc_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_cardex_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_noncardex_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revc_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_generic_revd_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revd_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_diamond_revd_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5424_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5426_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &gd5428_vlb_device, .flags = VIDEO_FLAG_TYPE_NONE }, @@ -196,11 +197,10 @@ video_cards[] = { { .device = &gd5446_pci_device, .flags = VIDEO_FLAG_TYPE_SECONDARY }, { .device = &gd5446_stb_pci_device, .flags = VIDEO_FLAG_TYPE_SECONDARY }, { .device = &gd5480_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_videomagic_revb_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_revc_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_cardex_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_noncardex_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, - { .device = &et4000w32p_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revc_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_generic_revd_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_cardex_revd_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, + { .device = &et4000w32p_diamond_revd_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_elsa_winner1000_86c928_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_spea_mercury_lite_86c928_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, { .device = &s3_diamond_stealth64_964_pci_device, .flags = VIDEO_FLAG_TYPE_NONE }, diff --git a/src/video/vid_tgui9440.c b/src/video/vid_tgui9440.c index 2fd4ba482..30f76abfa 100644 --- a/src/video/vid_tgui9440.c +++ b/src/video/vid_tgui9440.c @@ -692,6 +692,7 @@ tgui_recalctimings(svga_t *svga) const tgui_t *tgui = (tgui_t *) svga->priv; uint8_t ger22lower = (tgui->accel.ger22 & 0xff); uint8_t ger22upper = (tgui->accel.ger22 >> 8); + int std_vga_clock = 1; if (tgui->type >= TGUI_9440) { if ((svga->crtc[0x38] & 0x19) == 0x09) @@ -767,10 +768,11 @@ tgui_recalctimings(svga_t *svga) svga->clock = (cpuclock * (double) (1ULL << 32)) / (((tgui->clock_n + 8) * 14318180.0) / ((tgui->clock_m + 2) * (1 << tgui->clock_k))); if (svga->gdcreg[0xf] & 0x08) - svga->clock *= 2; + svga->clock *= 2.0; else if (svga->gdcreg[0xf] & 0x40) - svga->clock *= 3; + svga->clock *= 3.0; } else { + //pclog("TGUI9400CXi: Clock double=%d.\n", (((svga->miscout >> 2) & 3) | ((tgui->newctrl2 << 2) & 4) | ((tgui->newctrl2 >> 3) & 8))); switch (((svga->miscout >> 2) & 3) | ((tgui->newctrl2 << 2) & 4) | ((tgui->newctrl2 >> 3) & 8)) { case 0x02: svga->clock = (cpuclock * (double) (1ULL << 32)) / 44900000.0; @@ -816,6 +818,7 @@ tgui_recalctimings(svga_t *svga) break; default: + std_vga_clock = 0; break; } @@ -823,6 +826,9 @@ tgui_recalctimings(svga_t *svga) svga->htotal <<= 1; svga->hdisp <<= 1; svga->hdisp_time <<= 1; + svga->dots_per_clock <<= 1; + if (std_vga_clock) + svga->clock /= 2.0; } } @@ -843,6 +849,7 @@ tgui_recalctimings(svga_t *svga) svga->htotal <<= 1; svga->hdisp <<= 1; svga->hdisp_time <<= 1; + svga->dots_per_clock <<= 1; break; default: break; @@ -866,6 +873,7 @@ tgui_recalctimings(svga_t *svga) svga->htotal <<= 1; svga->hdisp <<= 1; svga->hdisp_time <<= 1; + svga->dots_per_clock <<= 1; } switch (svga->hdisp) { case 640: @@ -880,18 +888,24 @@ tgui_recalctimings(svga_t *svga) break; case 15: svga->render = svga_render_15bpp_highres; - if (tgui->type < TGUI_9440) + if (tgui->type < TGUI_9440) { svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } break; case 16: svga->render = svga_render_16bpp_highres; - if (tgui->type < TGUI_9440) + if (tgui->type < TGUI_9440) { svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + } break; case 24: svga->render = svga_render_24bpp_highres; - if (tgui->type < TGUI_9440) - svga->hdisp = (svga->hdisp << 1) / 3; + if (tgui->type < TGUI_9440) { + svga->hdisp /= 3; + svga->dots_per_clock /= 3; + } break; case 32: if (svga->rowoffset == 0x100) From ab7de132975706f0790fcb73f67472fd88110158 Mon Sep 17 00:00:00 2001 From: toggo9 <121191375+toggo9@users.noreply.github.com> Date: Sat, 18 Oct 2025 18:52:49 +0200 Subject: [PATCH 131/233] Add two more HP Vectra models. (#6359) * Add two 430FX-based Vectras code. * Add two 430FX-based Vectras machine table entries. * Organize the 430FX-based Vectras code. * Add machine definitions for the two 430FX-based Vectras. * Add the Vectra 500 Series xxx/MT to the GPIO values from the VL/5... makes it report CPU clocks properly. * Darn, forgot something. * Updated and fix the BIOS selector for VE 5/xxx Series 2 --- src/include/86box/machine.h | 5 ++ src/machine/m_at_socket7_3v.c | 144 ++++++++++++++++++++++++++++++++++ src/machine/machine_table.c | 86 ++++++++++++++++++++ src/sio/sio_fdc37c93x.c | 2 +- 4 files changed, 236 insertions(+), 1 deletion(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 7011841fc..061c6473f 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -970,6 +970,11 @@ extern const device_t p54tp4xe_device; #endif extern int machine_at_p54tp4xe_init(const machine_t *); extern int machine_at_exp8551_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t hpvectravexxx_device; +#endif +extern int machine_at_hpvectravexxx_init(const machine_t *); +extern int machine_at_vectra500mt_init(const machine_t *); extern int machine_at_vectra54_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t thor_device; diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 02461d072..69d37229f 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -157,6 +157,150 @@ machine_at_exp8551_init(const machine_t *model) return ret; } +static void +machine_at_hpvectravexxx_gpio_init(void) +{ + uint32_t gpio = 0x40; + + if (cpu_busspeed <= 40000000) + gpio |= 0x30; + else if ((cpu_busspeed > 40000000) && (cpu_busspeed <= 50000000)) + gpio |= 0x00; + else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000)) + gpio |= 0x20; + else if (cpu_busspeed > 60000000) + gpio |= 0x10; + + if (cpu_dmulti <= 1.5) + gpio |= 0x82; + else if ((cpu_dmulti > 1.5) && (cpu_dmulti <= 2.0)) + gpio |= 0x02; + else if ((cpu_dmulti > 2.0) && (cpu_dmulti <= 2.5)) + gpio |= 0x00; + else if (cpu_dmulti > 2.5) + gpio |= 0x80; + + machine_set_gpio_default(gpio); +} + +static const device_config_t hpvectravexxx_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "gu_07_05", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "GU.07.02 (01/25/96)", + .internal_name = "gu_07_02", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/hpvectravexxx/d3653.bin", "" } + }, + { + .name = "GU.07.05 (08/06/96)", + .internal_name = "gu_07_05", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/hpvectravexxx/GU0705US.FUL", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t hpvectravexxx_device = { + .name = "HP Vectra VE 5/XXX Series 2", + .internal_name = "hpvectravexxx_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = hpvectravexxx_config +}; + +int +machine_at_hpvectravexxx_init(const machine_t *model) +{ + int ret = 0; + const char *fn; + + /* No ROMs available */ + if (!device_available(model->device)) + return ret; + + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + + machine_at_common_init_ex(model, 2); + machine_at_hpvectravexxx_gpio_init(); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x0D, PCI_CARD_VIDEO, 0, 0, 0, 0); + pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); + device_add(&i430fx_device); + device_add(&piix_device); + device_add_params(&pc87306_device, (void *) PCX730X_PHOENIX_42); + device_add(&intel_flash_bxt_device); + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + + return ret; +} +int +machine_at_vectra500mt_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/vectra500mt/GJ0718.FUL", + 0x000e0000, 131072, 0); + + if (bios_only || !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(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x0D, PCI_CARD_VIDEO, 0, 0, 0, 0); + pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + + device_add(&i430fx_device); + device_add(&piix_device); + device_add_params(&fdc37c93x_device, (void *) (FDC37XXX2 | FDC37C93X_NORMAL)); + device_add(&sst_flash_29ee010_device); + + return ret; +} + int machine_at_vectra54_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index aae2e6b9f..47fb21303 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13333,6 +13333,92 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + { + .name = "[i430FX] HP Vectra VE 5/XXX Series 2", + .internal_name = "hpvectravexxx", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_hpvectravexxx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3380, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &hpvectravexxx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5436_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL + }, + { + .name = "[i430FX] HP Vectra 500 Series xxx/MT", + .internal_name = "vectra500mt", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_vectra500mt_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3380, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 511, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL + }, /* Has a SM(S)C FDC37C932 Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { diff --git a/src/sio/sio_fdc37c93x.c b/src/sio/sio_fdc37c93x.c index 399469424..42ab2c7a7 100644 --- a/src/sio/sio_fdc37c93x.c +++ b/src/sio/sio_fdc37c93x.c @@ -1812,7 +1812,7 @@ fdc37c93x_reset(void *priv) memset(dev->gpio_pulldn, 0xff, 8); /* Acer V62X requires bit 0 to be clear to not be stuck in "clear password" mode. */ - if (machines[machine].init == machine_at_vectra54_init) { + if ((machines[machine].init == machine_at_vectra54_init) || (machines[machine].init == machine_at_vectra500mt_init)) { dev->gpio_pulldn[1] = 0x40; /* From 2eb0c77a8771ef08b1fefa73814d19ffcc756179 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 19 Oct 2025 11:42:47 +0200 Subject: [PATCH 132/233] window title in OSD --- src/unix/unix_osd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index f6037cbbd..9e9efc645 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -43,6 +43,10 @@ extern SDL_mutex *sdl_mutex; // interface back to main unix monitor implementation extern void unix_executeLine(char *line); +// interface to the currently set window title, this can't be seen normally in a fullscreen setup +extern wchar_t sdl_win_title[512]; +char sdl_win_title_mb[512] = ""; + static SDL_Texture *font_texture = NULL; typedef enum { @@ -177,6 +181,12 @@ void draw_menu(SDL_Renderer *renderer, int selected) draw_text(renderer, "MAIN MENU", x0 + 20, y0 + 5, (SDL_Color){255,255,255,255}); + if (sdl_win_title != NULL) + { + int length = wcstombs(sdl_win_title_mb, sdl_win_title, 256); + draw_text(renderer, sdl_win_title_mb, x0 + 120, y0 + 5, (SDL_Color){255,255,255,255}); + } + for (int i = 0; i < MENU_ITEMS; i++) { int tx = x0 + 20; From 4c10faedbd8fc61a1848c5e86c8d6b84019030c3 Mon Sep 17 00:00:00 2001 From: Valerio Date: Mon, 20 Oct 2025 19:17:46 +0100 Subject: [PATCH 133/233] back to main menu with esc key --- src/unix/unix_osd.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 9e9efc645..8122e19eb 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -372,9 +372,18 @@ int osd_handle(SDL_Event event) { if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE) { - // Close the OSD - // debug: fprintf(stderr, "OSD HANDLE: escape\n"); - return 0; + if (state == STATE_MENU) + { + // Close the OSD + // debug: fprintf(stderr, "OSD HANDLE: escape\n"); + return 0; + } + else + { + // Back to Main and keep it open + state = STATE_MENU; + return 1; + } } if (state == STATE_MENU) From 2ee0f0e4707330ce3279696d73c22dec88d7a462 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Mon, 20 Oct 2025 20:32:41 +0200 Subject: [PATCH 134/233] RAMDAC/Clock fixes to the S3 and ET4000AX cards 1. The S3 968-based Diamond Stealth 64 Video VRAM, using a 14mhz reference clock, now has its RGB528 fixed Pixel PLL reference divider set to its default value (0x07) per manual and reference clock. Fixes wrong refresh rates on said cards and others. 2. Added the ICS2494-324 clock generator to the ET4000AX. Fixes wrong refresh rates on this one too. --- src/video/ramdac/vid_ramdac_ibm_rgb528.c | 186 ++++++++++++++--------- src/video/vid_et4000.c | 25 ++- src/video/vid_s3.c | 52 +++++-- 3 files changed, 160 insertions(+), 103 deletions(-) diff --git a/src/video/ramdac/vid_ramdac_ibm_rgb528.c b/src/video/ramdac/vid_ramdac_ibm_rgb528.c index bded466d1..09cabeb0a 100644 --- a/src/video/ramdac/vid_ramdac_ibm_rgb528.c +++ b/src/video/ramdac/vid_ramdac_ibm_rgb528.c @@ -60,6 +60,7 @@ typedef union ibm_rgb528_pixel32_t { } ibm_rgb528_pixel32_t; typedef struct ibm_rgb528_ramdac_t { + int type; PALETTE extpal; uint32_t extpallook[256]; uint8_t indexed_data[2048]; @@ -627,19 +628,21 @@ ibm_rgb528_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *priv, svga_t *s case 0x02a: case 0x02c: case 0x02e: - if (ramdac->indexed_data[0x0002] & 0x01) { - switch (ramdac->indexed_data[0x0010] & 0x07) { - case 0x00: - case 0x02: - ramdac->pix_f[ramdac->index - 0x0020] = val; - break; - case 0x01: - case 0x03: - ramdac->pix_m[(ramdac->index - 0x0020) >> 1] = val; - break; - default: - break; - } + switch (ramdac->indexed_data[0x0010] & 0x03) { + case 0x00: + ramdac->pix_f[(ramdac->index - 0x0020)] = val; + break; + case 0x01: + ramdac->pix_m[(ramdac->index - 0x0020) >> 1] = val; + break; + case 0x02: + ramdac->pix_f[(ramdac->index - 0x0020)] = val; + break; + case 0x03: + ramdac->pix_m[(ramdac->index - 0x0020) >> 1] = val; + break; + default: + break; } break; case 0x021: @@ -650,19 +653,21 @@ ibm_rgb528_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *priv, svga_t *s case 0x02b: case 0x02d: case 0x02f: - if (ramdac->indexed_data[0x0002] & 0x01) { - switch (ramdac->indexed_data[0x010] & 0x07) { - case 0x00: - case 0x02: - ramdac->pix_f[ramdac->index - 0x0020] = val; - break; - case 0x01: - case 0x03: - ramdac->pix_n[(ramdac->index - 0x0020) >> 1] = val; - break; - default: - break; - } + switch (ramdac->indexed_data[0x0010] & 0x03) { + case 0x00: + ramdac->pix_f[(ramdac->index - 0x0020)] = val; + break; + case 0x01: + ramdac->pix_n[(ramdac->index - 0x0020) >> 1] = val; + break; + case 0x02: + ramdac->pix_f[(ramdac->index - 0x0020)] = val; + break; + case 0x03: + ramdac->pix_n[(ramdac->index - 0x0020) >> 1] = val; + break; + default: + break; } break; @@ -868,7 +873,52 @@ ibm_rgb528_recalctimings(void *priv, svga_t *svga) { const ibm_rgb528_ramdac_t *ramdac = (ibm_rgb528_ramdac_t *) priv; - svga->interlace = ramdac->indexed_data[0x071] & 0x20; + svga->interlace = !!(ramdac->indexed_data[0x071] & 0x20); + //pclog("MiscClockControl idx002=%02x, SystemClockControl idx008=%02x, Misc2 idx071=%02x, Misc1 idx070=%02x, Misc4 idx073=%02x.\n", + // ramdac->indexed_data[0x002], ramdac->indexed_data[0x008], ramdac->indexed_data[0x071], ramdac->indexed_data[0x070], ramdac->indexed_data[0x073]); + + if (ramdac->indexed_data[0x071] & 0x01) { + if ((ramdac->indexed_data[0x070] & 0x03) == 0x03) { + switch ((ramdac->indexed_data[0x002] & 0x0e) >> 1) { + case 0x00: + default: + svga->clock_multiplier = 0; + break; + case 0x01: + svga->clock_multiplier = 1; + break; + case 0x02: + svga->clock_multiplier = 2; + break; + case 0x03: + svga->clock_multiplier = 3; + break; + case 0x04: + svga->clock_multiplier = 4; + break; + } + } else if ((ramdac->indexed_data[0x070] & 0x03) == 0x01) { + switch ((ramdac->indexed_data[0x002] & 0x0e) >> 1) { + case 0x00: + default: + svga->clock_multiplier = 1; + svga->clock *= 2.0; + break; + case 0x01: + svga->clock_multiplier = 1; + break; + case 0x02: + svga->clock_multiplier = 2; + break; + case 0x03: + svga->clock_multiplier = 3; + break; + case 0x04: + svga->clock_multiplier = 4; + break; + } + } + } if (svga->scrblank || !svga->attr_palette_enable) { if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { @@ -904,49 +954,47 @@ ibm_rgb528_recalctimings(void *priv, svga_t *svga) float ibm_rgb528_getclock(int clock, void *priv) { - const ibm_rgb528_ramdac_t *ramdac = (ibm_rgb528_ramdac_t *) priv; - int pll_vco_div_cnt; - int pll_df; - int pll_ref_div_cnt; - int ddot_divs[8] = { 1, 2, 4, 8, 16, 1, 1, 1 }; - int ddot_div = ddot_divs[(ramdac->indexed_data[0x0002] >> 1) & 0x07]; - float f_pll; + const ibm_rgb528_ramdac_t *ramdac = (ibm_rgb528_ramdac_t *) priv; + int pll_vco_div_cnt; + int pll_df; + int pll_ref_div_cnt; + int ddot_divs[8] = { 1, 2, 4, 8, 16, 1, 1, 1 }; + int ddot_div = ddot_divs[(ramdac->indexed_data[0x0002] >> 1) & 0x07]; + float f_pll; - clock &= 0x03; + if (clock == 0) + return 25175000.0f; + if (clock == 1) + return 28322000.0f; - if (ramdac->indexed_data[0x0002] & 0x01) { - switch (ramdac->indexed_data[0x0010] & 0x07) { - case 0x00: - default: - pll_vco_div_cnt = ramdac->pix_f[clock] & 0x3f; - pll_df = 8 >> (ramdac->pix_f[clock] >> 6); - pll_ref_div_cnt = ramdac->pix_f_ref_div & 0x1f; - break; - case 0x01: - pll_vco_div_cnt = ramdac->pix_m[clock] & 0x3f; - pll_df = 8 >> (ramdac->pix_m[clock] >> 6); - pll_ref_div_cnt = ramdac->pix_n[clock] & 0x1f; - break; - case 0x02: - pll_vco_div_cnt = ramdac->pix_f[ramdac->indexed_data[0x0011] & 0x0f] & 0x3f; - pll_df = 8 >> (ramdac->pix_f[ramdac->indexed_data[0x0011] & 0x0f] >> 6); - pll_ref_div_cnt = ramdac->pix_f_ref_div & 0x1f; - break; - case 0x03: - pll_vco_div_cnt = ramdac->pix_m[ramdac->indexed_data[0x0011] & 0x07] & 0x3f; - pll_df = 8 >> (ramdac->pix_m[ramdac->indexed_data[0x0011] & 0x07] >> 6); - pll_ref_div_cnt = ramdac->pix_n[ramdac->indexed_data[0x0011] & 0x07] & 0x1f; - break; - } - } else { - pll_vco_div_cnt = ramdac->indexed_data[0x0016] & 0x3f; - pll_df = 8 >> (ramdac->indexed_data[0x0016] >> 6); - pll_ref_div_cnt = ramdac->indexed_data[0x0015] & 0x1f; + switch (ramdac->indexed_data[0x0010] & 0x03) { + case 0x00: + default: + pll_vco_div_cnt = ramdac->pix_f[clock & 0x03] & 0x3f; + pll_df = 8 >> (ramdac->pix_f[clock & 0x03] >> 6); + pll_ref_div_cnt = ramdac->pix_f_ref_div & 0x1f; + break; + case 0x01: + pll_vco_div_cnt = ramdac->pix_m[clock & 0x03] & 0x3f; + pll_df = 8 >> (ramdac->pix_m[clock & 0x03] >> 6); + pll_ref_div_cnt = ramdac->pix_n[clock & 0x03] & 0x1f; + break; + case 0x02: + pll_vco_div_cnt = ramdac->pix_f[ramdac->indexed_data[0x0011] & 0x0f] & 0x3f; + pll_df = 8 >> (ramdac->pix_f[ramdac->indexed_data[0x0011] & 0x0f] >> 6); + pll_ref_div_cnt = ramdac->pix_f_ref_div & 0x1f; + break; + case 0x03: + pll_vco_div_cnt = ramdac->pix_m[ramdac->indexed_data[0x0011] & 0x0f] & 0x3f; + pll_df = 8 >> (ramdac->pix_m[ramdac->indexed_data[0x0011] & 0x0f] >> 6); + pll_ref_div_cnt = ramdac->pix_n[ramdac->indexed_data[0x0011] & 0x0f] & 0x1f; + break; } - f_pll = ramdac->ref_clock * (float) (pll_vco_div_cnt + 65) / (float) (pll_ref_div_cnt * pll_df); f_pll /= (float) ddot_div; + //pclog("PIXCTRL1=%02x, clock=%d, m=%d, df=%d, n=%d, ctrl2=%02x, miscclock=%02x, sysclock=%02x, f_pll=%f.\n", + // ramdac->indexed_data[0x010], clock, pll_vco_div_cnt, pll_df, pll_ref_div_cnt, ramdac->indexed_data[0x011], ramdac->indexed_data[0x002], ramdac->indexed_data[0x008], f_pll); return f_pll; } @@ -1073,19 +1121,11 @@ ibm_rgb528_ramdac_init(UNUSED(const device_t *info)) ramdac->smlc_part = 0x0100; ramdac->ref_clock = 14318184.0f; + ramdac->pix_f_ref_div = 0x07; /*Per datasheet regarding the reference clock value.*/ ramdac->indexed_data[0x0008] = 0x0001; - ramdac->indexed_data[0x0014] = 0x0005; ramdac->indexed_data[0x0015] = 0x0008; ramdac->indexed_data[0x0016] = 0x0041; - ramdac->indexed_data[0x0020] = 0x0005; - ramdac->indexed_data[0x0021] = 0x000e; - - ramdac->pix_f_ref_div = 0x0005; - ramdac->pix_f[0] = 0x0005; - ramdac->pix_f[1] = 0x000e; - ramdac->pix_m[0] = 0x0005; - ramdac->pix_n[0] = 0x000e; return ramdac; } diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c index 1a8a767e2..80f27833a 100644 --- a/src/video/vid_et4000.c +++ b/src/video/vid_et4000.c @@ -639,6 +639,7 @@ static void et4000_recalctimings(svga_t *svga) { const et4000_t *dev = (et4000_t *) svga->priv; + int clk_sel = ((svga->miscout >> 2) & 0x03) | ((svga->crtc[0x34] << 1) & 0x04)| ((svga->crtc[0x31] >> 3) & 0x08); svga->memaddr_latch |= (svga->crtc[0x33] & 3) << 16; @@ -665,26 +666,15 @@ et4000_recalctimings(svga_t *svga) svga->dots_per_clock <<= 1; } - switch (((svga->miscout >> 2) & 3) | ((svga->crtc[0x34] << 1) & 4)) { - case 0: - case 1: - break; - case 3: - svga->clock = (cpuclock * (double) (1ULL << 32)) / 40000000.0; - break; - case 5: - svga->clock = (cpuclock * (double) (1ULL << 32)) / 65000000.0; - break; - default: - svga->clock = (cpuclock * (double) (1ULL << 32)) / 36000000.0; - break; - } + svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clk_sel, svga->clock_gen); + if (clk_sel < 2) + svga->clock *= 2.0; switch (svga->bpp) { case 15: case 16: - svga->hdisp /= 2; - svga->dots_per_clock /= 2; + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; break; case 24: @@ -901,6 +891,9 @@ et4000_init(const device_t *info) if (dev->type >= ET4000_TYPE_ISA) dev->svga.ramdac = device_add(&sc1502x_ramdac_device); + dev->svga.clock_gen = device_add(&ics2494an_324_device); + dev->svga.getclock = ics2494_getclock; + if (dev->type == ET4000_TYPE_TC6058AF) dev->svga.adv_flags |= FLAG_PRECISETIME; diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 210a9f625..74b57370e 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -3758,6 +3758,7 @@ s3_recalctimings(svga_t *svga) if ((((svga->miscout >> 2) & 3) == 3) && (s3->chip < S3_TRIO32)) clk_sel = svga->crtc[0x42] & 0x0f; + s3_log("MiscOut=%02x, cr42=%02x.\n", (svga->miscout >> 2) & 3, svga->crtc[0x42] & 0x0f); svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clk_sel, svga->clock_gen); switch (s3->ramdac_type) { @@ -3968,6 +3969,10 @@ s3_recalctimings(svga_t *svga) svga->hdisp <<= 1; svga->dots_per_clock <<= 1; svga->clock *= 2.0; + } else if ((clk_sel == 3) && (s3->width >= 1024)) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; } if (svga->hdisp == 832) svga->hdisp -= 32; @@ -4160,6 +4165,10 @@ s3_recalctimings(svga_t *svga) svga->hdisp <<= 1; svga->dots_per_clock <<= 1; svga->clock *= 2.0; + } else if ((clk_sel == 3) && (s3->width >= 1024)) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; } if (svga->hdisp == 832) svga->hdisp -= 32; @@ -4357,6 +4366,10 @@ s3_recalctimings(svga_t *svga) svga->hdisp <<= 1; svga->dots_per_clock <<= 1; svga->clock *= 2.0; + } else if ((clk_sel == 3) && (s3->width >= 1024)) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; } s3_log("TVP3026 968 16bpp: MiscOut=%x, clksel=%x.\n", (svga->miscout >> 2) & 3, clk_sel); if (svga->hdisp == 832) @@ -4443,9 +4456,20 @@ s3_recalctimings(svga_t *svga) case S3_VISION968: switch (s3->ramdac_type) { + case IBM_RGB: /*IBM RGB528 RAMDAC and clock chip*/ + svga->hdisp = (svga->hdisp << 2) / 3; + svga->dots_per_clock = (svga->dots_per_clock << 2) / 3; + svga->clock = (svga->clock * 4.0) / 3.0; + svga->clock /= 2.0; + if (!s3->elsa_eeprom) { + if (svga->hdisp == 832) + svga->hdisp -= 32; + } + break; + case TVP3026: /*TVP3026 RAMDAC and clock chip*/ svga->hdisp = (svga->hdisp << 1) / 3; - if (clk_sel == 2) { + if (clk_sel >= 2) { svga->hdisp <<= 1; svga->dots_per_clock <<= 1; svga->clock = (svga->clock * 4.0) / 3.0; @@ -4594,6 +4618,10 @@ s3_recalctimings(svga_t *svga) svga->hdisp <<= 1; svga->dots_per_clock <<= 1; svga->clock *= 2.0; + } else if ((clk_sel == 3) && (s3->width >= 1024)) { + svga->hdisp <<= 1; + svga->dots_per_clock <<= 1; + svga->clock *= 2.0; } if (svga->hdisp == 832) svga->hdisp -= 32; @@ -8197,7 +8225,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if ((s3->bpp == 1) || s3->color_16bit) { srcbase >>= 1; dstbase >>= 1; - } else if (s3->bpp == 3) { + } else if (s3->bpp >= 2) { srcbase >>= 2; dstbase >>= 2; } @@ -8222,7 +8250,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi } if ((s3->bpp == 1) || s3->color_16bit) count >>= 1; - else if (s3->bpp == 3) + else if (s3->bpp >= 2) count >>= 2; } } @@ -8930,6 +8958,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi s3->accel.cy = s3->accel.cur_y & 0xfff; if (s3->bpp == 2) { + s3_log("24bpp x68 rectfill: cmd=%04x CX=%d, CY=%d.\n", s3->accel.cmd, s3->accel.cx, s3->accel.cy); s3->accel.cx *= 3; s3->accel.cy *= 3; } else if ((s3->bpp == 0) && (svga->bpp == 24)) @@ -9091,16 +9120,11 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (wrt_mask == 0x0000ffff) wrt_mask = 0xffffffff; - if ((rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) + if ((rd_mask == 0x00ffffff) || (rd_mask == 0x0000ffff) || (rd_mask == 0x000000ff)) rd_mask = 0xffffffff; } while (count-- && (s3->accel.sy >= 0)) { - if (s3->accel.b2e8_pix && s3_cpu_src(s3) && !s3->accel.temp_cnt) { - mix_dat >>= 16; - s3->accel.temp_cnt = 16; - } - if ((((s3->accel.cx >= (clip_l * multiplier)) && (s3->accel.cx <= (clip_r * multiplier)) && (s3->accel.cy >= (clip_t * multiplier)) && (s3->accel.cy <= (clip_b * multiplier))) && !(s3->accel.multifunc[0xe] & 0x20)) || (((s3->accel.cx < (clip_l * multiplier)) && (s3->accel.cx > (clip_r * multiplier)) && (s3->accel.cy < (clip_t * multiplier)) && (s3->accel.cy > (clip_b * multiplier))) && (s3->accel.multifunc[0xe] & 0x20)) ) { switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) { @@ -9138,7 +9162,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, voi if (update) { if (s3->bpp == 2) - dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.cx - (s3->accel.minus * 3)) & s3->vram_mask]) & 0xffffff; + dest_dat = (*(uint32_t *) &vram_b[(s3->accel.dest + s3->accel.cx) & s3->vram_mask]) & 0xffffff; else { READ(s3->accel.dest + s3->accel.cx, dest_dat); } @@ -11515,8 +11539,8 @@ s3_init(const device_t *info) case S3_VISION968: switch (info->local) { - case S3_ELSAWIN2KPROX: case S3_DIAMOND_STEALTH64_968: + case S3_ELSAWIN2KPROX: case S3_PHOENIX_VISION968: case S3_NUMBER9_9FX_771: svga->dac_hwcursor_draw = ibm_rgb528_hwcursor_draw; @@ -11887,10 +11911,10 @@ s3_init(const device_t *info) if (info->local == S3_ELSAWIN2KPROX) { s3->elsa_eeprom = 1; ibm_rgb528_ramdac_set_ref_clock(svga->ramdac, svga, 28322000.0f); - } else if (info->local != S3_DIAMOND_STEALTH64_968) - ibm_rgb528_ramdac_set_ref_clock(svga->ramdac, svga, 16000000.0f); - else + } else if (info->local == S3_DIAMOND_STEALTH64_968) ibm_rgb528_ramdac_set_ref_clock(svga->ramdac, svga, 14318184.0f); + else + ibm_rgb528_ramdac_set_ref_clock(svga->ramdac, svga, 16000000.0f); break; default: svga->ramdac = device_add(&tvp3026_ramdac_device); From 817bfa5aec8954d636e72ec74918468cb422edf7 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 26 Aug 2025 19:51:37 -0400 Subject: [PATCH 135/233] Additional Joystick options --- src/game/gameport.c | 67 ++- src/game/joystick_ch_flightstick_pro.c | 275 +++++++++- src/game/joystick_standard.c | 689 ++++++++++++++++++------- src/include/86box/gameport.h | 64 ++- src/qt/languages/86box.pot | 109 +++- src/qt/languages/cs-CZ.po | 116 ++++- src/qt/languages/de-DE.po | 116 ++++- src/qt/languages/es-ES.po | 116 ++++- src/qt/languages/fi-FI.po | 120 ++++- src/qt/languages/fr-FR.po | 116 ++++- src/qt/languages/hr-HR.po | 116 ++++- src/qt/languages/it-IT.po | 116 ++++- src/qt/languages/ja-JP.po | 116 ++++- src/qt/languages/ko-KR.po | 116 ++++- src/qt/languages/nb-NO.po | 116 ++++- src/qt/languages/nl-NL.po | 116 ++++- src/qt/languages/pl-PL.po | 116 ++++- src/qt/languages/pt-BR.po | 116 ++++- src/qt/languages/pt-PT.po | 116 ++++- src/qt/languages/ru-RU.po | 116 ++++- src/qt/languages/sk-SK.po | 116 ++++- src/qt/languages/sl-SI.po | 118 ++++- src/qt/languages/sv-SE.po | 116 ++++- src/qt/languages/tr-TR.po | 116 ++++- src/qt/languages/uk-UA.po | 116 ++++- src/qt/languages/vi-VN.po | 116 ++++- src/qt/languages/zh-CN.po | 116 ++++- src/qt/languages/zh-TW.po | 116 ++++- 28 files changed, 3205 insertions(+), 673 deletions(-) diff --git a/src/game/gameport.c b/src/game/gameport.c index 88ff5cc8a..d7ecadec4 100644 --- a/src/game/gameport.c +++ b/src/game/gameport.c @@ -88,27 +88,52 @@ static const joystick_t joystick_none = { static const struct { const joystick_t *joystick; } joysticks[] = { - { &joystick_none }, - { &joystick_2axis_2button }, - { &joystick_2button_gamepad }, - { &joystick_2button_flight_yoke }, - { &joystick_2axis_4button }, - { &joystick_4button_gamepad }, - { &joystick_4button_flight_yoke }, - { &joystick_2axis_6button }, - { &joystick_2axis_8button }, - { &joystick_3axis_2button }, - { &joystick_2button_yoke_throttle }, - { &joystick_3axis_4button }, - { &joystick_steering_wheel_4_button }, - { &joystick_4button_yoke_throttle }, - { &joystick_4axis_4button }, - { &joystick_ch_flightstick_pro }, - { &joystick_ch_flightstick_pro_ch_pedals }, - { &joystick_sw_pad }, - { &joystick_tm_fcs }, - { &joystick_tm_fcs_rcs }, - { NULL } + { &joystick_none }, + { &joystick_generic_paddle }, + { &joystick_2axis_1button }, + { &joystick_2axis_2button }, + { &joystick_2axis_3button }, + { &joystick_2axis_4button }, + { &joystick_2axis_6button }, + { &joystick_2axis_8button }, + { &joystick_3axis_2button }, + { &joystick_3axis_3button }, + { &joystick_3axis_4button }, + { &joystick_4axis_2button }, + { &joystick_4axis_3button }, + { &joystick_4axis_4button }, + { &joystick_2button_gamepad }, + { &joystick_3button_gamepad }, + { &joystick_4button_gamepad }, + { &joystick_6button_gamepad }, + { &joystick_gravis_gamepad }, + { &joystick_2button_flight_yoke }, + { &joystick_3button_flight_yoke }, + { &joystick_4button_flight_yoke }, + { &joystick_2button_yoke_throttle }, + { &joystick_3button_yoke_throttle }, + { &joystick_4button_yoke_throttle }, + { &joystick_steering_wheel_2_button }, + { &joystick_steering_wheel_3_button }, + { &joystick_steering_wheel_4_button }, + { &joystick_ch_flightstick }, + { &joystick_ch_flightstick_ch_pedals }, + { &joystick_ch_flightstick_ch_pedals_pro }, + { &joystick_ch_flightstick_pro }, + { &joystick_ch_flightstick_pro_ch_pedals }, + { &joystick_ch_flightstick_pro_ch_pedals_pro }, + { &joystick_ch_virtual_pilot }, + { &joystick_ch_virtual_pilot_ch_pedals }, + { &joystick_ch_virtual_pilot_ch_pedals_pro }, + { &joystick_ch_virtual_pilot_pro }, + { &joystick_ch_virtual_pilot_pro_ch_pedals }, + { &joystick_ch_virtual_pilot_pro_ch_pedals_pro }, + { &joystick_sw_pad }, + { &joystick_tm_fcs }, + { &joystick_tm_fcs_rcs }, + { &joystick_tm_formula_t1t2 }, + { &joystick_tm_formula_t1t2wa }, + { NULL } }; static joystick_instance_t *joystick_instance[GAMEPORT_MAX] = { NULL, NULL }; diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index 84dc5a380..0c318555a 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -57,6 +57,22 @@ ch_flightstick_pro_close(UNUSED(void *priv)) // } +static uint8_t +ch_flightstick_read(UNUSED(void *priv)) +{ + uint8_t ret = 0xf0; + uint8_t gp = 0; + + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) + ret &= ~0x10; + if (joystick_state[gp][0].button[1]) + ret &= ~0x20; + } + + return ret; +} + static uint8_t ch_flightstick_pro_read(UNUSED(void *priv)) { @@ -72,20 +88,81 @@ ch_flightstick_pro_read(UNUSED(void *priv)) ret &= ~0x40; if (joystick_state[gp][0].button[3]) ret &= ~0x80; + // POV Hat if (joystick_state[gp][0].pov[0] != -1) { // POV Up if ((joystick_state[gp][0].pov[0] > 315) || (joystick_state[gp][0].pov[0] < 45)) - ret &= ~0xf0; + ret &= ~0xf0; // 1, 2, 3, 4 // POV Right - else if ((joystick_state[gp][0].pov[0]) >= 45 && (joystick_state[gp][0].pov[0] < 135)) - ret &= ~0xb0; + else if ((joystick_state[gp][0].pov[0] >= 45) && (joystick_state[gp][0].pov[0] < 135)) + ret &= ~0xb0; // 1, 2, 4 // POV Down - else if ((joystick_state[gp][0].pov[0]) >= 135 && (joystick_state[gp][0].pov[0] < 225)) - ret &= ~0x70; + else if ((joystick_state[gp][0].pov[0] >= 135) && (joystick_state[gp][0].pov[0] < 225)) + ret &= ~0x70; // 1, 2, 3 // POV Left - else if ((joystick_state[gp][0].pov[0]) >= 225 && (joystick_state[gp][0].pov[0] < 315)) - ret &= ~0x30; + else if ((joystick_state[gp][0].pov[0] >= 225) && (joystick_state[gp][0].pov[0] < 315)) + ret &= ~0x30; // 1, 2 + } + } + + return ret; +} + +static uint8_t +ch_virtual_pilot_pro_read(UNUSED(void *priv)) +{ + uint8_t gp = 0; + uint8_t ret = 0xf0; + + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) // 1 + ret &= ~0x10; + if (joystick_state[gp][0].button[1]) // 2 + ret &= ~0x20; + if (joystick_state[gp][0].button[2]) // 3 + ret &= ~0x40; + if (joystick_state[gp][0].button[3]) // 4 + ret &= ~0x80; + if (joystick_state[gp][0].button[4]) // 1, 3 + ret &= ~0x50; + if (joystick_state[gp][0].button[5]) // 1, 4 + ret &= ~0x90; + + // Right POV Hat + uint8_t pov_id = 0; + + if (joystick_state[gp][0].pov[pov_id] != -1) { + // POV Up + if ((joystick_state[gp][0].pov[pov_id] > 315) || (joystick_state[gp][0].pov[pov_id] < 45)) + ret &= ~0xf0; // 1, 2, 3, 4 + // POV Right + else if ((joystick_state[gp][0].pov[pov_id] >= 45) && (joystick_state[gp][0].pov[pov_id] < 135)) + ret &= ~0xb0; // 1, 2, 4 + // POV Down + else if ((joystick_state[gp][0].pov[pov_id] >= 135) && (joystick_state[gp][0].pov[pov_id] < 225)) + ret &= ~0x70; // 1, 2, 3 + // POV Left + else if ((joystick_state[gp][0].pov[pov_id] >= 225) && (joystick_state[gp][0].pov[pov_id] < 315)) + ret &= ~0x30; // 1, 2 + } + + // Left POV Hat + pov_id = 1; + + if (joystick_state[gp][0].pov[pov_id] != -1) { + // POV Up + if ((joystick_state[gp][0].pov[pov_id] > 315) || (joystick_state[gp][0].pov[pov_id] < 45)) + ret &= ~0xe0; // 2, 3, 4 + // POV Right + else if ((joystick_state[gp][0].pov[pov_id] >= 45) && (joystick_state[gp][0].pov[pov_id] < 135)) + ret &= ~0xa0; // 2, 4 + // POV Down + else if ((joystick_state[gp][0].pov[pov_id] >= 135) && (joystick_state[gp][0].pov[pov_id] < 225)) + ret &= ~0x60; // 2, 3 + // POV Left + else if ((joystick_state[gp][0].pov[pov_id] >= 225) && (joystick_state[gp][0].pov[pov_id] < 315)) + ret &= ~0xc0; // 3, 4 } } @@ -148,6 +225,60 @@ ch_flightstick_pro_a0_over(UNUSED(void *priv)) // } +const joystick_t joystick_ch_flightstick = { + .name = "CH Flightstick", + .internal_name = "ch_flightstick", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_flightstick_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 3, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_ch_flightstick_ch_pedals = { + .name = "CH Flightstick + CH Pedals", + .internal_name = "ch_flightstick_ch_pedals", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_flightstick_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_ch_pedals_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 4, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_ch_flightstick_ch_pedals_pro = { + .name = "CH Flightstick + CH Pedals Pro", + .internal_name = "ch_flightstick_ch_pedals_pro", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_flightstick_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_ch_pedals_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 4, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + const joystick_t joystick_ch_flightstick_pro = { .name = "CH Flightstick Pro", .internal_name = "ch_flightstick_pro", @@ -161,7 +292,7 @@ const joystick_t joystick_ch_flightstick_pro = { .button_count = 4, .pov_count = 1, .max_joysticks = 1, - .axis_names = { "X axis", "Y axis", "Throttle" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" }, .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; @@ -179,7 +310,133 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals = { .button_count = 4, .pov_count = 1, .max_joysticks = 1, - .axis_names = { "X axis", "Y axis", "Throttle", "Rudder" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; + +const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro = { + .name = "CH Flightstick Pro + CH Pedals Pro", + .internal_name = "ch_flightstick_pro_ch_pedals_pro", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_flightstick_pro_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_ch_pedals_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 4, + .button_count = 4, + .pov_count = 1, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .pov_names = { "POV" } +}; + +const joystick_t joystick_ch_virtual_pilot = { + .name = "CH Virtual Pilot", + .internal_name = "ch_virtual_pilot", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_flightstick_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 3, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_ch_virtual_pilot_ch_pedals = { + .name = "CH Virtual Pilot + CH Pedals", + .internal_name = "ch_virtual_pilot_ch_pedals", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_flightstick_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_ch_pedals_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 4, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_ch_virtual_pilot_ch_pedals_pro = { + .name = "CH Virtual Pilot + CH Pedals Pro", + .internal_name = "ch_virtual_pilot_ch_pedals_pro", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_flightstick_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_ch_pedals_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 4, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_ch_virtual_pilot_pro = { + .name = "CH Virtual Pilot Pro", + .internal_name = "ch_virtual_pilot_pro", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_virtual_pilot_pro_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 3, + .button_count = 6, + .pov_count = 2, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" }, + .pov_names = { "Right POV", "Left POV" } +}; + +const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals = { + .name = "CH Virtual Pilot Pro + CH Pedals", + .internal_name = "ch_virtual_pilot_pro_ch_pedals", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_virtual_pilot_pro_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_ch_pedals_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 4, + .button_count = 6, + .pov_count = 2, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" }, + .pov_names = { "Right POV", "Left POV" } +}; + +const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals_pro = { + .name = "CH Virtual Pilot Pro + CH Pedals Pro", + .internal_name = "ch_virtual_pilot_pro_ch_pedals_pro", + .init = ch_flightstick_pro_init, + .close = ch_flightstick_pro_close, + .read = ch_virtual_pilot_pro_read, + .write = ch_flightstick_pro_write, + .read_axis = ch_flightstick_pro_ch_pedals_read_axis, + .a0_over = ch_flightstick_pro_a0_over, + .axis_count = 4, + .button_count = 6, + .pov_count = 2, + .max_joysticks = 1, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" }, + .pov_names = { "Right POV", "Left POV" } +}; diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index 60ea4b57d..8bb47937f 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -57,6 +57,27 @@ joystick_standard_close(UNUSED(void *priv)) // } +static uint8_t +joystick_paddle_read(UNUSED(void *priv)) +{ + uint8_t gp = 0; + uint8_t ret = 0xf0; + + if ((JOYSTICK_PRESENT(gp, 0)) && (joystick_state[gp][0].button[0])) + ret &= ~0x10; + + if ((JOYSTICK_PRESENT(gp, 2)) && (joystick_state[gp][2].button[0])) + ret &= ~0x20; + + if ((JOYSTICK_PRESENT(gp, 1)) && (joystick_state[gp][1].button[0])) + ret &= ~0x40; + + if ((JOYSTICK_PRESENT(gp, 3)) && (joystick_state[gp][3].button[0])) + ret &= ~0x80; + + return ret; +} + static uint8_t joystick_standard_read(UNUSED(void *priv)) { @@ -80,6 +101,24 @@ joystick_standard_read(UNUSED(void *priv)) return ret; } +static uint8_t +joystick_standard_read_3button(UNUSED(void *priv)) +{ + uint8_t gp = 0; + uint8_t ret = 0xf0; + + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) + ret &= ~0x10; + if (joystick_state[gp][0].button[1]) + ret &= ~0x20; + if (joystick_state[gp][0].button[2]) + ret &= ~0x40; + } + + return ret; +} + static uint8_t joystick_standard_read_4button(UNUSED(void *priv)) { @@ -106,6 +145,33 @@ joystick_standard_write(UNUSED(void *priv)) // } +static int +joystick_paddle_read_axis(UNUSED(void *priv), int axis) +{ + uint8_t gp = 0; + + switch (axis) { + case 0: + if (!JOYSTICK_PRESENT(gp, 0)) + return AXIS_NOT_PRESENT; + return joystick_state[gp][0].axis[0]; + case 1: + if (!JOYSTICK_PRESENT(gp, 2)) + return AXIS_NOT_PRESENT; + return joystick_state[gp][2].axis[0]; + case 2: + if (!JOYSTICK_PRESENT(gp, 1)) + return AXIS_NOT_PRESENT; + return joystick_state[gp][1].axis[0]; + case 3: + if (!JOYSTICK_PRESENT(gp, 3)) + return AXIS_NOT_PRESENT; + return joystick_state[gp][3].axis[0]; + default: + return 0; + } +} + static int joystick_standard_read_axis(UNUSED(void *priv), int axis) { @@ -134,7 +200,7 @@ joystick_standard_read_axis(UNUSED(void *priv), int axis) } static int -joystick_standard_read_axis_4button(UNUSED(void *priv), int axis) +joystick_standard_read_axis_2axis(UNUSED(void *priv), int axis) { uint8_t gp = 0; @@ -168,7 +234,7 @@ joystick_standard_read_axis_with_pov(UNUSED(void *priv), int axis) return joystick_state[gp][0].axis[0]; case 1: // Y-axis return joystick_state[gp][0].axis[1]; - case 2: // POV Hat (mapped to the 3rd logical axis, index 2) + case 2: // POV Hat if (joystick_state[gp][0].pov[0] == -1) return 32767; // Centered/No input (as per tm_fcs_rcs_read_axis example) if (joystick_state[gp][0].pov[0] > 315 || joystick_state[gp][0].pov[0] < 45) @@ -179,9 +245,8 @@ joystick_standard_read_axis_with_pov(UNUSED(void *priv), int axis) return 0; // Right/Left (example, matches tm_fcs_rcs_read_axis) if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315) return 16384; // Down-Left (example value, matches tm_fcs_rcs_read_axis) - return 0; // Fallback - case 3: // This case might be used for a Z-axis if present, or can return 0 if not. - // For gamepads with only X/Y and POV, this will likely be unused or return 0. + return 0; + case 3: return 0; default: return 0; @@ -289,6 +354,42 @@ joystick_standard_a0_over(UNUSED(void *priv)) // } +const joystick_t joystick_generic_paddle = { + .name = "Generic Paddle Controller(s)", + .internal_name = "generic_paddle", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_paddle_read, + .write = joystick_standard_write, + .read_axis = joystick_paddle_read_axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 1, + .button_count = 1, + .pov_count = 0, + .max_joysticks = 4, + .axis_names = { "X axis" }, + .button_names = { "Button 1" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_2axis_1button = { + .name = "2-axis, 1-button joystick(s)", + .internal_name = "2axis_1button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 1, + .pov_count = 0, + .max_joysticks = 2, + .axis_names = { "X axis", "Y axis" }, + .button_names = { "Button 1" }, + .pov_names = { NULL } +}; + const joystick_t joystick_2axis_2button = { .name = "2-axis, 2-button joystick(s)", .internal_name = "2axis_2button", @@ -307,39 +408,21 @@ const joystick_t joystick_2axis_2button = { .pov_names = { NULL } }; -const joystick_t joystick_2button_gamepad = { - .name = "2-button gamepad(s)", - .internal_name = "2button_gamepad", +const joystick_t joystick_2axis_3button = { + .name = "2-axis, 3-button joystick", + .internal_name = "2axis_3button", .init = joystick_standard_init, .close = joystick_standard_close, - .read = joystick_standard_read, + .read = joystick_standard_read_3button, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis, + .read_axis = joystick_standard_read_axis_2axis, .a0_over = joystick_standard_a0_over, .axis_count = 2, - .button_count = 2, + .button_count = 3, .pov_count = 0, - .max_joysticks = 2, + .max_joysticks = 1, .axis_names = { "X axis", "Y axis" }, - .button_names = { "Button 1", "Button 2" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_2button_flight_yoke = { - .name = "2-button flight yoke", - .internal_name = "2button_flight_yoke", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis, - .a0_over = joystick_standard_a0_over, - .axis_count = 2, - .button_count = 2, - .pov_count = 0, - .max_joysticks = 2, - .axis_names = { "Roll axis", "Pitch axis" }, - .button_names = { "Trigger", "Button 2" }, + .button_names = { "Button 1", "Button 2", "Button 3" }, .pov_names = { NULL } }; @@ -350,7 +433,7 @@ const joystick_t joystick_2axis_4button = { .close = joystick_standard_close, .read = joystick_standard_read_4button, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_4button, + .read_axis = joystick_standard_read_axis_2axis, .a0_over = joystick_standard_a0_over, .axis_count = 2, .button_count = 4, @@ -361,150 +444,6 @@ const joystick_t joystick_2axis_4button = { .pov_names = { NULL } }; -const joystick_t joystick_4button_gamepad = { - .name = "4-button gamepad", - .internal_name = "4button_gamepad", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read_4button, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_4button, - .a0_over = joystick_standard_a0_over, - .axis_count = 2, - .button_count = 4, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "X axis", "Y axis" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_4button_flight_yoke = { - .name = "4-button flight yoke", - .internal_name = "4button_flight_yoke", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read_4button, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_4button, - .a0_over = joystick_standard_a0_over, - .axis_count = 2, - .button_count = 4, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "Roll axis", "Pitch axis" }, - .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_3axis_2button = { - .name = "3-axis, 2-button joystick", - .internal_name = "3axis_2button", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, - .a0_over = joystick_standard_a0_over, - .axis_count = 3, - .button_count = 2, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "X axis", "Y axis", "Z axis" }, - .button_names = { "Button 1", "Button 2" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_2button_yoke_throttle = { - .name = "2-button flight yoke with throttle", - .internal_name = "2button_yoke_throttle", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, - .a0_over = joystick_standard_a0_over, - .axis_count = 3, - .button_count = 2, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "Roll axis", "Pitch axis", "Throttle axis" }, - .button_names = { "Trigger", "Button 2" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_3axis_4button = { - .name = "3-axis, 4-button joystick", - .internal_name = "3axis_4button", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read_4button, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, - .a0_over = joystick_standard_a0_over, - .axis_count = 3, - .button_count = 4, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "X axis", "Y axis", "Z axis" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_4button_yoke_throttle = { - .name = "4-button flight yoke with throttle", - .internal_name = "4button_yoke_throttle", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read_4button, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, - .a0_over = joystick_standard_a0_over, - .axis_count = 3, - .button_count = 4, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "Roll axis", "Pitch axis", "Throttle axis" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_steering_wheel_4_button = { - .name = "Steering Wheel (3-axis, 4-button)", - .internal_name = "steering_wheel_4_button", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read_4button, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, - .a0_over = joystick_standard_a0_over, - .axis_count = 3, - .button_count = 4, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, - .pov_names = { NULL } -}; - -const joystick_t joystick_4axis_4button = { - .name = "4-axis, 4-button joystick", - .internal_name = "4axis_4button", - .init = joystick_standard_init, - .close = joystick_standard_close, - .read = joystick_standard_read_4button, - .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_4axis, - .a0_over = joystick_standard_a0_over, - .axis_count = 4, - .button_count = 4, - .pov_count = 0, - .max_joysticks = 1, - .axis_names = { "X axis", "Y axis", "Z axis", "zX axis" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, - .pov_names = { NULL } -}; - const joystick_t joystick_2axis_6button = { .name = "2-axis, 6-button joystick", .internal_name = "2axis_6button", @@ -540,3 +479,401 @@ const joystick_t joystick_2axis_8button = { .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6", "Button 7", "Button 8" }, .pov_names = { NULL } }; + +const joystick_t joystick_3axis_2button = { + .name = "3-axis, 2-button joystick", + .internal_name = "3axis_2button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis", "Z axis" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_3axis_3button = { + .name = "3-axis, 3-button joystick", + .internal_name = "3axis_3button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_3button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 3, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis", "Z axis" }, + .button_names = { "Button 1", "Button 2", "Button 3" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_3axis_4button = { + .name = "3-axis, 4-button joystick", + .internal_name = "3axis_4button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis", "Z axis" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_4axis_2button = { + .name = "4-axis, 2-button joystick", + .internal_name = "4axis_2button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 4, + .button_count = 3, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis", "Z axis", "zX axis" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_4axis_3button = { + .name = "4-axis, 3-button joystick", + .internal_name = "4axis_3button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_3button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 4, + .button_count = 3, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis", "Z axis", "zX axis" }, + .button_names = { "Button 1", "Button 2", "Button 3" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_4axis_4button = { + .name = "4-axis, 4-button joystick", + .internal_name = "4axis_4button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 4, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis", "Z axis", "zX axis" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_2button_gamepad = { + .name = "2-button gamepad(s)", + .internal_name = "2button_gamepad", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 2, + .axis_names = { "X axis", "Y axis" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_3button_gamepad = { + .name = "3-button gamepad", + .internal_name = "3button_gamepad", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_3button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_2axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 3, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis" }, + .button_names = { "Button 1", "Button 2", "Button 3" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_4button_gamepad = { + .name = "4-button gamepad", + .internal_name = "4button_gamepad", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_2axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_6button_gamepad = { + .name = "6-button gamepad", + .internal_name = "6button_gamepad", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_6button, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 6, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_gravis_gamepad = { + .name = "Gravis PC GamePad", + .internal_name = "gravis_gamepad", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_2axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "X axis", "Y axis" }, + // TODO: Check this + .button_names = { "Button 1 (Red)", "Button 2 (Blue)", "Button 3 (Yellow)", "Button 4 (Green)" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_2button_flight_yoke = { + .name = "2-button flight yoke", + .internal_name = "2button_flight_yoke", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 2, + .axis_names = { "Roll axis", "Pitch axis" }, + .button_names = { "Trigger", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_3button_flight_yoke = { + .name = "3-button flight yoke", + .internal_name = "3button_flight_yoke", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_3button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_2axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 3, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Roll axis", "Pitch axis" }, + .button_names = { "Trigger", "Button 2", "Button 3" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_4button_flight_yoke = { + .name = "4-button flight yoke", + .internal_name = "4button_flight_yoke", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_2axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Roll axis", "Pitch axis" }, + .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_2button_yoke_throttle = { + .name = "2-button flight yoke with throttle", + .internal_name = "2button_yoke_throttle", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 2, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Roll axis", "Pitch axis", "Throttle axis" }, + .button_names = { "Trigger", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_3button_yoke_throttle = { + .name = "3-button flight yoke with throttle", + .internal_name = "3button_yoke_throttle", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_3button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 3, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Roll axis", "Pitch axis", "Throttle axis" }, + .button_names = { "Button 1", "Button 2", "Button 3" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_4button_yoke_throttle = { + .name = "4-button flight yoke with throttle", + .internal_name = "4button_yoke_throttle", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Roll axis", "Pitch axis", "Throttle axis" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_steering_wheel_2_button = { + .name = "Steering Wheel (3-axis, 2-button)", + .internal_name = "steering_wheel_2_button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, + .button_names = { "Button 1", "Button 2" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_steering_wheel_3_button = { + .name = "Steering Wheel (3-axis, 3-button)", + .internal_name = "steering_wheel_3_button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_3button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, + .button_names = { "Button 1", "Button 2", "Button 3" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_steering_wheel_4_button = { + .name = "Steering Wheel (3-axis, 4-button)", + .internal_name = "steering_wheel_4_button", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, + .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .pov_names = { NULL } +}; + +const joystick_t joystick_tm_formula_t1t2 = { + .name = "Thrustmaster Formula T1/T2 with Adaptor", + .internal_name = "thrustmaster_formula_t1t2", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_2axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 2, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Steering axis", "Accelerator/Brake axis" }, + .button_names = { "Shifter Up", "Shifter Down", "Top Console Switch", "Bottom Console Switch" }, + .pov_names = { NULL } +}; + +// TODO Validate this +const joystick_t joystick_tm_formula_t1t2wa = { + .name = "Thrustmaster Formula T1/T2 without Adaptor", + .internal_name = "thrustmaster_formula_t1t2wa", + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis, + .a0_over = joystick_standard_a0_over, + .axis_count = 3, + .button_count = 4, + .pov_count = 0, + .max_joysticks = 1, + .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, + .button_names = { "Shifter Up", "Shifter Down", "Top Console Switch", "Bottom Console Switch" }, + .pov_names = { NULL } +}; diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index 1b86c0567..878472a55 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -172,29 +172,73 @@ extern void gameport_update_joystick_type(uint8_t gp); extern void gameport_remap(void *priv, uint16_t address); extern void *gameport_add(const device_t *gameport_type); +// Paddle Controllers +extern const joystick_t joystick_generic_paddle; + +// 2 axis Generic Joysticks +extern const joystick_t joystick_2axis_1button; extern const joystick_t joystick_2axis_2button; -extern const joystick_t joystick_2button_gamepad; -extern const joystick_t joystick_2button_flight_yoke; +extern const joystick_t joystick_2axis_3button; extern const joystick_t joystick_2axis_4button; -extern const joystick_t joystick_4button_gamepad; -extern const joystick_t joystick_4button_flight_yoke; -extern const joystick_t joystick_3axis_2button; -extern const joystick_t joystick_2button_yoke_throttle; -extern const joystick_t joystick_3axis_4button; -extern const joystick_t joystick_4button_yoke_throttle; -extern const joystick_t joystick_steering_wheel_4_button; -extern const joystick_t joystick_4axis_4button; extern const joystick_t joystick_2axis_6button; extern const joystick_t joystick_2axis_8button; +// 2 axis Generic Joysticks +extern const joystick_t joystick_3axis_2button; +extern const joystick_t joystick_3axis_3button; +extern const joystick_t joystick_3axis_4button; + +// 4 axis Generic Joysticks +extern const joystick_t joystick_4axis_2button; +extern const joystick_t joystick_4axis_3button; +extern const joystick_t joystick_4axis_4button; + +// Generic Gamepads +extern const joystick_t joystick_2button_gamepad; +extern const joystick_t joystick_3button_gamepad; +extern const joystick_t joystick_4button_gamepad; +extern const joystick_t joystick_6button_gamepad; + +extern const joystick_t joystick_gravis_gamepad; + +// Generic Steering Wheels +extern const joystick_t joystick_steering_wheel_2_button; +extern const joystick_t joystick_steering_wheel_3_button; +extern const joystick_t joystick_steering_wheel_4_button; + +// Generic Flight Yokes +extern const joystick_t joystick_2button_flight_yoke; +extern const joystick_t joystick_4button_flight_yoke; +extern const joystick_t joystick_3button_flight_yoke; + +extern const joystick_t joystick_2button_yoke_throttle; +extern const joystick_t joystick_3button_yoke_throttle; +extern const joystick_t joystick_4button_yoke_throttle; + +extern const joystick_t joystick_ch_flightstick; +extern const joystick_t joystick_ch_flightstick_ch_pedals; +extern const joystick_t joystick_ch_flightstick_ch_pedals_pro; + extern const joystick_t joystick_ch_flightstick_pro; extern const joystick_t joystick_ch_flightstick_pro_ch_pedals; +extern const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro; + +extern const joystick_t joystick_ch_virtual_pilot; +extern const joystick_t joystick_ch_virtual_pilot_ch_pedals; +extern const joystick_t joystick_ch_virtual_pilot_ch_pedals_pro; + +extern const joystick_t joystick_ch_virtual_pilot_pro; +extern const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals; +extern const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals_pro; extern const joystick_t joystick_sw_pad; extern const joystick_t joystick_tm_fcs; extern const joystick_t joystick_tm_fcs_rcs; +extern const joystick_t joystick_tm_formula_t1t2; +extern const joystick_t joystick_tm_formula_t1t2wa; + #ifdef __cplusplus } #endif diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 9b6ce9399..fd935ffc5 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -852,9 +852,18 @@ msgstr "" msgid "Invalid PCap device" msgstr "" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "" + msgid "2-axis, 2-button joystick(s)" msgstr "" +msgid "2-axis, 3-button joystick" +msgstr "" + msgid "2-axis, 4-button joystick" msgstr "" @@ -867,18 +876,99 @@ msgstr "" msgid "3-axis, 2-button joystick" msgstr "" +msgid "3-axis, 3-button joystick" +msgstr "" + msgid "3-axis, 4-button joystick" msgstr "" +msgid "4-axis, 2-button joystick" +msgstr "" + +msgid "4-axis, 3-button joystick" +msgstr "" + msgid "4-axis, 4-button joystick" msgstr "" +msgid "2-button gamepad(s)" +msgstr "" + +msgid "3-button gamepad" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "6-button gamepad" +msgstr "" + +msgid "Gravis PC GamePad" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "3-button flight yoke" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "3-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "" + +msgid "CH Flightstick" +msgstr "" + +msgid "CH Flightstick + CH Pedals" +msgstr "" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "" + msgid "CH Flightstick Pro" msgstr "" msgid "CH Flightstick Pro + CH Pedals" msgstr "" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "" + +msgid "CH Virtual Pilot" +msgstr "" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "" + +msgid "CH Virtual Pilot Pro" +msgstr "" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "" @@ -888,25 +978,10 @@ msgstr "" msgid "Thrustmaster FCS + Rudder Control System" msgstr "" -msgid "2-button gamepad(s)" +msgid "Thrustmaster Formula T1/T2 with Adaptor" msgstr "" -msgid "2-button flight yoke" -msgstr "" - -msgid "4-button gamepad" -msgstr "" - -msgid "4-button flight yoke" -msgstr "" - -msgid "2-button flight yoke with throttle" -msgstr "" - -msgid "4-button flight yoke with throttle" -msgstr "" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" msgstr "" msgid "None" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 03103a3e3..1aa30bdeb 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -852,9 +852,18 @@ msgstr "Nebyla nalezena Å¾Ă¡dnĂ¡ PCap zaÅ™Ă­zenĂ­" msgid "Invalid PCap device" msgstr "NeplatnĂ© PCap zaÅ™Ă­zenĂ­" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Joystick s 2 osami a 1 tlaÄĂ­tky" + msgid "2-axis, 2-button joystick(s)" msgstr "Joystick s 2 osami a 2 tlaÄĂ­tky" +msgid "2-axis, 3-button joystick" +msgstr "Joystick s 2 osami a 3 tlaÄĂ­tky" + msgid "2-axis, 4-button joystick" msgstr "Joystick s 2 osami a 4 tlaÄĂ­tky" @@ -867,18 +876,99 @@ msgstr "Joystick s 2 osami a 8 tlaÄĂ­tky" msgid "3-axis, 2-button joystick" msgstr "Joystick s 3 osami a 2 tlaÄĂ­tky" +msgid "3-axis, 3-button joystick" +msgstr "Joystick s 3 osami a 3 tlaÄĂ­tky" + msgid "3-axis, 4-button joystick" msgstr "Joystick s 3 osami a 4 tlaÄĂ­tky" +msgid "4-axis, 2-button joystick" +msgstr "Joystick s 4 osami a 2 tlaÄĂ­tky" + +msgid "4-axis, 3-button joystick" +msgstr "Joystick s 4 osami a 3 tlaÄĂ­tky" + msgid "4-axis, 4-button joystick" msgstr "Joystick s 4 osami a 4 tlaÄĂ­tky" +msgid "2-button gamepad(s)" +msgstr "OvladaÄ se 2 tlaÄĂ­tky" + +msgid "3-button gamepad" +msgstr "OvladaÄ se 3 tlaÄĂ­tky" + +msgid "4-button gamepad" +msgstr "OvladaÄ se 4 tlaÄĂ­tky" + +msgid "6-button gamepad" +msgstr "OvladaÄ se 6 tlaÄĂ­tky" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "LeteckĂ½ knipl se 2 tlaÄĂ­tky" + +msgid "3-button flight yoke" +msgstr "LeteckĂ½ knipl se32 tlaÄĂ­tky" + +msgid "4-button flight yoke" +msgstr "LeteckĂ½ knipl se 4 tlaÄĂ­tky" + +msgid "2-button flight yoke with throttle" +msgstr "LeteckĂ½ knipl s 2 tlaÄĂ­tky a pĂ¡kou" + +msgid "3-button flight yoke with throttle" +msgstr "LeteckĂ½ knipl s 3 tlaÄĂ­tky a pĂ¡kou" + +msgid "4-button flight yoke with throttle" +msgstr "LeteckĂ½ knipl s 4 tlaÄĂ­tky a pĂ¡kou" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volant (3 osy, 2 tlaÄĂ­tka)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volant (3 osy, 3 tlaÄĂ­tka)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volant (3 osy, 4 tlaÄĂ­tka)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "OvladaÄ se 2 tlaÄĂ­tky" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "LeteckĂ½ knipl se 2 tlaÄĂ­tky" - -msgid "4-button gamepad" -msgstr "OvladaÄ se 4 tlaÄĂ­tky" - -msgid "4-button flight yoke" -msgstr "LeteckĂ½ knipl se 4 tlaÄĂ­tky" - -msgid "2-button flight yoke with throttle" -msgstr "LeteckĂ½ knipl s 2 tlaÄĂ­tky a pĂ¡kou" - -msgid "4-button flight yoke with throttle" -msgstr "LeteckĂ½ knipl s 4 tlaÄĂ­tky a pĂ¡kou" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volant pro Windows 95 (3 osy, 4 tlaÄĂ­tka)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "ŽadnĂ©" @@ -2988,6 +3063,9 @@ msgstr "Režim roztaženĂ­ vstupu OpenGL" msgid "Color scheme" msgstr "BarevnĂ© schĂ©ma" +msgid "System" +msgstr "" + msgid "Light" msgstr "SvÄ›tlĂ©" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index bdcddfe8d..ed479ab13 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -852,9 +852,18 @@ msgstr "Keine PCap-Geräte gefunden" msgid "Invalid PCap device" msgstr "UngĂ¼ltiges PCap-Gerät" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2-Achsen-, 1-Tasten-Joystick(s)" + msgid "2-axis, 2-button joystick(s)" msgstr "2-Achsen-, 2-Tasten-Joystick(s)" +msgid "2-axis, 3-button joystick" +msgstr "2-Achsen-, 3-Tasten-Joystick" + msgid "2-axis, 4-button joystick" msgstr "2-Achsen-, 4-Tasten-Joystick" @@ -867,18 +876,99 @@ msgstr "2-Achsen-, 8-Tasten-Joystick" msgid "3-axis, 2-button joystick" msgstr "3-Achsen-, 2-Tasten-Joystick" +msgid "3-axis, 3-button joystick" +msgstr "3-Achsen-, 3-Tasten-Joystick" + msgid "3-axis, 4-button joystick" msgstr "3-Achsen-, 4-Tasten-Joystick" +msgid "4-axis, 2-button joystick" +msgstr "4-Achsen-, 2-Tasten-Joystick" + +msgid "4-axis, 3-button joystick" +msgstr "4-Achsen-, 3-Tasten-Joystick" + msgid "4-axis, 4-button joystick" msgstr "4-Achsen-, 4-Tasten-Joystick" +msgid "2-button gamepad(s)" +msgstr "2-Tasten-Gamepad(s)" + +msgid "3-button gamepad" +msgstr "3-Tasten-Gamepad" + +msgid "4-button gamepad" +msgstr "4-Tasten-Gamepad" + +msgid "6-button gamepad" +msgstr "6-Tasten-Gamepad" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2-Tasten-Steuerhorn" + +msgid "3-button flight yoke" +msgstr "3-Tasten-Steuerhorn" + +msgid "4-button flight yoke" +msgstr "4-Tasten-Steuerhorn" + +msgid "2-button flight yoke with throttle" +msgstr "2-Tasten-Steuerhorn mit Schubregler" + +msgid "3-button flight yoke with throttle" +msgstr "3-Tasten-Steuerhorn mit Schubregler" + +msgid "4-button flight yoke with throttle" +msgstr "4-Tasten-Steuerhorn mit Schubregler" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Lenkrad (3-Achsen, 2-Tasten)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Lenkrad (3-Achsen, 3-Tasten)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Lenkrad (3-Achsen, 4-Tasten)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedale" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedale Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedale" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedale Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedale" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedale Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "2-Tasten-Gamepad(s)" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2-Tasten-Steuerhorn" - -msgid "4-button gamepad" -msgstr "4-Tasten-Gamepad" - -msgid "4-button flight yoke" -msgstr "4-Tasten-Steuerhorn" - -msgid "2-button flight yoke with throttle" -msgstr "2-Tasten-Steuerhorn mit Schubregler" - -msgid "4-button flight yoke with throttle" -msgstr "4-Tasten-Steuerhorn mit Schubregler" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 Lenkrad (3-Achsen, 4-Tasten)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Ohne" @@ -2988,6 +3063,9 @@ msgstr "Eingabestreckungsmodus von OpenGL" msgid "Color scheme" msgstr "Farbschema" +msgid "System" +msgstr "" + msgid "Light" msgstr "Licht" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 2bf3f5181..bcf5a0026 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -852,9 +852,18 @@ msgstr "No se encontraron dispositivos PCap" msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Mando(s) de 2 ejes, 1 botones" + msgid "2-axis, 2-button joystick(s)" msgstr "Mando(s) de 2 ejes, 2 botones" +msgid "2-axis, 3-button joystick" +msgstr "Mando de 2 ejes, 3 botones" + msgid "2-axis, 4-button joystick" msgstr "Mando de 2 ejes, 4 botones" @@ -867,18 +876,99 @@ msgstr "Mando de 2 ejes, 8 botones" msgid "3-axis, 2-button joystick" msgstr "Mando de 3 ejes, 2 botones" +msgid "3-axis, 3-button joystick" +msgstr "Mando de 3 ejes, 3 botones" + msgid "3-axis, 4-button joystick" msgstr "Mando de 3 ejes, 4 botones" +msgid "4-axis, 2-button joystick" +msgstr "Mando de 4 ejes, 2 botones" + +msgid "4-axis, 3-button joystick" +msgstr "Mando de 4 ejes, 3 botones" + msgid "4-axis, 4-button joystick" msgstr "Mando de 4 ejes, 4 botones" +msgid "2-button gamepad(s)" +msgstr "Mando(s) de juegos de 2 botones" + +msgid "4-button gamepad" +msgstr "Mando de juegos de 3 botones" + +msgid "4-button gamepad" +msgstr "Mando de juegos de 4 botones" + +msgid "6-button gamepad" +msgstr "Mando de juegos de 6 botones" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Yugo de vuelo de 2 botones" + +msgid "3-button flight yoke" +msgstr "Yugo de vuelo de 3 botones" + +msgid "4-button flight yoke" +msgstr "Yugo de vuelo de 4 botones" + +msgid "2-button flight yoke with throttle" +msgstr "Yugo de vuelo de 2 botones con acelerador" + +msgid "3-button flight yoke with throttle" +msgstr "Yugo de vuelo de 3 botones con acelerador" + +msgid "4-button flight yoke with throttle" +msgstr "Yugo de vuelo de 4 botones con acelerador" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volante (de 3 ejes, 2 botones)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volante (de 3 ejes, 3 botones)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volante (de 3 ejes, 4 botones)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "Mando(s) de juegos de 2 botones" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Yugo de vuelo de 2 botones" - -msgid "4-button gamepad" -msgstr "Mando de juegos de 4 botones" - -msgid "4-button flight yoke" -msgstr "Yugo de vuelo de 4 botones" - -msgid "2-button flight yoke with throttle" -msgstr "Yugo de vuelo de 2 botones con acelerador" - -msgid "4-button flight yoke with throttle" -msgstr "Yugo de vuelo de 4 botones con acelerador" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volante Win95 (de 3 ejes, 4 botones)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Ninguno" @@ -2988,6 +3063,9 @@ msgstr "Modo de estiramiento de entrada de OpenGL" msgid "Color scheme" msgstr "Esquema de colores" +msgid "System" +msgstr "" + msgid "Light" msgstr "Luz" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 24102f071..96b1c03aa 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -852,9 +852,18 @@ msgstr "PCap-laitteita ei löytynyt" msgid "Invalid PCap device" msgstr "Virheellinen PCap-laite" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2-akseliset 1-painikkeiset peliohjaimet" + msgid "2-axis, 2-button joystick(s)" msgstr "2-akseliset 2-painikkeiset peliohjaimet" +msgid "2-axis, 3-button joystick" +msgstr "2-akselinen 3-painikkeinen peliohjain" + msgid "2-axis, 4-button joystick" msgstr "2-akselinen 4-painikkeinen peliohjain" @@ -867,17 +876,98 @@ msgstr "2-akselinen 8-painikkeinen peliohjain" msgid "3-axis, 2-button joystick" msgstr "3-akselinen 2-painikkeinen peliohjain" +msgid "3-axis, 3-button joystick" +msgstr "3-akselinen 3-painikkeinen peliohjain" + msgid "3-axis, 4-button joystick" msgstr "3-akselinen 4-painikkeinen peliohjain" +msgid "4-axis, 2-button joystick" +msgstr "4-akselinen 2-painikkeinen peliohjain" + +msgid "4-axis, 3-button joystick" +msgstr "4-akselinen 3-painikkeinen peliohjain" + msgid "4-axis, 4-button joystick" msgstr "4-akselinen 4-painikkeinen peliohjain" +msgid "2-button gamepad(s)" +msgstr "2-painikkeiset peliohjaimet" + +msgid "3-button gamepad" +msgstr "3-painikkeinen peliohjain" + +msgid "4-button gamepad" +msgstr "4-painikkeinen peliohjain" + +msgid "6-button gamepad" +msgstr "6-painikkeinen peliohjain" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2-painikkeinen lento-ohjain" + +msgid "3-button flight yoke" +msgstr "3-painikkeinen lento-ohjain" + +msgid "4-button flight yoke" +msgstr "4-painikkeinen lento-ohjain" + +msgid "2-button flight yoke with throttle" +msgstr "2-painikkeinen lento-ohjain kaasuvivulla" + +msgid "3-button flight yoke with throttle" +msgstr "3-painikkeinen lento-ohjain kaasuvivulla" + +msgid "4-button flight yoke with throttle" +msgstr "4-painikkeinen lento-ohjain kaasuvivulla" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "ratti (3-akselinen, 2-painikkeinen)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "ratti (3-akselinen, 3-painikkeinen)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "ratti (3-akselinen, 4-painikkeinen)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" -msgstr "" +msgstr "CH Flightstick Pro + CH Pedals" + +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -886,28 +976,13 @@ msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" -msgstr "" +msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "2-painikkeiset peliohjaimet" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2-painikkeinen lento-ohjain" - -msgid "4-button gamepad" -msgstr "4-painikkeinen peliohjain" - -msgid "4-button flight yoke" -msgstr "4-painikkeinen lento-ohjain" - -msgid "2-button flight yoke with throttle" -msgstr "2-painikkeinen lento-ohjain kaasuvivulla" - -msgid "4-button flight yoke with throttle" -msgstr "4-painikkeinen lento-ohjain kaasuvivulla" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95-ratti (3-akselinen, 4-painikkeinen)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Ei mikään" @@ -2988,6 +3063,9 @@ msgstr "OpenGL-syötteen venytystila" msgid "Color scheme" msgstr "Väriteema" +msgid "System" +msgstr "" + msgid "Light" msgstr "Vaalea" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index c98280f3b..928666268 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -852,9 +852,18 @@ msgstr "Aucun dispositif PCap trouvĂ©" msgid "Invalid PCap device" msgstr "Dispositif PCap invalide" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Manette(s) avec 2 axes, 1 boutons" + msgid "2-axis, 2-button joystick(s)" msgstr "Manette(s) avec 2 axes, 2 boutons" +msgid "2-axis, 3-button joystick" +msgstr "Manette avec 2 axes, 4 boutons" + msgid "2-axis, 4-button joystick" msgstr "Manette avec 2 axes, 4 boutons" @@ -867,18 +876,99 @@ msgstr "Manette avec 2 axes, 8 boutons" msgid "3-axis, 2-button joystick" msgstr "Manette avec 3 axes, 2 boutons" +msgid "3-axis, 3-button joystick" +msgstr "Manette avec 3 axes, 3 boutons" + msgid "3-axis, 4-button joystick" msgstr "Manette avec 3 axes, 4 boutons" +msgid "4-axis, 2-button joystick" +msgstr "Manette avec 4 axes, 2 boutons" + +msgid "4-axis, 3-button joystick" +msgstr "Manette avec 4 axes, 3 boutons" + msgid "4-axis, 4-button joystick" msgstr "Manette avec 4 axes, 4 boutons" +msgid "2-button gamepad(s)" +msgstr "Manette(s) de jeu Ă  2 boutons" + +msgid "3-button gamepad" +msgstr "Manette de jeu Ă  2 boutons" + +msgid "4-button gamepad" +msgstr "Manette de jeu Ă  4 boutons" + +msgid "6-button gamepad" +msgstr "Manette de jeu Ă  6 boutons" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Manette de vol Ă  2 boutons" + +msgid "3-button flight yoke" +msgstr "Manette de vol Ă  3 boutons" + +msgid "4-button flight yoke" +msgstr "Manette de vol Ă  4 boutons" + +msgid "2-button flight yoke with throttle" +msgstr "Manette de vol Ă  2 boutons avec manette des gaz" + +msgid "3-button flight yoke with throttle" +msgstr "Manette de vol Ă  3 boutons avec manette des gaz" + +msgid "4-button flight yoke with throttle" +msgstr "Manette de vol Ă  4 boutons avec manette des gaz" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volant (3 axes, 2 boutons)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volant (3 axes, 3 boutons)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volant (3 axes, 4 boutons)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Système de contrĂ´le de vol Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "SCV Thrustmaster + Système de commande de gouvernail" -msgid "2-button gamepad(s)" -msgstr "Manette(s) de jeu Ă  2 boutons" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Manette de vol Ă  2 boutons" - -msgid "4-button gamepad" -msgstr "Manette de jeu Ă  2 boutons" - -msgid "4-button flight yoke" -msgstr "Manette de vol Ă  4 boutons" - -msgid "2-button flight yoke with throttle" -msgstr "Manette de vol Ă  2 boutons avec manette des gaz" - -msgid "4-button flight yoke with throttle" -msgstr "Manette de vol Ă  4 boutons avec manette des gaz" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volant Win95 (3 axes, 4 boutons)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Aucun" @@ -2988,6 +3063,9 @@ msgstr "Mode d'Ă©tirement des donnĂ©es d'entrĂ©e d'OpenGL" msgid "Color scheme" msgstr "Palette de couleurs" +msgid "System" +msgstr "" + msgid "Light" msgstr "Lumière" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 0ea717dce..b0f5a352e 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -852,9 +852,18 @@ msgstr "Nema PCap ureÄ‘aja" msgid "Invalid PCap device" msgstr "Nevažeći PCap ureÄ‘aj" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Palica za igru s 2 osi, 1 tipke" + msgid "2-axis, 2-button joystick(s)" msgstr "Palica za igru s 2 osi, 2 tipke" +msgid "2-axis, 3-button joystick" +msgstr "Palica za igru s 2 osi, 3 tipke" + msgid "2-axis, 4-button joystick" msgstr "Palica za igru s 2 osi, 4 tipke" @@ -867,18 +876,99 @@ msgstr "Palica za igru s 2 osi, 8 tipke" msgid "3-axis, 2-button joystick" msgstr "Palica za igru s 3 osi, 2 tipke" +msgid "3-axis, 3-button joystick" +msgstr "Palica za igru s 3 osi, 3 tipke" + msgid "3-axis, 4-button joystick" msgstr "Palica za igru s 3 osi, 4 tipke" +msgid "4-axis, 2-button joystick" +msgstr "Palica za igru s 4 osi, 2 tipke" + +msgid "4-axis, 3-button joystick" +msgstr "Palica za igru s 4 osi, 3 tipke" + msgid "4-axis, 4-button joystick" msgstr "Palica za igru s 4 osi, 4 tipke" +msgid "2-button gamepad(s)" +msgstr "Gamepad(ovi) s 2 tipke" + +msgid "3-button gamepad" +msgstr "Gamepad s 3 tipke" + +msgid "4-button gamepad" +msgstr "Gamepad s 4 tipke" + +msgid "6-button gamepad" +msgstr "Gamepad s 6 tipke" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Jaram za letenje s 2 tipke" + +msgid "3-button flight yoke" +msgstr "Jaram za letenje s 3 tipke" + +msgid "4-button flight yoke" +msgstr "Jaram za letenje s 4 tipke" + +msgid "2-button flight yoke with throttle" +msgstr "Jaram za letenje s 2 tipke i gasom" + +msgid "3-button flight yoke with throttle" +msgstr "Jaram za letenje s 3 tipke i gasom" + +msgid "4-button flight yoke with throttle" +msgstr "Jaram za letenje s 4 tipke i gasom" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volan (3 osi, 2 tipke)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volan (3 osi, 3 tipke)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volan (3 osi, 4 tipke)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "Gamepad(ovi) s 2 tipke" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Jaram za letenje s 2 tipke" - -msgid "4-button gamepad" -msgstr "Gamepad s 4 tipke" - -msgid "4-button flight yoke" -msgstr "Jaram za letenje s 4 tipke" - -msgid "2-button flight yoke with throttle" -msgstr "Jaram za letenje s 2 tipke i gasom" - -msgid "4-button flight yoke with throttle" -msgstr "Jaram za letenje s 4 tipke i gasom" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volan Win95 (3 osi, 4 tipke)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Bez" @@ -2988,6 +3063,9 @@ msgstr "NaÄin rastezanja ulaza u OpenGL-u" msgid "Color scheme" msgstr "Shema boja" +msgid "System" +msgstr "" + msgid "Light" msgstr "Svjetlo" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index a399c59e6..7e08cf1c5 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -852,9 +852,18 @@ msgstr "Nessun dispositivo PCap trovato" msgid "Invalid PCap device" msgstr "Dispositivo PCap non valido" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Joystick a 2 assi, 1 pulsanti" + msgid "2-axis, 2-button joystick(s)" msgstr "Joystick a 2 assi, 2 pulsanti" +msgid "2-axis, 3-button joystick" +msgstr "Joystick a 2 assi, 3 pulsanti" + msgid "2-axis, 4-button joystick" msgstr "Joystick a 2 assi, 4 pulsanti" @@ -867,18 +876,99 @@ msgstr "Joystick a 2 assi, 8 pulsanti" msgid "3-axis, 2-button joystick" msgstr "Joystick a 3 assi, 2 pulsanti" +msgid "3-axis, 3-button joystick" +msgstr "Joystick a 3 assi, 4 pulsanti" + msgid "3-axis, 4-button joystick" msgstr "Joystick a 3 assi, 4 pulsanti" +msgid "4-axis, 2-button joystick" +msgstr "Joystick a 4 assi, 2 pulsanti" + +msgid "4-axis, 3-button joystick" +msgstr "Joystick a 4 assi, 3 pulsanti" + msgid "4-axis, 4-button joystick" msgstr "Joystick a 4 assi, 4 pulsanti" +msgid "2-button gamepad(s)" +msgstr "Gamepad a 2 pulsanti" + +msgid "3-button gamepad" +msgstr "Gamepad a 3 pulsanti" + +msgid "4-button gamepad" +msgstr "Gamepad a 4 pulsanti" + +msgid "6-button gamepad" +msgstr "Gamepad a 6 pulsanti" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Barra di comando a 2 pulsanti" + +msgid "3-button flight yoke" +msgstr "Barra di comando a 3 pulsanti" + +msgid "4-button flight yoke" +msgstr "Barra di comando a 4 pulsanti" + +msgid "2-button flight yoke with throttle" +msgstr "Barra di comando a 2 pulsanti con acceleratore" + +msgid "3-button flight yoke with throttle" +msgstr "Barra di comando a 4 pulsanti con acceleratore" + +msgid "4-button flight yoke with throttle" +msgstr "Barra di comando a 4 pulsanti con acceleratore" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volante (3 assi, 2 pulsanti)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volante (3 assi, 3 pulsanti)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volante (3 assi, 4 pulsanti)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + Pedali CH" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedali Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedali" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedali Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedali" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedali Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder" @@ -888,26 +978,11 @@ msgstr "Sistema di controllo Thrustmaster Flight" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Sistema di controllo timone" -msgid "2-button gamepad(s)" -msgstr "Gamepad a 2 pulsanti" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Barra di comando a 2 pulsanti" - -msgid "4-button gamepad" -msgstr "Gamepad a 4 pulsanti" - -msgid "4-button flight yoke" -msgstr "Barra di comando a 4 pulsanti" - -msgid "2-button flight yoke with throttle" -msgstr "Barra di comando a 2 pulsanti con acceleratore" - -msgid "4-button flight yoke with throttle" -msgstr "Barra di comando a 4 pulsanti con acceleratore" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volante Win95 (3 assi, 4 pulsanti)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Nessuno" @@ -2988,6 +3063,9 @@ msgstr "ModalitĂ  adattamento ingresso OpenGL" msgid "Color scheme" msgstr "ModalitĂ  colori" +msgid "System" +msgstr "" + msgid "Light" msgstr "Chiara" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 5c6aa485c..7cb67e505 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -852,9 +852,18 @@ msgstr "PCapăƒ‡ăƒă‚¤ă‚¹ăŒă‚ă‚ă¾ă›ă‚“" msgid "Invalid PCap device" msgstr "䏿­£ăªPCapăƒ‡ăƒă‚¤ă‚¹" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(2軸ă€1ăƒœă‚¿ăƒ³)" + msgid "2-axis, 2-button joystick(s)" msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(2軸ă€2ăƒœă‚¿ăƒ³)" +msgid "2-axis, 3-button joystick" +msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(2軸ă€3ăƒœă‚¿ăƒ³)" + msgid "2-axis, 4-button joystick" msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(2軸ă€4ăƒœă‚¿ăƒ³)" @@ -867,18 +876,99 @@ msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(2軸ă€8ăƒœă‚¿ăƒ³)" msgid "3-axis, 2-button joystick" msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(3軸ă€2ăƒœă‚¿ăƒ³)" +msgid "3-axis, 3-button joystick" +msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(3軸ă€3ăƒœă‚¿ăƒ³)" + msgid "3-axis, 4-button joystick" msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(3軸ă€4ăƒœă‚¿ăƒ³)" +msgid "4-axis, 2-button joystick" +msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(4軸ă€2ăƒœă‚¿ăƒ³)" + +msgid "4-axis, 3-button joystick" +msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(4軸ă€3ăƒœă‚¿ăƒ³)" + msgid "4-axis, 4-button joystick" msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(4軸ă€4ăƒœă‚¿ăƒ³)" +msgid "2-button gamepad(s)" +msgstr "2ăƒœă‚¿ăƒ³å¼ă‚²ăƒ¼ăƒ ăƒ‘ăƒƒăƒ‰" + +msgid "3-button gamepad" +msgstr "3ăƒœă‚¿ăƒ³å¼ă‚²ăƒ¼ăƒ ăƒ‘ăƒƒăƒ‰" + +msgid "4-button gamepad" +msgstr "4ăƒœă‚¿ăƒ³å¼ă‚²ăƒ¼ăƒ ăƒ‘ăƒƒăƒ‰" + +msgid "6-button gamepad" +msgstr "6ăƒœă‚¿ăƒ³å¼ă‚²ăƒ¼ăƒ ăƒ‘ăƒƒăƒ‰" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2ăƒœă‚¿ăƒ³å¼æ“縦桿" + +msgid "3-button flight yoke" +msgstr "3ăƒœă‚¿ăƒ³å¼æ“縦桿" + +msgid "4-button flight yoke" +msgstr "4ăƒœă‚¿ăƒ³å¼æ“縦桿" + +msgid "2-button flight yoke with throttle" +msgstr "2ăƒœă‚¿ăƒ³å¼ăƒ•ăƒ©ă‚¤ăƒˆăƒ¨ăƒ¼ă‚¯(ă‚¹ăƒ­ăƒƒăƒˆăƒ«ä»˜ă)" + +msgid "3-button flight yoke with throttle" +msgstr "3ăƒœă‚¿ăƒ³å¼ăƒ•ăƒ©ă‚¤ăƒˆăƒ¨ăƒ¼ă‚¯(ă‚¹ăƒ­ăƒƒăƒˆăƒ«ä»˜ă)" + +msgid "4-button flight yoke with throttle" +msgstr "4ăƒœă‚¿ăƒ³å¼ăƒ•ăƒ©ă‚¤ăƒˆăƒ¨ăƒ¼ă‚¯(ă‚¹ăƒ­ăƒƒăƒˆăƒ«ä»˜ă)" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "ă‚¹ăƒ†ă‚¢ăƒªăƒ³ă‚°ăƒ›ă‚¤ăƒ¼ăƒ«(3軸ă€2ăƒœă‚¿ăƒ³)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "ă‚¹ăƒ†ă‚¢ăƒªăƒ³ă‚°ăƒ›ă‚¤ăƒ¼ăƒ«(3軸ă€3ăƒœă‚¿ăƒ³)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "ă‚¹ăƒ†ă‚¢ăƒªăƒ³ă‚°ăƒ›ă‚¤ăƒ¼ăƒ«(3軸ă€4ăƒœă‚¿ăƒ³)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinderăƒ‘ăƒƒăƒ‰" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "2ăƒœă‚¿ăƒ³å¼ă‚²ăƒ¼ăƒ ăƒ‘ăƒƒăƒ‰" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2ăƒœă‚¿ăƒ³å¼æ“縦桿" - -msgid "4-button gamepad" -msgstr "4ăƒœă‚¿ăƒ³å¼ă‚²ăƒ¼ăƒ ăƒ‘ăƒƒăƒ‰" - -msgid "4-button flight yoke" -msgstr "4ăƒœă‚¿ăƒ³å¼æ“縦桿" - -msgid "2-button flight yoke with throttle" -msgstr "2ăƒœă‚¿ăƒ³å¼ăƒ•ăƒ©ă‚¤ăƒˆăƒ¨ăƒ¼ă‚¯(ă‚¹ăƒ­ăƒƒăƒˆăƒ«ä»˜ă)" - -msgid "4-button flight yoke with throttle" -msgstr "4ăƒœă‚¿ăƒ³å¼ăƒ•ăƒ©ă‚¤ăƒˆăƒ¨ăƒ¼ă‚¯(ă‚¹ăƒ­ăƒƒăƒˆăƒ«ä»˜ă)" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 ă‚¹ăƒ†ă‚¢ăƒªăƒ³ă‚°ăƒ›ă‚¤ăƒ¼ăƒ«(3軸ă€4ăƒœă‚¿ăƒ³)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "ăªă—" @@ -2988,6 +3063,9 @@ msgstr "OpenGLă®å…¥å›ă‚¹ăƒˆăƒ¬ăƒƒăƒăƒ¢ăƒ¼ăƒ‰" msgid "Color scheme" msgstr "é…色" +msgid "System" +msgstr "" + msgid "Light" msgstr "å…‰" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 4474138b2..dea008ad8 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -852,9 +852,18 @@ msgstr "PCap ́¥́¹˜ê°€ ́—†́µë‹ˆë‹¤" msgid "Invalid PCap device" msgstr "PCap ́¥́¹˜ê°€ ́˜¬ë°”르́§€ ́•́µë‹ˆë‹¤" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2́¶•, 1ë²„í¼ ́¡°́´́¤í‹±" + msgid "2-axis, 2-button joystick(s)" msgstr "2́¶•, 2ë²„í¼ ́¡°́´́¤í‹±" +msgid "2-axis, 3-button joystick" +msgstr "2́¶•, 3ë²„í¼ ́¡°́´́¤í‹±" + msgid "2-axis, 4-button joystick" msgstr "2́¶•, 4ë²„í¼ ́¡°́´́¤í‹±" @@ -867,18 +876,99 @@ msgstr "2́¶•, 8ë²„í¼ ́¡°́´́¤í‹±" msgid "3-axis, 2-button joystick" msgstr "3́¶•, 2ë²„í¼ ́¡°́´́¤í‹±" +msgid "3-axis, 3-button joystick" +msgstr "3́¶•, 3ë²„í¼ ́¡°́´́¤í‹±" + msgid "3-axis, 4-button joystick" msgstr "3́¶•, 4ë²„í¼ ́¡°́´́¤í‹±" +msgid "4-axis, 2-button joystick" +msgstr "4́¶•, 2ë²„í¼ ́¡°́´́¤í‹±" + +msgid "4-axis, 3-button joystick" +msgstr "4́¶•, 3ë²„í¼ ́¡°́´́¤í‹±" + msgid "4-axis, 4-button joystick" msgstr "4́¶•, 4ë²„í¼ ́¡°́´́¤í‹±" +msgid "2-button gamepad(s)" +msgstr "2ë²„í¼ ê²Œ́„패드" + +msgid "3-button gamepad" +msgstr "3ë²„í¼ ê²Œ́„패드" + +msgid "4-button gamepad" +msgstr "4ë²„í¼ ê²Œ́„패드" + +msgid "6-button gamepad" +msgstr "6ë²„í¼ ê²Œ́„패드" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„" + +msgid "3-button flight yoke" +msgstr "3ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„" + +msgid "4-button flight yoke" +msgstr "4ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„" + +msgid "2-button flight yoke with throttle" +msgstr "2ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„ê³¼ ́¤ë¡œí‹€" + +msgid "3-button flight yoke with throttle" +msgstr "3ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„ê³¼ ́¤ë¡œí‹€" + +msgid "4-button flight yoke with throttle" +msgstr "4ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„ê³¼ ́¤ë¡œí‹€" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "́¡°íƒ€ë¥œ (3́¶•, 2버í¼)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "́¡°íƒ€ë¥œ (3́¶•, 3버í¼)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "́¡°íƒ€ë¥œ (3́¶•, 4버í¼)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "2ë²„í¼ ê²Œ́„패드" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„" - -msgid "4-button gamepad" -msgstr "4ë²„í¼ ê²Œ́„패드" - -msgid "4-button flight yoke" -msgstr "4ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„" - -msgid "2-button flight yoke with throttle" -msgstr "2ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„ê³¼ ́¤ë¡œí‹€" - -msgid "4-button flight yoke with throttle" -msgstr "4ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„ê³¼ ́¤ë¡œí‹€" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 ́¡°íƒ€ë¥œ (3́¶•, 4버í¼)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "́—†́Œ" @@ -2988,6 +3063,9 @@ msgstr "OpenGL ́…ë ¥ ́¤í¸ë ˆ́¹˜ 모드" msgid "Color scheme" msgstr "́ƒ‰́ƒ 구́„±" +msgid "System" +msgstr "" + msgid "Light" msgstr "ë¹›" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index 06b7a4f25..db70b8842 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -852,9 +852,18 @@ msgstr "Ingen PCap-enheter funnet" msgid "Invalid PCap device" msgstr "Ugyldig PCap-enhet" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2-akset, 1-knapps styrespak(er)" + msgid "2-axis, 2-button joystick(s)" msgstr "2-akset, 2-knapps styrespak(er)" +msgid "2-axis, 3-button joystick" +msgstr "2-akset, 3-knapps styrespak" + msgid "2-axis, 4-button joystick" msgstr "2-akset, 4-knapps styrespak" @@ -867,18 +876,99 @@ msgstr "2-akset, 8-knapps styrespak" msgid "3-axis, 2-button joystick" msgstr "3-akset, 2-knapps styrespak" +msgid "3-axis, 3-button joystick" +msgstr "3-akset, 4-knapps styrespak" + msgid "3-axis, 4-button joystick" msgstr "3-akset, 4-knapps styrespak" +msgid "4-axis, 2-button joystick" +msgstr "4-akset, 2-knapps styrespak" + +msgid "4-axis, 3-button joystick" +msgstr "4-akset, 3-knapps styrespak" + msgid "4-axis, 4-button joystick" msgstr "4-akset, 4-knapps styrespak" +msgid "2-button gamepad(s)" +msgstr "2-knapps gamepad(er)" + +msgid "3-button gamepad" +msgstr "3-knapps gamepad" + +msgid "4-button gamepad" +msgstr "4-knapps gamepad" + +msgid "6-button gamepad" +msgstr "6-knapps gamepad" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2-knapps flystyre" + +msgid "3-button flight yoke" +msgstr "3-knapps flystyre" + +msgid "4-button flight yoke" +msgstr "4-knapps flystyre" + +msgid "2-button flight yoke with throttle" +msgstr "2-knapps flystyre med gass" + +msgid "3-button flight yoke with throttle" +msgstr "3-knapps flystyre med gass" + +msgid "4-button flight yoke with throttle" +msgstr "4-knapps flystyre med gass" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Ratt (3-akset, 3-knapps)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Ratt (3-akset, 3-knapps)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Ratt (3-akset, 4-knapps)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedaler" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedaler Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedaler" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedaler Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedaler" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedaler Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedaler" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedaler Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Ror-kontrollsystem" -msgid "2-button gamepad(s)" -msgstr "2-knapps gamepad(er)" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2-knapps flystyre" - -msgid "4-button gamepad" -msgstr "4-knapps gamepad" - -msgid "4-button flight yoke" -msgstr "4-knapps flystyre" - -msgid "2-button flight yoke with throttle" -msgstr "2-knapps flystyre med gass" - -msgid "4-button flight yoke with throttle" -msgstr "4-knapps flystyre med gass" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 Ratt (3-akset, 4-knapps)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Ingen" @@ -2988,6 +3063,9 @@ msgstr "Inngangsstrekkmodus for OpenGL" msgid "Color scheme" msgstr "Fargevalg" +msgid "System" +msgstr "" + msgid "Light" msgstr "Lys" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index ee57f32a1..deb53176c 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -852,9 +852,18 @@ msgstr "Geen PCap-apparaten gevonden" msgid "Invalid PCap device" msgstr "Ongeldig PCap-apparaat" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Joystick(s) met 2 assen en 1 knoppen" + msgid "2-axis, 2-button joystick(s)" msgstr "Joystick(s) met 2 assen en 2 knoppen" +msgid "2-axis, 3-button joystick" +msgstr "Joystick met 2 assen en 3 knoppen" + msgid "2-axis, 4-button joystick" msgstr "Joystick met 2 assen en 4 knoppen" @@ -867,18 +876,99 @@ msgstr "Joystick met 2 assen en 8 knoppen" msgid "3-axis, 2-button joystick" msgstr "Joystick met 3 assen en 2 knoppen" +msgid "3-axis, 3-button joystick" +msgstr "Joystick met 3 assen en 3 knoppen" + msgid "3-axis, 4-button joystick" msgstr "Joystick met 3 assen en 4 knoppen" +msgid "4-axis, 2-button joystick" +msgstr "Joystick met 4 assen en 2 knoppen" + +msgid "4-axis, 3-button joystick" +msgstr "Joystick met 4 assen en 3 knoppen" + msgid "4-axis, 4-button joystick" msgstr "Joystick met 4 assen en 4 knoppen" +msgid "2-button gamepad(s)" +msgstr "2-knops gamepad(s)" + +msgid "3-button gamepad" +msgstr "3-knops gamepad" + +msgid "4-button gamepad" +msgstr "4-knops gamepad" + +msgid "6-button gamepad" +msgstr "6-knops gamepad" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2-knops stuurknuppel" + +msgid "3-button flight yoke" +msgstr "3-knops stuurknuppel" + +msgid "4-button flight yoke" +msgstr "4-knops stuurknuppel" + +msgid "2-button flight yoke with throttle" +msgstr "2-kops stuurknuppel met gashendel " + +msgid "3-button flight yoke with throttle" +msgstr "3-kops stuurknuppel met gashendel" + +msgid "4-button flight yoke with throttle" +msgstr "4-kops stuurknuppel met gashendel" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Stuurwiel (3 assen, 2 knoppen)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Stuurwiel (3 assen, 3 knoppen)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Stuurwiel (3 assen, 4 knoppen)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedalen" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedalen Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedalen" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedalen Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedalen" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedalen Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedalen" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedalen Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control systeem" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Roer Control Systeem" -msgid "2-button gamepad(s)" -msgstr "2-knops gamepad(s)" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2-knops stuurknuppel" - -msgid "4-button gamepad" -msgstr "4-knops gamepad" - -msgid "4-button flight yoke" -msgstr "4-knops stuurknuppel" - -msgid "2-button flight yoke with throttle" -msgstr "2-kops stuurknuppel met gashendel " - -msgid "4-button flight yoke with throttle" -msgstr "2-kops stuurknuppel met gashendel" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 Stuurwiel (3 assen, 4 knoppen)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Geen" @@ -2988,6 +3063,9 @@ msgstr "Input stretch-modus van OpenGL" msgid "Color scheme" msgstr "Kleurenschema" +msgid "System" +msgstr "" + msgid "Light" msgstr "Licht" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 4398dcafb..643957399 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -852,9 +852,18 @@ msgstr "Nie znaleziono urzÄ…dzeÅ„ PCap" msgid "Invalid PCap device" msgstr "NieprawidÅ‚owe urzÄ…dzenie PCap" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Joysticki 2-osiowe, 1-przyciskowe" + msgid "2-axis, 2-button joystick(s)" msgstr "Joysticki 2-osiowe, 2-przyciskowe" +msgid "2-axis, 3-button joystick" +msgstr "Joystick 2-osiowy, 3-przyciskowy" + msgid "2-axis, 4-button joystick" msgstr "Joystick 2-osiowy, 4-przyciskowy" @@ -867,18 +876,99 @@ msgstr "Joystick 2-osiowy, 8-przyciskowy" msgid "3-axis, 2-button joystick" msgstr "Joystick 3-osiowy, 2-przyciskowy" +msgid "3-axis, 3-button joystick" +msgstr "Joystick 3-osiowy, 2-przyciskowy" + msgid "3-axis, 4-button joystick" msgstr "Joystick 3-osiowy, 4-przyciskowy" +msgid "4-axis, 2-button joystick" +msgstr "Joystick 4-osiowy, 2-przyciskowy" + +msgid "4-axis, 3-button joystick" +msgstr "Joystick 4-osiowy, 3-przyciskowy" + msgid "4-axis, 4-button joystick" msgstr "Joystick 4-osiowy, 4-przyciskowy" +msgid "2-button gamepad(s)" +msgstr "Pad(y) z dwoma przyciskami" + +msgid "3-button gamepad" +msgstr "Pad z trzy przyciskami" + +msgid "4-button gamepad" +msgstr "Pad z czterema przyciskami" + +msgid "6-button gamepad" +msgstr "Pad z sześć przyciskami" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Wolant z dwoma przyciskami" + +msgid "3-button flight yoke" +msgstr "Wolant z trzema guzikami" + +msgid "4-button flight yoke" +msgstr "Wolant z czterema przyciskami" + +msgid "2-button flight yoke with throttle" +msgstr "Wolant z dwoma przyciskami i przepustnicÄ…" + +msgid "3-button flight yoke with throttle" +msgstr "Wolant z trzema przyciskami i przepustnicÄ…" + +msgid "4-button flight yoke with throttle" +msgstr "Wolant z czterema przyciskami i przepustnicÄ…" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Kierownica (3 osie, 2 przyciski)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Kierownica (3 osie, 3 przyciski)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Kierownica (3 osie, 4 przyciski)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "Pad(y) z dwoma przyciskami" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Wolant z dwoma przyciskami" - -msgid "4-button gamepad" -msgstr "Pad z czterema przyciskami" - -msgid "4-button flight yoke" -msgstr "Wolant z czterema przyciskami" - -msgid "2-button flight yoke with throttle" -msgstr "Wolant z dwoma przyciskami i przepustnicÄ…" - -msgid "4-button flight yoke with throttle" -msgstr "Wolant z czterema przyciskami i przepustnicÄ…" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Kierownica Win95 (3 osie, 4 przyciski)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Å»aden" @@ -2988,6 +3063,9 @@ msgstr "Tryb rozciÄ…gania wejÅ›ciowego OpenGL" msgid "Color scheme" msgstr "Schemat kolorĂ³w" +msgid "System" +msgstr "" + msgid "Light" msgstr "ÅwiatÅ‚o" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 010005780..0f9b81277 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -852,9 +852,18 @@ msgstr "Nenhum dispositivo PCap encontrado" msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Joystick(s) de 2 eixos, 1 botões" + msgid "2-axis, 2-button joystick(s)" msgstr "Joystick(s) de 2 eixos, 2 botões" +msgid "2-axis, 3-button joystick" +msgstr "Joystick de 2 eixos, 3 botões" + msgid "2-axis, 4-button joystick" msgstr "Joystick de 2 eixos, 4 botões" @@ -867,18 +876,99 @@ msgstr "Joystick de 2 eixos, 8 botões" msgid "3-axis, 2-button joystick" msgstr "Joystick de 3 eixos, 2 botões" +msgid "3-axis, 3-button joystick" +msgstr "Joystick de 3 eixos, 3 botões" + msgid "3-axis, 4-button joystick" msgstr "Joystick de 3 eixos, 4 botões" +msgid "4-axis, 2-button joystick" +msgstr "Joystick de 4 eixos, 2 botões" + +msgid "4-axis, 3-button joystick" +msgstr "Joystick de 4 eixos, 3 botões" + msgid "4-axis, 4-button joystick" msgstr "Joystick de 4 eixos, 4 botões" +msgid "2-button gamepad(s)" +msgstr "Gamepad(s) de 2 botões" + +msgid "3-button gamepad" +msgstr "Gamepad de 3 botões" + +msgid "4-button gamepad" +msgstr "Gamepad de 4 botões" + +msgid "6-button gamepad" +msgstr "Gamepad de 6 botões" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Manche de voo de 2 botões" + +msgid "3-button flight yoke" +msgstr "Manche de voo de 3 botões" + +msgid "4-button flight yoke" +msgstr "Manche de voo de 4 botões" + +msgid "2-button flight yoke with throttle" +msgstr "Manche de voo de 2 botões com acelerador" + +msgid "3-button flight yoke with throttle" +msgstr "Manche de voo de 3 botões com acelerador" + +msgid "4-button flight yoke with throttle" +msgstr "Manche de voo de 4 botões com acelerador" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volante (3 eixos, 2 botões)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volante (3 eixos, 3 botões)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volante (3 eixos, 4 botões)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + Pedais CH" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + Pedais CH Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + Pedais CH" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + Pedais CH Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + Pedais CH" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + Pedais CH Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Sistema de Controle de Voo Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "SCV Thrustmaster + Sistema de Controle de Leme" -msgid "2-button gamepad(s)" -msgstr "Gamepad(s) de 2 botões" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Manche de voo de 2 botões" - -msgid "4-button gamepad" -msgstr "Gamepad de 4 botões" - -msgid "4-button flight yoke" -msgstr "Manche de voo de 4 botões" - -msgid "2-button flight yoke with throttle" -msgstr "Manche de voo de 2 botões com acelerador" - -msgid "4-button flight yoke with throttle" -msgstr "Manche de voo de 4 botões com acelerador" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volante Win95 (3 eixos, 4 botões)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Nenhum" @@ -2988,6 +3063,9 @@ msgstr "Modo de expansĂ£o de entrada do OpenGL" msgid "Color scheme" msgstr "Esquema de cores" +msgid "System" +msgstr "" + msgid "Light" msgstr "Claro" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index a33ba0119..9cc796af4 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -852,9 +852,18 @@ msgstr "NĂ£o foi encontrado um dispositivo PCap" msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Joystick(s) de 2 eixos, 1 botões" + msgid "2-axis, 2-button joystick(s)" msgstr "Joystick(s) de 2 eixos, 2 botões" +msgid "2-axis, 3-button joystick" +msgstr "Joystick de 2 eixos, 3 botões" + msgid "2-axis, 4-button joystick" msgstr "Joystick de 2 eixos, 4 botões" @@ -867,18 +876,99 @@ msgstr "Joystick de 2 eixos, 8 botões" msgid "3-axis, 2-button joystick" msgstr "Joystick de 3 eixos, 2 botões" +msgid "3-axis, 3-button joystick" +msgstr "Joystick de 3 eixos, 3 botões" + msgid "3-axis, 4-button joystick" msgstr "Joystick de 3 eixos, 4 botões" +msgid "4-axis, 2-button joystick" +msgstr "Joystick de 4 eixos, 2 botões" + +msgid "4-axis, 3-button joystick" +msgstr "Joystick de 4 eixos, 3 botões" + msgid "4-axis, 4-button joystick" msgstr "Joystick de 4 eixos, 4 botões" +msgid "2-button gamepad(s)" +msgstr "ManĂ­pulo(s) de jogos de 2 botões" + +msgid "3-button gamepad" +msgstr "ManĂ­pulo(s) de jogos de 3 botões" + +msgid "4-button gamepad" +msgstr "ManĂ­pulo(s) de jogos de 4 botões" + +msgid "6-button gamepad" +msgstr "ManĂ­pulo(s) de jogos de 6 botões" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "ManĂ­pulo de voo de 2 botões" + +msgid "3-button flight yoke" +msgstr "ManĂ­pulo de voo de 2 botões" + +msgid "4-button flight yoke" +msgstr "ManĂ­pulo de voo de 4 botões" + +msgid "2-button flight yoke with throttle" +msgstr "ManĂ­pulo de voo de 2 botões com acelerador" + +msgid "3-button flight yoke with throttle" +msgstr "ManĂ­pulo de voo de 3 botões com acelerador" + +msgid "4-button flight yoke with throttle" +msgstr "ManĂ­pulo de voo de 4 botões com acelerador" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volante (de 3 eixos, 2 botões)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volante (de 3 eixos, 3 botões)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volante (de 3 eixos, 4 botões)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "ManĂ­pulo(s) de jogos de 2 botões" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "ManĂ­pulo de voo de 2 botões" - -msgid "4-button gamepad" -msgstr "ManĂ­pulo(s) de jogos de 4 botões" - -msgid "4-button flight yoke" -msgstr "ManĂ­pulo de voo de 4 botões" - -msgid "2-button flight yoke with throttle" -msgstr "ManĂ­pulo de voo de 2 botões com acelerador" - -msgid "4-button flight yoke with throttle" -msgstr "ManĂ­pulo de voo de 4 botões com acelerador" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volante Win95 (de 3 eixos, 4 botões)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Nenhum" @@ -2988,6 +3063,9 @@ msgstr "Modo de expansĂ£o de entrada do OpenGL" msgid "Color scheme" msgstr "Esquema de cores" +msgid "System" +msgstr "" + msgid "Light" msgstr "Claro" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 2d71499dc..cd0c70e51 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -852,9 +852,18 @@ msgstr "Đ£ÑÑ‚Ñ€Đ¾Đ¹ÑÑ‚Đ²Đ° PCap Đ½Đµ Đ½Đ°Đ¹Đ´ĐµĐ½Ñ‹" msgid "Invalid PCap device" msgstr "ĐĐµĐ²ĐµÑ€Đ½Đ¾Đµ уÑÑ‚Ñ€Đ¾Đ¹ÑÑ‚Đ²Đ¾ PCap" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2-Đ¾ÑĐµĐ²Đ¾Đ¹, 1-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "2-axis, 2-button joystick(s)" msgstr "2-Đ¾ÑĐµĐ²Đ¾Đ¹, 2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "2-axis, 3-button joystick" +msgstr "2-Đ¾ÑĐµĐ²Đ¾Đ¹, 3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "2-axis, 4-button joystick" msgstr "2-Đ¾ÑĐµĐ²Đ¾Đ¹, 4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" @@ -867,18 +876,99 @@ msgstr "2-Đ¾ÑĐµĐ²Đ¾Đ¹, 8-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" msgid "3-axis, 2-button joystick" msgstr "3-Đ¾ÑĐµĐ²Đ¾Đ¹, 2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "3-axis, 3-button joystick" +msgstr "3-Đ¾ÑĐµĐ²Đ¾Đ¹, 3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "3-axis, 4-button joystick" msgstr "3-Đ¾ÑĐµĐ²Đ¾Đ¹, 4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "4-axis, 2-button joystick" +msgstr "4-Đ¾ÑĐµĐ²Đ¾Đ¹, 2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + +msgid "4-axis, 3-button joystick" +msgstr "4-Đ¾ÑĐµĐ²Đ¾Đ¹, 3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "4-axis, 4-button joystick" msgstr "4-Đ¾ÑĐµĐ²Đ¾Đ¹, 4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "2-button gamepad(s)" +msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "3-button gamepad" +msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "4-button gamepad" +msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "6-button gamepad" +msgstr "6-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" + +msgid "3-button flight yoke" +msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" + +msgid "4-button flight yoke" +msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" + +msgid "2-button flight yoke with throttle" +msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" + +msgid "3-button flight yoke with throttle" +msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" + +msgid "4-button flight yoke with throttle" +msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Đ ÑƒĐ»ÑŒ (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Đ ÑƒĐ»ÑŒ (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Đ ÑƒĐ»ÑŒ (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH ĐŸĐµĐ´Đ°Đ»Đ¸" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH ĐŸĐµĐ´Đ°Đ»Đ¸ Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH ĐŸĐµĐ´Đ°Đ»Đ¸" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH ĐŸĐµĐ´Đ°Đ»Đ¸ Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH ĐŸĐµĐ´Đ°Đ»Đ¸" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH ĐŸĐµĐ´Đ°Đ»Đ¸ Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH ĐŸĐµĐ´Đ°Đ»Đ¸" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH ĐŸĐµĐ´Đ°Đ»Đ¸ Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»ĐµĐ½Đ¸Ñ Đ¿Đ¾Đ»Ñ‘Ñ‚Đ¾Đ¼ Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»ĐµĐ½Đ¸Ñ Ñ€ÑƒĐ»ĐµĐ¼" -msgid "2-button gamepad(s)" -msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" - -msgid "4-button gamepad" -msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" - -msgid "4-button flight yoke" -msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" - -msgid "2-button flight yoke with throttle" -msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" - -msgid "4-button flight yoke with throttle" -msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Đ ÑƒĐ»ÑŒ Win95 (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "ĐĐµÑ‚" @@ -2988,6 +3063,9 @@ msgstr "Đ ĐµĐ¶Đ¸Đ¼ Ñ€Đ°ÑÑ‚ÑĐ¶ĐµĐ½Đ¸Ñ Đ²Đ²Đ¾Đ´Đ° OpenGL" msgid "Color scheme" msgstr "Đ¦Đ²ĐµÑ‚Đ¾Đ²Đ°Ñ ÑÑ…ĐµĐ¼Đ°" +msgid "System" +msgstr "" + msgid "Light" msgstr "Đ¡Đ²ĐµÑ‚Đ»Đ°Ñ" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 436c8c674..c0230ea6d 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -852,9 +852,18 @@ msgstr "Neboli nĂ¡jdenĂ© žiadne PCap zariadenia" msgid "Invalid PCap device" msgstr "NeplatnĂ© PCap zariadenie" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2-osovĂ½, 1-tlaÄidlovĂ½ joystick" + msgid "2-axis, 2-button joystick(s)" msgstr "2-osovĂ½, 2-tlaÄidlovĂ½ joystick" +msgid "2-axis, 3-button joystick" +msgstr "2-osovĂ½, 4-tlaÄidlovĂ½ joystick" + msgid "2-axis, 4-button joystick" msgstr "2-osovĂ½, 4-tlaÄidlovĂ½ joystick" @@ -867,18 +876,99 @@ msgstr "2-osovĂ½, 8-tlaÄidlovĂ½ joystick" msgid "3-axis, 2-button joystick" msgstr "3-osovĂ½, 2-tlaÄidlovĂ½ joystick" +msgid "3-axis, 3-button joystick" +msgstr "3-osovĂ½, 3-tlaÄidlovĂ½ joystick" + msgid "3-axis, 4-button joystick" msgstr "3-osovĂ½, 4-tlaÄidlovĂ½ joystick" +msgid "4-axis, 2-button joystick" +msgstr "4-osovĂ½, 2-tlaÄidlovĂ½ joystick" + +msgid "4-axis, 3-button joystick" +msgstr "4-osovĂ½, 3-tlaÄidlovĂ½ joystick" + msgid "4-axis, 4-button joystick" msgstr "4-osovĂ½, 4-tlaÄidlovĂ½ joystick" +msgid "2-button gamepad(s)" +msgstr "OvlĂ¡daÄ s 2 tlaÄidlami" + +msgid "3-button gamepad" +msgstr "OvlĂ¡daÄ so 3 tlaÄidlami" + +msgid "4-button gamepad" +msgstr "OvlĂ¡daÄ so 4 tlaÄidlami" + +msgid "6-button gamepad" +msgstr "OvlĂ¡daÄ so 6 tlaÄidlami" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "LeteckĂ½ knipl s 2 tlaÄidlami" + +msgid "3-button flight yoke" +msgstr "LeteckĂ½ knipl s 3 tlaÄidlami" + +msgid "4-button flight yoke" +msgstr "LeteckĂ½ knipl so 4 tlaÄidlami" + +msgid "2-button flight yoke with throttle" +msgstr "LeteckĂ½ knipl s 2 tlaÄidlami a pĂ¡kou" + +msgid "3-button flight yoke with throttle" +msgstr "LeteckĂ½ knipl s 3 tlaÄidlami a pĂ¡kou" + +msgid "4-button flight yoke with throttle" +msgstr "LeteckĂ½ knipl s 4 tlaÄidlami a pĂ¡kou" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volant (3 osy, 2 tlaÄĂ­tka)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volant (3 osy, 3 tlaÄĂ­tka)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volant (3 osy, 4 tlaÄĂ­tka)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "OvlĂ¡daÄ s 2 tlaÄidlami" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "LeteckĂ½ knipl s 2 tlaÄidlami" - -msgid "4-button gamepad" -msgstr "OvlĂ¡daÄ so 4 tlaÄidlami" - -msgid "4-button flight yoke" -msgstr "LeteckĂ½ knipl so 4 tlaÄidlami" - -msgid "2-button flight yoke with throttle" -msgstr "LeteckĂ½ knipl s 2 tlaÄidlami a pĂ¡kou" - -msgid "4-button flight yoke with throttle" -msgstr "LeteckĂ½ knipl s 4 tlaÄidlami a pĂ¡kou" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volant pre Windows 95 (3 osy, 4 tlaÄĂ­tka)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Žiadne" @@ -2988,6 +3063,9 @@ msgstr "Režim rozÅ¥ahovania vstupu OpenGL" msgid "Color scheme" msgstr "FarebnĂ¡ schĂ©ma" +msgid "System" +msgstr "" + msgid "Light" msgstr "Svetlo" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 8ef710a15..81026fe06 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -852,9 +852,18 @@ msgstr "Najdena ni bila nobena naprava PCap" msgid "Invalid PCap device" msgstr "Neveljavna naprava PCap" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Igralna palica z 2 osema, 1 gumboma" + msgid "2-axis, 2-button joystick(s)" msgstr "Igralna palica z 2 osema, 2 gumboma" +msgid "2-axis, 3-button joystick" +msgstr "Igralna palica z 2 osema, 3 gumbi" + msgid "2-axis, 4-button joystick" msgstr "Igralna palica z 2 osema, 4 gumbi" @@ -865,20 +874,101 @@ msgid "2-axis, 8-button joystick" msgstr "Igralna palica z 2 osema, 8 gumbi" msgid "3-axis, 2-button joystick" -msgstr "Igralna palica s 3 osmi, 2 gumboma" +msgstr "Igralna palica s 3 osmi, 2 gumbi" + +msgid "3-axis, 3-button joystick" +msgstr "Igralna palica s 3 osmi, 3 gumbi" msgid "3-axis, 4-button joystick" msgstr "Igralna palica s 3 osmi, 4 gumbi" +msgid "4-axis, 2-button joystick" +msgstr "Igralna palica s 4 osmi, 2 gumbi" + +msgid "4-axis, 3-button joystick" +msgstr "Igralna palica s 4 osmi, 3 gumbi" + msgid "4-axis, 4-button joystick" msgstr "Igralna palica s 4 osmi, 4 gumbi" +msgid "2-button gamepad(s)" +msgstr "Igralna ploÅ¡Äica z 2 gumboma" + +msgid "3-button gamepad" +msgstr "Igralna ploÅ¡Äica s 3 gumbi" + +msgid "4-button gamepad" +msgstr "Igralna ploÅ¡Äica s 4 gumbi" + +msgid "6-button gamepad" +msgstr "Igralna ploÅ¡Äica s 6 gumbi" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Letalski krmilni drog z 2 gumbi" + +msgid "3-button flight yoke" +msgstr "Letalski krmilni drog z 3 gumbi" + +msgid "4-button flight yoke" +msgstr "Letalski krmilni drog s 4 gumbi" + +msgid "2-button flight yoke with throttle" +msgstr "Letalski krmilni drog z 2 gumbi gumboma roÄico za plin" + +msgid "3-button flight yoke with throttle" +msgstr "Letalski krmilni drog s 3 gumbi z roÄico za plin" + +msgid "4-button flight yoke with throttle" +msgstr "Letalski krmilni drog s 4 gumbi z roÄico za plin" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "Volan s 3 osmi, 2 gumbi" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "Volan s 3 osmi, 3 gumbi" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "Volan s 3 osmi, 4 gumbi" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "Igralna ploÅ¡Äica z 2 gumboma" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Letalski krmilni drog z 2 gumbi" - -msgid "4-button gamepad" -msgstr "Igralna ploÅ¡Äica s 4 gumbi" - -msgid "4-button flight yoke" -msgstr "Letalski krmilni drog s 4 gumbi" - -msgid "2-button flight yoke with throttle" -msgstr "Letalski krmilni drog z 2 gumbi gumboma roÄico za plin" - -msgid "4-button flight yoke with throttle" -msgstr "Letalski krmilni drog s 4 gumbi z roÄico za plin" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Volan Win95 s 3 osmi, 4 gumbi" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Brez" @@ -2988,6 +3063,9 @@ msgstr "NaÄin raztezanja vhoda OpenGL" msgid "Color scheme" msgstr "Barvna shema" +msgid "System" +msgstr "" + msgid "Light" msgstr "Svetloba" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index 6f014e2dd..a04c58265 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -852,9 +852,18 @@ msgstr "Inga PCap-enheter hittade" msgid "Invalid PCap device" msgstr "Ogiltig PCap-enhet" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Styrspak med 2 axlar och 1 knappar" + msgid "2-axis, 2-button joystick(s)" msgstr "Styrspak med 2 axlar och 2 knappar" +msgid "2-axis, 3-button joystick" +msgstr "Styrspak med 2 axlar och 3 knappar" + msgid "2-axis, 4-button joystick" msgstr "Styrspak med 2 axlar och 4 knappar" @@ -867,18 +876,99 @@ msgstr "Styrspak med 2 axlar och 8 knappar" msgid "3-axis, 2-button joystick" msgstr "Styrspak med 3 axlar och 2 knappar" +msgid "3-axis, 3-button joystick" +msgstr "Styrspak med 3 axlar och 2 knappar" + msgid "3-axis, 4-button joystick" msgstr "Styrspak med 3 axlar och 4 knappar" +msgid "4-axis, 2-button joystick" +msgstr "Styrspak med 4 axlar och 2 knappar" + +msgid "4-axis, 3-button joystick" +msgstr "Styrspak med 4 axlar och 3 knappar" + msgid "4-axis, 4-button joystick" msgstr "Styrspak med 4 axlar och 4 knappar" +msgid "2-button gamepad(s)" +msgstr "Handkontroll(er) med tvĂ¥ knappar" + +msgid "3-button gamepad" +msgstr "Handkontroll med tre knappar" + +msgid "4-button gamepad" +msgstr "Handkontroll med fyra knappar" + +msgid "6-button gamepad" +msgstr "Handkontroll med sex knappar" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "Styrspak med tvĂ¥ knappar" + +msgid "3-button flight yoke" +msgstr "Styrspak med tre knappar" + +msgid "4-button flight yoke" +msgstr "Styrspak med fyra knappar" + +msgid "2-button flight yoke with throttle" +msgstr "Styrspak med tvĂ¥ knappar och gas" + +msgid "3-button flight yoke with throttle" +msgstr "Styrspak med tre knappar och gas" + +msgid "4-button flight yoke with throttle" +msgstr "Styrspak med fyra knappar och gas" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "ratt (tre axlar, tvĂ¥ knappar)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "ratt (tre axlar, tre knappar)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "ratt (tre axlar, fyra knappar)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH-pedaler" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH-pedaler Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH-pedaler" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH-pedaler Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH-pedaler" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH-pedaler Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH-pedaler" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH-pedaler Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "Handkontroll(er) med tvĂ¥ knappar" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "Styrspak med tvĂ¥ knappar" - -msgid "4-button gamepad" -msgstr "Handkontroll med fyra knappar" - -msgid "4-button flight yoke" -msgstr "Styrspak med fyra knappar" - -msgid "2-button flight yoke with throttle" -msgstr "Styrspak med tvĂ¥ knappar och gas" - -msgid "4-button flight yoke with throttle" -msgstr "Styrspak med fyra knappar och gas" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95-ratt (tre axlar, fyra knappar)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Ingen" @@ -2988,6 +3063,9 @@ msgstr "Inmatningssträckningsläge för OpenGL" msgid "Color scheme" msgstr "Färgschema" +msgid "System" +msgstr "" + msgid "Light" msgstr "Ljus" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 073572e1b..43f52d394 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -852,9 +852,18 @@ msgstr "Herhangi bir PCap cihazı bulunamadı" msgid "Invalid PCap device" msgstr "Geçersiz PCap cihazı" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2 eksenli, 1 dĂ¼ÄŸmeli oyun kolları" + msgid "2-axis, 2-button joystick(s)" msgstr "2 eksenli, 2 dĂ¼ÄŸmeli oyun kolları" +msgid "2-axis, 3-button joystick" +msgstr "2 eksenli, 3 dĂ¼ÄŸmeli oyun kolu" + msgid "2-axis, 4-button joystick" msgstr "2 eksenli, 4 dĂ¼ÄŸmeli oyun kolu" @@ -867,18 +876,99 @@ msgstr "2 eksenli, 8 dĂ¼ÄŸmeli oyun kolu" msgid "3-axis, 2-button joystick" msgstr "3 eksenli, 2 dĂ¼ÄŸmeli oyun kollu" +msgid "3-axis, 3-button joystick" +msgstr "3 eksenli, 3 dĂ¼ÄŸmeli oyun kolu" + msgid "3-axis, 4-button joystick" msgstr "3 eksenli, 4 dĂ¼ÄŸmeli oyun kolu" +msgid "4-axis, 2-button joystick" +msgstr "4 eksenli, 2 dĂ¼ÄŸmeli oyun kolu" + +msgid "4-axis, 3-button joystick" +msgstr "4 eksenli, 3 dĂ¼ÄŸmeli oyun kolu" + msgid "4-axis, 4-button joystick" msgstr "4 eksenli, 4 dĂ¼ÄŸmeli oyun kolu" +msgid "2-button gamepad(s)" +msgstr "2 dĂ¼ÄŸmeli oyun tablası" + +msgid "3-button gamepad" +msgstr "3 dĂ¼ÄŸmeli oyun tablası" + +msgid "4-button gamepad" +msgstr "4 dĂ¼ÄŸmeli oyun tablası" + +msgid "6-button gamepad" +msgstr "6 dĂ¼ÄŸmeli oyun tablası" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2 dĂ¼ÄŸmeli uçuÅŸ dĂ¼meni" + +msgid "3-button flight yoke" +msgstr "3 dĂ¼ÄŸmeli uçuÅŸ dĂ¼meni" + +msgid "4-button flight yoke" +msgstr "4 dĂ¼ÄŸmeli uçuÅŸ dĂ¼meni" + +msgid "2-button flight yoke with throttle" +msgstr "2 dĂ¼ÄŸmeli, gaz kollu uçuÅŸ dĂ¼meni" + +msgid "3-button flight yoke with throttle" +msgstr "3 dĂ¼ÄŸmeli, gaz kollu uçuÅŸ dĂ¼meni" + +msgid "4-button flight yoke with throttle" +msgstr "4 dĂ¼ÄŸmeli, gaz kollu uçuÅŸ dĂ¼meni" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "direksiyonu (3 eksenli, 2 dĂ¼ÄŸmeli)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "direksiyonu (3 eksenli, 3 dĂ¼ÄŸmeli)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "direksiyonu (3 eksenli, 4 dĂ¼ÄŸmeli)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "2 dĂ¼ÄŸmeli oyun tablası" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2 dĂ¼ÄŸmeli uçuÅŸ dĂ¼meni" - -msgid "4-button gamepad" -msgstr "4 dĂ¼ÄŸmeli oyun tablası" - -msgid "4-button flight yoke" -msgstr "4 dĂ¼ÄŸmeli uçuÅŸ dĂ¼meni" - -msgid "2-button flight yoke with throttle" -msgstr "2 dĂ¼ÄŸmeli, gaz kollu uçuÅŸ dĂ¼meni" - -msgid "4-button flight yoke with throttle" -msgstr "4 dĂ¼ÄŸmeli, gaz kollu uçuÅŸ dĂ¼meni" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 direksiyonu (3 eksenli, 4 dĂ¼ÄŸmeli)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "Hiçbiri" @@ -2988,6 +3063,9 @@ msgstr "OpenGL'nin giriÅŸ germe modu" msgid "Color scheme" msgstr "Renk ÅŸeması" +msgid "System" +msgstr "" + msgid "Light" msgstr "Işık" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 8228b7ae4..473030341 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -852,9 +852,18 @@ msgstr "ĐŸÑ€Đ¸ÑÑ‚Ñ€Đ¾Ñ— PCap Đ½Đµ Đ·Đ½Đ°Đ¹Đ´ĐµĐ½Ñ–" msgid "Invalid PCap device" msgstr "ĐĐµĐ²Ñ–Ñ€Đ½Đ¸Đ¹ Đ¿Ñ€Đ¸ÑÑ‚Ñ€Ñ–Đ¹ PCap" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 1-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "2-axis, 2-button joystick(s)" msgstr "2-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "2-axis, 3-button joystick" +msgstr "2-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "2-axis, 4-button joystick" msgstr "2-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" @@ -867,18 +876,99 @@ msgstr "2-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 8-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" msgid "3-axis, 2-button joystick" msgstr "3-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "3-axis, 3-button joystick" +msgstr "3-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "3-axis, 4-button joystick" msgstr "3-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "4-axis, 2-button joystick" +msgstr "4-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + +msgid "4-axis, 3-button joystick" +msgstr "4-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" + msgid "4-axis, 4-button joystick" msgstr "4-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" +msgid "2-button gamepad(s)" +msgstr "2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "3-button gamepad" +msgstr "3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "4-button gamepad" +msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "6-button gamepad" +msgstr "6-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke" + +msgid "3-button flight yoke" +msgstr "3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" + +msgid "4-button flight yoke" +msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke" + +msgid "2-button flight yoke with throttle" +msgstr "2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke Đ· Đ´Ñ€Đ¾ÑĐµĐ»ĐµĐ¼" + +msgid "3-button flight yoke with throttle" +msgstr "3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke Đ· Đ´Ñ€Đ¾ÑĐµĐ»ĐµĐ¼" + +msgid "4-button flight yoke with throttle" +msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke Đ· Đ´Ñ€Đ¾ÑĐµĐ»ĐµĐ¼" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "ĐĐµÑ€Đ¼Đ¾ (3-Đ¾ÑÑŒĐ¾Đ²Đµ, 2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đµ)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "ĐĐµÑ€Đ¼Đ¾ (3-Đ¾ÑÑŒĐ¾Đ²Đµ, 3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đµ)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "ĐĐµÑ€Đ¼Đ¾ (3-Đ¾ÑÑŒĐ¾Đ²Đµ, 4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đµ)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH ĐŸĐµĐ´Đ°Đ»Ñ–" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH ĐŸĐµĐ´Đ°Đ»Ñ– Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH ĐŸĐµĐ´Đ°Đ»Ñ–" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH ĐŸĐµĐ´Đ°Đ»Ñ– Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH ĐŸĐµĐ´Đ°Đ»Ñ–" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH ĐŸĐµĐ´Đ°Đ»Ñ– Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH ĐŸĐµĐ´Đ°Đ»Ñ–" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH ĐŸĐµĐ´Đ°Đ»Ñ– Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»Ñ–Đ½Đ½Ñ Đ¿Đ¾Đ»ÑŒĐ¾Ñ‚Đ¾Đ¼ Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»Ñ–Đ½Đ½Ñ ĐºĐµÑ€Đ¼Đ¾Đ¼" -msgid "2-button gamepad(s)" -msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke" - -msgid "4-button gamepad" -msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ³ĐµĐ¹Đ¼Đ¿Đ°Đ´" - -msgid "4-button flight yoke" -msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke" - -msgid "2-button flight yoke with throttle" -msgstr "2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke Đ· Đ´Ñ€Đ¾ÑĐµĐ»ĐµĐ¼" - -msgid "4-button flight yoke with throttle" -msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke Đ· Đ´Ñ€Đ¾ÑĐµĐ»ĐµĐ¼" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "ĐĐµÑ€Đ¼Đ¾ Win95 (3-Đ¾ÑÑŒĐ¾Đ²Đµ, 4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đµ)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "ĐÑ–" @@ -2988,6 +3063,9 @@ msgstr "Đ ĐµĐ¶Đ¸Đ¼ Ñ€Đ¾Đ·Ñ‚ÑĐ³ÑƒĐ²Đ°Đ½Đ½Ñ Đ²Ñ…Ñ–Đ´Đ½Đ¸Ñ… Đ´Đ°Đ½Đ¸Ñ… OpenGL" msgid "Color scheme" msgstr "ĐĐ¾Đ»Ñ–Ñ€Đ½Đ° Đ³Đ°Đ¼Đ¼Đ°" +msgid "System" +msgstr "" + msgid "Light" msgstr "Đ¡Đ²Ñ–Ñ‚Đ»Đ¾" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 24decb522..41f6d056e 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -852,9 +852,18 @@ msgstr "KhĂ´ng tìm thấy thiết bị PCap" msgid "Invalid PCap device" msgstr "Thiết bị PCap khĂ´ng hợp quy" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Cần Ä‘iá»u khiển hai trục, má»™t nĂºt" + msgid "2-axis, 2-button joystick(s)" msgstr "Cần Ä‘iá»u khiển hai trục, hai nĂºt" +msgid "2-axis, 3-button joystick" +msgstr "Cần Ä‘iá»u khiển hai trục, ba nĂºt" + msgid "2-axis, 4-button joystick" msgstr "Cần Ä‘iá»u khiển hai trục, bốn nĂºt" @@ -867,18 +876,99 @@ msgstr "Cần Ä‘iá»u khiển hai trục, tĂ¡m nĂºt" msgid "3-axis, 2-button joystick" msgstr "Cần Ä‘iá»u khiển ba trục, hai nĂºt" +msgid "3-axis, 3-button joystick" +msgstr "Cần Ä‘iá»u khiển ba trục, ba nĂºt" + msgid "3-axis, 4-button joystick" msgstr "Cần Ä‘iá»u khiển ba trục, bốn nĂºt" +msgid "4-axis, 2-button joystick" +msgstr "Cần Ä‘iá»u khiển bốn trục, hai nĂºt" + +msgid "4-axis, 3-button joystick" +msgstr "Cần Ä‘iá»u khiển bốn trục, ba nĂºt" + msgid "4-axis, 4-button joystick" msgstr "Cần Ä‘iá»u khiển bốn trục, bốn nĂºt" +msgid "2-button gamepad(s)" +msgstr "Tay cầm game hai nĂºt" + +msgid "3-button gamepad" +msgstr "Tay cầm game ba nĂºt" + +msgid "4-button gamepad" +msgstr "Tay cầm game bốn nĂºt" + +msgid "6-button gamepad" +msgstr "Tay cầm game sĂ¡u nĂºt" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "VĂ´ lăng mĂ¡y bay hai nĂºt" + +msgid "3-button flight yoke" +msgstr "VĂ´ lăng mĂ¡y bay ba nĂºt" + +msgid "4-button flight yoke" +msgstr "VĂ´ lăng mĂ¡y bay bốn nĂºt" + +msgid "2-button flight yoke with throttle" +msgstr "VĂ´ lăng mĂ¡y bay hai nĂºt cĂ³ cần ga" + +msgid "3-button flight yoke with throttle" +msgstr "VĂ´ lăng mĂ¡y bay ba nĂºt cĂ³ cần ga" + +msgid "4-button flight yoke with throttle" +msgstr "VĂ´ lăng mĂ¡y bay bốn nĂºt cĂ³ cần ga" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "VĂ´ lăng (ba trục, hai nĂºt)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "VĂ´ lăng (ba trục, ba nĂºt)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "VĂ´ lăng (ba trục, bốn nĂºt)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + bĂ n giậm CH" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + bĂ n giậm CH Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + bĂ n giậm CH" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + bĂ n giậm CH Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + bĂ n giậm CH" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + bĂ n giậm CH Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + bĂ n giậm CH" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + bĂ n giậm CH Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Hệ thống bĂ¡nh lĂ¡i" -msgid "2-button gamepad(s)" -msgstr "Tay cầm game hai nĂºt" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "VĂ´ lăng mĂ¡y bay hai nĂºt" - -msgid "4-button gamepad" -msgstr "Tay cầm game bốn nĂºt" - -msgid "4-button flight yoke" -msgstr "VĂ´ lăng mĂ¡y bay bốn nĂºt" - -msgid "2-button flight yoke with throttle" -msgstr "VĂ´ lăng mĂ¡y bay hai nĂºt cĂ³ cần ga" - -msgid "4-button flight yoke with throttle" -msgstr "VĂ´ lăng mĂ¡y bay bốn nĂºt cĂ³ cần ga" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "VĂ´ lăng Win95 (ba trục, bốn nĂºt)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "KhĂ´ng cĂ³" @@ -2988,6 +3063,9 @@ msgstr "Chế độ kĂ©o giĂ£n đầu vĂ o cá»§a OpenGL" msgid "Color scheme" msgstr "Bảng mĂ u" +msgid "System" +msgstr "" + msgid "Light" msgstr "Ănh sĂ¡ng" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 48ffc0dc9..0014af5cd 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -852,9 +852,18 @@ msgstr "未找到 PCap 设备" msgid "Invalid PCap device" msgstr "无效 PCap 设备" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2 è½´, 1 é”®æ“纵æ†" + msgid "2-axis, 2-button joystick(s)" msgstr "2 è½´, 2 é”®æ“纵æ†" +msgid "2-axis, 3-button joystick" +msgstr "2 è½´, 3 é”®æ“纵æ†" + msgid "2-axis, 4-button joystick" msgstr "2 è½´, 4 é”®æ“纵æ†" @@ -867,18 +876,99 @@ msgstr "2 è½´, 8 é”®æ“纵æ†" msgid "3-axis, 2-button joystick" msgstr "3 è½´, 2 é”®æ“纵æ†" +msgid "3-axis, 3-button joystick" +msgstr "3 è½´, 3 é”®æ“纵æ†" + msgid "3-axis, 4-button joystick" msgstr "3 è½´, 4 é”®æ“纵æ†" +msgid "4-axis, 2-button joystick" +msgstr "4 è½´, 2 é”®æ“纵æ†" + +msgid "4-axis, 3-button joystick" +msgstr "4 è½´, 3 é”®æ“纵æ†" + msgid "4-axis, 4-button joystick" msgstr "4 è½´, 4 é”®æ“纵æ†" +msgid "2-button gamepad(s)" +msgstr "2 æŒ‰é’®æ¸¸æˆæ‰‹æŸ„" + +msgid "3-button gamepad" +msgstr "3 æŒ‰é’®æ¸¸æˆæ‰‹æŸ„" + +msgid "4-button gamepad" +msgstr "4 æŒ‰é’®æ¸¸æˆæ‰‹æŸ„" + +msgid "6-button gamepad" +msgstr "6 æŒ‰é’®æ¸¸æˆæ‰‹æŸ„" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2 按钮é£è¡Œæ‘‡æ†" + +msgid "3-button flight yoke" +msgstr "3 按钮é£è¡Œæ‘‡æ†" + +msgid "4-button flight yoke" +msgstr "4 按钮é£è¡Œæ‘‡æ†" + +msgid "2-button flight yoke with throttle" +msgstr "2 按钮带油门é£è¡Œæ‘‡æ†" + +msgid "3-button flight yoke with throttle" +msgstr "3 按钮带油门é£è¡Œæ‘‡æ†" + +msgid "4-button flight yoke with throttle" +msgstr "4 按钮带油门é£è¡Œæ‘‡æ†" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "æ–¹å‘盘 (3 è½´, 2 é”®)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "æ–¹å‘盘 (3 è½´, 3 é”®)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "æ–¹å‘盘 (3 è½´, 4 é”®)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "2 æŒ‰é’®æ¸¸æˆæ‰‹æŸ„" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2 按钮é£è¡Œæ‘‡æ†" - -msgid "4-button gamepad" -msgstr "4 æŒ‰é’®æ¸¸æˆæ‰‹æŸ„" - -msgid "4-button flight yoke" -msgstr "4 按钮é£è¡Œæ‘‡æ†" - -msgid "2-button flight yoke with throttle" -msgstr "2 按钮带油门é£è¡Œæ‘‡æ†" - -msgid "4-button flight yoke with throttle" -msgstr "4 按钮带油门é£è¡Œæ‘‡æ†" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 æ–¹å‘盘 (3 è½´, 4 é”®)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "æ— " @@ -2988,6 +3063,9 @@ msgstr "OpenGLç„输入拉伸模å¼" msgid "Color scheme" msgstr "é…色方案" +msgid "System" +msgstr "" + msgid "Light" msgstr "亮色" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 1732cb914..94b0c2918 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -852,9 +852,18 @@ msgstr "未找到 PCap è£ç½®" msgid "Invalid PCap device" msgstr "無效 PCap è£ç½®" +msgid "Generic Paddle Controller(s)" +msgstr "" + +msgid "2-axis, 1-button joystick(s)" +msgstr "2 軸, 1 鵿–æ¡¿" + msgid "2-axis, 2-button joystick(s)" msgstr "2 軸, 2 鵿–æ¡¿" +msgid "2-axis, 3-button joystick" +msgstr "2 軸, 3 鵿–æ¡¿" + msgid "2-axis, 4-button joystick" msgstr "2 軸, 4 鵿–æ¡¿" @@ -867,18 +876,99 @@ msgstr "2 軸, 8 鵿–æ¡¿" msgid "3-axis, 2-button joystick" msgstr "3 軸, 2 鵿–æ¡¿" +msgid "3-axis, 3-button joystick" +msgstr "3 軸, 3 鵿–æ¡¿" + msgid "3-axis, 4-button joystick" msgstr "3 軸, 4 鵿–æ¡¿" +msgid "4-axis, 2-button joystick" +msgstr "4 軸, 2 鵿–æ¡¿" + +msgid "4-axis, 3-button joystick" +msgstr "4 軸, 3 鵿–æ¡¿" + msgid "4-axis, 4-button joystick" msgstr "4 軸, 4 鵿–æ¡¿" +msgid "2-button gamepad(s)" +msgstr "2 éµé戲手柄" + +msgid "3-button gamepad" +msgstr "3 éµé戲手柄" + +msgid "4-button gamepad" +msgstr "4 éµé戲手柄" + +msgid "6-button gamepad" +msgstr "6 éµé戲手柄" + +msgid "Gravis PC GamePad" +msgstr "Gravis PC GamePad" + +msgid "2-button flight yoke" +msgstr "2 æŒ‰éˆ•é£›è¡Œæ–æ¡¿" + +msgid "3-button flight yoke" +msgstr "3 æŒ‰éˆ•é£›è¡Œæ–æ¡¿" + +msgid "4-button flight yoke" +msgstr "4 æŒ‰éˆ•é£›è¡Œæ–æ¡¿" + +msgid "2-button flight yoke with throttle" +msgstr "2 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" + +msgid "3-button flight yoke with throttle" +msgstr "3 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" + +msgid "4-button flight yoke with throttle" +msgstr "4 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" + +msgid "Steering Wheel (3-axis, 2-button)" +msgstr "æ–¹å‘盤 (3 軸, 2 鵿–æ¡¿)" + +msgid "Steering Wheel (3-axis, 3-button)" +msgstr "æ–¹å‘盤 (3 軸, 3 鵿–æ¡¿)" + +msgid "Steering Wheel (3-axis, 4-button)" +msgstr "æ–¹å‘盤 (3 軸, 4 鵿–æ¡¿)" + +msgid "CH Flightstick" +msgstr "CH Flightstick" + +msgid "CH Flightstick + CH Pedals" +msgstr "CH Flightstick + CH Pedals" + +msgid "CH Flightstick + CH Pedals Pro" +msgstr "CH Flightstick + CH Pedals Pro" + msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" msgid "CH Flightstick Pro + CH Pedals" msgstr "CH Flightstick Pro + CH Pedals" +msgid "CH Flightstick Pro + CH Pedals Pro" +msgstr "CH Flightstick Pro + CH Pedals Pro" + +msgid "CH Virtual Pilot" +msgstr "CH Virtual Pilot" + +msgid "CH Virtual Pilot + CH Pedals" +msgstr "CH Virtual Pilot + CH Pedals" + +msgid "CH Virtual Pilot + CH Pedals Pro" +msgstr "CH Virtual Pilot + CH Pedals Pro" + +msgid "CH Virtual Pilot Pro" +msgstr "CH Virtual Pilot Pro" + +msgid "CH Virtual Pilot Pro + CH Pedals" +msgstr "CH Virtual Pilot Pro + CH Pedals" + +msgid "CH Virtual Pilot Pro + CH Pedals Pro" +msgstr "CH Virtual Pilot Pro + CH Pedals Pro" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" @@ -888,26 +978,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "2-button gamepad(s)" -msgstr "2 éµé戲手柄" +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 with Adaptor" -msgid "2-button flight yoke" -msgstr "2 æŒ‰éˆ•é£›è¡Œæ–æ¡¿" - -msgid "4-button gamepad" -msgstr "4 éµé戲手柄" - -msgid "4-button flight yoke" -msgstr "4 æŒ‰éˆ•é£›è¡Œæ–æ¡¿" - -msgid "2-button flight yoke with throttle" -msgstr "2 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" - -msgid "4-button flight yoke with throttle" -msgstr "4 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" - -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Win95 æ–¹å‘盤 (3 軸, 4 鵿–æ¡¿)" +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 without Adaptor" msgid "None" msgstr "ç„¡" @@ -2988,6 +3063,9 @@ msgstr "OpenGL ç„輸入拉伸模å¼" msgid "Color scheme" msgstr "é…色方案" +msgid "System" +msgstr "" + msgid "Light" msgstr "亮色" From fab6e92d0e3bd382183a966fcf6df7c9de4f9a0d Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Tue, 21 Oct 2025 09:38:36 +0800 Subject: [PATCH 136/233] Align array entries for ABit AB-LX6 Align array entries for ABit AB-LX6 in m_at_slot1.c --- src/machine/m_at_slot1.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index a89044af7..0b57b135c 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -168,7 +168,8 @@ static const device_config_t lx6_config[] = { .bios = { { .name = "Award Modular BIOS v4.51PG - Revision LY", - .internal_name = "lx6", .bios_type = BIOS_NORMAL, + .internal_name = "lx6", + .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, .size = 131072, From 0bf8d7583403d821b0e984365a35468035223dfd Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sat, 11 Oct 2025 22:30:05 -0400 Subject: [PATCH 137/233] Fix POV hat config code --- src/config.c | 65 +++++++++++++++++++++++-------------- src/qt/qt_settingsinput.cpp | 18 +++++----- 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/src/config.c b/src/config.c index a06d9e8b4..590ba8119 100644 --- a/src/config.c +++ b/src/config.c @@ -569,6 +569,7 @@ load_input_devices(void) { ini_section_t cat = ini_find_section(config, "Input devices"); char temp[512]; + char tmp2[32]; char *p; p = ini_section_get_string(cat, "keyboard_type", NULL); @@ -646,18 +647,25 @@ load_input_devices(void) joystick_state[gp][js].plat_joystick_nr = ini_section_get_int(cat, temp, 0); if (joystick_state[gp][js].plat_joystick_nr) { + // --- Load Axis Mappings --- for (int axis_nr = 0; axis_nr < joystick_get_axis_count(joystick_type[joy_insn]); axis_nr++) { sprintf(temp, "joystick_%i_axis_%i", js, axis_nr); joystick_state[gp][js].axis_mapping[axis_nr] = ini_section_get_int(cat, temp, axis_nr); } + + // --- Load Button Mappings --- for (int button_nr = 0; button_nr < joystick_get_button_count(joystick_type[joy_insn]); button_nr++) { sprintf(temp, "joystick_%i_button_%i", js, button_nr); joystick_state[gp][js].button_mapping[button_nr] = ini_section_get_int(cat, temp, button_nr); } + + // --- Load POV (Hat Switch) Mappings --- for (int pov_nr = 0; pov_nr < joystick_get_pov_count(joystick_type[joy_insn]); pov_nr++) { sprintf(temp, "joystick_%i_pov_%i", js, pov_nr); - p = ini_section_get_string(cat, temp, "0, 0"); - joystick_state[gp][js].pov_mapping[pov_nr][0] = joystick_state[gp][js].pov_mapping[pov_nr][1] = 0; + sprintf(tmp2, "%i, %i", 0, 0); + p = ini_section_get_string(cat, temp, tmp2); + joystick_state[gp][js].pov_mapping[pov_nr][0] = 0; + joystick_state[gp][js].pov_mapping[pov_nr][1] = 0; sscanf(p, "%i, %i", &joystick_state[gp][js].pov_mapping[pov_nr][0], &joystick_state[gp][js].pov_mapping[pov_nr][1]); } @@ -2702,7 +2710,7 @@ save_input_devices(void) { ini_section_t cat = ini_find_or_create_section(config, "Input devices"); char temp[512]; - char tmp2[512]; + char tmp2[32]; ini_section_set_string(cat, "keyboard_type", keyboard_get_internal_name(keyboard_type)); @@ -2713,20 +2721,25 @@ save_input_devices(void) ini_section_delete_var(cat, "joystick_type"); for (int js = 0; js < MAX_PLAT_JOYSTICKS; js++) { - sprintf(tmp2, "joystick_%i_nr", js); - ini_section_delete_var(cat, tmp2); + sprintf(temp, "joystick_%i_nr", js); + ini_section_delete_var(cat, temp); + // --- Save Axis Mappings --- for (int axis_nr = 0; axis_nr < MAX_JOY_AXES; axis_nr++) { - sprintf(tmp2, "joystick_%i_axis_%i", js, axis_nr); - ini_section_delete_var(cat, tmp2); + sprintf(temp, "joystick_%i_axis_%i", js, axis_nr); + ini_section_delete_var(cat, temp); } + + // --- Save Button Mappings --- for (int button_nr = 0; button_nr < MAX_JOY_BUTTONS; button_nr++) { - sprintf(tmp2, "joystick_%i_button_%i", js, button_nr); - ini_section_delete_var(cat, tmp2); + sprintf(temp, "joystick_%i_button_%i", js, button_nr); + ini_section_delete_var(cat, temp); } + + // --- Save POV (Hat Switch) Mappings --- for (int pov_nr = 0; pov_nr < MAX_JOY_POVS; pov_nr++) { - sprintf(tmp2, "joystick_%i_pov_%i", js, pov_nr); - ini_section_delete_var(cat, tmp2); + sprintf(temp, "joystick_%i_pov_%i", js, pov_nr); + ini_section_delete_var(cat, temp); } } } else { @@ -2735,33 +2748,37 @@ save_input_devices(void) ini_section_set_string(cat, "joystick_type", joystick_get_internal_name(joystick_type[joy_insn])); for (int js = 0; js < joystick_get_max_joysticks(joystick_type[joy_insn]); js++) { - sprintf(tmp2, "joystick_%i_nr", js); - ini_section_set_int(cat, tmp2, joystick_state[gp][js].plat_joystick_nr); + sprintf(temp, "joystick_%i_nr", js); + ini_section_set_int(cat, temp, joystick_state[gp][js].plat_joystick_nr); if (joystick_state[gp][js].plat_joystick_nr) { + // --- Save Axis Mappings --- for (int axis_nr = 0; axis_nr < joystick_get_axis_count(joystick_type[joy_insn]); axis_nr++) { - sprintf(tmp2, "joystick_%i_axis_%i", js, axis_nr); - ini_section_set_int(cat, tmp2, joystick_state[gp][js].axis_mapping[axis_nr]); + sprintf(temp, "joystick_%i_axis_%i", js, axis_nr); + ini_section_set_int(cat, temp, joystick_state[gp][js].axis_mapping[axis_nr]); } + + // --- Save Button Mappings --- for (int button_nr = 0; button_nr < joystick_get_button_count(joystick_type[joy_insn]); button_nr++) { - sprintf(tmp2, "joystick_%i_button_%i", js, button_nr); - ini_section_set_int(cat, tmp2, joystick_state[gp][js].button_mapping[button_nr]); + sprintf(temp, "joystick_%i_button_%i", js, button_nr); + ini_section_set_int(cat, temp, joystick_state[gp][js].button_mapping[button_nr]); } + + // --- Save POV (Hat Switch) Mappings --- for (int pov_nr = 0; pov_nr < joystick_get_pov_count(joystick_type[joy_insn]); pov_nr++) { - sprintf(tmp2, "joystick_%i_pov_%i", js, pov_nr); - sprintf(temp, "%i, %i", joystick_state[gp][js].pov_mapping[pov_nr][0], - joystick_state[gp][js].pov_mapping[pov_nr][1]); - ini_section_set_string(cat, tmp2, temp); + sprintf(temp, "joystick_%i_pov_%i", js, pov_nr); + sprintf(tmp2, "%i, %i", joystick_state[gp][js].pov_mapping[pov_nr][0], + joystick_state[gp][js].pov_mapping[pov_nr][1]); + ini_section_set_string(cat, temp, tmp2); } } } } - if (tablet_tool_type != 1) { + if (tablet_tool_type != 1) ini_section_set_int(cat, "tablet_tool_type", tablet_tool_type); - } else { + else ini_section_delete_var(cat, "tablet_tool_type"); - } ini_delete_section_if_empty(config, cat); } diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp index c540aa2ed..1bee01df6 100644 --- a/src/qt/qt_settingsinput.cpp +++ b/src/qt/qt_settingsinput.cpp @@ -335,7 +335,7 @@ SettingsInput::on_pushButtonConfigureMouse_clicked() } static int -get_axis(JoystickConfiguration &jc, int axis, uint8_t gameport_nr, int joystick_nr) +get_axis(JoystickConfiguration &jc, uint8_t gameport_nr, int joystick_nr, int axis) { int axis_sel = jc.selectedAxis(axis); int nr_axes = plat_joystick_state[joystick_state[gameport_nr][joystick_nr].plat_joystick_nr - 1].nr_axes; @@ -351,7 +351,7 @@ get_axis(JoystickConfiguration &jc, int axis, uint8_t gameport_nr, int joystick_ } static int -get_pov(JoystickConfiguration &jc, int pov, uint8_t gameport_nr, int joystick_nr) +get_pov(JoystickConfiguration &jc, uint8_t gameport_nr, int joystick_nr, int pov) { int pov_sel = jc.selectedPov(pov); int nr_povs = plat_joystick_state[joystick_state[gameport_nr][joystick_nr].plat_joystick_nr - 1].nr_povs * 2; @@ -379,17 +379,15 @@ updateJoystickConfig(int type, uint8_t gameport_nr, int joystick_nr, QWidget *pa joystick_state[gameport_nr][joystick_nr].plat_joystick_nr = jc.selectedDevice(); if (joystick_state[gameport_nr][joystick_nr].plat_joystick_nr) { - for (int axis_nr = 0; axis_nr < joystick_get_axis_count(type); axis_nr++) { - joystick_state[gameport_nr][joystick_nr].axis_mapping[axis_nr] = get_axis(jc, axis_nr, gameport_nr, joystick_nr); - } + for (int axis_nr = 0; axis_nr < joystick_get_axis_count(type); axis_nr++) + joystick_state[gameport_nr][joystick_nr].axis_mapping[axis_nr] = get_axis(jc, gameport_nr, joystick_nr, axis_nr); - for (int button_nr = 0; button_nr < joystick_get_button_count(type); button_nr++) { + for (int button_nr = 0; button_nr < joystick_get_button_count(type); button_nr++) joystick_state[gameport_nr][joystick_nr].button_mapping[button_nr] = jc.selectedButton(button_nr); - } - for (int pov_nr = 0; pov_nr < joystick_get_pov_count(type) * 2; pov_nr += 2) { - joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][0] = get_pov(jc, pov_nr, gameport_nr, joystick_nr); - joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][1] = get_pov(jc, pov_nr + 1, gameport_nr, joystick_nr); + for (int pov_nr = 0; pov_nr < joystick_get_pov_count(type); pov_nr++) { + joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][0] = get_pov(jc, gameport_nr, joystick_nr, pov_nr * 2); // X Axis + joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][1] = get_pov(jc, gameport_nr, joystick_nr, pov_nr * 2 + 1); // Y Axis } } } From c5c93ab90b92bb21971a79be29c2a5d205c807d0 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 20 Oct 2025 23:43:58 -0400 Subject: [PATCH 138/233] Fix duplicate messages warning for QT builds --- src/qt/languages/86box.pot | 3 --- src/qt/languages/cs-CZ.po | 3 --- src/qt/languages/de-DE.po | 3 --- src/qt/languages/es-ES.po | 3 --- src/qt/languages/fi-FI.po | 3 --- src/qt/languages/fr-FR.po | 3 --- src/qt/languages/hr-HR.po | 3 --- src/qt/languages/it-IT.po | 3 --- src/qt/languages/ja-JP.po | 3 --- src/qt/languages/ko-KR.po | 3 --- src/qt/languages/nb-NO.po | 3 --- src/qt/languages/nl-NL.po | 3 --- src/qt/languages/pl-PL.po | 3 --- src/qt/languages/pt-BR.po | 3 --- src/qt/languages/pt-PT.po | 3 --- src/qt/languages/ru-RU.po | 3 --- src/qt/languages/sk-SK.po | 3 --- src/qt/languages/sl-SI.po | 3 --- src/qt/languages/sv-SE.po | 3 --- src/qt/languages/tr-TR.po | 3 --- src/qt/languages/uk-UA.po | 3 --- src/qt/languages/vi-VN.po | 3 --- src/qt/languages/zh-CN.po | 3 --- src/qt/languages/zh-TW.po | 3 --- 24 files changed, 72 deletions(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index fd935ffc5..42aab9108 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -3063,9 +3063,6 @@ msgstr "" msgid "Color scheme" msgstr "" -msgid "System" -msgstr "" - msgid "Light" msgstr "" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 1aa30bdeb..6f210c9d8 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -3063,9 +3063,6 @@ msgstr "Režim roztaženĂ­ vstupu OpenGL" msgid "Color scheme" msgstr "BarevnĂ© schĂ©ma" -msgid "System" -msgstr "" - msgid "Light" msgstr "SvÄ›tlĂ©" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index ed479ab13..8ecd7a003 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -3063,9 +3063,6 @@ msgstr "Eingabestreckungsmodus von OpenGL" msgid "Color scheme" msgstr "Farbschema" -msgid "System" -msgstr "" - msgid "Light" msgstr "Licht" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index bcf5a0026..4d00016b2 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -3063,9 +3063,6 @@ msgstr "Modo de estiramiento de entrada de OpenGL" msgid "Color scheme" msgstr "Esquema de colores" -msgid "System" -msgstr "" - msgid "Light" msgstr "Luz" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 96b1c03aa..e36559c19 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -3063,9 +3063,6 @@ msgstr "OpenGL-syötteen venytystila" msgid "Color scheme" msgstr "Väriteema" -msgid "System" -msgstr "" - msgid "Light" msgstr "Vaalea" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 928666268..3c5905f46 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -3063,9 +3063,6 @@ msgstr "Mode d'Ă©tirement des donnĂ©es d'entrĂ©e d'OpenGL" msgid "Color scheme" msgstr "Palette de couleurs" -msgid "System" -msgstr "" - msgid "Light" msgstr "Lumière" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index b0f5a352e..5d03a6773 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -3063,9 +3063,6 @@ msgstr "NaÄin rastezanja ulaza u OpenGL-u" msgid "Color scheme" msgstr "Shema boja" -msgid "System" -msgstr "" - msgid "Light" msgstr "Svjetlo" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 7e08cf1c5..b0ef54fdf 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -3063,9 +3063,6 @@ msgstr "ModalitĂ  adattamento ingresso OpenGL" msgid "Color scheme" msgstr "ModalitĂ  colori" -msgid "System" -msgstr "" - msgid "Light" msgstr "Chiara" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 7cb67e505..2953997df 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -3063,9 +3063,6 @@ msgstr "OpenGLă®å…¥å›ă‚¹ăƒˆăƒ¬ăƒƒăƒăƒ¢ăƒ¼ăƒ‰" msgid "Color scheme" msgstr "é…色" -msgid "System" -msgstr "" - msgid "Light" msgstr "å…‰" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index dea008ad8..49e407568 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -3063,9 +3063,6 @@ msgstr "OpenGL ́…ë ¥ ́¤í¸ë ˆ́¹˜ 모드" msgid "Color scheme" msgstr "́ƒ‰́ƒ 구́„±" -msgid "System" -msgstr "" - msgid "Light" msgstr "ë¹›" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index db70b8842..69591c4c1 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -3063,9 +3063,6 @@ msgstr "Inngangsstrekkmodus for OpenGL" msgid "Color scheme" msgstr "Fargevalg" -msgid "System" -msgstr "" - msgid "Light" msgstr "Lys" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index deb53176c..cce10e564 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -3063,9 +3063,6 @@ msgstr "Input stretch-modus van OpenGL" msgid "Color scheme" msgstr "Kleurenschema" -msgid "System" -msgstr "" - msgid "Light" msgstr "Licht" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 643957399..9b4e20136 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -3063,9 +3063,6 @@ msgstr "Tryb rozciÄ…gania wejÅ›ciowego OpenGL" msgid "Color scheme" msgstr "Schemat kolorĂ³w" -msgid "System" -msgstr "" - msgid "Light" msgstr "ÅwiatÅ‚o" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 0f9b81277..31b401fa8 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -3063,9 +3063,6 @@ msgstr "Modo de expansĂ£o de entrada do OpenGL" msgid "Color scheme" msgstr "Esquema de cores" -msgid "System" -msgstr "" - msgid "Light" msgstr "Claro" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 9cc796af4..75aa4498e 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -3063,9 +3063,6 @@ msgstr "Modo de expansĂ£o de entrada do OpenGL" msgid "Color scheme" msgstr "Esquema de cores" -msgid "System" -msgstr "" - msgid "Light" msgstr "Claro" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index cd0c70e51..24f49da45 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -3063,9 +3063,6 @@ msgstr "Đ ĐµĐ¶Đ¸Đ¼ Ñ€Đ°ÑÑ‚ÑĐ¶ĐµĐ½Đ¸Ñ Đ²Đ²Đ¾Đ´Đ° OpenGL" msgid "Color scheme" msgstr "Đ¦Đ²ĐµÑ‚Đ¾Đ²Đ°Ñ ÑÑ…ĐµĐ¼Đ°" -msgid "System" -msgstr "" - msgid "Light" msgstr "Đ¡Đ²ĐµÑ‚Đ»Đ°Ñ" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index c0230ea6d..7363fd459 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -3063,9 +3063,6 @@ msgstr "Režim rozÅ¥ahovania vstupu OpenGL" msgid "Color scheme" msgstr "FarebnĂ¡ schĂ©ma" -msgid "System" -msgstr "" - msgid "Light" msgstr "Svetlo" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 81026fe06..3567aaa1a 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -3063,9 +3063,6 @@ msgstr "NaÄin raztezanja vhoda OpenGL" msgid "Color scheme" msgstr "Barvna shema" -msgid "System" -msgstr "" - msgid "Light" msgstr "Svetloba" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index a04c58265..a65ded997 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -3063,9 +3063,6 @@ msgstr "Inmatningssträckningsläge för OpenGL" msgid "Color scheme" msgstr "Färgschema" -msgid "System" -msgstr "" - msgid "Light" msgstr "Ljus" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 43f52d394..759a8a4a2 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -3063,9 +3063,6 @@ msgstr "OpenGL'nin giriÅŸ germe modu" msgid "Color scheme" msgstr "Renk ÅŸeması" -msgid "System" -msgstr "" - msgid "Light" msgstr "Işık" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 473030341..0bca925fb 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -3063,9 +3063,6 @@ msgstr "Đ ĐµĐ¶Đ¸Đ¼ Ñ€Đ¾Đ·Ñ‚ÑĐ³ÑƒĐ²Đ°Đ½Đ½Ñ Đ²Ñ…Ñ–Đ´Đ½Đ¸Ñ… Đ´Đ°Đ½Đ¸Ñ… OpenGL" msgid "Color scheme" msgstr "ĐĐ¾Đ»Ñ–Ñ€Đ½Đ° Đ³Đ°Đ¼Đ¼Đ°" -msgid "System" -msgstr "" - msgid "Light" msgstr "Đ¡Đ²Ñ–Ñ‚Đ»Đ¾" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 41f6d056e..e178a256c 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -3063,9 +3063,6 @@ msgstr "Chế độ kĂ©o giĂ£n đầu vĂ o cá»§a OpenGL" msgid "Color scheme" msgstr "Bảng mĂ u" -msgid "System" -msgstr "" - msgid "Light" msgstr "Ănh sĂ¡ng" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 0014af5cd..f973a9512 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -3063,9 +3063,6 @@ msgstr "OpenGLç„输入拉伸模å¼" msgid "Color scheme" msgstr "é…色方案" -msgid "System" -msgstr "" - msgid "Light" msgstr "亮色" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 94b0c2918..675c3f517 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -3063,9 +3063,6 @@ msgstr "OpenGL ç„輸入拉伸模å¼" msgid "Color scheme" msgstr "é…色方案" -msgid "System" -msgstr "" - msgid "Light" msgstr "亮色" From cff55b210ce90bb800cdcfcf7b23e61c74fe3875 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 20 Oct 2025 23:46:23 -0400 Subject: [PATCH 139/233] Fix more compile warnings --- src/machine/m_at_socket7_3v.c | 4 ++-- src/utils/crc32.c | 4 +++- src/video/vid_ddc_edid_custom.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 69d37229f..264a220fc 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -280,8 +280,8 @@ machine_at_vectra500mt_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init_ex(model, 2); - + 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(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); diff --git a/src/utils/crc32.c b/src/utils/crc32.c index 6993654ae..a8d5dde26 100644 --- a/src/utils/crc32.c +++ b/src/utils/crc32.c @@ -22,7 +22,9 @@ #include #include -#define __USE_LARGEFILE64 +#ifndef __USE_LARGEFILE64 +#define __USE_LARGEFILE64 1 +#endif #include #if (defined(__HAIKU__) || defined(__unix__) || defined(__APPLE__)) && !defined(__linux__) diff --git a/src/video/vid_ddc_edid_custom.c b/src/video/vid_ddc_edid_custom.c index 4442fac10..ae427d7de 100644 --- a/src/video/vid_ddc_edid_custom.c +++ b/src/video/vid_ddc_edid_custom.c @@ -64,7 +64,7 @@ ddc_load_edid(char *path, uint8_t *buf, size_t size) // Check the beginning of the file for the EDID header. uint64_t header; - fread(&header, sizeof(header), 1, fp); + (void) !fread(&header, sizeof(header), 1, fp); if (header == EDID_HEADER) { // Binary format. Read as is From 24d524fa31f73a41f2c5ba23e8226cd420134790 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 12 Oct 2025 23:25:50 -0400 Subject: [PATCH 140/233] Correct formatting in machine_table.c --- src/machine/machine_table.c | 424 ++++++++++++++++++------------------ 1 file changed, 212 insertions(+), 212 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 47fb21303..efb1a31ed 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -12432,47 +12432,47 @@ const machine_t machines[] = { .net_device = NULL }, { - .name = "[i430FX] IBM PC 3x0 (type 65x6) (Morrison64)", - .internal_name = "pc330_65x6", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_pc330_65x6_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] IBM PC 3x0 (type 65x6) (Morrison64)", + .internal_name = "pc330_65x6", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_pc330_65x6_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86), + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 2.0 + .min_multi = 1.5, + .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 255, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the PC87306 Super I/O chip, command 0xA1 returns '5'. @@ -13040,27 +13040,27 @@ const machine_t machines[] = { .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, - .ram = { + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, + .ram = { .min = 4096, .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_USE_CONFIG, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_USE_CONFIG, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5434_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5434_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a VIA KBC chip */ { @@ -13084,27 +13084,27 @@ const machine_t machines[] = { .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { .min = 4096, .max = 262144, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_VIA | 0x00424600, /* Guess */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_VIA | 0x00424600, /* Guess */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* KBC firmware is unknown. No commands outside of the base PS/2 */ /* KBC command set are used. */ @@ -13129,27 +13129,27 @@ const machine_t machines[] = { .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM, - .ram = { + .flags = MACHINE_IDE_DUAL | MACHINE_APM, + .ram = { .min = 4096, .max = 131072, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 4, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL }, /* This has Phoenix KBC firmware. */ { @@ -13173,27 +13173,27 @@ const machine_t machines[] = { .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, - .ram = { + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, + .ram = { .min = 8192, .max = 139264, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5430_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5430_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* VLSI Wildcat */ @@ -13219,27 +13219,27 @@ const machine_t machines[] = { .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, - .ram = { + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO, + .ram = { .min = 4096, .max = 196608, .step = 4096 }, - .nvrmask = 127, - .jumpered_ecp_dma = MACHINE_DMA_3, + .nvrmask = 127, + .jumpered_ecp_dma = MACHINE_DMA_3, .default_jumpered_ecp_dma = 3, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */ - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */ + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Socket 7 (Single Voltage) machines */ @@ -13334,90 +13334,90 @@ const machine_t machines[] = { .net_device = NULL }, { - .name = "[i430FX] HP Vectra VE 5/XXX Series 2", - .internal_name = "hpvectravexxx", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_hpvectravexxx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] HP Vectra VE 5/XXX Series 2", + .internal_name = "hpvectravexxx", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_hpvectravexxx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &hpvectravexxx_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5436_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &hpvectravexxx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5436_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, { - .name = "[i430FX] HP Vectra 500 Series xxx/MT", - .internal_name = "vectra500mt", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_vectra500mt_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, + .name = "[i430FX] HP Vectra 500 Series xxx/MT", + .internal_name = "vectra500mt", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_vectra500mt_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, .min_voltage = 3380, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 + .min_multi = 1.5, + .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, .step = 8192 }, - .nvrmask = 511, - .jumpered_ecp_dma = 0, + .nvrmask = 511, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &s3_phoenix_trio64_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &s3_phoenix_trio64_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL }, /* Has a SM(S)C FDC37C932 Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ @@ -15778,48 +15778,48 @@ const machine_t machines[] = { }, /* This has the Phoenix MultiKey KBC firmware on the NSC Super I/O chip. */ { - .name = "[i430TX] Intel AN430TX (Anchorage)", - .internal_name = "an430tx", - .type = MACHINE_TYPE_SOCKET7, - .chipset = MACHINE_CHIPSET_INTEL_430TX, - .init = machine_at_an430tx_init, - .p1_handler = machine_generic_p1_handler, + .name = "[i430TX] Intel AN430TX (Anchorage)", + .internal_name = "an430tx", + .type = MACHINE_TYPE_SOCKET7, + .chipset = MACHINE_CHIPSET_INTEL_430TX, + .init = machine_at_an430tx_init, + .p1_handler = machine_generic_p1_handler, .gpio_handler = machine_ap440fx_vs440fx_gpio_handler, - .available_flag = MACHINE_AVAILABLE, + .available_flag = MACHINE_AVAILABLE, .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, - CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), - .min_bus = 60000000, - .max_bus = 66666667, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P, + CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L), + .min_bus = 60000000, + .max_bus = 66666667, .min_voltage = 2800, .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.5 + .min_multi = 1.5, + .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ - .ram = { - .min = 8192, - .max = 262144, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ + .ram = { + .min = 8192, + .max = 262144, .step = 8192 }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, + .nvrmask = 255, + .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x000044f0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &an430tx_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = &ymf715_onboard_device, - .net_device = NULL + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x000044f0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &an430tx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = &ymf715_onboard_device, + .net_device = NULL }, /* This has the Winbond W83977 Super I/O Chip with AMIKey-2 KBC firmware, which is type 'H'. */ { From 63c01b6b9f3179f027594cabe4f85e84ff2c3e78 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 01:07:47 -0400 Subject: [PATCH 141/233] Remove ACPI flag from the Abit AH4T --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index efb1a31ed..da791a850 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -8831,7 +8831,7 @@ const machine_t machines[] = { .max_multi = 0 }, .bus_flags = MACHINE_VLB, - .flags = MACHINE_APM | MACHINE_ACPI, + .flags = MACHINE_APM, .ram = { .min = 1024, .max = 131072, From bd8310f5e7b33f39a97383128d3d35b5961f6b84 Mon Sep 17 00:00:00 2001 From: Bozo Scum Date: Tue, 21 Oct 2025 13:25:42 +0800 Subject: [PATCH 142/233] fix Display Type does not correctly apply to Video #2 --- src/video/vid_table.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/video/vid_table.c b/src/video/vid_table.c index db8b33e18..cb7e794e8 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -327,8 +327,10 @@ video_prepare(void) for (int i = 0; i < MONITORS_NUM; i++) { /* Reset the CGA palette. */ +#if 0 if (monitors[i].mon_cga_palette) *monitors[i].mon_cga_palette = 0; +#endif cgapal_rebuild_monitor(i); /* Do an inform on the default values, so that that there's some sane values initialized From 003eef6aeb0c84a4d87f1a943865b74bbc5fc889 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 01:44:28 -0400 Subject: [PATCH 143/233] Fix several joystick Button names --- src/game/joystick_ch_flightstick_pro.c | 12 ++++++------ src/game/joystick_standard.c | 4 ++-- src/game/joystick_tm_fcs.c | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index 0c318555a..5c35b85a8 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -239,7 +239,7 @@ const joystick_t joystick_ch_flightstick = { .pov_count = 0, .max_joysticks = 1, .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" }, - .button_names = { "Button 1", "Button 2" }, + .button_names = { "Trigger", "Button 2" }, .pov_names = { NULL } }; @@ -257,7 +257,7 @@ const joystick_t joystick_ch_flightstick_ch_pedals = { .pov_count = 0, .max_joysticks = 1, .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, - .button_names = { "Button 1", "Button 2" }, + .button_names = { "Trigger", "Button 2" }, .pov_names = { NULL } }; @@ -275,7 +275,7 @@ const joystick_t joystick_ch_flightstick_ch_pedals_pro = { .pov_count = 0, .max_joysticks = 1, .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, - .button_names = { "Button 1", "Button 2" }, + .button_names = { "Trigger", "Button 2" }, .pov_names = { NULL } }; @@ -293,7 +293,7 @@ const joystick_t joystick_ch_flightstick_pro = { .pov_count = 1, .max_joysticks = 1, .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; @@ -311,7 +311,7 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals = { .pov_count = 1, .max_joysticks = 1, .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; @@ -329,7 +329,7 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro = { .pov_count = 1, .max_joysticks = 1, .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index 8bb47937f..0876a21a2 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -765,7 +765,7 @@ const joystick_t joystick_3button_yoke_throttle = { .pov_count = 0, .max_joysticks = 1, .axis_names = { "Roll axis", "Pitch axis", "Throttle axis" }, - .button_names = { "Button 1", "Button 2", "Button 3" }, + .button_names = { "Trigger", "Button 2", "Button 3" }, .pov_names = { NULL } }; @@ -783,7 +783,7 @@ const joystick_t joystick_4button_yoke_throttle = { .pov_count = 0, .max_joysticks = 1, .axis_names = { "Roll axis", "Pitch axis", "Throttle axis" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { NULL } }; diff --git a/src/game/joystick_tm_fcs.c b/src/game/joystick_tm_fcs.c index c8368612d..93f54db36 100644 --- a/src/game/joystick_tm_fcs.c +++ b/src/game/joystick_tm_fcs.c @@ -167,7 +167,7 @@ const joystick_t joystick_tm_fcs = { .pov_count = 1, .max_joysticks = 1, .axis_names = { "X axis", "Y axis" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; @@ -185,6 +185,6 @@ const joystick_t joystick_tm_fcs_rcs = { .pov_count = 1, .max_joysticks = 1, .axis_names = { "X axis", "Y axis", "Rudder" }, - .button_names = { "Button 1", "Button 2", "Button 3", "Button 4" }, + .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; From 6a20196bc363e398ea195786bebeb94c7cb98d96 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 01:44:51 -0400 Subject: [PATCH 144/233] Fix incorrect joystick button counts --- src/game/joystick_standard.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index 0876a21a2..59b3460a2 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -544,7 +544,7 @@ const joystick_t joystick_4axis_2button = { .read_axis = joystick_standard_read_axis_4axis, .a0_over = joystick_standard_a0_over, .axis_count = 4, - .button_count = 3, + .button_count = 2, .pov_count = 0, .max_joysticks = 1, .axis_names = { "X axis", "Y axis", "Z axis", "zX axis" }, @@ -797,7 +797,7 @@ const joystick_t joystick_steering_wheel_2_button = { .read_axis = joystick_standard_read_axis_3axis, .a0_over = joystick_standard_a0_over, .axis_count = 3, - .button_count = 4, + .button_count = 2, .pov_count = 0, .max_joysticks = 1, .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, @@ -815,7 +815,7 @@ const joystick_t joystick_steering_wheel_3_button = { .read_axis = joystick_standard_read_axis_3axis, .a0_over = joystick_standard_a0_over, .axis_count = 3, - .button_count = 4, + .button_count = 3, .pov_count = 0, .max_joysticks = 1, .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, From 5b0267e4d3738ece390f664cc0cac9ebe31939fe Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Tue, 21 Oct 2025 16:28:37 +0700 Subject: [PATCH 145/233] Added the 1999 v4.51PG BIOS to P5VX-B --- src/include/86box/machine.h | 3 ++ src/machine/m_at_socket7.c | 65 ++++++++++++++++++++++++++++++++++--- src/machine/machine_table.c | 2 +- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 061c6473f..8cc928f91 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1062,6 +1062,9 @@ extern int machine_at_8500tvxa_init(const machine_t *); extern int machine_at_presario2240_init(const machine_t *); extern int machine_at_presario4500_init(const machine_t *); extern int machine_at_dellhannibalp_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t p5vxb_device; +#endif extern int machine_at_p5vxb_init(const machine_t *); extern int machine_at_p55va_init(const machine_t *); extern int machine_at_gw2kte_init(const machine_t *); diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 7916db2d4..15e0316f2 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -813,17 +813,72 @@ machine_at_dellhannibalp_init(const machine_t *model) return ret; } +static const device_config_t p5vxb_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "p5vxb", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Award Modular BIOS v4.50PG - Revision 1.0", + .internal_name = "p5vxb", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/p5vxb/P5VXB10.BIN", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 1.5c", + .internal_name = "p5vxb_451pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/p5vxb/P5VXB15C.BIN", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t p5vxb_device = { + .name = "ECS P5VX-B", + .internal_name = "p5vxb_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = p5vxb_config +}; + int machine_at_p5vxb_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/p5vxb/P5VXB10.BIN", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 47fb21303..244bf83df 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -15218,7 +15218,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &p5vxb_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From 7f9720d746bb2d8ad32bf23938f58280d1d6bcf9 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Mon, 20 Oct 2025 05:28:42 +0500 Subject: [PATCH 146/233] Qt: Move the CPU frame size option next to time sync --- src/qt/qt_settingsmachine.ui | 209 ++++++++++++++++++----------------- 1 file changed, 110 insertions(+), 99 deletions(-) diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui index 34f0b6160..e14e113f8 100644 --- a/src/qt/qt_settingsmachine.ui +++ b/src/qt/qt_settingsmachine.ui @@ -106,7 +106,7 @@ Frequency:
- Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -312,7 +312,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -325,92 +325,116 @@ - - - - - - 0 - 0 - - - - CPU frame size - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop - - - - - - Larger frames (less smooth) - - - - - - - Smaller frames (smoother) - - - - - + + + + + + + + 0 + 0 + + + + Time synchronization + + + + + + Disabled + + + + + + + Enabled (local time) + + + + + + + Enabled (UTC) + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + - - + + + + + + + 0 + 0 + + + + CPU frame size + + + + + + Larger frames (less smooth) + + + + + + + Smaller frames (smoother) + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - Time synchronization - - - - - - Disabled - - - - - - - Enabled (local time) - - - - - - - Enabled (UTC) - - - - - - - - - - Qt::Orientation::Horizontal + Qt::Horizontal @@ -422,19 +446,6 @@ - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - From 591517d85caa79c3545e50ce3a3b15f4aef71dca Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Tue, 21 Oct 2025 16:28:01 +0500 Subject: [PATCH 147/233] Qt: Clean up the .ui files for v5.2 - properly order the elements in QGridLayouts - add non-generic names to text labels and some layouts - fix enums for Qt 5 Designer compatibility - fix tab order on some settings dialog pages --- src/qt/qt_cgasettingsdialog.ui | 162 ++++++++-------- src/qt/qt_harddiskdialog.ui | 18 +- src/qt/qt_joystickconfiguration.ui | 2 +- src/qt/qt_mainwindow.ui | 18 +- src/qt/qt_newfloppydialog.ui | 4 +- src/qt/qt_progsettings.ui | 211 ++++++++++---------- src/qt/qt_settingsdisplay.cpp | 12 +- src/qt/qt_settingsdisplay.ui | 239 ++++++++++++----------- src/qt/qt_settingsmachine.ui | 298 ++++++++++++++--------------- src/qt/qt_vmmanager_preferences.ui | 10 +- 10 files changed, 504 insertions(+), 470 deletions(-) diff --git a/src/qt/qt_cgasettingsdialog.ui b/src/qt/qt_cgasettingsdialog.ui index 7367b2099..dc5acb0fc 100644 --- a/src/qt/qt_cgasettingsdialog.ui +++ b/src/qt/qt_cgasettingsdialog.ui @@ -15,84 +15,15 @@ - QLayout::SizeConstraint::SetFixedSize + QLayout::SetFixedSize - - - - -100 - - - 100 - - - Qt::Orientation::Horizontal - - - - - - - 360 - - - 100 - - - Qt::Orientation::Horizontal - - - - + Hue - - - - -50 - - - 50 - - - Qt::Orientation::Horizontal - - - - - - - Qt::Orientation::Horizontal - - - QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::Reset - - - - - - - 360 - - - 100 - - - Qt::Orientation::Horizontal - - - - - - - Contrast - - - @@ -102,31 +33,100 @@ 360 - Qt::Orientation::Horizontal - - - - - - - Sharpness + Qt::Horizontal - + Saturation + + + + 360 + + + 100 + + + Qt::Horizontal + + + - + Brightness + + + + -100 + + + 100 + + + Qt::Horizontal + + + + + + + Contrast + + + + + + + 360 + + + 100 + + + Qt::Horizontal + + + + + + + Sharpness + + + + + + + -50 + + + 50 + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset + + + diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui index e2dea0220..6de39375f 100644 --- a/src/qt/qt_harddiskdialog.ui +++ b/src/qt/qt_harddiskdialog.ui @@ -33,7 +33,7 @@ - + File name: @@ -43,7 +43,7 @@ - + Cylinders: @@ -66,7 +66,7 @@ - + Heads: @@ -92,7 +92,7 @@ - + Sectors: @@ -118,7 +118,7 @@ - + Size (MB): @@ -141,7 +141,7 @@ - + Type: @@ -155,7 +155,7 @@ - + Bus: @@ -169,7 +169,7 @@ - + Channel: @@ -183,7 +183,7 @@ - + Model: diff --git a/src/qt/qt_joystickconfiguration.ui b/src/qt/qt_joystickconfiguration.ui index 139b99ca5..f5f2773b3 100644 --- a/src/qt/qt_joystickconfiguration.ui +++ b/src/qt/qt_joystickconfiguration.ui @@ -32,7 +32,7 @@ - + Device diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 38aba061f..45c4f70ae 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -260,7 +260,7 @@ - Qt::ContextMenuPolicy::PreventContextMenu + Qt::PreventContextMenu toolBar @@ -272,7 +272,7 @@ false - Qt::ToolBarArea::TopToolBarArea + Qt::TopToolBarArea @@ -281,7 +281,7 @@ - Qt::ToolButtonStyle::ToolButtonIconOnly + Qt::ToolButtonIconOnly false @@ -396,7 +396,7 @@ E&xit - QAction::MenuRole::QuitRole + QAction::QuitRole @@ -408,7 +408,7 @@ &Settings... - QAction::MenuRole::NoRole + QAction::NoRole false @@ -710,7 +710,7 @@ false - QAction::MenuRole::AboutQtRole + QAction::AboutQtRole @@ -718,7 +718,7 @@ &About 86Box... - QAction::MenuRole::AboutRole + QAction::AboutRole @@ -771,7 +771,7 @@ &Preferences... - QAction::MenuRole::PreferencesRole + QAction::PreferencesRole @@ -844,7 +844,7 @@ Renderer &options... - QAction::MenuRole::NoRole + QAction::NoRole diff --git a/src/qt/qt_newfloppydialog.ui b/src/qt/qt_newfloppydialog.ui index c0437d810..98bfd8be4 100644 --- a/src/qt/qt_newfloppydialog.ui +++ b/src/qt/qt_newfloppydialog.ui @@ -27,7 +27,7 @@ - + File name: @@ -44,7 +44,7 @@ - + Disk size: diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui index ca33726b1..6d5f80830 100644 --- a/src/qt/qt_progsettings.ui +++ b/src/qt/qt_progsettings.ui @@ -27,49 +27,15 @@ - QLayout::SizeConstraint::SetFixedSize + QLayout::SetFixedSize - + Language: - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - Inhibit multimedia keys - - - - - - - Mouse sensitivity: - - - - - - - Default - - - @@ -82,10 +48,30 @@ - - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + - Ask for confirmation before saving settings + Default + + + + + + + Mouse sensitivity: @@ -107,31 +93,14 @@ 100 - Qt::Orientation::Horizontal - - - - - - - <html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html> - - - Select media images from program working directory - - - - - - - Default + Qt::Horizontal - Qt::Orientation::Horizontal + Qt::Horizontal @@ -141,58 +110,106 @@ - + + + + Default + + + + + + + <html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html> + + + Select media images from program working directory + + + + + + + Inhibit multimedia keys + + + + + + + Ask for confirmation before saving settings + + + + Ask for confirmation before quitting - - - - Qt::Orientation::Horizontal - - - QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok - - - - + Ask for confirmation before hard resetting - - - - Color scheme + + + + + + Color scheme + + + + + + System + + + + + + + Light + + + + + + + Dark + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - System - - - - - - - Light - - - - - - - Dark - - - - diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp index 8e3a72589..89a2530be 100644 --- a/src/qt/qt_settingsdisplay.cpp +++ b/src/qt/qt_settingsdisplay.cpp @@ -46,7 +46,7 @@ SettingsDisplay::SettingsDisplay(QWidget *parent) for (uint8_t i = 0; i < GFXCARD_MAX; i ++) videoCard[i] = gfxcard[i]; - ui->lineEdit->setFilter(tr("EDID") % util::DlgFilter({ "bin", "dat", "edid", "txt" }) % tr("All files") % util::DlgFilter({ "*" }, true)); + ui->lineEditCustomEDID->setFilter(tr("EDID") % util::DlgFilter({ "bin", "dat", "edid", "txt" }) % tr("All files") % util::DlgFilter({ "*" }, true)); onCurrentMachineChanged(machine); } @@ -77,7 +77,7 @@ SettingsDisplay::save() da2_standalone_enabled = ui->checkBoxDa2->isChecked() ? 1 : 0; monitor_edid = ui->radioButtonCustom->isChecked() ? 1 : 0; - strncpy(monitor_edid_path, ui->lineEdit->fileName().toUtf8().data(), sizeof(monitor_edid_path) - 1); + strncpy(monitor_edid_path, ui->lineEditCustomEDID->fileName().toUtf8().data(), sizeof(monitor_edid_path) - 1); } void @@ -135,8 +135,8 @@ SettingsDisplay::onCurrentMachineChanged(int machineId) ui->radioButtonDefault->setChecked(monitor_edid == 0); ui->radioButtonCustom->setChecked(monitor_edid == 1); - ui->lineEdit->setFileName(monitor_edid_path); - ui->lineEdit->setEnabled(monitor_edid == 1); + ui->lineEditCustomEDID->setFileName(monitor_edid_path); + ui->lineEditCustomEDID->setEnabled(monitor_edid == 1); } void @@ -326,7 +326,7 @@ void SettingsDisplay::on_radioButtonDefault_clicked() { ui->radioButtonDefault->setChecked(true); ui->radioButtonCustom->setChecked(false); - ui->lineEdit->setEnabled(false); + ui->lineEditCustomEDID->setEnabled(false); } @@ -334,7 +334,7 @@ void SettingsDisplay::on_radioButtonCustom_clicked() { ui->radioButtonDefault->setChecked(false); ui->radioButtonCustom->setChecked(true); - ui->lineEdit->setEnabled(true); + ui->lineEditCustomEDID->setEnabled(true); } void SettingsDisplay::on_pushButtonExportDefault_clicked() diff --git a/src/qt/qt_settingsdisplay.ui b/src/qt/qt_settingsdisplay.ui index 6e4c14152..5ab71f4c0 100644 --- a/src/qt/qt_settingsdisplay.ui +++ b/src/qt/qt_settingsdisplay.ui @@ -26,27 +26,45 @@ 0 - - + + + + + 0 + 0 + + - Voodoo 1 or 2 Graphics + Video: - - + + + + + 0 + 0 + + + + 30 + + + + + + + + 0 + 0 + + Configure - - - - IBM 8514/A Graphics - - - @@ -60,6 +78,47 @@ + + + + + 0 + 0 + + + + 30 + + + + + + + Configure + + + + + + + Voodoo 1 or 2 Graphics + + + + + + + Configure + + + + + + + IBM 8514/A Graphics + + + @@ -67,6 +126,13 @@ + + + + XGA Graphics + + + @@ -74,8 +140,22 @@ + + + + IBM PS/55 Display Adapter Graphics + + + + + + + Configure + + + - + 0 @@ -85,9 +165,9 @@ Monitor EDID - + - + @@ -111,9 +191,9 @@ - + - QLayout::SizeConstraint::SetNoConstraint + QLayout::SetNoConstraint @@ -123,7 +203,7 @@ - + 0 @@ -137,99 +217,6 @@ - - - - - 0 - 0 - - - - 30 - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - Configure - - - - - - - - 0 - 0 - - - - Configure - - - - - - - - 0 - 0 - - - - Video: - - - - - - - Configure - - - - - - - - 0 - 0 - - - - 30 - - - - - - - XGA Graphics - - - - - - - IBM PS/55 Display Adapter Graphics - - - @@ -240,6 +227,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -250,6 +250,23 @@ 1 + + comboBoxVideo + pushButtonConfigureVideo + comboBoxVideoSecondary + pushButtonConfigureVideoSecondary + checkBoxVoodoo + pushButtonConfigureVoodoo + checkBox8514 + pushButtonConfigure8514 + checkBoxXga + pushButtonConfigureXga + checkBoxDa2 + pushButtonConfigureDa2 + radioButtonDefault + pushButtonExportDefault + radioButtonCustom + diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui index e14e113f8..fdfda37b6 100644 --- a/src/qt/qt_settingsmachine.ui +++ b/src/qt/qt_settingsmachine.ui @@ -41,144 +41,18 @@ 0 - - + + - Machine: + Search: - - - - CPU type: - - - - - - - - 0 - 0 - - - - - - - - Memory: - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - 30 - - - - - - - Frequency: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - 30 - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - 30 - - - - - - - PIT mode: - - - - - - - - 0 - 0 - - - - 30 - - - - - + + - + Machine type: @@ -191,17 +65,10 @@ - - - - 30 - - - - - + + - Wait states: + Machine: @@ -243,22 +110,155 @@ + + + + CPU type: + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 30 + + + + + + + Frequency: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + 30 + + + + + + - + FPU: - - - - Search: + + + + 30 - - + + + + Wait states: + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 30 + + + + + + + PIT mode: + + + + + + + + 0 + 0 + + + + 30 + + + + + + + + + + Memory: + + + + + + + + 0 + 0 + + + diff --git a/src/qt/qt_vmmanager_preferences.ui b/src/qt/qt_vmmanager_preferences.ui index 7f7b94fa4..7206b79bf 100644 --- a/src/qt/qt_vmmanager_preferences.ui +++ b/src/qt/qt_vmmanager_preferences.ui @@ -15,10 +15,10 @@ - QLayout::SizeConstraint::SetFixedSize + QLayout::SetFixedSize - + System Directory: @@ -146,7 +146,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -159,10 +159,10 @@ - Qt::Orientation::Horizontal + Qt::Horizontal - QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Ok From ad64553992233d4c31133423fc53dad6e96b8ab8 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Tue, 21 Oct 2025 16:14:21 +0500 Subject: [PATCH 148/233] Properly fix the workaround for OpenGL 3.0-3.1 It was incorrectly comparing the OpenGL version and the GLSL version, plus the pointer arithmetic broke with debug builds Also rename the misleadingly-named array and fix logging --- src/qt/qt_openglrenderer.cpp | 19 +++++++++---------- src/qt/qt_openglrenderer.hpp | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index c8c2e2fc6..9b1233f7d 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -42,6 +42,8 @@ extern MainWindow* main_window; #include #include +#include +#define HAVE_STDARG_H #include "qt_openglrenderer.hpp" #include "qt_openglshadermanagerdialog.hpp" @@ -152,7 +154,7 @@ ogl3_log(const char *fmt, ...) if (ogl3_do_log) { va_start(ap, fmt); - ogl3_log_ex(fmt, ap); + pclog_ex(fmt, ap); va_end(ap); } } @@ -219,10 +221,7 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch snprintf(version, 49, "%s\n", versionRegex.match(progSource).captured(1).toLatin1().data()); progSource.remove(versionRegex); } else { - version_loc = ((char *) this->glslVersion.toLatin1().data()) + 9; - char glsl_ver[4] = { 0 }; - memcpy(glsl_ver, version_loc, 3); - int ver = atoi((char *) glsl_ver); + int ver = gl_version[0] * 100 + gl_version[1] * 10; if (ver == 300) ver = 130; else if (ver == 310) @@ -875,11 +874,11 @@ OpenGLRenderer::initialize() glw.initializeOpenGLFunctions(); ogl3_log("OpenGL information: [%s] %s (%s)\n", glw.glGetString(GL_VENDOR), glw.glGetString(GL_RENDERER), glw.glGetString(GL_VERSION)); - glsl_version[0] = glsl_version[1] = -1; - glw.glGetIntegerv(GL_MAJOR_VERSION, &glsl_version[0]); - glw.glGetIntegerv(GL_MINOR_VERSION, &glsl_version[1]); - if (glsl_version[0] < 3) { - throw opengl_init_error(tr("OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2").arg(glsl_version[0]).arg(glsl_version[1])); + gl_version[0] = gl_version[1] = -1; + glw.glGetIntegerv(GL_MAJOR_VERSION, &gl_version[0]); + glw.glGetIntegerv(GL_MINOR_VERSION, &gl_version[1]); + if (gl_version[0] < 3) { + throw opengl_init_error(tr("OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2").arg(gl_version[0]).arg(gl_version[1])); } ogl3_log("Using OpenGL %s\n", glw.glGetString(GL_VERSION)); ogl3_log("Using Shading Language %s\n", glw.glGetString(GL_SHADING_LANGUAGE_VERSION)); diff --git a/src/qt/qt_openglrenderer.hpp b/src/qt/qt_openglrenderer.hpp index c2dc32917..22a8a17d3 100644 --- a/src/qt/qt_openglrenderer.hpp +++ b/src/qt/qt_openglrenderer.hpp @@ -102,7 +102,7 @@ private: void *unpackBuffer = nullptr; - int glsl_version[2] = { 0, 0 }; + int gl_version[2] = { 0, 0 }; void initialize(); void initializeExtensions(); From da70e8ab502481ca170ea63f109f9199be1b2b39 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Tue, 21 Oct 2025 16:15:21 +0500 Subject: [PATCH 149/233] Qt: Change the file picker button label to "Browse..." --- src/qt/languages/86box.pot | 3 --- src/qt/languages/cs-CZ.po | 5 +---- src/qt/languages/de-DE.po | 3 --- src/qt/languages/es-ES.po | 3 --- src/qt/languages/fi-FI.po | 3 --- src/qt/languages/fr-FR.po | 3 --- src/qt/languages/hr-HR.po | 5 +---- src/qt/languages/it-IT.po | 3 --- src/qt/languages/ja-JP.po | 5 +---- src/qt/languages/ko-KR.po | 3 --- src/qt/languages/nb-NO.po | 3 --- src/qt/languages/nl-NL.po | 3 --- src/qt/languages/pl-PL.po | 3 --- src/qt/languages/pt-BR.po | 3 --- src/qt/languages/pt-PT.po | 3 --- src/qt/languages/ru-RU.po | 3 --- src/qt/languages/sk-SK.po | 3 --- src/qt/languages/sl-SI.po | 3 --- src/qt/languages/sv-SE.po | 3 --- src/qt/languages/tr-TR.po | 3 --- src/qt/languages/uk-UA.po | 5 +---- src/qt/languages/vi-VN.po | 3 --- src/qt/languages/zh-CN.po | 3 --- src/qt/languages/zh-TW.po | 3 --- src/qt/qt_filefield.ui | 2 +- 25 files changed, 5 insertions(+), 77 deletions(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 9b6ce9399..54b87c64d 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -603,9 +603,6 @@ msgstr "" msgid "ID:" msgstr "" -msgid "&Specify..." -msgstr "" - msgid "Sectors:" msgstr "" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 03103a3e3..67cc395e6 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -603,9 +603,6 @@ msgstr "KanĂ¡l:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Zadat..." - msgid "Sectors:" msgstr "Sektory:" @@ -1714,7 +1711,7 @@ msgid "Remove" msgstr "Odstranit" msgid "Browse..." -msgstr "Browse..." +msgstr "ProchĂ¡zet..." msgid "Couldn't create OpenGL context." msgstr "NepodaÅ™ilo se vytvoÅ™it kontext OpenGL." diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index bdcddfe8d..151c1971c 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -603,9 +603,6 @@ msgstr "Kanal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Festlegen..." - msgid "Sectors:" msgstr "Sektoren:" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 2bf3f5181..099d7fb2e 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -603,9 +603,6 @@ msgstr "Canal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "E&specificar..." - msgid "Sectors:" msgstr "Sectores:" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 24102f071..010af305b 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -603,9 +603,6 @@ msgstr "Kanava:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Määritä..." - msgid "Sectors:" msgstr "Sektorit:" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index c98280f3b..a518bbebf 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -603,9 +603,6 @@ msgstr "Canal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&SpĂ©cifier..." - msgid "Sectors:" msgstr "Secteurs:" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 0ea717dce..86dd3b73a 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -603,9 +603,6 @@ msgstr "Kanal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Odredi..." - msgid "Sectors:" msgstr "Sektori:" @@ -1714,7 +1711,7 @@ msgid "Remove" msgstr "Ukloni" msgid "Browse..." -msgstr "Pregledajte..." +msgstr "Pretraži..." msgid "Couldn't create OpenGL context." msgstr "Nije moguće stvoriti kontekst OpenGL." diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index a399c59e6..765bdd5d3 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -603,9 +603,6 @@ msgstr "Canale:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Specifica..." - msgid "Sectors:" msgstr "Settori:" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 5c6aa485c..5d725bb34 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -603,9 +603,6 @@ msgstr "ăƒăƒ£ăƒ³ăƒăƒ«:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "å‚ç…§(&S)..." - msgid "Sectors:" msgstr "ă‚»ă‚¯ă‚¿ăƒ¼:" @@ -1714,7 +1711,7 @@ msgid "Remove" msgstr "å‰é™¤" msgid "Browse..." -msgstr "ăƒ–ăƒ©ă‚¦ă‚º..." +msgstr "å‚ç…§..." msgid "Couldn't create OpenGL context." msgstr "OpenGLă‚³ăƒ³ăƒ†ă‚­ă‚¹ăƒˆă‚’ä½œæˆă§ăă¾ă›ă‚“ă§ă—ăŸă€‚" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 4474138b2..b7d1669a9 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -603,9 +603,6 @@ msgstr "́±„ë„:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "́—´ê¸°(&S)..." - msgid "Sectors:" msgstr "́„¹í„°:" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index 06b7a4f25..2524d991f 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -603,9 +603,6 @@ msgstr "Kanal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Angi..." - msgid "Sectors:" msgstr "Sektorer:" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index ee57f32a1..9f9c73a10 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -603,9 +603,6 @@ msgstr "Kanaal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Specificeer..." - msgid "Sectors:" msgstr "Sectoren:" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 4398dcafb..838434b55 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -603,9 +603,6 @@ msgstr "KanaÅ‚:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&OkreÅ›l..." - msgid "Sectors:" msgstr "Sektory:" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 010005780..e3bad48e4 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -603,9 +603,6 @@ msgstr "Canal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Especificar..." - msgid "Sectors:" msgstr "Setores:" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index a33ba0119..af9500c16 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -603,9 +603,6 @@ msgstr "Canal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Especificar..." - msgid "Sectors:" msgstr "Sectores:" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 2d71499dc..4f60516e3 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -603,9 +603,6 @@ msgstr "ĐĐ°Đ½Đ°Đ»:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Đ£ĐºĐ°Đ·Đ°Ñ‚ÑŒ..." - msgid "Sectors:" msgstr "Đ¡ĐµĐºÑ‚Đ¾Ñ€Ñ‹:" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 436c8c674..c25253d8c 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -603,9 +603,6 @@ msgstr "KanĂ¡l:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&ZadaÅ¥..." - msgid "Sectors:" msgstr "Sektory:" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 8ef710a15..12660fce7 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -603,9 +603,6 @@ msgstr "Kanal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&DoloÄi..." - msgid "Sectors:" msgstr "Sektorji:" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index 6f014e2dd..46b1c6e43 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -603,9 +603,6 @@ msgstr "Kanal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Specificera..." - msgid "Sectors:" msgstr "Sektorer:" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 073572e1b..c9d980bc9 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -603,9 +603,6 @@ msgstr "Kanal:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Belirle..." - msgid "Sectors:" msgstr "Sektörler:" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 8228b7ae4..00fb49fe8 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -603,9 +603,6 @@ msgstr "ĐĐ°Đ½Đ°Đ»:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "&Đ’ĐºĐ°Đ·Đ°Ñ‚Đ¸..." - msgid "Sectors:" msgstr "Đ¡ĐµĐºÑ‚Đ¾Ñ€Đ°:" @@ -1714,7 +1711,7 @@ msgid "Remove" msgstr "Đ’Đ¸Đ´Đ°Đ»Đ¸Ñ‚Đ¸" msgid "Browse..." -msgstr "ĐŸĐµÑ€ĐµĐ³Đ»ÑĐ½ÑƒÑ‚Đ¸..." +msgstr "ĐĐ³Đ»ÑĐ´..." msgid "Couldn't create OpenGL context." msgstr "Đе Đ²Đ´Đ°Đ»Đ¾ÑÑ ÑÑ‚Đ²Đ¾Ñ€Đ¸Ñ‚Đ¸ ĐºĐ¾Đ½Ñ‚ĐµĐºÑÑ‚ OpenGL." diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 24decb522..471f8e9a3 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -603,9 +603,6 @@ msgstr "KĂªnh:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "Chỉ &rõ..." - msgid "Sectors:" msgstr "Sector:" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 48ffc0dc9..bd11441c5 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -603,9 +603,6 @@ msgstr "é€é“:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "指å®(&S)..." - msgid "Sectors:" msgstr "扇区(S):" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 1732cb914..7544557c6 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -603,9 +603,6 @@ msgstr "é€é“:" msgid "ID:" msgstr "ID:" -msgid "&Specify..." -msgstr "指å®(&S)..." - msgid "Sectors:" msgstr "ç£å€(S):" diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui index 3a1e3e753..91000af50 100644 --- a/src/qt/qt_filefield.ui +++ b/src/qt/qt_filefield.ui @@ -51,7 +51,7 @@ - &Specify... + Browse... From adc5680073720511c2e129c2c338b17152397836 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Tue, 21 Oct 2025 21:07:59 +0500 Subject: [PATCH 150/233] es-ES.po: Fix a duplicate message warning --- src/qt/languages/es-ES.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index d1953bcf8..64bb8b526 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -891,7 +891,7 @@ msgstr "Mando de 4 ejes, 4 botones" msgid "2-button gamepad(s)" msgstr "Mando(s) de juegos de 2 botones" -msgid "4-button gamepad" +msgid "3-button gamepad" msgstr "Mando de juegos de 3 botones" msgid "4-button gamepad" From 7f9f2db2fdf61f56eaea1d0f410964426a650ed3 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 12:53:52 -0400 Subject: [PATCH 151/233] Throttle fixes --- src/game/joystick_standard.c | 43 +++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index 59b3460a2..c0497b05a 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -267,9 +267,30 @@ joystick_standard_read_axis_3axis(UNUSED(void *priv), int axis) return joystick_state[gp][0].axis[0]; case 1: return joystick_state[gp][0].axis[1]; - case 2: + case 2: // Rudder Axis return joystick_state[gp][0].axis[2]; - case 3: + case 3: // Throttle Axis + default: + return 0; + } +} + +static int +joystick_standard_read_axis_3axis_throttle(UNUSED(void *priv), int axis) +{ + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) + return AXIS_NOT_PRESENT; + + switch (axis) { + case 0: + return joystick_state[gp][0].axis[0]; + case 1: + return joystick_state[gp][0].axis[1]; + case 3: // Throttle Axis + return joystick_state[gp][0].axis[2]; + case 2: // Rudder Axis default: return 0; } @@ -288,10 +309,10 @@ joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis) return joystick_state[gp][0].axis[0]; case 1: return joystick_state[gp][0].axis[1]; - case 2: - return joystick_state[gp][0].axis[2]; - case 3: + case 2: // Rudder Axis return joystick_state[gp][0].axis[3]; + case 3: // Throttle Axis + return joystick_state[gp][0].axis[2]; default: return 0; } @@ -487,7 +508,7 @@ const joystick_t joystick_3axis_2button = { .close = joystick_standard_close, .read = joystick_standard_read, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, + .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 2, @@ -505,7 +526,7 @@ const joystick_t joystick_3axis_3button = { .close = joystick_standard_close, .read = joystick_standard_read_3button, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, + .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 3, @@ -523,7 +544,7 @@ const joystick_t joystick_3axis_4button = { .close = joystick_standard_close, .read = joystick_standard_read_4button, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, + .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 4, @@ -740,7 +761,7 @@ const joystick_t joystick_2button_yoke_throttle = { .close = joystick_standard_close, .read = joystick_standard_read, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, + .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 2, @@ -758,7 +779,7 @@ const joystick_t joystick_3button_yoke_throttle = { .close = joystick_standard_close, .read = joystick_standard_read_3button, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, + .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 3, @@ -776,7 +797,7 @@ const joystick_t joystick_4button_yoke_throttle = { .close = joystick_standard_close, .read = joystick_standard_read_4button, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, + .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 4, From 6339f65087412b84ae69156036233cfcc6c486cb Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 14:04:17 -0400 Subject: [PATCH 152/233] Swap axis names on CH products things with pedals --- src/game/joystick_ch_flightstick_pro.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index 5c35b85a8..4d8a4cf29 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -256,7 +256,7 @@ const joystick_t joystick_ch_flightstick_ch_pedals = { .button_count = 2, .pov_count = 0, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, .button_names = { "Trigger", "Button 2" }, .pov_names = { NULL } }; @@ -274,7 +274,7 @@ const joystick_t joystick_ch_flightstick_ch_pedals_pro = { .button_count = 2, .pov_count = 0, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" }, .button_names = { "Trigger", "Button 2" }, .pov_names = { NULL } }; @@ -310,7 +310,7 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals = { .button_count = 4, .pov_count = 1, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; @@ -328,7 +328,7 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro = { .button_count = 4, .pov_count = 1, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" }, .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; @@ -364,7 +364,7 @@ const joystick_t joystick_ch_virtual_pilot_ch_pedals = { .button_count = 2, .pov_count = 0, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, .button_names = { "Button 1", "Button 2" }, .pov_names = { NULL } }; @@ -382,7 +382,7 @@ const joystick_t joystick_ch_virtual_pilot_ch_pedals_pro = { .button_count = 2, .pov_count = 0, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" }, .button_names = { "Button 1", "Button 2" }, .pov_names = { NULL } }; @@ -418,7 +418,7 @@ const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals = { .button_count = 6, .pov_count = 2, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" }, .pov_names = { "Right POV", "Left POV" } }; @@ -436,7 +436,7 @@ const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals_pro = { .button_count = 6, .pov_count = 2, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Right Pedal", "Left Pedal" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" }, .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" }, .pov_names = { "Right POV", "Left POV" } }; From b36381e76cce06d82aee3a23401b4b62d3b454ea Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 16:46:09 -0400 Subject: [PATCH 153/233] Share Joystick code --- src/game/joystick_ch_flightstick_pro.c | 217 ++++++++----------------- src/game/joystick_standard.c | 38 +++-- src/game/joystick_tm_fcs.c | 68 ++------ src/include/86box/joystick.h | 27 +++ 4 files changed, 133 insertions(+), 217 deletions(-) create mode 100644 src/include/86box/joystick.h diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index 4d8a4cf29..cefb86e73 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -44,34 +44,7 @@ #include <86box/timer.h> #include <86box/gameport.h> #include <86box/plat_unused.h> - -static void * -ch_flightstick_pro_init(void) -{ - return NULL; -} - -static void -ch_flightstick_pro_close(UNUSED(void *priv)) -{ - // -} - -static uint8_t -ch_flightstick_read(UNUSED(void *priv)) -{ - uint8_t ret = 0xf0; - uint8_t gp = 0; - - if (JOYSTICK_PRESENT(gp, 0)) { - if (joystick_state[gp][0].button[0]) - ret &= ~0x10; - if (joystick_state[gp][0].button[1]) - ret &= ~0x20; - } - - return ret; -} +#include <86box/joystick.h> static uint8_t ch_flightstick_pro_read(UNUSED(void *priv)) @@ -169,71 +142,15 @@ ch_virtual_pilot_pro_read(UNUSED(void *priv)) return ret; } -static void -ch_flightstick_pro_write(UNUSED(void *priv)) -{ - // -} - -static int -ch_flightstick_pro_read_axis(UNUSED(void *priv), int axis) -{ - uint8_t gp = 0; - - if (!JOYSTICK_PRESENT(gp, 0)) - return AXIS_NOT_PRESENT; - - switch (axis) { - case 0: - return joystick_state[gp][0].axis[0]; - case 1: - return joystick_state[gp][0].axis[1]; - case 2: - return 0; - case 3: - return joystick_state[gp][0].axis[2]; - default: - return 0; - } -} - -static int -ch_flightstick_pro_ch_pedals_read_axis(UNUSED(void *priv), int axis) -{ - uint8_t gp = 0; - - if (!JOYSTICK_PRESENT(gp, 0)) - return AXIS_NOT_PRESENT; - - switch (axis) { - case 0: - return joystick_state[gp][0].axis[0]; - case 1: - return joystick_state[gp][0].axis[1]; - case 2: - return joystick_state[gp][0].axis[3]; - case 3: - return joystick_state[gp][0].axis[2]; - default: - return 0; - } -} - -static void -ch_flightstick_pro_a0_over(UNUSED(void *priv)) -{ - // -} - const joystick_t joystick_ch_flightstick = { .name = "CH Flightstick", .internal_name = "ch_flightstick", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, - .read = ch_flightstick_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_2button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis_throttle, + .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 2, .pov_count = 0, @@ -246,12 +163,12 @@ const joystick_t joystick_ch_flightstick = { const joystick_t joystick_ch_flightstick_ch_pedals = { .name = "CH Flightstick + CH Pedals", .internal_name = "ch_flightstick_ch_pedals", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, - .read = ch_flightstick_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_2button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 2, .pov_count = 0, @@ -264,12 +181,12 @@ const joystick_t joystick_ch_flightstick_ch_pedals = { const joystick_t joystick_ch_flightstick_ch_pedals_pro = { .name = "CH Flightstick + CH Pedals Pro", .internal_name = "ch_flightstick_ch_pedals_pro", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, - .read = ch_flightstick_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_2button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 2, .pov_count = 0, @@ -282,12 +199,12 @@ const joystick_t joystick_ch_flightstick_ch_pedals_pro = { const joystick_t joystick_ch_flightstick_pro = { .name = "CH Flightstick Pro", .internal_name = "ch_flightstick_pro", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, + .init = joystick_standard_init, + .close = joystick_standard_close, .read = ch_flightstick_pro_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis_throttle, + .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 4, .pov_count = 1, @@ -300,12 +217,12 @@ const joystick_t joystick_ch_flightstick_pro = { const joystick_t joystick_ch_flightstick_pro_ch_pedals = { .name = "CH Flightstick Pro + CH Pedals", .internal_name = "ch_flightstick_pro_ch_pedals", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, + .init = joystick_standard_init, + .close = joystick_standard_close, .read = ch_flightstick_pro_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 4, .pov_count = 1, @@ -318,12 +235,12 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals = { const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro = { .name = "CH Flightstick Pro + CH Pedals Pro", .internal_name = "ch_flightstick_pro_ch_pedals_pro", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, + .init = joystick_standard_init, + .close = joystick_standard_close, .read = ch_flightstick_pro_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 4, .pov_count = 1, @@ -336,12 +253,12 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro = { const joystick_t joystick_ch_virtual_pilot = { .name = "CH Virtual Pilot", .internal_name = "ch_virtual_pilot", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, - .read = ch_flightstick_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_2button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis_throttle, + .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 2, .pov_count = 0, @@ -354,12 +271,12 @@ const joystick_t joystick_ch_virtual_pilot = { const joystick_t joystick_ch_virtual_pilot_ch_pedals = { .name = "CH Virtual Pilot + CH Pedals", .internal_name = "ch_virtual_pilot_ch_pedals", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, - .read = ch_flightstick_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_2button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 2, .pov_count = 0, @@ -372,12 +289,12 @@ const joystick_t joystick_ch_virtual_pilot_ch_pedals = { const joystick_t joystick_ch_virtual_pilot_ch_pedals_pro = { .name = "CH Virtual Pilot + CH Pedals Pro", .internal_name = "ch_virtual_pilot_ch_pedals_pro", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, - .read = ch_flightstick_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_2button, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 2, .pov_count = 0, @@ -390,12 +307,12 @@ const joystick_t joystick_ch_virtual_pilot_ch_pedals_pro = { const joystick_t joystick_ch_virtual_pilot_pro = { .name = "CH Virtual Pilot Pro", .internal_name = "ch_virtual_pilot_pro", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, + .init = joystick_standard_init, + .close = joystick_standard_close, .read = ch_virtual_pilot_pro_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_3axis_throttle, + .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 6, .pov_count = 2, @@ -408,12 +325,12 @@ const joystick_t joystick_ch_virtual_pilot_pro = { const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals = { .name = "CH Virtual Pilot Pro + CH Pedals", .internal_name = "ch_virtual_pilot_pro_ch_pedals", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, + .init = joystick_standard_init, + .close = joystick_standard_close, .read = ch_virtual_pilot_pro_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 6, .pov_count = 2, @@ -426,12 +343,12 @@ const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals = { const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals_pro = { .name = "CH Virtual Pilot Pro + CH Pedals Pro", .internal_name = "ch_virtual_pilot_pro_ch_pedals_pro", - .init = ch_flightstick_pro_init, - .close = ch_flightstick_pro_close, + .init = joystick_standard_init, + .close = joystick_standard_close, .read = ch_virtual_pilot_pro_read, - .write = ch_flightstick_pro_write, - .read_axis = ch_flightstick_pro_ch_pedals_read_axis, - .a0_over = ch_flightstick_pro_a0_over, + .write = joystick_standard_write, + .read_axis = joystick_standard_read_axis_4axis, + .a0_over = joystick_standard_a0_over, .axis_count = 4, .button_count = 6, .pov_count = 2, diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index c0497b05a..a9e3da402 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -45,13 +45,13 @@ #include <86box/gameport.h> #include <86box/plat_unused.h> -static void * +void * joystick_standard_init(void) { return NULL; } -static void +void joystick_standard_close(UNUSED(void *priv)) { // @@ -101,6 +101,22 @@ joystick_standard_read(UNUSED(void *priv)) return ret; } +uint8_t +joystick_standard_read_2button(UNUSED(void *priv)) +{ + uint8_t gp = 0; + uint8_t ret = 0xf0; + + if (JOYSTICK_PRESENT(gp, 0)) { + if (joystick_state[gp][0].button[0]) + ret &= ~0x10; + if (joystick_state[gp][0].button[1]) + ret &= ~0x20; + } + + return ret; +} + static uint8_t joystick_standard_read_3button(UNUSED(void *priv)) { @@ -119,7 +135,7 @@ joystick_standard_read_3button(UNUSED(void *priv)) return ret; } -static uint8_t +uint8_t joystick_standard_read_4button(UNUSED(void *priv)) { uint8_t gp = 0; @@ -139,7 +155,7 @@ joystick_standard_read_4button(UNUSED(void *priv)) return ret; } -static void +void joystick_standard_write(UNUSED(void *priv)) { // @@ -275,7 +291,7 @@ joystick_standard_read_axis_3axis(UNUSED(void *priv), int axis) } } -static int +int joystick_standard_read_axis_3axis_throttle(UNUSED(void *priv), int axis) { uint8_t gp = 0; @@ -296,7 +312,7 @@ joystick_standard_read_axis_3axis_throttle(UNUSED(void *priv), int axis) } } -static int +int joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis) { uint8_t gp = 0; @@ -369,7 +385,7 @@ joystick_standard_read_axis_8button(UNUSED(void *priv), int axis) } } -static void +void joystick_standard_a0_over(UNUSED(void *priv)) { // @@ -506,7 +522,7 @@ const joystick_t joystick_3axis_2button = { .internal_name = "3axis_2button", .init = joystick_standard_init, .close = joystick_standard_close, - .read = joystick_standard_read, + .read = joystick_standard_read_2button, .write = joystick_standard_write, .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, @@ -560,7 +576,7 @@ const joystick_t joystick_4axis_2button = { .internal_name = "4axis_2button", .init = joystick_standard_init, .close = joystick_standard_close, - .read = joystick_standard_read, + .read = joystick_standard_read_2button, .write = joystick_standard_write, .read_axis = joystick_standard_read_axis_4axis, .a0_over = joystick_standard_a0_over, @@ -759,7 +775,7 @@ const joystick_t joystick_2button_yoke_throttle = { .internal_name = "2button_yoke_throttle", .init = joystick_standard_init, .close = joystick_standard_close, - .read = joystick_standard_read, + .read = joystick_standard_read_2button, .write = joystick_standard_write, .read_axis = joystick_standard_read_axis_3axis_throttle, .a0_over = joystick_standard_a0_over, @@ -813,7 +829,7 @@ const joystick_t joystick_steering_wheel_2_button = { .internal_name = "steering_wheel_2_button", .init = joystick_standard_init, .close = joystick_standard_close, - .read = joystick_standard_read, + .read = joystick_standard_read_2button, .write = joystick_standard_write, .read_axis = joystick_standard_read_axis_3axis, .a0_over = joystick_standard_a0_over, diff --git a/src/game/joystick_tm_fcs.c b/src/game/joystick_tm_fcs.c index 93f54db36..1f420ef0c 100644 --- a/src/game/joystick_tm_fcs.c +++ b/src/game/joystick_tm_fcs.c @@ -44,44 +44,7 @@ #include <86box/timer.h> #include <86box/gameport.h> #include <86box/plat_unused.h> - -static void * -tm_fcs_init(void) -{ - return NULL; -} - -static void -tm_fcs_close(UNUSED(void *priv)) -{ - // -} - -static uint8_t -tm_fcs_read(UNUSED(void *priv)) -{ - uint8_t gp = 0; - uint8_t ret = 0xf0; - - if (JOYSTICK_PRESENT(gp, 0)) { - if (joystick_state[gp][0].button[0]) - ret &= ~0x10; - if (joystick_state[gp][0].button[1]) - ret &= ~0x20; - if (joystick_state[gp][0].button[2]) - ret &= ~0x40; - if (joystick_state[gp][0].button[3]) - ret &= ~0x80; - } - - return ret; -} - -static void -tm_fcs_write(UNUSED(void *priv)) -{ - // -} +#include <86box/joystick.h> static int tm_fcs_read_axis(UNUSED(void *priv), int axis) @@ -96,8 +59,6 @@ tm_fcs_read_axis(UNUSED(void *priv), int axis) return joystick_state[gp][0].axis[0]; case 1: return joystick_state[gp][0].axis[1]; - case 2: - return 0; case 3: if (joystick_state[gp][0].pov[0] == -1) return 32767; @@ -110,6 +71,7 @@ tm_fcs_read_axis(UNUSED(void *priv), int axis) if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315) return 16384; return 0; + case 2: default: return 0; } @@ -147,21 +109,15 @@ tm_fcs_rcs_read_axis(UNUSED(void *priv), int axis) } } -static void -tm_fcs_a0_over(UNUSED(void *priv)) -{ - // -} - const joystick_t joystick_tm_fcs = { .name = "Thrustmaster Flight Control System", .internal_name = "thrustmaster_fcs", - .init = tm_fcs_init, - .close = tm_fcs_close, - .read = tm_fcs_read, - .write = tm_fcs_write, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, .read_axis = tm_fcs_read_axis, - .a0_over = tm_fcs_a0_over, + .a0_over = joystick_standard_a0_over, .axis_count = 2, .button_count = 4, .pov_count = 1, @@ -174,12 +130,12 @@ const joystick_t joystick_tm_fcs = { const joystick_t joystick_tm_fcs_rcs = { .name = "Thrustmaster FCS + Rudder Control System", .internal_name = "thrustmaster_fcs_rcs", - .init = tm_fcs_init, - .close = tm_fcs_close, - .read = tm_fcs_read, - .write = tm_fcs_write, + .init = joystick_standard_init, + .close = joystick_standard_close, + .read = joystick_standard_read_4button, + .write = joystick_standard_write, .read_axis = tm_fcs_rcs_read_axis, - .a0_over = tm_fcs_a0_over, + .a0_over = joystick_standard_a0_over, .axis_count = 3, .button_count = 4, .pov_count = 1, diff --git a/src/include/86box/joystick.h b/src/include/86box/joystick.h new file mode 100644 index 000000000..c8cbf32d1 --- /dev/null +++ b/src/include/86box/joystick.h @@ -0,0 +1,27 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Definitions for the analog joystick handlers. + * + * Authors: Jasmine Iwanek, + * + * Copyright 2025 Jasmine Iwanek. + */ +#ifndef EMU_JOYSTICK_H +#define EMU_JOYSTICK_H + +void *joystick_standard_init(void); +void joystick_standard_close(UNUSED(void *priv)); +uint8_t joystick_standard_read_2button(UNUSED(void *priv)); +uint8_t joystick_standard_read_4button(UNUSED(void *priv)); +void joystick_standard_write(UNUSED(void *priv)); +int joystick_standard_read_axis_3axis_throttle(UNUSED(void *priv), int axis); +int joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis); +void joystick_standard_a0_over(UNUSED(void *priv)); + +#endif /*EMU_JOYSTICK_H*/ From 43db1f3dfe8008ea330a34282980de55af69aa3a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 18:01:07 -0400 Subject: [PATCH 154/233] Fix typo in gameport.h --- src/include/86box/gameport.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index 878472a55..a1bec69fb 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -183,7 +183,7 @@ extern const joystick_t joystick_2axis_4button; extern const joystick_t joystick_2axis_6button; extern const joystick_t joystick_2axis_8button; -// 2 axis Generic Joysticks +// 3 axis Generic Joysticks extern const joystick_t joystick_3axis_2button; extern const joystick_t joystick_3axis_3button; extern const joystick_t joystick_3axis_4button; From 9c20533d829eb81b7dc09f28cf7d6e394ec6b658 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 20:24:03 -0400 Subject: [PATCH 155/233] Correct Throttle and Rudder order on ch pedals --- src/game/joystick_ch_flightstick_pro.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index cefb86e73..dc82feb8b 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -173,7 +173,7 @@ const joystick_t joystick_ch_flightstick_ch_pedals = { .button_count = 2, .pov_count = 0, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, .button_names = { "Trigger", "Button 2" }, .pov_names = { NULL } }; @@ -227,7 +227,7 @@ const joystick_t joystick_ch_flightstick_pro_ch_pedals = { .button_count = 4, .pov_count = 1, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, .button_names = { "Trigger", "Button 2", "Button 3", "Button 4" }, .pov_names = { "POV" } }; @@ -281,7 +281,7 @@ const joystick_t joystick_ch_virtual_pilot_ch_pedals = { .button_count = 2, .pov_count = 0, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, .button_names = { "Button 1", "Button 2" }, .pov_names = { NULL } }; @@ -335,7 +335,7 @@ const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals = { .button_count = 6, .pov_count = 2, .max_joysticks = 1, - .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Rudder (Yaw)", "Throttle" }, + .axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" }, .button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" }, .pov_names = { "Right POV", "Left POV" } }; From 52e22e90fcd631a9bf8e3b9733e72277a48bf73d Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Tue, 21 Oct 2025 20:29:46 -0500 Subject: [PATCH 156/233] AD1848: I12 bit 4 is read-only, fixes CODEC detection in OS/2 driver --- src/sound/snd_ad1848.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index 6c32b1892..62c3e35e9 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -344,7 +344,7 @@ ad1848_write(uint16_t addr, uint8_t val, void *priv) case 12: if (ad1848->type >= AD1848_TYPE_CS4248) { - ad1848->regs[12] = 0x80 | (val & 0x70) | (ad1848->regs[12] & 0x0f); + ad1848->regs[12] = 0x80 | (val & 0x60) | (ad1848->regs[12] & 0x0f); if ((ad1848->type >= AD1848_TYPE_CS4231) && (ad1848->type < AD1848_TYPE_CS4235)) { if (val & 0x40) ad1848->fmt_mask |= 0x80; From ceeb2d057dcaf49c24edfe4fbf6bd87424a11dc0 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Tue, 21 Oct 2025 20:32:13 -0500 Subject: [PATCH 157/233] AD1848: I18/I19 directly control FM volume on CS4232/4236 non-B --- src/sound/snd_ad1848.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index 62c3e35e9..ebfa9423b 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -425,6 +425,19 @@ ad1848_write(uint16_t addr, uint8_t val, void *priv) ad1848->fm_vol_r = (int) ad1848_vols_5bits_aux_gain[val & 0x1f]; } } + if ((ad1848->type >= AD1848_TYPE_CS4232) && (ad1848->type <= AD1848_TYPE_CS4236)) { + if (ad1848->index == 18) { + if (val & 0x80) + ad1848->fm_vol_l = 0; + else + ad1848->fm_vol_l = (int) ad1848_vols_5bits_aux_gain[val & 0x1f]; + } else { + if (val & 0x80) + ad1848->fm_vol_r = 0; + else + ad1848->fm_vol_r = (int) ad1848_vols_5bits_aux_gain[val & 0x1f]; + } + } break; case 20 ... 21: From 71fe92daed87ba1f6ead953d2f50c8c1f94ea8e3 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Tue, 21 Oct 2025 20:34:09 -0500 Subject: [PATCH 158/233] AD1848: I23 bits 7-1 are read-only on CS4232/4236 non-B, fixes CS4236 non-B detection on Windows 2000 --- src/sound/snd_ad1848.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index ebfa9423b..c25890c50 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -521,6 +521,8 @@ readonly_x: } if (ad1848->type == AD1848_TYPE_CS4231) /* I23 is reserved and read-only on CS4231 non-A */ goto readonly_i; + if ((ad1848->type >= AD1848_TYPE_CS4232) || (ad1848->type <= AD1848_TYPE_CS4236)) /* I23 bits 7-1 are read-only on CS4231A/4232/4236 non-B, Win2k relies on this for detection */ + val = (val & 0x01); break; case 24: From 755e25285b55f781757010e4e59e632dd0e6116c Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Tue, 21 Oct 2025 20:38:21 -0500 Subject: [PATCH 159/233] CS423x: Always enable OPL3 on CS4232/4236 during context switch as they lack X registers --- src/sound/snd_cs423x.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sound/snd_cs423x.c b/src/sound/snd_cs423x.c index 15ad71782..6c0d9e80b 100644 --- a/src/sound/snd_cs423x.c +++ b/src/sound/snd_cs423x.c @@ -568,7 +568,11 @@ cs423x_ctxswitch_write(uint16_t addr, UNUSED(uint8_t val), void *priv) { cs423x_t *dev = (cs423x_t *) priv; uint8_t ctx = (dev->regs[7] & 0x80); - uint8_t enable_opl = (dev->ad1848.xregs[4] & 0x10) && !(dev->indirect_regs[2] & 0x85); + uint8_t enable_opl = (dev->ad1848.xregs[4] & 0x10) && !(dev->indirect_regs[2] & 0x85); /* CS4236B+ */ + + /* CS4232/4236 (non-B) doesn't have an IFM bit, always enable the OPL on these chips */ + if (dev->type <= CRYSTAL_CS4236) + enable_opl = 1; /* Check if a context switch (WSS=1 <-> SBPro=0) occurred through the address being written. */ if ((dev->regs[7] & 0x80) ? ((addr & 0xfff0) == dev->sb_base) : ((addr & 0xfffc) == dev->wss_base)) { From 429aa7260c507f14c138e3dc841e5e420e19ad2c Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Tue, 21 Oct 2025 20:40:18 -0500 Subject: [PATCH 160/233] CS423x: Add SBPro OPL3 music handler during SBPro init, fixes OPL3 in SBPro context --- src/sound/snd_cs423x.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sound/snd_cs423x.c b/src/sound/snd_cs423x.c index 6c0d9e80b..78b628b3b 100644 --- a/src/sound/snd_cs423x.c +++ b/src/sound/snd_cs423x.c @@ -1009,6 +1009,7 @@ cs423x_init(const device_t *info) /* Initialize SBPro codec. The WSS codec is initialized later by cs423x_reset */ dev->sb = device_add_inst(&sb_pro_compat_device, 1); sound_set_cd_audio_filter(sbpro_filter_cd_audio, dev->sb); /* CD audio filter for the default context */ + music_add_handler(sb_get_music_buffer_sbpro, dev->sb); /* Init the SBPro OPL3 since sb_pro_compat_init does not */ /* Initialize RAM, registers and WSS codec. */ cs423x_reset(dev); From cee8fa0ae40287561be6dda9677aeeb76be1af1e Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 22 Sep 2025 00:22:32 -0400 Subject: [PATCH 161/233] Allow PCjr FDC to be disabled --- src/include/86box/m_pcjr.h | 3 +++ src/machine/m_pcjr.c | 10 +++++++++- src/machine/machine_table.c | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/include/86box/m_pcjr.h b/src/include/86box/m_pcjr.h index 6fb0ee2ed..9b4a7cbaf 100644 --- a/src/include/86box/m_pcjr.h +++ b/src/include/86box/m_pcjr.h @@ -66,6 +66,9 @@ typedef struct pcjr_s { int serial_pos; uint8_t pa; uint8_t pb; + + uint8_t option_fdc; + pc_timer_t send_delay_timer; } pcjr_t; diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 519933b23..c1b7aba9b 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -41,6 +41,7 @@ #include <86box/rom.h> #include <86box/fdd.h> #include <86box/fdc.h> +#include <86box/fdc_ext.h> #include <86box/sound.h> #include <86box/snd_speaker.h> #include <86box/snd_sn76489.h> @@ -653,6 +654,8 @@ kbd_read(uint16_t port, void *priv) case 0x62: ret = (pcjr->latched ? 1 : 0); ret |= 0x02; /* Modem card not installed */ + if (!pcjr->option_fdc) + ret |= 0x04; /* Diskette card not installed */ if (mem_size < 128) ret |= 0x08; /* 64k expansion card not installed */ if ((pcjr->pb & 0x08) || (cassette == NULL)) @@ -846,6 +849,8 @@ machine_pcjr_init(UNUSED(const machine_t *model)) pcjr = calloc(1, sizeof(pcjr_t)); + pcjr->option_fdc = 0; + is_pcjr = 1; pic_init_pcjr(); @@ -877,7 +882,10 @@ machine_pcjr_init(UNUSED(const machine_t *model)) nmi_mask = 0x80; - device_add(&fdc_pcjr_device); + if (fdc_current[0] == FDC_INTERNAL) { + device_add(&fdc_pcjr_device); + pcjr->option_fdc = 1; + } device_add(&ns8250_pcjr_device); /* So that serial_standalone_init() won't do anything. */ diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 6bb120b03..8816ce42c 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -300,7 +300,7 @@ const machine_t machines[] = { .max_multi = 0 }, .bus_flags = MACHINE_PCJR, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE | MACHINE_FDC, .ram = { .min = 64, .max = 640, @@ -316,7 +316,7 @@ const machine_t machines[] = { .gpio_acpi = 0xffffffff, .device = NULL, .kbd_device = NULL, - .fdc_device = NULL, + .fdc_device = &fdc_pcjr_device, .sio_device = NULL, .vid_device = &pcjr_device, .snd_device = NULL, From e73c387e215616b137e2c2479609b17aeda900d2 Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Wed, 22 Oct 2025 10:24:07 +0800 Subject: [PATCH 162/233] Added the 1998 Award v4.51PG BIOS to MS-5146 --- src/include/86box/machine.h | 3 ++ src/machine/m_at_socket7.c | 65 ++++++++++++++++++++++++++++++++++--- src/machine/machine_table.c | 2 +- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 8cc928f91..ef9031068 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1105,6 +1105,9 @@ extern int machine_at_via809ds_init(const machine_t *); /* SiS 5571 */ extern int machine_at_cb52xsi_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t ms5146_device; +#endif extern int machine_at_ms5146_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t r534f_device; diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 15e0316f2..03f20f42e 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -1825,17 +1825,72 @@ machine_at_cb52xsi_init(const machine_t *model) return ret; } +static const device_config_t ms5146_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "ms5146", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision 1.1", + .internal_name = "ms5146", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms5146/A546MS11.ROM", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 2.1", + .internal_name = "ms5146_451pg", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/ms5146/W546MS21.BIN", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t ms5146_device = { + .name = "MSI MS-5146", + .internal_name = "ms5146_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = ms5146_config +}; + int machine_at_ms5146_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/ms5146/A546MS11.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 8816ce42c..e2861fd0f 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -16221,7 +16221,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &ms5146_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From e78d078d627be55fc4941cf7a74fb3e3bd65b620 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 22 Oct 2025 04:59:02 +0200 Subject: [PATCH 163/233] Temporarily disable the touch events commit. --- src/qt/qt_renderercommon.cpp | 2 ++ src/qt/qt_rendererstack.cpp | 50 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/qt/qt_renderercommon.cpp b/src/qt/qt_renderercommon.cpp index d34cad15b..25d3a5c28 100644 --- a/src/qt/qt_renderercommon.cpp +++ b/src/qt/qt_renderercommon.cpp @@ -220,10 +220,12 @@ RendererCommon::eventDelegate(QEvent *event, bool &result) case QEvent::MouseButtonPress: case QEvent::MouseMove: case QEvent::MouseButtonRelease: +#ifdef TOUCH_PR case QEvent::TouchBegin: case QEvent::TouchEnd: case QEvent::TouchCancel: case QEvent::TouchUpdate: +#endif case QEvent::Wheel: case QEvent::Enter: case QEvent::Leave: diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index ad8172d11..b95fe3b73 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -35,7 +35,9 @@ #include #include +#ifdef TOUCH_PR #include +#endif #include #include @@ -91,7 +93,9 @@ RendererStack::RendererStack(QWidget *parent, int monitor_index) , ui(new Ui::RendererStack) { boxLayout->setContentsMargins(0, 0, 0, 0); +#ifdef TOUCH_PR setAttribute(Qt::WA_AcceptTouchEvents, true); +#endif #ifdef Q_OS_WINDOWS setAttribute(Qt::WA_NativeWindow, true); (void)winId(); @@ -520,12 +524,22 @@ RendererStack::event(QEvent* event) if (m_monitor_index >= 1) { if (mouse_input_mode >= 1) { +#ifdef TOUCH_PR #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) mouse_x_abs = (mouse_event->position().x()) / (double)width(); mouse_y_abs = (mouse_event->position().y()) / (double)height(); #else mouse_x_abs = (mouse_event->localPos().x()) / (double)width(); mouse_y_abs = (mouse_event->localPos().y()) / (double)height(); +#endif +#else +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + mouse_x_abs = (mouse_event->position().x()) / (long double)width(); + mouse_y_abs = (mouse_event->position().y()) / (long double)height(); +#else + mouse_x_abs = (mouse_event->localPos().x()) / (long double)width(); + mouse_y_abs = (mouse_event->localPos().y()) / (long double)height(); +#endif #endif if (!mouse_tablet_in_proximity) mouse_tablet_in_proximity = mousedata.mouse_tablet_in_proximity; @@ -544,6 +558,7 @@ RendererStack::event(QEvent* event) return QWidget::event(event); } +#ifdef TOUCH_PR #ifdef Q_OS_WINDOWS if (mouse_input_mode == 0) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) @@ -574,6 +589,39 @@ RendererStack::event(QEvent* event) #else mouse_x_abs = (mouse_event->localPos().x()) / (double)width(); mouse_y_abs = (mouse_event->localPos().y()) / (double)height(); +#endif +#else +#ifdef Q_OS_WINDOWS + if (mouse_input_mode == 0) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + mouse_x_abs = (mouse_event->position().x()) / (long double)width(); + mouse_y_abs = (mouse_event->position().y()) / (long double)height(); +#else + mouse_x_abs = (mouse_event->localPos().x()) / (long double)width(); + mouse_y_abs = (mouse_event->localPos().y()) / (long double)height(); +#endif + mouse_x_abs -= rendererWindow->destinationF.left(); + mouse_y_abs -= rendererWindow->destinationF.top(); + + if (mouse_x_abs < 0) mouse_x_abs = 0; + if (mouse_y_abs < 0) mouse_y_abs = 0; + + mouse_x_abs /= rendererWindow->destinationF.width(); + mouse_y_abs /= rendererWindow->destinationF.height(); + + if (mouse_x_abs > 1) mouse_x_abs = 1; + if (mouse_y_abs > 1) mouse_y_abs = 1; + return QWidget::event(event); + } +#endif + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + mouse_x_abs = (mouse_event->position().x()) / (long double)width(); + mouse_y_abs = (mouse_event->position().y()) / (long double)height(); +#else + mouse_x_abs = (mouse_event->localPos().x()) / (long double)width(); + mouse_y_abs = (mouse_event->localPos().y()) / (long double)height(); +#endif #endif mouse_x_abs -= rendererWindow->destinationF.left(); mouse_y_abs -= rendererWindow->destinationF.top(); @@ -587,6 +635,7 @@ RendererStack::event(QEvent* event) if (mouse_x_abs > 1) mouse_x_abs = 1; if (mouse_y_abs > 1) mouse_y_abs = 1; mouse_tablet_in_proximity = mousedata.mouse_tablet_in_proximity; +#ifdef TOUCH_PR } else switch (event->type()) { case QEvent::TouchBegin: case QEvent::TouchUpdate: @@ -685,6 +734,7 @@ RendererStack::event(QEvent* event) default: return QWidget::event(event); +#endif } return QWidget::event(event); From 27ac9cf6e6ee577213b35b55d331a0d0ec450de0 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 22:07:41 -0400 Subject: [PATCH 164/233] Support for PCjr keyboard IR reciever option Currently disabled as it Error B's --- src/include/86box/m_pcjr.h | 1 + src/machine/m_pcjr.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/include/86box/m_pcjr.h b/src/include/86box/m_pcjr.h index 9b4a7cbaf..f957252a6 100644 --- a/src/include/86box/m_pcjr.h +++ b/src/include/86box/m_pcjr.h @@ -68,6 +68,7 @@ typedef struct pcjr_s { uint8_t pb; uint8_t option_fdc; + uint8_t option_ir; pc_timer_t send_delay_timer; diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index c1b7aba9b..1b9e8a8f4 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -667,6 +667,8 @@ kbd_read(uint16_t port, void *priv) ret |= (pcjr->data ? 0x40 : 0); if (pcjr->data) ret |= 0x40; + if (pcjr->option_ir) + ret |= 0x80; /* Keyboard cable not connected */ break; case 0xa0: @@ -816,6 +818,19 @@ static const device_config_t pcjr_config[] = { .selection = { { 0 } }, .bios = { { 0 } } }, +#if 0 + { + .name = "ir_reciever", + .description = "Enable IR Reciever", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, +#endif { .name = "", .description = "", .type = CONFIG_END } // clang-format on }; @@ -850,6 +865,11 @@ machine_pcjr_init(UNUSED(const machine_t *model)) pcjr = calloc(1, sizeof(pcjr_t)); pcjr->option_fdc = 0; +#if 0 + pcjr->option_ir = device_get_config_int("ir_reciever"); +#else + pcjr->option_ir = 0; +#endif is_pcjr = 1; From 57704c962443a0b0d53232543cbc73b3eaa5e7e8 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 23:10:52 -0400 Subject: [PATCH 165/233] Support for Serial card in PCjr modem slot --- src/device/serial.c | 33 ++++++++++++++++++++++++++------- src/include/86box/m_pcjr.h | 1 + src/include/86box/serial.h | 20 +++++++++++--------- src/machine/m_pcjr.c | 33 ++++++++++++++++++++++++++++----- 4 files changed, 66 insertions(+), 21 deletions(-) diff --git a/src/device/serial.c b/src/device/serial.c index 63f20cbee..38220485f 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -141,7 +141,7 @@ serial_update_ints(serial_t *dev) } } - serial_do_irq(dev, !(dev->iir & 0x01) && ((dev->mctrl & 8) || (dev->type == SERIAL_8250_PCJR))); + serial_do_irq(dev, !(dev->iir & 0x01) && ((dev->mctrl & 8) || ((dev->type == SERIAL_8250_PCJR_3F8) || (dev->type == SERIAL_8250_PCJR_2F8)))); } static void @@ -971,15 +971,20 @@ serial_init(const device_t *info) serial_setup(dev, COM4_ADDR, COM4_IRQ); else if (next_inst == 2) serial_setup(dev, COM3_ADDR, COM3_IRQ); - else if ((next_inst == 1) || (info->local == SERIAL_8250_PCJR)) + else if ((next_inst == 1) || (info->local == SERIAL_8250_PCJR_2F8)) serial_setup(dev, COM2_ADDR, COM2_IRQ); + // TODO +#if 0 + else if ((next_inst == 1) || (info->local == SERIAL_8250_PCJR_3F8)) + serial_setup(dev, COM1_ADDR, COM1_IRQ); +#endif else if (next_inst == 0) serial_setup(dev, COM1_ADDR, COM1_IRQ); /* Default to 1200,N,7. */ dev->dlab = 96; dev->fcr = 0x06; - if (info->local == SERIAL_8250_PCJR) + if ((info->local == SERIAL_8250_PCJR_3F8) || (info->local == SERIAL_8250_PCJR_2F8)) dev->clock_src = 1789500.0; else dev->clock_src = 1843200.0; @@ -1039,11 +1044,25 @@ const device_t ns8250_device = { .config = NULL }; -const device_t ns8250_pcjr_device = { - .name = "National Semiconductor 8250(-compatible) UART for PCjr", - .internal_name = "ns8250_pcjr", +const device_t ns8250_pcjr_3f8_device = { + .name = "National Semiconductor 8250(-compatible) UART for PCjr (0x3f8)", + .internal_name = "ns8250_pcjr_3f8", .flags = 0, - .local = SERIAL_8250_PCJR, + .local = SERIAL_8250_PCJR_3F8, + .init = serial_init, + .close = serial_close, + .reset = serial_reset, + .available = NULL, + .speed_changed = serial_speed_changed, + .force_redraw = NULL, + .config = NULL +}; + +const device_t ns8250_pcjr_2f8_device = { + .name = "National Semiconductor 8250(-compatible) UART for PCjr (0x2f8)", + .internal_name = "ns8250_pcjr_2f8", + .flags = 0, + .local = SERIAL_8250_PCJR_2F8, .init = serial_init, .close = serial_close, .reset = serial_reset, diff --git a/src/include/86box/m_pcjr.h b/src/include/86box/m_pcjr.h index f957252a6..f1a31954d 100644 --- a/src/include/86box/m_pcjr.h +++ b/src/include/86box/m_pcjr.h @@ -67,6 +67,7 @@ typedef struct pcjr_s { uint8_t pa; uint8_t pb; + uint8_t option_modem; uint8_t option_fdc; uint8_t option_ir; diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index 5231c491a..816672825 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -20,14 +20,15 @@ #ifndef EMU_SERIAL_H #define EMU_SERIAL_H -#define SERIAL_8250 0 -#define SERIAL_8250_PCJR 1 -#define SERIAL_16450 2 -#define SERIAL_16550 3 -#define SERIAL_16650 4 -#define SERIAL_16750 5 -#define SERIAL_16850 6 -#define SERIAL_16950 7 +#define SERIAL_8250 0 +#define SERIAL_8250_PCJR_3F8 1 +#define SERIAL_8250_PCJR_2F8 2 +#define SERIAL_16450 3 +#define SERIAL_16550 4 +#define SERIAL_16650 5 +#define SERIAL_16750 6 +#define SERIAL_16850 7 +#define SERIAL_16950 8 #define SERIAL_FIFO_SIZE 16 @@ -151,7 +152,8 @@ extern int serial_get_ri(serial_t *dev); extern uint8_t serial_get_shadow(serial_t *dev); extern const device_t ns8250_device; -extern const device_t ns8250_pcjr_device; +extern const device_t ns8250_pcjr_3f8_device; +extern const device_t ns8250_pcjr_2f8_device; extern const device_t ns16450_device; extern const device_t ns16550_device; extern const device_t ns16650_device; diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 1b9e8a8f4..047c0201d 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -653,7 +653,8 @@ kbd_read(uint16_t port, void *priv) case 0x62: ret = (pcjr->latched ? 1 : 0); - ret |= 0x02; /* Modem card not installed */ + if (!pcjr->option_modem) + ret |= 0x02; /* Modem card not installed */ if (!pcjr->option_fdc) ret |= 0x04; /* Diskette card not installed */ if (mem_size < 128) @@ -819,6 +820,17 @@ static const device_config_t pcjr_config[] = { .bios = { { 0 } } }, #if 0 + { + .name = "modem_slot", + .description = "Enable Serial Port in Modem Slot", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, { .name = "ir_reciever", .description = "Enable IR Reciever", @@ -864,11 +876,16 @@ machine_pcjr_init(UNUSED(const machine_t *model)) pcjr = calloc(1, sizeof(pcjr_t)); - pcjr->option_fdc = 0; #if 0 - pcjr->option_ir = device_get_config_int("ir_reciever"); + pcjr->option_modem = device_get_config_int("modem_slot"); #else - pcjr->option_ir = 0; + pcjr->option_modem = 0; +#endif + pcjr->option_fdc = 0; +#if 0 + pcjr->option_ir = device_get_config_int("ir_reciever"); +#else + pcjr->option_ir = 0; #endif is_pcjr = 1; @@ -907,7 +924,13 @@ machine_pcjr_init(UNUSED(const machine_t *model)) pcjr->option_fdc = 1; } - device_add(&ns8250_pcjr_device); + if (!pcjr->option_modem) + device_add(&ns8250_pcjr_2f8_device); + else { + device_add(&ns8250_pcjr_3f8_device); + device_add(&ns8250_pcjr_2f8_device); + } + /* So that serial_standalone_init() won't do anything. */ serial_set_next_inst(SERIAL_MAX - 1); From 5a24fda546fe6da9e3ef5b902fd29ebfce202b16 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 21 Oct 2025 23:29:45 -0400 Subject: [PATCH 166/233] Minor cleanups in m_pcjr.c --- src/machine/m_pcjr.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 047c0201d..77a0ee392 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -907,9 +907,13 @@ machine_pcjr_init(UNUSED(const machine_t *model)) 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_pcjr); keyboard_send = kbd_adddata_ex; From de42224028ad91556c0be117acf85175f9304e7a Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Wed, 22 Oct 2025 16:22:59 +0700 Subject: [PATCH 167/233] Alphabetize the Vectra S7SV machines --- src/machine/machine_table.c | 86 ++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 8816ce42c..1c7b78deb 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13332,49 +13332,6 @@ const machine_t machines[] = { .vid_device = NULL, .snd_device = NULL, .net_device = NULL - }, - { - .name = "[i430FX] HP Vectra VE 5/XXX Series 2", - .internal_name = "hpvectravexxx", - .type = MACHINE_TYPE_SOCKET7_3V, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_hpvectravexxx_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_SOCKET5_7, - .block = CPU_BLOCK_NONE, - .min_bus = 50000000, - .max_bus = 66666667, - .min_voltage = 3380, - .max_voltage = 3520, - .min_multi = 1.5, - .max_multi = 3.0 - }, - .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, - .ram = { - .min = 8192, - .max = 131072, - .step = 8192 - }, - .nvrmask = 255, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = NULL, - .kbc_params = 0x00000000, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = &hpvectravexxx_device, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = &gd5436_onboard_pci_device, - .snd_device = NULL, - .net_device = NULL }, { .name = "[i430FX] HP Vectra 500 Series xxx/MT", @@ -13419,6 +13376,49 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + { + .name = "[i430FX] HP Vectra VE 5/xxx Series 2", + .internal_name = "hpvectravexxx", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_hpvectravexxx_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + .block = CPU_BLOCK_NONE, + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3380, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 3.0 + }, + .bus_flags = MACHINE_PS2_PCI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 255, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = NULL, + .kbc_params = 0x00000000, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = &hpvectravexxx_device, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = &gd5436_onboard_pci_device, + .snd_device = NULL, + .net_device = NULL + }, /* Has a SM(S)C FDC37C932 Super I/O chip with on-chip KBC with AMI MegaKey (revision '5') KBC firmware. */ { From bb37f1d2a9e2d70d149cb48cf9057eaeaf006f3b Mon Sep 17 00:00:00 2001 From: Lili Kurek Date: Wed, 22 Oct 2025 11:42:57 +0200 Subject: [PATCH 168/233] Update pl-PL.po --- src/qt/languages/pl-PL.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 73b6952bd..a518957a8 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -850,13 +850,13 @@ msgid "Invalid PCap device" msgstr "NieprawidÅ‚owe urzÄ…dzenie PCap" msgid "Generic Paddle Controller(s)" -msgstr "" +msgstr "Generyczny kontroler paddle" msgid "2-axis, 1-button joystick(s)" -msgstr "Joysticki 2-osiowe, 1-przyciskowe" +msgstr "Joystick(i) 2-osiowe, 1-przyciskowe" msgid "2-axis, 2-button joystick(s)" -msgstr "Joysticki 2-osiowe, 2-przyciskowe" +msgstr "Joystick(i) 2-osiowe, 2-przyciskowe" msgid "2-axis, 3-button joystick" msgstr "Joystick 2-osiowy, 3-przyciskowy" @@ -892,13 +892,13 @@ msgid "2-button gamepad(s)" msgstr "Pad(y) z dwoma przyciskami" msgid "3-button gamepad" -msgstr "Pad z trzy przyciskami" +msgstr "Pad z trzema przyciskami" msgid "4-button gamepad" msgstr "Pad z czterema przyciskami" msgid "6-button gamepad" -msgstr "Pad z sześć przyciskami" +msgstr "Pad z szeÅ›cioma przyciskami" msgid "Gravis PC GamePad" msgstr "Gravis PC GamePad" @@ -976,10 +976,10 @@ msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 z Adaptorem" msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 bez Adaptora" msgid "None" msgstr "Å»aden" @@ -3049,19 +3049,19 @@ msgid "Export EDID" msgstr "Eksportuj EDID" msgid "EDID file \"%ls\" is too large." -msgstr "Plik EDID \"%ls\" jest zbyt duży." +msgstr "Plik EDID â€%ls†jest zbyt duży." msgid "OpenGL input scale" -msgstr "Skala wejÅ›ciowa OpenGL" +msgstr "Skala wejÅ›cia OpenGL" msgid "OpenGL input stretch mode" -msgstr "Tryb rozciÄ…gania wejÅ›ciowego OpenGL" +msgstr "Tryb rozciÄ…gania wejÅ›cia OpenGL" msgid "Color scheme" msgstr "Schemat kolorĂ³w" msgid "Light" -msgstr "ÅwiatÅ‚o" +msgstr "Jasny" msgid "Dark" msgstr "Ciemny" From ff54ead1ec6a960cc8e4ec19cb526e2f5113c4d2 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 23 Oct 2025 00:07:15 +0500 Subject: [PATCH 169/233] Qt: Fix up the TAP bridge device option Also add its string to translation files --- src/qt/languages/86box.pot | 3 +++ src/qt/languages/cs-CZ.po | 3 +++ src/qt/languages/de-DE.po | 3 +++ src/qt/languages/es-ES.po | 3 +++ src/qt/languages/fi-FI.po | 3 +++ src/qt/languages/fr-FR.po | 3 +++ src/qt/languages/hr-HR.po | 3 +++ src/qt/languages/it-IT.po | 3 +++ src/qt/languages/ja-JP.po | 3 +++ src/qt/languages/ko-KR.po | 3 +++ src/qt/languages/nb-NO.po | 3 +++ src/qt/languages/nl-NL.po | 3 +++ src/qt/languages/pl-PL.po | 3 +++ src/qt/languages/pt-BR.po | 3 +++ src/qt/languages/pt-PT.po | 3 +++ src/qt/languages/ru-RU.po | 3 +++ src/qt/languages/sk-SK.po | 3 +++ src/qt/languages/sl-SI.po | 3 +++ src/qt/languages/sv-SE.po | 3 +++ src/qt/languages/tr-TR.po | 3 +++ src/qt/languages/uk-UA.po | 3 +++ src/qt/languages/vi-VN.po | 3 +++ src/qt/languages/zh-CN.po | 3 +++ src/qt/languages/zh-TW.po | 3 +++ src/qt/qt_settingsnetwork.ui | 16 ++++++++-------- 25 files changed, 80 insertions(+), 8 deletions(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 28652d3e5..7eaa2359c 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -1854,6 +1854,9 @@ msgstr "" msgid "VDE Socket:" msgstr "" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index d4b9fc6ca..af3d76537 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -1854,6 +1854,9 @@ msgstr "AdaptĂ©r:" msgid "VDE Socket:" msgstr "ZĂ¡suvka VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box Unit Tester" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index c5d908733..864d1e1e3 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -1854,6 +1854,9 @@ msgstr "Adapter:" msgid "VDE Socket:" msgstr "VDE Anschluss:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box-Gerätetester" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 64bb8b526..dc2f6272b 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -1854,6 +1854,9 @@ msgstr "Adaptador:" msgid "VDE Socket:" msgstr "Toma VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Comprobador de unidad 86Box" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 388659dba..89c545b08 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -1854,6 +1854,9 @@ msgstr "Sovitin:" msgid "VDE Socket:" msgstr "VDE-socket:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box Unit Tester" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 97ed25e57..24bd0eb7d 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -1854,6 +1854,9 @@ msgstr "Adaptateur:" msgid "VDE Socket:" msgstr "Prise VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Testeur d'unitĂ© de 86Box" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 27b304d9b..450492d3c 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -1854,6 +1854,9 @@ msgstr "Adapter:" msgid "VDE Socket:" msgstr "VDE utiÄnica:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "JediniÄni ispitivaÄ 86Box-a" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 860083676..9875e999c 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -1854,6 +1854,9 @@ msgstr "Adattatore:" msgid "VDE Socket:" msgstr "Presa VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Tester di unitĂ  86Box" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 0e854d189..aeceee65e 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -1854,6 +1854,9 @@ msgstr "ă‚¢ăƒ€ăƒ—ă‚¿ăƒ¼:" msgid "VDE Socket:" msgstr "VDEă‚½ă‚±ăƒƒăƒˆ:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Boxăƒ¦ăƒ‹ăƒƒăƒˆăƒ†ă‚¹ă‚¿ăƒ¼" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index c95d073fa..961bea792 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -1854,6 +1854,9 @@ msgstr "́–´ëŒ‘í„°:" msgid "VDE Socket:" msgstr "VDE ́†Œ́¼“:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box ́œ ë‹› í…Œ́¤í„°" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index e088c27cf..2d9154546 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -1854,6 +1854,9 @@ msgstr "Adapter:" msgid "VDE Socket:" msgstr "VDE-kontakt:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box-enhetstester" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index df48e62d8..2d4140495 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -1854,6 +1854,9 @@ msgstr "Adapter:" msgid "VDE Socket:" msgstr "VDE-socket:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box Apparaattester" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index a518957a8..1cc56e09b 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -1854,6 +1854,9 @@ msgstr "Adapter:" msgid "VDE Socket:" msgstr "Gniazdo VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Tester urzÄ…dzeÅ„ 86Box" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index f1ff0bc09..53a8aed39 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -1854,6 +1854,9 @@ msgstr "Adaptador:" msgid "VDE Socket:" msgstr "Soquete VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Testador de unidade 86Box" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index dd4c61d1c..2d8b812f0 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -1854,6 +1854,9 @@ msgstr "Adaptador:" msgid "VDE Socket:" msgstr "Tomada VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Testador de unidades 86Box" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 3e15daf98..ddc584b91 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -1854,6 +1854,9 @@ msgstr "ĐĐ´Đ°Đ¿Ñ‚ĐµÑ€:" msgid "VDE Socket:" msgstr "VDE ÑĐ¾ĐºĐµÑ‚:" +msgid "TAP Bridge Device:" +msgstr "Đ£ÑÑ‚Ñ€Đ¾Đ¹ÑÑ‚Đ²Đ¾ Đ¼Đ¾ÑÑ‚Đ° TAP:" + msgid "86Box Unit Tester" msgstr "ĐœĐ¾Đ´ÑƒĐ»ÑŒĐ½Ñ‹Đ¹ Đ¢ĐµÑÑ‚ĐµÑ€ 86Box" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 7ea0446fb..dfd71bb45 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -1854,6 +1854,9 @@ msgstr "AdaptĂ©r:" msgid "VDE Socket:" msgstr "ZĂ¡suvka VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box Unit Tester" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index dd1b643c2..f7bdf7a38 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -1854,6 +1854,9 @@ msgstr "Mrežna kartica:" msgid "VDE Socket:" msgstr "VtiÄnica VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Tester enote 86Box" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index 5a5c48bb9..d858e6189 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -1854,6 +1854,9 @@ msgstr "Adapter:" msgid "VDE Socket:" msgstr "VDE-sockel:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box enhetsprövare" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 2a6eedeab..9355ec4ba 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -1854,6 +1854,9 @@ msgstr "Adaptör:" msgid "VDE Socket:" msgstr "VDE Soketi:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box Test Cihazı" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index a5a4f5853..8866a1486 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -1854,6 +1854,9 @@ msgstr "ĐĐ´Đ°Đ¿Ñ‚ĐµÑ€:" msgid "VDE Socket:" msgstr "VDE ÑĐ¾ĐºĐµÑ‚:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Đ¢ĐµÑÑ‚ĐµÑ€ Đ±Đ»Đ¾ĐºÑ–Đ² 86Box" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 1d6d80c35..c81f5691a 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -1854,6 +1854,9 @@ msgstr "Bá»™ chuyển đổi:" msgid "VDE Socket:" msgstr "á»” cắm VDE:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "Trình kiểm tra đơn vị 86box" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 288b7deaf..b51c02769 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -1854,6 +1854,9 @@ msgstr "适é…器:" msgid "VDE Socket:" msgstr "VDE 套æ¥å­—:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box 装置测试仪" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index a11bd7f6d..0bbd32190 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -1854,6 +1854,9 @@ msgstr "é…æ¥å™¨:" msgid "VDE Socket:" msgstr "VDE æ’座:" +msgid "TAP Bridge Device:" +msgstr "" + msgid "86Box Unit Tester" msgstr "86Box 單元測試器" diff --git a/src/qt/qt_settingsnetwork.ui b/src/qt/qt_settingsnetwork.ui index 767b4244d..12b74004f 100644 --- a/src/qt/qt_settingsnetwork.ui +++ b/src/qt/qt_settingsnetwork.ui @@ -158,11 +158,11 @@ - TAP Bridge Device + TAP Bridge Device: - + 127 @@ -373,11 +373,11 @@ - TAP Bridge Device + TAP Bridge Device: - + 127 @@ -588,11 +588,11 @@ - TAP Bridge Device + TAP Bridge Device: - + 127 @@ -803,11 +803,11 @@ - TAP Bridge Device + TAP Bridge Device: - + 127 From 69662ac3c823b1d3dcdda9949d9eeaf1dc5a0efb Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 23 Oct 2025 00:10:27 +0500 Subject: [PATCH 170/233] Qt; Layout and size policy tweaks for settings dialog Fixes comboboxes not always filling the intended space, as well as oversized Configure buttons and uneven joystick confugration buttons --- src/qt/qt_settingsinput.ui | 141 +++++++++++++++--------- src/qt/qt_settingsports.ui | 39 ++++--- src/qt/qt_settingssound.ui | 22 ++-- src/qt/qt_settingsstoragecontrollers.ui | 12 ++ 4 files changed, 138 insertions(+), 76 deletions(-) diff --git a/src/qt/qt_settingsinput.ui b/src/qt/qt_settingsinput.ui index 02b3e388c..e4c0dc8fa 100644 --- a/src/qt/qt_settingsinput.ui +++ b/src/qt/qt_settingsinput.ui @@ -30,7 +30,7 @@ - + @@ -43,7 +43,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -76,7 +76,7 @@ - + @@ -96,40 +96,50 @@ - + 30 - - - - - - Joystick 1... + + + 0 + 0 + - - - - Joystick 2... - - - - - - - Joystick 3... - - - - - - - Joystick 4... - - + + + + + + Joystick 1... + + + + + + + Joystick 2... + + + + + + + Joystick 3... + + + + + + + Joystick 4... + + + + @@ -138,7 +148,7 @@ - + QAbstractItemView::NoEditTriggers @@ -157,25 +167,54 @@ - - - - false - - - Clear binding - - - - - - - false - - - Bind - - + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + + 100 + 0 + + + + Clear binding + + + + + + + false + + + + 100 + 0 + + + + Bind + + + + diff --git a/src/qt/qt_settingsports.ui b/src/qt/qt_settingsports.ui index 9a8533995..6be0e3a85 100644 --- a/src/qt/qt_settingsports.ui +++ b/src/qt/qt_settingsports.ui @@ -228,6 +228,12 @@ Serial port passthrough 1 + + + 0 + 0 + + @@ -242,6 +248,12 @@ Serial port passthrough 2 + + + 0 + 0 + + @@ -256,6 +268,12 @@ Serial port passthrough 3 + + + 0 + 0 + + @@ -270,6 +288,12 @@ Serial port passthrough 4 + + + 0 + 0 + + @@ -279,20 +303,7 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + Qt::Vertical diff --git a/src/qt/qt_settingssound.ui b/src/qt/qt_settingssound.ui index 97ef7c3ff..f93c5d374 100644 --- a/src/qt/qt_settingssound.ui +++ b/src/qt/qt_settingssound.ui @@ -46,7 +46,7 @@ - + Configure @@ -73,7 +73,7 @@ - + Configure @@ -100,7 +100,7 @@ - + Configure @@ -127,7 +127,7 @@ - + Configure @@ -154,7 +154,7 @@ - + Configure @@ -181,35 +181,35 @@ - + Configure - + Standalone MPU-401 - + Configure - + Use FLOAT32 sound - + @@ -238,7 +238,7 @@ - + Qt::Vertical diff --git a/src/qt/qt_settingsstoragecontrollers.ui b/src/qt/qt_settingsstoragecontrollers.ui index 2d6fa9d32..50ebbe7ef 100644 --- a/src/qt/qt_settingsstoragecontrollers.ui +++ b/src/qt/qt_settingsstoragecontrollers.ui @@ -40,6 +40,12 @@ 30 + + + 0 + 0 + + @@ -61,6 +67,12 @@ 30 + + + 0 + 0 + + From f3b5b6103af2c15432aaf12ce0e58b3284dd9561 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 23 Oct 2025 07:11:40 +0500 Subject: [PATCH 171/233] Remove unneeded capital letters from paddle and steering wheel's names --- src/game/joystick_standard.c | 8 ++++---- src/qt/languages/86box.pot | 8 ++++---- src/qt/languages/cs-CZ.po | 8 ++++---- src/qt/languages/de-DE.po | 8 ++++---- src/qt/languages/es-ES.po | 8 ++++---- src/qt/languages/fi-FI.po | 8 ++++---- src/qt/languages/fr-FR.po | 8 ++++---- src/qt/languages/hr-HR.po | 8 ++++---- src/qt/languages/it-IT.po | 8 ++++---- src/qt/languages/ja-JP.po | 8 ++++---- src/qt/languages/ko-KR.po | 8 ++++---- src/qt/languages/nb-NO.po | 8 ++++---- src/qt/languages/nl-NL.po | 8 ++++---- src/qt/languages/pl-PL.po | 8 ++++---- src/qt/languages/pt-BR.po | 8 ++++---- src/qt/languages/pt-PT.po | 8 ++++---- src/qt/languages/ru-RU.po | 8 ++++---- src/qt/languages/sk-SK.po | 8 ++++---- src/qt/languages/sl-SI.po | 8 ++++---- src/qt/languages/sv-SE.po | 8 ++++---- src/qt/languages/tr-TR.po | 8 ++++---- src/qt/languages/uk-UA.po | 8 ++++---- src/qt/languages/vi-VN.po | 8 ++++---- src/qt/languages/zh-CN.po | 8 ++++---- src/qt/languages/zh-TW.po | 8 ++++---- 25 files changed, 100 insertions(+), 100 deletions(-) diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index a9e3da402..fc0006b45 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -392,7 +392,7 @@ joystick_standard_a0_over(UNUSED(void *priv)) } const joystick_t joystick_generic_paddle = { - .name = "Generic Paddle Controller(s)", + .name = "Generic paddle controller(s)", .internal_name = "generic_paddle", .init = joystick_standard_init, .close = joystick_standard_close, @@ -825,7 +825,7 @@ const joystick_t joystick_4button_yoke_throttle = { }; const joystick_t joystick_steering_wheel_2_button = { - .name = "Steering Wheel (3-axis, 2-button)", + .name = "Steering wheel (3-axis, 2-button)", .internal_name = "steering_wheel_2_button", .init = joystick_standard_init, .close = joystick_standard_close, @@ -843,7 +843,7 @@ const joystick_t joystick_steering_wheel_2_button = { }; const joystick_t joystick_steering_wheel_3_button = { - .name = "Steering Wheel (3-axis, 3-button)", + .name = "Steering wheel (3-axis, 3-button)", .internal_name = "steering_wheel_3_button", .init = joystick_standard_init, .close = joystick_standard_close, @@ -861,7 +861,7 @@ const joystick_t joystick_steering_wheel_3_button = { }; const joystick_t joystick_steering_wheel_4_button = { - .name = "Steering Wheel (3-axis, 4-button)", + .name = "Steering wheel (3-axis, 4-button)", .internal_name = "steering_wheel_4_button", .init = joystick_standard_init, .close = joystick_standard_close, diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 7eaa2359c..54b328aa1 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -849,7 +849,7 @@ msgstr "" msgid "Invalid PCap device" msgstr "" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "" msgid "4-button flight yoke with throttle" msgstr "" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "" msgid "CH Flightstick" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index af3d76537..38cd36487 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -849,7 +849,7 @@ msgstr "Nebyla nalezena Å¾Ă¡dnĂ¡ PCap zaÅ™Ă­zenĂ­" msgid "Invalid PCap device" msgstr "NeplatnĂ© PCap zaÅ™Ă­zenĂ­" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "LeteckĂ½ knipl s 3 tlaÄĂ­tky a pĂ¡kou" msgid "4-button flight yoke with throttle" msgstr "LeteckĂ½ knipl s 4 tlaÄĂ­tky a pĂ¡kou" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volant (3 osy, 2 tlaÄĂ­tka)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volant (3 osy, 3 tlaÄĂ­tka)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volant (3 osy, 4 tlaÄĂ­tka)" msgid "CH Flightstick" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 864d1e1e3..7463747a7 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -849,7 +849,7 @@ msgstr "Keine PCap-Geräte gefunden" msgid "Invalid PCap device" msgstr "UngĂ¼ltiges PCap-Gerät" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3-Tasten-Steuerhorn mit Schubregler" msgid "4-button flight yoke with throttle" msgstr "4-Tasten-Steuerhorn mit Schubregler" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Lenkrad (3-Achsen, 2-Tasten)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Lenkrad (3-Achsen, 3-Tasten)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Lenkrad (3-Achsen, 4-Tasten)" msgid "CH Flightstick" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index dc2f6272b..3210dc713 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -849,7 +849,7 @@ msgstr "No se encontraron dispositivos PCap" msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Yugo de vuelo de 3 botones con acelerador" msgid "4-button flight yoke with throttle" msgstr "Yugo de vuelo de 4 botones con acelerador" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volante (de 3 ejes, 2 botones)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volante (de 3 ejes, 3 botones)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volante (de 3 ejes, 4 botones)" msgid "CH Flightstick" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 89c545b08..ba494bb6e 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -849,7 +849,7 @@ msgstr "PCap-laitteita ei löytynyt" msgid "Invalid PCap device" msgstr "Virheellinen PCap-laite" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3-painikkeinen lento-ohjain kaasuvivulla" msgid "4-button flight yoke with throttle" msgstr "4-painikkeinen lento-ohjain kaasuvivulla" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "ratti (3-akselinen, 2-painikkeinen)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "ratti (3-akselinen, 3-painikkeinen)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "ratti (3-akselinen, 4-painikkeinen)" msgid "CH Flightstick" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 24bd0eb7d..f62e55978 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -849,7 +849,7 @@ msgstr "Aucun dispositif PCap trouvĂ©" msgid "Invalid PCap device" msgstr "Dispositif PCap invalide" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Manette de vol Ă  3 boutons avec manette des gaz" msgid "4-button flight yoke with throttle" msgstr "Manette de vol Ă  4 boutons avec manette des gaz" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volant (3 axes, 2 boutons)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volant (3 axes, 3 boutons)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volant (3 axes, 4 boutons)" msgid "CH Flightstick" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 450492d3c..7f460914a 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -849,7 +849,7 @@ msgstr "Nema PCap ureÄ‘aja" msgid "Invalid PCap device" msgstr "Nevažeći PCap ureÄ‘aj" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Jaram za letenje s 3 tipke i gasom" msgid "4-button flight yoke with throttle" msgstr "Jaram za letenje s 4 tipke i gasom" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volan (3 osi, 2 tipke)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volan (3 osi, 3 tipke)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volan (3 osi, 4 tipke)" msgid "CH Flightstick" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 9875e999c..c8eb2e6e7 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -849,7 +849,7 @@ msgstr "Nessun dispositivo PCap trovato" msgid "Invalid PCap device" msgstr "Dispositivo PCap non valido" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Barra di comando a 4 pulsanti con acceleratore" msgid "4-button flight yoke with throttle" msgstr "Barra di comando a 4 pulsanti con acceleratore" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volante (3 assi, 2 pulsanti)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volante (3 assi, 3 pulsanti)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volante (3 assi, 4 pulsanti)" msgid "CH Flightstick" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index aeceee65e..8cc00a146 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -849,7 +849,7 @@ msgstr "PCapăƒ‡ăƒă‚¤ă‚¹ăŒă‚ă‚ă¾ă›ă‚“" msgid "Invalid PCap device" msgstr "䏿­£ăªPCapăƒ‡ăƒă‚¤ă‚¹" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3ăƒœă‚¿ăƒ³å¼ăƒ•ăƒ©ă‚¤ăƒˆăƒ¨ăƒ¼ă‚¯(ă‚¹ăƒ­ăƒƒăƒˆăƒ«ä»˜ă)" msgid "4-button flight yoke with throttle" msgstr "4ăƒœă‚¿ăƒ³å¼ăƒ•ăƒ©ă‚¤ăƒˆăƒ¨ăƒ¼ă‚¯(ă‚¹ăƒ­ăƒƒăƒˆăƒ«ä»˜ă)" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "ă‚¹ăƒ†ă‚¢ăƒªăƒ³ă‚°ăƒ›ă‚¤ăƒ¼ăƒ«(3軸ă€2ăƒœă‚¿ăƒ³)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "ă‚¹ăƒ†ă‚¢ăƒªăƒ³ă‚°ăƒ›ă‚¤ăƒ¼ăƒ«(3軸ă€3ăƒœă‚¿ăƒ³)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "ă‚¹ăƒ†ă‚¢ăƒªăƒ³ă‚°ăƒ›ă‚¤ăƒ¼ăƒ«(3軸ă€4ăƒœă‚¿ăƒ³)" msgid "CH Flightstick" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 961bea792..4c15c0cb0 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -849,7 +849,7 @@ msgstr "PCap ́¥́¹˜ê°€ ́—†́µë‹ˆë‹¤" msgid "Invalid PCap device" msgstr "PCap ́¥́¹˜ê°€ ́˜¬ë°”르́§€ ́•́µë‹ˆë‹¤" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„ê³¼ ́¤ë¡œí‹€" msgid "4-button flight yoke with throttle" msgstr "4ë²„í¼ ë¹„í–‰ ́¡°́¢…ê°„ê³¼ ́¤ë¡œí‹€" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "́¡°íƒ€ë¥œ (3́¶•, 2버í¼)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "́¡°íƒ€ë¥œ (3́¶•, 3버í¼)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "́¡°íƒ€ë¥œ (3́¶•, 4버í¼)" msgid "CH Flightstick" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index 2d9154546..b4c7cd57c 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -849,7 +849,7 @@ msgstr "Ingen PCap-enheter funnet" msgid "Invalid PCap device" msgstr "Ugyldig PCap-enhet" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3-knapps flystyre med gass" msgid "4-button flight yoke with throttle" msgstr "4-knapps flystyre med gass" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Ratt (3-akset, 3-knapps)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Ratt (3-akset, 3-knapps)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Ratt (3-akset, 4-knapps)" msgid "CH Flightstick" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 2d4140495..6710687a1 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -849,7 +849,7 @@ msgstr "Geen PCap-apparaten gevonden" msgid "Invalid PCap device" msgstr "Ongeldig PCap-apparaat" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3-kops stuurknuppel met gashendel" msgid "4-button flight yoke with throttle" msgstr "4-kops stuurknuppel met gashendel" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Stuurwiel (3 assen, 2 knoppen)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Stuurwiel (3 assen, 3 knoppen)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Stuurwiel (3 assen, 4 knoppen)" msgid "CH Flightstick" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 1cc56e09b..1efe0ec97 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -849,7 +849,7 @@ msgstr "Nie znaleziono urzÄ…dzeÅ„ PCap" msgid "Invalid PCap device" msgstr "NieprawidÅ‚owe urzÄ…dzenie PCap" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "Generyczny kontroler paddle" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Wolant z trzema przyciskami i przepustnicÄ…" msgid "4-button flight yoke with throttle" msgstr "Wolant z czterema przyciskami i przepustnicÄ…" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Kierownica (3 osie, 2 przyciski)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Kierownica (3 osie, 3 przyciski)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Kierownica (3 osie, 4 przyciski)" msgid "CH Flightstick" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 53a8aed39..88fe48d00 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -849,7 +849,7 @@ msgstr "Nenhum dispositivo PCap encontrado" msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Manche de voo de 3 botões com acelerador" msgid "4-button flight yoke with throttle" msgstr "Manche de voo de 4 botões com acelerador" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volante (3 eixos, 2 botões)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volante (3 eixos, 3 botões)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volante (3 eixos, 4 botões)" msgid "CH Flightstick" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 2d8b812f0..bfd52adfa 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -849,7 +849,7 @@ msgstr "NĂ£o foi encontrado um dispositivo PCap" msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "ManĂ­pulo de voo de 3 botões com acelerador" msgid "4-button flight yoke with throttle" msgstr "ManĂ­pulo de voo de 4 botões com acelerador" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volante (de 3 eixos, 2 botões)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volante (de 3 eixos, 3 botões)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volante (de 3 eixos, 4 botões)" msgid "CH Flightstick" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index ddc584b91..6235f224a 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -849,7 +849,7 @@ msgstr "Đ£ÑÑ‚Ñ€Đ¾Đ¹ÑÑ‚Đ²Đ° PCap Đ½Đµ Đ½Đ°Đ¹Đ´ĐµĐ½Ñ‹" msgid "Invalid PCap device" msgstr "ĐĐµĐ²ĐµÑ€Đ½Đ¾Đµ уÑÑ‚Ñ€Đ¾Đ¹ÑÑ‚Đ²Đ¾ PCap" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" msgid "4-button flight yoke with throttle" msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Đ ÑƒĐ»ÑŒ (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Đ ÑƒĐ»ÑŒ (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Đ ÑƒĐ»ÑŒ (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" msgid "CH Flightstick" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index dfd71bb45..f43059d58 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -849,7 +849,7 @@ msgstr "Neboli nĂ¡jdenĂ© žiadne PCap zariadenia" msgid "Invalid PCap device" msgstr "NeplatnĂ© PCap zariadenie" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "LeteckĂ½ knipl s 3 tlaÄidlami a pĂ¡kou" msgid "4-button flight yoke with throttle" msgstr "LeteckĂ½ knipl s 4 tlaÄidlami a pĂ¡kou" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volant (3 osy, 2 tlaÄĂ­tka)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volant (3 osy, 3 tlaÄĂ­tka)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volant (3 osy, 4 tlaÄĂ­tka)" msgid "CH Flightstick" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index f7bdf7a38..2438c1aa3 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -849,7 +849,7 @@ msgstr "Najdena ni bila nobena naprava PCap" msgid "Invalid PCap device" msgstr "Neveljavna naprava PCap" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Letalski krmilni drog s 3 gumbi z roÄico za plin" msgid "4-button flight yoke with throttle" msgstr "Letalski krmilni drog s 4 gumbi z roÄico za plin" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "Volan s 3 osmi, 2 gumbi" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "Volan s 3 osmi, 3 gumbi" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "Volan s 3 osmi, 4 gumbi" msgid "CH Flightstick" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index d858e6189..324fed452 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -849,7 +849,7 @@ msgstr "Inga PCap-enheter hittade" msgid "Invalid PCap device" msgstr "Ogiltig PCap-enhet" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "Styrspak med tre knappar och gas" msgid "4-button flight yoke with throttle" msgstr "Styrspak med fyra knappar och gas" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "ratt (tre axlar, tvĂ¥ knappar)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "ratt (tre axlar, tre knappar)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "ratt (tre axlar, fyra knappar)" msgid "CH Flightstick" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 9355ec4ba..cf15db39b 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -849,7 +849,7 @@ msgstr "Herhangi bir PCap cihazı bulunamadı" msgid "Invalid PCap device" msgstr "Geçersiz PCap cihazı" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3 dĂ¼ÄŸmeli, gaz kollu uçuÅŸ dĂ¼meni" msgid "4-button flight yoke with throttle" msgstr "4 dĂ¼ÄŸmeli, gaz kollu uçuÅŸ dĂ¼meni" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "direksiyonu (3 eksenli, 2 dĂ¼ÄŸmeli)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "direksiyonu (3 eksenli, 3 dĂ¼ÄŸmeli)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "direksiyonu (3 eksenli, 4 dĂ¼ÄŸmeli)" msgid "CH Flightstick" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 8866a1486..b155d0da0 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -849,7 +849,7 @@ msgstr "ĐŸÑ€Đ¸ÑÑ‚Ñ€Đ¾Ñ— PCap Đ½Đµ Đ·Đ½Đ°Đ¹Đ´ĐµĐ½Ñ–" msgid "Invalid PCap device" msgstr "ĐĐµĐ²Ñ–Ñ€Đ½Đ¸Đ¹ Đ¿Ñ€Đ¸ÑÑ‚Ñ€Ñ–Đ¹ PCap" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke Đ· Đ´Ñ€Đ¾ÑĐµĐ»ĐµĐ¼" msgid "4-button flight yoke with throttle" msgstr "4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ flight yoke Đ· Đ´Ñ€Đ¾ÑĐµĐ»ĐµĐ¼" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "ĐĐµÑ€Đ¼Đ¾ (3-Đ¾ÑÑŒĐ¾Đ²Đµ, 2-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đµ)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "ĐĐµÑ€Đ¼Đ¾ (3-Đ¾ÑÑŒĐ¾Đ²Đµ, 3-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đµ)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "ĐĐµÑ€Đ¼Đ¾ (3-Đ¾ÑÑŒĐ¾Đ²Đµ, 4-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đµ)" msgid "CH Flightstick" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index c81f5691a..acb904b04 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -849,7 +849,7 @@ msgstr "KhĂ´ng tìm thấy thiết bị PCap" msgid "Invalid PCap device" msgstr "Thiết bị PCap khĂ´ng hợp quy" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "VĂ´ lăng mĂ¡y bay ba nĂºt cĂ³ cần ga" msgid "4-button flight yoke with throttle" msgstr "VĂ´ lăng mĂ¡y bay bốn nĂºt cĂ³ cần ga" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "VĂ´ lăng (ba trục, hai nĂºt)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "VĂ´ lăng (ba trục, ba nĂºt)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "VĂ´ lăng (ba trục, bốn nĂºt)" msgid "CH Flightstick" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index b51c02769..a53520c3f 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -849,7 +849,7 @@ msgstr "未找到 PCap 设备" msgid "Invalid PCap device" msgstr "无效 PCap 设备" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3 按钮带油门é£è¡Œæ‘‡æ†" msgid "4-button flight yoke with throttle" msgstr "4 按钮带油门é£è¡Œæ‘‡æ†" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "æ–¹å‘盘 (3 è½´, 2 é”®)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "æ–¹å‘盘 (3 è½´, 3 é”®)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "æ–¹å‘盘 (3 è½´, 4 é”®)" msgid "CH Flightstick" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 0bbd32190..053dde129 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -849,7 +849,7 @@ msgstr "未找到 PCap è£ç½®" msgid "Invalid PCap device" msgstr "無效 PCap è£ç½®" -msgid "Generic Paddle Controller(s)" +msgid "Generic paddle controller(s)" msgstr "" msgid "2-axis, 1-button joystick(s)" @@ -921,13 +921,13 @@ msgstr "3 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" msgid "4-button flight yoke with throttle" msgstr "4 æŒ‰éˆ•å¸¶æ²¹é–€é£›è¡Œæ–æ¡¿" -msgid "Steering Wheel (3-axis, 2-button)" +msgid "Steering wheel (3-axis, 2-button)" msgstr "æ–¹å‘盤 (3 軸, 2 鵿–æ¡¿)" -msgid "Steering Wheel (3-axis, 3-button)" +msgid "Steering wheel (3-axis, 3-button)" msgstr "æ–¹å‘盤 (3 軸, 3 鵿–æ¡¿)" -msgid "Steering Wheel (3-axis, 4-button)" +msgid "Steering wheel (3-axis, 4-button)" msgstr "æ–¹å‘盤 (3 軸, 4 鵿–æ¡¿)" msgid "CH Flightstick" From b6d25018868700cf06c0feb5a8ebb67f507d3d30 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 23 Oct 2025 07:12:30 +0500 Subject: [PATCH 172/233] Update the Russian translation --- src/qt/languages/ru-RU.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 6235f224a..b40d4073e 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "ĐĐµĐ²ĐµÑ€Đ½Đ¾Đµ уÑÑ‚Ñ€Đ¾Đ¹ÑÑ‚Đ²Đ¾ PCap" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Đ¡Ñ‚Đ°Đ½Đ´Đ°Ñ€Ñ‚Đ½Ñ‹Đ¹ ĐºĐ¾Đ½Ñ‚Ñ€Đ¾Đ»Đ»ĐµÑ€-ĐºĐ¾Đ»ĐµÑĐ¾" msgid "2-axis, 1-button joystick(s)" msgstr "2-Đ¾ÑĐµĐ²Đ¾Đ¹, 1-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" @@ -904,22 +904,22 @@ msgid "Gravis PC GamePad" msgstr "Gravis PC GamePad" msgid "2-button flight yoke" -msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" +msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ ÑˆÑ‚ÑƒÑ€Đ²Đ°Đ»" msgid "3-button flight yoke" -msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" +msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ ÑˆÑ‚ÑƒÑ€Đ²Đ°Đ»" msgid "4-button flight yoke" -msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke" +msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ ÑˆÑ‚ÑƒÑ€Đ²Đ°Đ»" msgid "2-button flight yoke with throttle" -msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" +msgstr "2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ ÑˆÑ‚ÑƒÑ€Đ²Đ°Đ» Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" msgid "3-button flight yoke with throttle" -msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" +msgstr "3-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ ÑˆÑ‚ÑƒÑ€Đ²Đ°Đ» Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" msgid "4-button flight yoke with throttle" -msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ flight yoke Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" +msgstr "4-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹ ÑˆÑ‚ÑƒÑ€Đ²Đ°Đ» Ñ Đ´Ñ€Đ¾ÑÑĐµĐ»ĐµĐ¼" msgid "Steering wheel (3-axis, 2-button)" msgstr "Đ ÑƒĐ»ÑŒ (3-Đ¾ÑĐµĐ²Đ¾Đ¹, 2-ĐºĐ½Đ¾Đ¿Đ¾Ñ‡Đ½Ñ‹Đ¹)" @@ -976,10 +976,10 @@ msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»ĐµĐ½Đ¸Ñ Ñ€ÑƒĐ»ĐµĐ¼" msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 Ñ Đ°Đ´Đ°Đ¿Ñ‚ĐµÑ€Đ¾Đ¼" msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 без Đ°Đ´Đ°Đ¿Ñ‚ĐµÑ€Đ°" msgid "None" msgstr "ĐĐµÑ‚" From 5a9fd8585f36fc64cfc4c0e206d714a5d7a402d6 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Thu, 23 Oct 2025 11:08:44 -0300 Subject: [PATCH 173/233] Revert the PC Partner name change [skip ci] Sources: http://web.archive.org/web/20000831053737/http://www.pcpartner.com/company.htm http://web.archive.org/web/20040214090712/http://www.pcpartner.com/profile/main.htm http://web.archive.org/web/20070928143528/http://www.pcpartner.com/ https://www.pcpartner.com (still around!) --- src/machine/machine_table.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 1c7b78deb..78a1709e8 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13739,7 +13739,7 @@ const machine_t machines[] = { }, /* Has a VIA VT82C42N KBC. */ { - .name = "[i430FX] PCPartner MB500N", + .name = "[i430FX] PC Partner MB500N", .internal_name = "mb500n", .type = MACHINE_TYPE_SOCKET7_3V, .chipset = MACHINE_CHIPSET_INTEL_430FX, @@ -15501,7 +15501,7 @@ const machine_t machines[] = { /* This has the AMIKey 'H' firmware, possibly AMIKey-2. Photos show it with a BestKey, so it likely clones the behavior of AMIKey 'H'. */ { - .name = "[i430VX] PCPartner MB520N", + .name = "[i430VX] PC Partner MB520N", .internal_name = "mb520n", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430VX, @@ -15965,7 +15965,7 @@ const machine_t machines[] = { /* The BIOS sends KBC command BB and expects it to output a byte, which is AMI KBC behavior. A picture shows a VIA VT82C42N KBC though, so it could be a case of that KBC with AMI firmware. */ { - .name = "[i430TX] PCPartner MB540N", + .name = "[i430TX] PC Partner MB540N", .internal_name = "mb540n", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430TX, @@ -16506,7 +16506,7 @@ const machine_t machines[] = { /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA VP3] PCPartner VIA809DS", + .name = "[VIA VP3] PC Partner VIA809DS", .internal_name = "via809ds", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3, @@ -17586,7 +17586,7 @@ const machine_t machines[] = { }, /* Has a VIA VT82C42N KBC. */ { - .name = "[i440FX] PCPartner MB600N", + .name = "[i440FX] PC Partner MB600N", .internal_name = "mb600n", .type = MACHINE_TYPE_SOCKET8, .chipset = MACHINE_CHIPSET_INTEL_440FX, @@ -19601,7 +19601,7 @@ const machine_t machines[] = { /* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA VT82C42N. */ { - .name = "[VIA Apollo Pro] PCPartner APAS3", + .name = "[VIA Apollo Pro] PC Partner APAS3", .internal_name = "apas3", .type = MACHINE_TYPE_SOCKET370, .chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO, From f756dcea80c9681a810ce7a271494361399614cc Mon Sep 17 00:00:00 2001 From: richardg867 Date: Thu, 23 Oct 2025 11:32:57 -0300 Subject: [PATCH 174/233] Revert the PC Chips name change [skip ci] Sources: (note inconsistencies in website) http://web.archive.org/web/19970128184226/http://www.pcchips.com/pcgroup.html http://web.archive.org/web/20010118220900/http://www.pcchips.com/ --- src/machine/machine_table.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 78a1709e8..950705def 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -10728,7 +10728,7 @@ const machine_t machines[] = { /* This has the UMC 88xx on-chip KBC. All the copies of the BIOS string I can find, end in in -H, so the UMC on-chip KBC likely emulates the AMI 'H' KBC firmware. */ { - .name = "[UMC 8881] PCChips M919", + .name = "[UMC 8881] PC Chips M919", .internal_name = "m919", .type = MACHINE_TYPE_486_S3_PCI, .chipset = MACHINE_CHIPSET_UMC_UM8881, @@ -14416,7 +14416,7 @@ const machine_t machines[] = { }, /* Has the ALi M1543 southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN IV+] PCChips M560", + .name = "[ALi ALADDiN IV+] PC Chips M560", .internal_name = "m560", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS, @@ -16730,7 +16730,7 @@ const machine_t machines[] = { /* Is the exact same as the Matsonic MS6260S. Has the ALi M1543C southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN V] PCChips M579", + .name = "[ALi ALADDiN V] PC Chips M579", .internal_name = "m579", .type = MACHINE_TYPE_SOCKETS7, .chipset = MACHINE_CHIPSET_ALI_ALADDIN_V, @@ -17633,7 +17633,7 @@ const machine_t machines[] = { /* ALi ALADDiN-PRO II */ /* Has the ALi M1543C southbridge with on-chip KBC. */ { - .name = "[ALi ALADDiN-PRO II] PCChips M729", + .name = "[ALi ALADDiN-PRO II] PC Chips M729", .internal_name = "m729", .type = MACHINE_TYPE_SLOT1, .chipset = MACHINE_CHIPSET_ALI_ALADDIN_PRO_II, @@ -18674,7 +18674,7 @@ const machine_t machines[] = { }, /* Has the SiS (5)600 chipset with on-chip KBC. */ { - .name = "[SiS 5600] PCChips M747", + .name = "[SiS 5600] PC Chips M747", .internal_name = "m747", .type = MACHINE_TYPE_SLOT1, .chipset = MACHINE_CHIPSET_SIS_5600, @@ -19554,7 +19554,7 @@ const machine_t machines[] = { /* Has an ITE IT8671F Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ { - .name = "[SMSC VictoryBX-66] PCChips M773", + .name = "[SMSC VictoryBX-66] PC Chips M773", .internal_name = "m773", .type = MACHINE_TYPE_SOCKET370, .chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66, From 265cd2251097dd950110b7a3359c4e8ea521f406 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Thu, 23 Oct 2025 11:43:35 -0300 Subject: [PATCH 175/233] Remove dash from Yamaha YMF71x [skip ci] Sources: https://www.alsa-project.org/files/pub/datasheets/yamaha/YMF711.PDF https://www.alsa-project.org/files/pub/datasheets/yamaha/YMF715.PDF https://www.alsa-project.org/files/pub/datasheets/yamaha/3sa3ee.pdf --- src/sound/snd_ymf71x.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sound/snd_ymf71x.c b/src/sound/snd_ymf71x.c index 116a0966d..c79263ce0 100644 --- a/src/sound/snd_ymf71x.c +++ b/src/sound/snd_ymf71x.c @@ -6,7 +6,7 @@ * * This file is part of the 86Box distribution. * - * Yamaha YMF-71x (OPL3-SA2/3) audio controller emulation. + * Yamaha YMF71x (OPL3-SA2/3) audio controller emulation. * * Authors: Cacodemon345 * Eluan Costa Miranda @@ -74,7 +74,7 @@ static const uint8_t ymf71x_init_key[32] = { 0xB1, 0xD8, 0x6C, 0x36, 0x9B, 0x4D, 0x33, 0x19, 0x8C, 0x46, 0xA3, 0x51, 0xA8, 0x54 }; /* Reversed attenuation values borrowed from snd_sb.c */ -/* YMF-71x master volume attenuation is -30dB when all bits are 1, 0dB when all bits are 0 */ +/* YMF71x master volume attenuation is -30dB when all bits are 1, 0dB when all bits are 0 */ static const double ymf71x_att_2dbstep_4bits[] = { 32767.0, 26027.0, 20674.0, 16422.0, 13044.0, 10362.0, 8230.0, 6537.0, 5192.0, 4125.0, 3276.0, 2602.0, 2067.0, 1641.0, 1304.0, 164.0 @@ -836,7 +836,7 @@ static const device_config_t ymf71x_config[] = { }; const device_t ymf715_onboard_device = { - .name = "Yamaha YMF-715 Onboard (OPL3-SA3)", + .name = "Yamaha YMF715 (OPL3-SA3) (On-Board)", .internal_name = "ymf715_onboard", .flags = DEVICE_ISA16, .local = 0x102, @@ -850,7 +850,7 @@ const device_t ymf715_onboard_device = { }; const device_t ymf718_device = { - .name = "Yamaha YMF-718 (OPL3-SA2)", + .name = "Yamaha YMF718 (OPL3-SA2)", .internal_name = "ymf718", .flags = DEVICE_ISA16, .local = 0x01, @@ -864,7 +864,7 @@ const device_t ymf718_device = { }; const device_t ymf719_device = { - .name = "Yamaha YMF-719 (OPL3-SA3)", + .name = "Yamaha YMF719 (OPL3-SA3)", .internal_name = "ymf719", .flags = DEVICE_ISA16, .local = 0x02, From 0e38241cfeaa9dcb27d95bafd276dd3710dfac42 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Thu, 23 Oct 2025 12:31:27 -0300 Subject: [PATCH 176/233] Fix LX6 BIOS internal name [skip ci] --- src/machine/m_at_slot1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 0b57b135c..02631169e 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -177,7 +177,7 @@ static const device_config_t lx6_config[] = { }, { .name = "Award Modular BIOS v4.51PG - Revision PZ (Beta)", - .internal_name = "lx6_beta", + .internal_name = "lx6_pz", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From 44be8c2940fc99ad223e4d08c1a82ba872564498 Mon Sep 17 00:00:00 2001 From: mw308 <34479591+mw308@users.noreply.github.com> Date: Thu, 23 Oct 2025 23:35:52 +0100 Subject: [PATCH 177/233] Allow finer control of shader parameters --- src/qt/qt_openglshaderconfig.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_openglshaderconfig.cpp b/src/qt/qt_openglshaderconfig.cpp index 1e8c2d54f..66bd9eb52 100644 --- a/src/qt/qt_openglshaderconfig.cpp +++ b/src/qt/qt_openglshaderconfig.cpp @@ -27,6 +27,7 @@ OpenGLShaderConfig::OpenGLShaderConfig(QWidget *parent, glslp_t* shader) for (int i = 0; i < currentShader->num_parameters; i++) { auto spinBox = new QDoubleSpinBox; + spinBox->setDecimals(3); spinBox->setObjectName(currentShader->parameters[i].id); spinBox->setRange(currentShader->parameters[i].min, currentShader->parameters[i].max); spinBox->setValue(currentShader->parameters[i].value); From 258c89151ce1d76357096bf73590bfc23832596b Mon Sep 17 00:00:00 2001 From: pixel-jupiter <180155003+pixel-jupiter@users.noreply.github.com> Date: Fri, 24 Oct 2025 01:12:26 +0300 Subject: [PATCH 178/233] Optimize negative bounds checking in rendering loops --- src/video/vid_tandy.c | 257 ++++++++++++++++++++++++------------------ 1 file changed, 147 insertions(+), 110 deletions(-) diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 14d6d8e69..3d2be3a41 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -396,37 +396,51 @@ vid_render(tandy_t *dev, int line, int hos_offs) uint16_t dat; int col; int cols[4]; + uint32_t border_val; int out_x; + int c_start; cols[0] = (vid->array[2] & 0xf) + 16; - if (line >= 0) { + if (line < 0) { + if (dev->is_sl2 && (vid->array[5] & 1)) { + vid->memaddr += vid->crtc[1] * 2; + } else { + vid->memaddr += vid->crtc[1]; + } + return; + } + + if (vid->array[3] & 4) { + border_val = cols[0]; + } else if ((vid->mode & 0x12) == 0x12) { + border_val = 0; + } else { + border_val = (vid->col & 15) + 16; + } + + if (vid->array[3] & 4) { for (c = 0; c < hos_offs; c++) { - if (vid->array[3] & 4) { - buffer32->line[line][c] = cols[0]; - } else if ((vid->mode & 0x12) == 0x12) { - buffer32->line[line][c] = 0; - } else { - buffer32->line[line][c] = buffer32->line[(line) + 1][c] = (vid->col & 15) + 16; - } + buffer32->line[line][c] = border_val; } - - for (c = 0; c < 8 - vid->hsync_offset; c++) { - if (vid->mode & 1) - out_x = c + (vid->crtc[1] << 3) + hos_offs; - else - out_x = c + (vid->crtc[1] << 4) + hos_offs; - - if (out_x >= 0) { - if (vid->array[3] & 4) { - buffer32->line[line][out_x] = cols[0]; - } else if ((vid->mode & 0x12) == 0x12) { - buffer32->line[line][out_x] = 0; - } else { - buffer32->line[line][out_x] = (vid->col & 15) + 16; - } - } + } else if ((vid->mode & 0x12) == 0x12) { + for (c = 0; c < hos_offs; c++) { + buffer32->line[line][c] = border_val; } + } else { + for (c = 0; c < hos_offs; c++) { + buffer32->line[line][c] = buffer32->line[(line) + 1][c] = border_val; + } + } + + if (vid->mode & 1) { + out_x = (vid->crtc[1] << 3) + hos_offs; + } else { + out_x = (vid->crtc[1] << 4) + hos_offs; + } + c_start = out_x < 0 ? -out_x : 0; + for (c = c_start; c < 8 - vid->hsync_offset; c++) { + buffer32->line[line][out_x + c] = border_val; } if (dev->is_sl2 && (vid->array[5] & 1)) { /*640x200x16*/ @@ -434,11 +448,16 @@ vid_render(tandy_t *dev, int line, int hos_offs) dat = (vid->vram[(vid->memaddr << 1) & 0xffff] << 8) | vid->vram[((vid->memaddr << 1) + 1) & 0xffff]; vid->memaddr++; out_x = (x << 2) + hos_offs; - if (line >= 0) { - if (out_x >= 0) buffer32->line[line][out_x] = vid->array[((dat >> 12) & 0xf) + 16] + 16; - if (out_x + 1 >= 0) buffer32->line[line][out_x + 1] = vid->array[((dat >> 8) & 0xf) + 16] + 16; - if (out_x + 2 >= 0) buffer32->line[line][out_x + 2] = vid->array[((dat >> 4) & 0xf) + 16] + 16; - if (out_x + 3 >= 0) buffer32->line[line][out_x + 3] = vid->array[(dat & 0xf) + 16] + 16; + if (out_x >= 0) { + buffer32->line[line][out_x] = vid->array[((dat >> 12) & 0xf) + 16] + 16; + buffer32->line[line][out_x + 1] = vid->array[((dat >> 8) & 0xf) + 16] + 16; + buffer32->line[line][out_x + 2] = vid->array[((dat >> 4) & 0xf) + 16] + 16; + buffer32->line[line][out_x + 3] = vid->array[(dat & 0xf) + 16] + 16; + } else if (out_x > -4) { + for (c = -out_x; c < 4; c++) { + buffer32->line[line][out_x + c] = + vid->array[((dat >> (12 - c * 4)) & 0xf) + 16] + 16; + } } } } else if ((vid->array[3] & 0x10) && (vid->mode & 1)) { /*320x200x16*/ @@ -447,15 +466,20 @@ vid_render(tandy_t *dev, int line, int hos_offs) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; out_x = (x << 3) + hos_offs; - if (line >= 0) { - if (out_x >= 0) buffer32->line[line][out_x] = buffer32->line[line][out_x + 1] = + if (out_x >= 0) { + buffer32->line[line][out_x] = buffer32->line[line][out_x + 1] = vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - if (out_x + 2 >= 0) buffer32->line[line][out_x + 2] = buffer32->line[line][out_x + 3] = + buffer32->line[line][out_x + 2] = buffer32->line[line][out_x + 3] = vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; - if (out_x + 4 >= 0) buffer32->line[line][out_x + 4] = buffer32->line[line][out_x + 5] = + buffer32->line[line][out_x + 4] = buffer32->line[line][out_x + 5] = vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; - if (out_x + 6 >= 0) buffer32->line[line][out_x + 6] = buffer32->line[line][out_x + 7] = + buffer32->line[line][out_x + 6] = buffer32->line[line][out_x + 7] = vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; + } else if (out_x > -8) { + for (c = -out_x; c < 8; c++) { + buffer32->line[line][out_x + c] = + vid->array[((dat >> 12 - (c >> 1) * 4) & vid->array[1] & 0x0f) + 16] + 16; + } } } } else if (vid->array[3] & 0x10) { /*160x200x16*/ @@ -468,19 +492,24 @@ vid_render(tandy_t *dev, int line, int hos_offs) vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; out_x = (x << 4) + hos_offs; - if (line >= 0) { - if (out_x >= 0) buffer32->line[line][out_x] = buffer32->line[line][out_x + 1] = - buffer32->line[line][out_x + 2] = buffer32->line[line][out_x + 3] = + if (out_x >= 0) { + buffer32->line[line][out_x] = buffer32->line[line][out_x + 1] = + buffer32->line[line][out_x + 2] = buffer32->line[line][out_x + 3] = vid->array[((dat >> 12) & vid->array[1] & 0x0f) + 16] + 16; - if (out_x + 4 >= 0) buffer32->line[line][out_x + 4] = buffer32->line[line][out_x + 5] = - buffer32->line[line][out_x + 6] = buffer32->line[line][out_x + 7] = + buffer32->line[line][out_x + 4] = buffer32->line[line][out_x + 5] = + buffer32->line[line][out_x + 6] = buffer32->line[line][out_x + 7] = vid->array[((dat >> 8) & vid->array[1] & 0x0f) + 16] + 16; - if (out_x + 8 >= 0) buffer32->line[line][out_x + 8] = buffer32->line[line][out_x + 9] = + buffer32->line[line][out_x + 8] = buffer32->line[line][out_x + 9] = buffer32->line[line][out_x + 10] = buffer32->line[line][out_x + 11] = vid->array[((dat >> 4) & vid->array[1] & 0x0f) + 16] + 16; - if (out_x + 12 >= 0) buffer32->line[line][out_x + 12] = buffer32->line[line][out_x + 13] = + buffer32->line[line][out_x + 12] = buffer32->line[line][out_x + 13] = buffer32->line[line][out_x + 14] = buffer32->line[line][out_x + 15] = vid->array[(dat & vid->array[1] & 0x0f) + 16] + 16; + } else if (out_x > -16) { + for (c = -out_x; c < 16; c++) { + buffer32->line[line][out_x + c] = + vid->array[((dat >> 12 - (c >> 2) * 4) & vid->array[1] & 0x0f) + 16] + 16; + } } } } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ @@ -488,14 +517,17 @@ vid_render(tandy_t *dev, int line, int hos_offs) dat = (vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 3) * 0x2000) + 1]; vid->memaddr++; - for (c = 0; c < 8; c++) { - chr = (dat >> 6) & 2; - chr |= ((dat >> 15) & 1); - out_x = (x << 3) + hos_offs + c; - if (out_x >= 0 && line >= 0) - buffer32->line[line][out_x] = + out_x = (x << 3) + hos_offs; + if (out_x > -8) { + c_start = out_x < 0 ? -out_x : 0; + dat <<= c_start; + for (c = c_start; c < 8; c++) { + chr = (dat >> 6) & 2; + chr |= ((dat >> 15) & 1); + buffer32->line[line][out_x + c] = vid->array[(chr & vid->array[1]) + 16] + 16; - dat <<= 1; + dat <<= 1; + } } } } else if (vid->mode & 1) { @@ -512,25 +544,20 @@ vid_render(tandy_t *dev, int line, int hos_offs) cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; } - if (line >= 0) { - if (vid->scanline & 8) for (c = 0; c < 8; c++) { - out_x = (x << 3) + c + hos_offs; - if (out_x >= 0) - buffer32->line[line][out_x] = - ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; - } else for (c = 0; c < 8; c++) { - out_x = (x << 3) + c + hos_offs; - if (out_x >= 0) { - if (vid->scanline == 8) - buffer32->line[line][out_x] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; - else - buffer32->line[line][out_x] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; - } + out_x = (x << 3) + hos_offs; + if (out_x > -8) { + c_start = out_x < 0 ? -out_x : 0; + if (vid->scanline & 8) for (c = c_start; c < 8; c++) { + buffer32->line[line][out_x + c] = + ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; + } else for (c = c_start; c < 8; c++) { + if (vid->scanline == 8) + buffer32->line[line][out_x + c] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; + else + buffer32->line[line][out_x + c] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; } - if (drawcursor) for (c = 0; c < 8; c++) { - out_x = (x << 3) + c + hos_offs; - if (out_x >= 0) - buffer32->line[line][out_x] ^= 15; + if (drawcursor) for (c = c_start; c < 8; c++) { + buffer32->line[line][out_x + c] ^= 15; } } vid->memaddr++; @@ -550,28 +577,29 @@ vid_render(tandy_t *dev, int line, int hos_offs) cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; } vid->memaddr++; - if (line >= 0) { - if (vid->scanline & 8) for (c = 0; c < 8; c++) { - out_x = (x << 4) + (c << 1) + hos_offs; - if (out_x >= 0) buffer32->line[line][out_x] = - buffer32->line[line][out_x + 1] = + out_x = (x << 4) + hos_offs; + if (out_x > -16) { + c_start = out_x < 0 ? -out_x >> 1 : 0; + if (vid->scanline & 8) for (c = c_start; c < 8; c++) { + buffer32->line[line][out_x + (c << 1)] = + buffer32->line[line][out_x + 1 + (c << 1)] = ((chr >= 0xb3) && (chr <= 0xdf)) ? cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0] : cols[0]; - } else for (c = 0; c < 8; c++) { - out_x = (x << 4) + (c << 1) + hos_offs; + } else for (c = c_start; c < 8; c++) { if (vid->scanline == 8) { - if (out_x >= 0) buffer32->line[line][out_x] = - buffer32->line[line][out_x + 1] = + buffer32->line[line][out_x + (c << 1)] = + buffer32->line[line][out_x + 1 + (c << 1)] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; } else { - if (out_x >= 0) buffer32->line[line][out_x] = - buffer32->line[line][out_x + 1] = + buffer32->line[line][out_x + (c << 1)] = + buffer32->line[line][out_x + 1 + (c << 1)] = cols[(fontdat[chr][vid->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0]; } } - if (drawcursor) for (c = 0; c < 16; c++) { - out_x = (x << 4) + c + hos_offs; - if (out_x >= 0) - buffer32->line[line][out_x] ^= 15; + if (drawcursor) { + c_start = out_x < 0 ? -out_x : 0; + for (c = c_start; c < 16; c++) { + buffer32->line[line][out_x + c] ^= 15; + } } } } @@ -599,11 +627,15 @@ vid_render(tandy_t *dev, int line, int hos_offs) dat = (vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; - for (c = 0; c < 8; c++) { - out_x = (x << 4) + (c << 1) + hos_offs; - if (out_x >= 0 && line >= 0) buffer32->line[line][out_x] = - buffer32->line[line][out_x + 1] = cols[dat >> 14]; - dat <<= 2; + out_x = (x << 4) + hos_offs; + if (out_x > -16) { + c_start = out_x < 0 ? -out_x >> 1 : 0; + dat <<= (c_start > 0 ? c_start << 1 : 0); + for (c = c_start; c < 8; c++) { + buffer32->line[line][out_x + (c << 1)] = + buffer32->line[line][out_x + 1 + (c << 1)] = cols[dat >> 14]; + dat <<= 2; + } } } } else { @@ -613,11 +645,14 @@ vid_render(tandy_t *dev, int line, int hos_offs) dat = (vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000)] << 8) | vid->vram[((vid->memaddr << 1) & 0x1fff) + ((vid->scanline & 1) * 0x2000) + 1]; vid->memaddr++; - for (c = 0; c < 16; c++) { - out_x = (x << 4) + c + hos_offs; - if (out_x >= 0 && line >= 0) - buffer32->line[line][out_x] = buffer32->line[(line) + 1][out_x] = cols[dat >> 15]; - dat <<= 1; + out_x = (x << 4) + hos_offs; + if (out_x > -16) { + c_start = out_x < 0 ? -out_x : 0; + dat <<= (c_start > 0 ? c_start : 0); + for (c = c_start; c < 16; c++) { + buffer32->line[line][out_x + c] = buffer32->line[(line) + 1][out_x + c] = cols[dat >> 15]; + dat <<= 1; + } } } } @@ -628,20 +663,21 @@ vid_render_blank(tandy_t *dev, int line) { t1kvid_t *vid = dev->vid; - if (line >= 0) { - if (vid->array[3] & 4) { - if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); - else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); - } else { - int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; + if (line < 0) + return; - if (vid->mode & 1) - hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, cols); - else - hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, cols); - } + if (vid->array[3] & 4) { + if (vid->mode & 1) + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); + else + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); + } else { + int cols = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; + + if (vid->mode & 1) + hline(buffer32, 0, line, (vid->crtc[1] << 3) + 16, cols); + else + hline(buffer32, 0, line, (vid->crtc[1] << 4) + 16, cols); } } @@ -651,17 +687,18 @@ vid_render_process(tandy_t *dev, int line) t1kvid_t *vid = dev->vid; int x; + if (line < 0) + return; + if (vid->mode & 1) x = (vid->crtc[1] << 3) + 16; else x = (vid->crtc[1] << 4) + 16; - if (line >= 0) { - if (!dev->is_sl2 && vid->composite) - Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); - else - video_process_8(x, line); - } + if (!dev->is_sl2 && vid->composite) + Composite_Process(vid->mode, 0, x >> 2, buffer32->line[line]); + else + video_process_8(x, line); } static void From c29c08bc20e61036b77fedf541b76b7b67dde816 Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 24 Oct 2025 06:20:42 +0200 Subject: [PATCH 179/233] ABit AB-LX6: Fix BIOS casing for the default BIOS, fixes it on Linux. [skip ci] --- src/machine/m_at_slot1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 02631169e..d42dee6a9 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -173,7 +173,7 @@ static const device_config_t lx6_config[] = { .files_no = 1, .local = 0, .size = 131072, - .files = { "roms/machines/lx6/LX6C_LY.BIN", "" } + .files = { "roms/machines/lx6/LX6C_LY.bin", "" } }, { .name = "Award Modular BIOS v4.51PG - Revision PZ (Beta)", From 3ea6706149b715a1a51fcadc3afb86a3fd66fa0b Mon Sep 17 00:00:00 2001 From: GetDizzy Date: Fri, 24 Oct 2025 08:08:13 -0400 Subject: [PATCH 180/233] Remove MACHINE_ACPI from machines tested to not have ACPI [skip ci] The following machines had MACHINE_ACPI removed: Socket 7: * HP Vectra VL 5/xxx Series 4 (Chimay) * PCChips M560 * Compaq Presario 224x * Compaq Presario 45xx * ASUS TX97 * Intel YM430TX (Yamamoto) * Micronics Thunderbolt * Soltek SL-56A5 * ASUS SP97-XV * BCM SQ-578 * MSI MS-5172 * FIC VA-502 * FIC PA-2012 * PCPartner VIA809DS Super Socket 7: * DFI K6BV3+ (rev A+) * PCChips M579 Slot 1: * ABIT AB-LX6 * Dell OptiPlex GXa * Micronics Spitfire * Supermicro P6SBA Machines where the ACPI status is unknown have been left alone. --- src/machine/machine_table.c | 42 ++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 950705def..8d95087f5 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13442,7 +13442,7 @@ const machine_t machines[] = { .max_multi = 2.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 131072, @@ -14436,7 +14436,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 786432, @@ -15069,7 +15069,7 @@ const machine_t machines[] = { .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, .ram = { .min = 16384, .max = 49152, @@ -15114,7 +15114,7 @@ const machine_t machines[] = { .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI, + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, .ram = { .min = 16384, .max = 49152, @@ -15656,7 +15656,7 @@ const machine_t machines[] = { .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 262144, @@ -15799,7 +15799,7 @@ const machine_t machines[] = { .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */ .ram = { .min = 8192, .max = 262144, @@ -15844,7 +15844,7 @@ const machine_t machines[] = { .max_multi = 3.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 4096, .max = 262144, @@ -15895,7 +15895,7 @@ const machine_t machines[] = { }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, /* Machine has internal sound: Yamaha YMF701-S */ - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB, .ram = { .min = 8192, .max = 262144, @@ -16029,7 +16029,7 @@ const machine_t machines[] = { .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 4096, .max = 262144, @@ -16297,7 +16297,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 1572864, @@ -16341,7 +16341,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 1572864, @@ -16387,7 +16387,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 786432, @@ -16434,7 +16434,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 524288, @@ -16481,7 +16481,7 @@ const machine_t machines[] = { .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 1048576, @@ -16526,7 +16526,7 @@ const machine_t machines[] = { .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 1048576, @@ -16750,7 +16750,7 @@ const machine_t machines[] = { .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */ + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */ .ram = { .min = 8192, .max = 1572864, @@ -16888,7 +16888,7 @@ const machine_t machines[] = { .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 16384, .max = 786432, @@ -17835,7 +17835,7 @@ const machine_t machines[] = { .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 1048576, @@ -17880,7 +17880,7 @@ const machine_t machines[] = { .max_multi = 5.0 }, .bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Video: ATi 3D Rage Pro, Network: 3Com 3C905, Sound: Crystal CS4236B */ + .flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_USB, /* Video: ATi 3D Rage Pro, Network: 3Com 3C905, Sound: Crystal CS4236B */ .ram = { .min = 8192, .max = 786432, @@ -17925,7 +17925,7 @@ const machine_t machines[] = { .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: Yamaha YMF701 */ + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal sound: Yamaha YMF701 */ .ram = { .min = 8192, .max = 1048576, @@ -18422,7 +18422,7 @@ const machine_t machines[] = { .max_multi = 8.0 }, .bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB, - .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, + .flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, .ram = { .min = 8192, .max = 786432, From f45cf3914d1445be207a9b32c7c05d48e7bf9573 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Fri, 24 Oct 2025 12:24:47 -0300 Subject: [PATCH 181/233] Fix AN430TX BIOS internal names [skip ci] --- src/machine/m_at_socket7.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 15e0316f2..1bd491c6f 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -1480,7 +1480,7 @@ static const device_config_t an430tx_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "pb79x", + .default_string = "an430tx", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -1488,7 +1488,7 @@ static const device_config_t an430tx_config[] = { .bios = { { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P02-0011 (Sony Vaio PCV-130/150)", - .internal_name = "vaio150", + .internal_name = "pcv150", .bios_type = BIOS_NORMAL, .files_no = 5, .local = 0, @@ -1499,7 +1499,7 @@ static const device_config_t an430tx_config[] = { }, { .name = "PhoenixBIOS 4.0 Release 6.0 - Revision P09-0006 (Packard Bell PB79x)", - .internal_name = "pb79x", + .internal_name = "an430tx", .bios_type = BIOS_NORMAL, .files_no = 5, .local = 0, From 968c6edac0b17b46770ae419a9afcdfa8c246e8f Mon Sep 17 00:00:00 2001 From: richardg867 Date: Fri, 24 Oct 2025 12:40:25 -0300 Subject: [PATCH 182/233] Fix Multitech BIOS internal names [skip ci] --- src/machine/m_xt.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 56ba5f843..baff87d4c 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -1214,7 +1214,7 @@ static const device_config_t pc500_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "pc500_330", + .default_string = "pc500", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -1222,7 +1222,7 @@ static const device_config_t pc500_config[] = { .bios = { { .name = "3.30", - .internal_name = "pc500_330", + .internal_name = "pc500", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -1326,7 +1326,7 @@ static const device_config_t pc500plus_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "pc500plus_404", + .default_string = "pc500plus", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -1342,7 +1342,7 @@ static const device_config_t pc500plus_config[] = { }, { .name = "4.04", - .internal_name = "pc500plus_404", + .internal_name = "pc500plus", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -1445,14 +1445,14 @@ static const device_config_t pc700_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "pc700_330", + .default_string = "pc700", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, .bios = { { .name = "3.30", - .internal_name = "pc700_330", + .internal_name = "pc700", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From 385f501e17384ad61f3cbd4ba49dce7023e7ee72 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Fri, 24 Oct 2025 12:44:05 -0300 Subject: [PATCH 183/233] Revert Multitech PC-500 internal name change [skip ci] The machine was already added as such, so avoid NVR resets. --- src/machine/m_xt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index baff87d4c..cab2ccae3 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -1214,7 +1214,7 @@ static const device_config_t pc500_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "pc500", + .default_string = "pc500_330", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -1222,7 +1222,7 @@ static const device_config_t pc500_config[] = { .bios = { { .name = "3.30", - .internal_name = "pc500", + .internal_name = "pc500_330", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From 5f4f18ca8f14c81f3e3f6226e841aaac56e80ce2 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Fri, 24 Oct 2025 12:45:42 -0300 Subject: [PATCH 184/233] Fix Packard Bell Tacoma BIOS internal name [skip ci] --- src/machine/m_at_slot1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index d42dee6a9..bf9a5af22 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -766,7 +766,7 @@ static const device_config_t ms6119_config[] = { .bios = { { .name = "AMIBIOS 6 (071595) - Revision 1.72 (Packard Bell Tacoma with logo)", - .internal_name = "tacoma_logo", + .internal_name = "tacoma_172", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From d26ec73d0dd68755b0bf348f620ade9af24deaf0 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Fri, 24 Oct 2025 21:32:14 +0200 Subject: [PATCH 185/233] Add proper clock generators to the V7 cards. 1. Add a variant of the ICS1494 clock generator specifically for the Radius HT209 card. 2. Add the ICD2047 clock generator to the HT216-32 card. 3. Add the previously missing 7.00 BIOS revision of the VGA 1024i HT208 card. --- src/include/86box/vid_svga.h | 11 ++ src/video/CMakeLists.txt | 3 + src/video/clockgen/vid_clockgen_icd2047.c | 131 ++++++++++++++++ src/video/clockgen/vid_clockgen_ics1494.c | 157 ++++++++++++++++++++ src/video/clockgen/vid_clockgen_ics90c64a.c | 135 +++++++++++++++++ src/video/vid_ht216.c | 122 ++++++++++----- 6 files changed, 520 insertions(+), 39 deletions(-) create mode 100644 src/video/clockgen/vid_clockgen_icd2047.c create mode 100644 src/video/clockgen/vid_clockgen_ics1494.c create mode 100644 src/video/clockgen/vid_clockgen_ics90c64a.c diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index e0ae5ed6f..814a986c3 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -449,6 +449,8 @@ extern void ibm_rgb528_hwcursor_draw(svga_t *svga, int displine); extern float ibm_rgb528_getclock(int clock, void *priv); extern void ibm_rgb528_ramdac_set_ref_clock(void *priv, svga_t *svga, float ref_clock); +extern float icd2047_getclock(int clock, void *priv); + extern void icd2061_write(void *priv, int val); extern float icd2061_getclock(int clock, void *priv); extern void icd2061_set_ref_clock(void *priv, float ref_clock); @@ -457,8 +459,13 @@ extern void icd2061_set_ref_clock(void *priv, float ref_clock); # define ics9161_write icd2061_write # define ics9161_getclock icd2061_getclock +extern float ics1494_getclock(int clock, void *priv); + extern float ics2494_getclock(int clock, void *priv); +extern float ics90c64a_vclk_getclock(int clock, void *priv); +extern float ics90c64a_mclk_getclock(int clock, void *priv); + extern void ics2595_write(void *priv, int strobe, int dat); extern double ics2595_getclock(void *priv); extern void ics2595_setclock(void *priv, double clock); @@ -507,6 +514,8 @@ extern const device_t att20c505_ramdac_device; extern const device_t bt485a_ramdac_device; extern const device_t gendac_ramdac_device; extern const device_t ibm_rgb528_ramdac_device; +extern const device_t ics1494m_540_device; +extern const device_t ics1494m_540_radius_ht209_device; extern const device_t ics2494an_305_device; extern const device_t ics2494an_324_device; extern const device_t ati18810_28800_device; @@ -516,7 +525,9 @@ extern const device_t ati18810_mach32_device; extern const device_t ati18811_0_mach32_device; extern const device_t ati18811_1_mach32_device; extern const device_t ics2595_device; +extern const device_t icd2047_20_device; extern const device_t icd2061_device; +extern const device_t ics90c64a_903_device; extern const device_t ics9161_device; extern const device_t sc11483_ramdac_device; extern const device_t sc11487_ramdac_device; diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt index 98a9cb385..201ef4a40 100644 --- a/src/video/CMakeLists.txt +++ b/src/video/CMakeLists.txt @@ -38,9 +38,12 @@ add_library(vid OBJECT # Clock generator chips clockgen/vid_clockgen_av9194.c + clockgen/vid_clockgen_icd2047.c clockgen/vid_clockgen_icd2061.c + clockgen/vid_clockgen_ics1494.c clockgen/vid_clockgen_ics2494.c clockgen/vid_clockgen_ics2595.c + clockgen/vid_clockgen_ics90c64a.c # DDC / monitor identification stuff vid_ddc.c diff --git a/src/video/clockgen/vid_clockgen_icd2047.c b/src/video/clockgen/vid_clockgen_icd2047.c new file mode 100644 index 000000000..cc2e003bf --- /dev/null +++ b/src/video/clockgen/vid_clockgen_icd2047.c @@ -0,0 +1,131 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * ICD2047 clock generator emulation. + * + * Used by the V7 chips. + * + * Authors: TheCollector1995. + * + * Copyright 2025 TheCollector1995. + */ +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> + +typedef struct icd2047_t { + float freq[32]; +} icd2047_t; + +#ifdef ENABLE_ICD2047_LOG +int icd2047_do_log = ENABLE_ICD2047_LOG; + +static void +icd2047_log(const char *fmt, ...) +{ + va_list ap; + + if (icd2047_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define icd2047_log(fmt, ...) +#endif + +float +icd2047_getclock(int clock, void *priv) +{ + const icd2047_t *icd2047 = (icd2047_t *) priv; + + if (clock > 31) + clock = 31; + + return icd2047->freq[clock]; +} + +static void * +icd2047_init(const device_t *info) +{ + icd2047_t *icd2047 = (icd2047_t *) malloc(sizeof(icd2047_t)); + memset(icd2047, 0, sizeof(icd2047_t)); + + switch (info->local) { + case 20: + /* ICD2047-20 for Headland series */ + icd2047->freq[0x00] = 25175000.0; + icd2047->freq[0x01] = 28322000.0; + icd2047->freq[0x02] = 40000000.0; + icd2047->freq[0x03] = 32500000.0; + icd2047->freq[0x04] = 50350000.0; + icd2047->freq[0x05] = 65000000.0; + icd2047->freq[0x06] = 38000000.0; + icd2047->freq[0x07] = 44900000.0; + icd2047->freq[0x08] = 25175000.0; + icd2047->freq[0x09] = 28322000.0; + icd2047->freq[0x0a] = 80000000.0; + icd2047->freq[0x0b] = 32500000.0; + icd2047->freq[0x0c] = 50350000.0; + icd2047->freq[0x0d] = 65000000.0; + icd2047->freq[0x0e] = 76000000.0; + icd2047->freq[0x0f] = 44900000.0; + icd2047->freq[0x10] = 25175000.0; + icd2047->freq[0x11] = 44900000.0; + icd2047->freq[0x12] = 28322000.0; + icd2047->freq[0x13] = 38000000.0; + icd2047->freq[0x14] = 40000000.0; + icd2047->freq[0x15] = 46000000.0; + icd2047->freq[0x16] = 48000000.0; + icd2047->freq[0x17] = 60000000.0; + icd2047->freq[0x18] = 65000000.0; + icd2047->freq[0x19] = 72000000.0; + icd2047->freq[0x1a] = 74000000.0; + icd2047->freq[0x1b] = 76000000.0; + icd2047->freq[0x1c] = 78000000.0; + icd2047->freq[0x1d] = 80000000.0; + icd2047->freq[0x1e] = 100000000.0; + icd2047->freq[0x1f] = 110000000.0; + break; + + default: + break; + } + + return icd2047; +} + +static void +icd2047_close(void *priv) +{ + icd2047_t *icd2047 = (icd2047_t *) priv; + + if (icd2047) + free(icd2047); +} + +const device_t icd2047_20_device = { + .name = "ICD2047-20 Clock Generator", + .internal_name = "icd2047_20", + .flags = 0, + .local = 20, + .init = icd2047_init, + .close = icd2047_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/video/clockgen/vid_clockgen_ics1494.c b/src/video/clockgen/vid_clockgen_ics1494.c new file mode 100644 index 000000000..62af66bcd --- /dev/null +++ b/src/video/clockgen/vid_clockgen_ics1494.c @@ -0,0 +1,157 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * ICS1494 clock generator emulation. + * + * Used by the V7 and PVGA chips. + * + * Authors: TheCollector1995. + * + * Copyright 2025 TheCollector1995. + */ +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> + +typedef struct ics1494_t { + float freq[32]; +} ics1494_t; + +#ifdef ENABLE_ICS1494_LOG +int ics1494_do_log = ENABLE_ICS1494_LOG; + +static void +ics1494_log(const char *fmt, ...) +{ + va_list ap; + + if (ics1494_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define ics1494_log(fmt, ...) +#endif + +float +ics1494_getclock(int clock, void *priv) +{ + const ics1494_t *ics1494 = (ics1494_t *) priv; + + if (clock > 31) + clock = 31; + + return ics1494->freq[clock]; +} + +static void * +ics1494_init(const device_t *info) +{ + ics1494_t *ics1494 = (ics1494_t *) malloc(sizeof(ics1494_t)); + memset(ics1494, 0, sizeof(ics1494_t)); + + switch (info->local) { + case 540: + /* ICS1494(M)-540 for Radius series */ + ics1494->freq[0x00] = 57283000.0; + ics1494->freq[0x01] = 12273000.0; + ics1494->freq[0x02] = 14500000.0; + ics1494->freq[0x03] = 15667000.0; + ics1494->freq[0x04] = 112000000.0; + ics1494->freq[0x05] = 126000000.0; + ics1494->freq[0x06] = 30240000.0; + ics1494->freq[0x07] = 91200000.0; + ics1494->freq[0x08] = 120000000.0; + ics1494->freq[0x09] = 48000000.0; + ics1494->freq[0x0a] = 50675000.0; + ics1494->freq[0x0b] = 55300000.0; + ics1494->freq[0x0c] = 64000000.0; + ics1494->freq[0x0d] = 68750000.0; + ics1494->freq[0x0e] = 88500000.0; + ics1494->freq[0x0f] = 51270000.0; + ics1494->freq[0x10] = 100000000.0; + ics1494->freq[0x11] = 95200000.0; + ics1494->freq[0x12] = 55000000.0; + ics1494->freq[0x13] = 60000000.0; + ics1494->freq[0x14] = 63000000.0; + ics1494->freq[0x15] = 99522000.0; + ics1494->freq[0x16] = 130000000.0; + ics1494->freq[0x17] = 80000000.0; + ics1494->freq[0x18] = 25175000.0; + ics1494->freq[0x19] = 28322000.0; + ics1494->freq[0x1a] = 48000000.0; + ics1494->freq[0x1b] = 76800000.0; + ics1494->freq[0x1c] = 38400000.0; + ics1494->freq[0x1d] = 43200000.0; + ics1494->freq[0x1e] = 61440000.0; + ics1494->freq[0x1f] = 0.0; + break; + + case 541: + /* ICS1494(M)-540 for Radius HT209 */ + ics1494->freq[0x00] = 25175000.0; + ics1494->freq[0x01] = 28322000.0; + ics1494->freq[0x02] = 61440000.0; /*FCLK*/ + ics1494->freq[0x03] = 74000000.0; /*XRESM*/ + ics1494->freq[0x04] = 50350000.0; + ics1494->freq[0x05] = 65000000.0; + ics1494->freq[0x06] = 37575000.0; /*FCLK*/ + ics1494->freq[0x07] = 40000000.0; + break; + + default: + break; + } + + return ics1494; +} + +static void +ics1494_close(void *priv) +{ + ics1494_t *ics1494 = (ics1494_t *) priv; + + if (ics1494) + free(ics1494); +} + +const device_t ics1494m_540_device = { + .name = "ICS2494M-540 Clock Generator", + .internal_name = "ics1494m_540", + .flags = 0, + .local = 540, + .init = ics1494_init, + .close = ics1494_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t ics1494m_540_radius_ht209_device = { + .name = "ICS2494M-540 (Radius HT209) Clock Generator", + .internal_name = "ics1494m_540_radius_ht209", + .flags = 0, + .local = 541, + .init = ics1494_init, + .close = ics1494_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/video/clockgen/vid_clockgen_ics90c64a.c b/src/video/clockgen/vid_clockgen_ics90c64a.c new file mode 100644 index 000000000..fd97201ce --- /dev/null +++ b/src/video/clockgen/vid_clockgen_ics90c64a.c @@ -0,0 +1,135 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * ICS90C64A clock generator emulation. + * + * Used by the PVGA chips. + * + * Authors: TheCollector1995. + * + * Copyright 2025 TheCollector1995. + */ +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> + +typedef struct ics90c64a_t { + float freq[32]; +} ics90c64a_t; + +#ifdef ENABLE_ICS90C64A_LOG +int ics90c64a_do_log = ENABLE_ICS90C64A_LOG; + +static void +ics90c64a_log(const char *fmt, ...) +{ + va_list ap; + + if (ics90c64a_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define ics90c64a_log(fmt, ...) +#endif + +float +ics90c64a_vclk_getclock(int clock, void *priv) +{ + const ics90c64a_t *ics90c64a = (ics90c64a_t *) priv; + + if (clock > 15) + clock = 15; + + return ics90c64a->freq[clock]; +} + +float +ics90c64a_mclk_getclock(int clock, void *priv) +{ + const ics90c64a_t *ics90c64a = (ics90c64a_t *) priv; + + if (clock > 7) + clock = 7; + + return ics90c64a->freq[clock + 0x10]; +} + +static void * +ics90c64a_init(const device_t *info) +{ + ics90c64a_t *ics90c64a = (ics90c64a_t *) malloc(sizeof(ics90c64a_t)); + memset(ics90c64a, 0, sizeof(ics90c64a_t)); + + switch (info->local) { + case 903: + /* ICS90C64A-903 for PVGA chip series */ + ics90c64a->freq[0x0] = 30000000.0; + ics90c64a->freq[0x1] = 77250000.0; + ics90c64a->freq[0x2] = 0.0; + ics90c64a->freq[0x3] = 80000000.0; + ics90c64a->freq[0x4] = 31500000.0; + ics90c64a->freq[0x5] = 36000000.0; + ics90c64a->freq[0x6] = 75000000.0; + ics90c64a->freq[0x7] = 50000000.0; + ics90c64a->freq[0x8] = 40000000.0; + ics90c64a->freq[0x9] = 50000000.0; + ics90c64a->freq[0xa] = 32000000.0; + ics90c64a->freq[0xb] = 44900000.0; + ics90c64a->freq[0xc] = 25175000.0; + ics90c64a->freq[0xd] = 28322000.0; + ics90c64a->freq[0xe] = 65000000.0; + ics90c64a->freq[0xf] = 36000000.0; + + ics90c64a->freq[0x10] = 33000000.0; + ics90c64a->freq[0x11] = 49218000.0; + ics90c64a->freq[0x12] = 60000000.0; + ics90c64a->freq[0x13] = 30500000.0; + ics90c64a->freq[0x14] = 41612000.0; + ics90c64a->freq[0x15] = 37500000.0; + ics90c64a->freq[0x16] = 36000000.0; + ics90c64a->freq[0x17] = 44296000.0; + break; + + default: + break; + } + + return ics90c64a; +} + +static void +ics90c64a_close(void *priv) +{ + ics90c64a_t *ics90c64a = (ics90c64a_t *) priv; + + if (ics90c64a) + free(ics90c64a); +} + +const device_t ics90c64a_903_device = { + .name = "ICS90C64A-903 Clock Generator", + .internal_name = "ics90c64a_903", + .flags = 0, + .local = 903, + .init = ics90c64a_init, + .close = ics90c64a_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/video/vid_ht216.c b/src/video/vid_ht216.c index 005cc6dfa..128f85b36 100644 --- a/src/video/vid_ht216.c +++ b/src/video/vid_ht216.c @@ -49,6 +49,7 @@ typedef struct ht216_t { uint32_t vram_mask, linear_base; uint8_t adjust_cursor, monitor_type; + uint8_t clk_sel; int ext_reg_enable; int isabus; @@ -100,7 +101,8 @@ void ht216_out(uint16_t addr, uint8_t val, void *priv); uint8_t ht216_in(uint16_t addr, void *priv); #define BIOS_G2_GC205_PATH "roms/video/video7/BIOS.BIN" -#define BIOS_VIDEO7_VGA_1024I_PATH "roms/video/video7/Video Seven VGA 1024i - BIOS - v2.19 - 435-0062-05 - U17 - 27C256.BIN" +#define BIOS_VIDEO7_VGA_1024I_219_PATH "roms/video/video7/Video Seven VGA 1024i - BIOS - v2.19 - 435-0062-05 - U17 - 27C256.BIN" +#define BIOS_VIDEO7_VGA_1024I_700_PATH "roms/video/video7/Headland Video7 VGA 1024i v7.0 32x8 (IP) NMC27C256B@DIP28.BIN" #define BIOS_RADIUS_SVGA_MULTIVIEW_PATH "roms/video/video7/U18.BIN" #define BIOS_HT216_32_PATH "roms/video/video7/HT21632.BIN" @@ -132,6 +134,7 @@ dword_remap(svga_t *svga, uint32_t in_addr) { if (svga->packed_chain4) return in_addr; + return ((in_addr & 0xfffc) << 2) | ((in_addr & 0x30000) >> 14) | (in_addr & ~0x3ffff); } @@ -182,8 +185,8 @@ ht216_out(uint16_t addr, uint8_t val, void *priv) switch (addr) { case 0x3c2: /*Bit 17 of the display memory address, only active on odd/even modes, has no effect on graphics modes.*/ + ht216->clk_sel = (ht216->clk_sel & ~0x03) | ((val & 0x0c) >> 2); ht216->misc = val; - svga->miscout = val; ht216_log("HT216 misc val = %02x, mode = 0, chain4 = %x\n", val, svga->chain4); ht216_recalc_bank_regs(ht216, 0); ht216_remap(ht216); @@ -251,10 +254,11 @@ ht216_out(uint16_t addr, uint8_t val, void *priv) ht216->ht_regs[0xfc], ht216->ht_regs[0xfd], ht216->ht_regs[0xfe], ht216->ht_regs[0xff]); return; #endif - } else if (svga->seqaddr >= 0x80 && ht216->ext_reg_enable) { + } else if ((svga->seqaddr >= 0x80) && ht216->ext_reg_enable) { old = ht216->ht_regs[svga->seqaddr & 0xff]; ht216->ht_regs[svga->seqaddr & 0xff] = val; + ht216_log("SeqAddr=%02x, val=%02x.\n", svga->seqaddr & 0xff, val); switch (svga->seqaddr & 0xff) { case 0x83: svga->attraddr = val & 0x1f; @@ -291,7 +295,29 @@ ht216_out(uint16_t addr, uint8_t val, void *priv) break; case 0xa4: + if (ht216->id == 0x7861) + ht216->clk_sel = (val >> 2) & 0x0f; + else { + if (svga->getclock == ics1494_getclock) { + if (val & 0x10) + val &= ~0x10; + else if (!(val & 0x10)) + val |= 0x10; + } + ht216->clk_sel = (val >> 2) & 0x07; + } + svga->miscout = (svga->miscout & ~0x0c) | ((ht216->clk_sel & 0x03) << 2); + svga->fullchange = changeframecount; + svga_recalctimings(svga); + break; case 0xf8: + if (ht216->id != 0x7861) { + if ((val & 0x06) == 0x06) + ht216->clk_sel = (val >> 5) & 0x07; + } else { + if ((val & 0x05) == 0x05) + ht216->clk_sel = (val >> 4) & 0x0f; + } svga->fullchange = changeframecount; svga_recalctimings(svga); break; @@ -555,6 +581,7 @@ ht216_in(uint16_t addr, void *priv) case 0x3c9: if (ht216->id == 0x7152) return sc1148x_ramdac_in(addr, 0, svga->ramdac, svga); + return svga_in(addr, svga); case 0x3cb: @@ -562,9 +589,6 @@ ht216_in(uint16_t addr, void *priv) return ht216->reg_3cb; break; - case 0x3cc: - return svga->miscout; - case 0x3D4: return svga->crtcreg; case 0x3D5: @@ -628,8 +652,7 @@ ht216_recalctimings(svga_t *svga) ht216_t *ht216 = (ht216_t *) svga->priv; ibm8514_t *dev = (ibm8514_t *) svga->dev8514; mach_t *mach = (mach_t *) svga->ext8514; - int high_res_256 = 0; - + int high_res_256 = 0; if (ht216->id == 0x7861) { if (ht216->ht_regs[0xe0] & 0x20) { @@ -640,23 +663,8 @@ ht216_recalctimings(svga_t *svga) } } - switch ((((((svga->miscout >> 2) & 3) || ((ht216->ht_regs[0xa4] >> 2) & 3)) | ((ht216->ht_regs[0xa4] >> 2) & 4)) || ((ht216->ht_regs[0xf8] >> 5) & 0x0f)) | ((ht216->ht_regs[0xf8] << 1) & 8)) { - case 0: - case 1: - break; - case 4: - svga->clock = (cpuclock * (double) (1ULL << 32)) / 50350000.0; - break; - case 5: - svga->clock = (cpuclock * (double) (1ULL << 32)) / 65000000.0; - break; - case 7: - svga->clock = (cpuclock * (double) (1ULL << 32)) / 40000000.0; - break; - default: - svga->clock = (cpuclock * (double) (1ULL << 32)) / 36000000.0; - break; - } + svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(ht216->clk_sel, svga->clock_gen); + ht216_log("ClkSel V7=%02x, regf8=%02x, rega4=%02x, miscout=%x, vidclock=%02x.\n", ht216->clk_sel, ht216->ht_regs[0xf8], ht216->ht_regs[0xa4], (svga->miscout >> 2) & 0x03, svga->vidclock); svga->memaddr_latch |= ((ht216->ht_regs[0xf6] & 0x30) << 12); @@ -697,7 +705,6 @@ ht216_recalctimings(svga_t *svga) if (high_res_256) { svga->hdisp >>= 1; svga->dots_per_clock >>= 1; - svga->clock /= 2; ht216->adjust_cursor = 1; } svga->render = svga_render_8bpp_highres; @@ -705,7 +712,6 @@ ht216_recalctimings(svga_t *svga) if (high_res_256) { svga->hdisp >>= 1; svga->dots_per_clock >>= 1; - svga->clock /= 2; ht216->adjust_cursor = 1; svga->render = svga_render_8bpp_highres; } else { @@ -729,7 +735,6 @@ ht216_recalctimings(svga_t *svga) svga->rowoffset <<= 1; svga->hdisp >>= 1; svga->dots_per_clock >>= 1; - svga->clock /= 2; if ((svga->crtc[0x17] & 0x60) == 0x20) /*Would result in a garbled screen with trailing cursor glitches*/ svga->crtc[0x17] |= 0x40; svga->render = svga_render_15bpp_highres; @@ -1513,10 +1518,16 @@ ht216_init(const device_t *info, uint32_t mem_size, int has_rom) { ht216_t *ht216 = malloc(sizeof(ht216_t)); svga_t *svga; + const char *bios_ver = NULL; + const char *fn = NULL; memset(ht216, 0, sizeof(ht216_t)); svga = &ht216->svga; + ht216->id = info->local; + ht216->isabus = (info->flags & DEVICE_ISA) || (info->flags & DEVICE_ISA16); + ht216->mca = (info->flags & DEVICE_MCA); + if (info->flags & DEVICE_VLB) video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_v7vga_vlb); else if (info->flags & DEVICE_MCA) @@ -1535,7 +1546,9 @@ ht216_init(const device_t *info, uint32_t mem_size, int has_rom) rom_init(&ht216->bios_rom, BIOS_G2_GC205_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); break; case 2: - rom_init(&ht216->bios_rom, BIOS_VIDEO7_VGA_1024I_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + bios_ver = (char *) device_get_config_bios("bios_ver"); + fn = (char *) device_get_bios_file(info, bios_ver, 0); + rom_init(&ht216->bios_rom, fn, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); break; case 3: ht216->monitor_type = device_get_config_int("monitor_type"); @@ -1583,13 +1596,20 @@ ht216_init(const device_t *info, uint32_t mem_size, int has_rom) break; } + svga->bpp = 8; + svga->miscout = 1; svga->hwcursor.cur_ysize = 32; ht216->vram_mask = mem_size - 1; svga->decode_mask = mem_size - 1; - if (has_rom == 4) + if (ht216->id == 0x7152) { svga->ramdac = device_add(&sc11484_nors2_ramdac_device); - + svga->clock_gen = device_add(&ics1494m_540_radius_ht209_device); + svga->getclock = ics1494_getclock; + } else { + svga->clock_gen = device_add(&icd2047_20_device); + svga->getclock = icd2047_getclock; + } svga->read = ht216_read; svga->readw = NULL; svga->readl = NULL; @@ -1607,16 +1627,9 @@ ht216_init(const device_t *info, uint32_t mem_size, int has_rom) mem_mapping_set_p(&svga->mapping, ht216); mem_mapping_disable(&ht216->linear_mapping); - ht216->id = info->local; - ht216->isabus = (info->flags & DEVICE_ISA) || (info->flags & DEVICE_ISA16); - ht216->mca = (info->flags & DEVICE_MCA); - io_sethandler(0x03c0, 0x0020, ht216_in, NULL, NULL, ht216_out, NULL, NULL, ht216); io_sethandler(0x46e8, 0x0001, ht216_in, NULL, NULL, ht216_out, NULL, NULL, ht216); - svga->bpp = 8; - svga->miscout = 1; - if (ht216->id == 0x7861) ht216->ht_regs[0xb4] = 0x08; /*32-bit DRAM bus*/ @@ -1681,7 +1694,7 @@ g2_gc205_available(void) static int v7_vga_1024i_available(void) { - return rom_present(BIOS_VIDEO7_VGA_1024I_PATH); + return rom_present(BIOS_VIDEO7_VGA_1024I_219_PATH); } static int @@ -1724,6 +1737,37 @@ ht216_force_redraw(void *priv) // clang-format off static const device_config_t v7_vga_1024i_config[] = { + { + .name = "bios_ver", + .description = "BIOS Revision", + .type = CONFIG_BIOS, + .default_string = "v2_19", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "Version 2.19", + .internal_name = "v2_19", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { BIOS_VIDEO7_VGA_1024I_219_PATH, "" } + }, + { + .name = "Version 7.00", + .internal_name = "v7_00", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { BIOS_VIDEO7_VGA_1024I_700_PATH, "" } + }, + { .files_no = 0 } + } + }, { .name = "memory", .description = "Memory size", From 6a55ed037231744308ccd2df0924b90089d2071f Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 24 Oct 2025 00:12:50 -0400 Subject: [PATCH 186/233] Correct Thrustmaster Formula T1/T2 options [skip-ci] --- src/game/joystick_standard.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index fc0006b45..a1ed501b6 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -235,6 +235,26 @@ joystick_standard_read_axis_2axis(UNUSED(void *priv), int axis) } } +static int +joystick_standard_read_axis_2axis_t1t2wa(UNUSED(void *priv), int axis) +{ + uint8_t gp = 0; + + if (!JOYSTICK_PRESENT(gp, 0)) + return AXIS_NOT_PRESENT; + + switch (axis) { + case 0: + return joystick_state[gp][0].axis[0]; + case 2: + return joystick_state[gp][0].axis[1]; + case 1: + case 3: + default: + return 0; + } +} + #if 0 // For later use static int @@ -904,13 +924,13 @@ const joystick_t joystick_tm_formula_t1t2wa = { .close = joystick_standard_close, .read = joystick_standard_read_4button, .write = joystick_standard_write, - .read_axis = joystick_standard_read_axis_3axis, + .read_axis = joystick_standard_read_axis_2axis_t1t2wa, .a0_over = joystick_standard_a0_over, - .axis_count = 3, + .axis_count = 2, .button_count = 4, .pov_count = 0, .max_joysticks = 1, - .axis_names = { "Steering axis", "Accelerator axis", "Brake axis" }, + .axis_names = { "Steering axis", "Accelerator/Brake axis" }, .button_names = { "Shifter Up", "Shifter Down", "Top Console Switch", "Bottom Console Switch" }, .pov_names = { NULL } }; From 13ccf190171723c12cb1100ba5a0b9f51b5c8342 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 24 Oct 2025 21:42:52 -0400 Subject: [PATCH 187/233] Use Realtek OID for RTL8139C+ [skip-ci] --- src/network/net_rtl8139.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/network/net_rtl8139.c b/src/network/net_rtl8139.c index 5f2c85b03..9cc52417f 100644 --- a/src/network/net_rtl8139.c +++ b/src/network/net_rtl8139.c @@ -3257,14 +3257,9 @@ nic_init(const device_t *info) eep_data[1] = 0x10EC; eep_data[2] = 0x8139; - /* XXX: Get proper MAC addresses from real EEPROM dumps. OID taken from net_ne2000.c */ -#ifdef USE_REALTEK_OID + /* XXX: Get proper MAC addresses from real EEPROM dumps. OID is generic Realtek */ eep_data[7] = 0xe000; eep_data[8] = 0x124c; -#else - eep_data[7] = 0x1400; - eep_data[8] = 0x122a; -#endif eep_data[9] = 0x1413; mac_bytes = (uint8_t *) &(eep_data[7]); From 5b2951187b54e3cc648a8c3be23da06150d7cb4e Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 12:42:45 -0300 Subject: [PATCH 188/233] Add config migration for goldstar CD-ROM drive [skip ci] --- src/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.c b/src/config.c index 590ba8119..4a0556de9 100644 --- a/src/config.c +++ b/src/config.c @@ -1501,7 +1501,7 @@ load_floppy_and_cdrom_drives(void) sprintf(temp, "cdrom_%02i_type", c + 1); p = ini_section_get_string(cat, temp, cdrom[c].bus_type == CDROM_BUS_MKE ? "cr563" : "86cd"); /* TODO: Configuration migration, remove when no longer needed. */ - int cdrom_type = cdrom_get_from_internal_name(p); + int cdrom_type = cdrom_get_from_internal_name(!strcmp(p, "goldstar") ? "goldstar_r560b" : p); if (cdrom_type == -1) { cdrom_type = cdrom_get_from_name(p); if (cdrom_type == -1) From 526d4db0767a189fbcddc87d0ae13aef1b9f120b Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 12:44:40 -0300 Subject: [PATCH 189/233] Fix DTK BIOS internal name [skip ci] --- src/machine/m_xt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index cab2ccae3..5969f25c9 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -902,7 +902,7 @@ static const device_config_t dtk_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "dtk_242", + .default_string = "dtk", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -919,7 +919,7 @@ static const device_config_t dtk_config[] = { }, { .name = "2.42", - .internal_name = "dtk_242", + .internal_name = "dtk", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From 8f94c6452c624f32fe991356af5ca67c9c2c8993 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 13:31:15 -0300 Subject: [PATCH 190/233] Fix Dataexpert 386WB AMI BIOS internal name [skip ci] --- src/machine/m_at_386dx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/m_at_386dx.c b/src/machine/m_at_386dx.c index 3070c19c1..cd24b9161 100644 --- a/src/machine/m_at_386dx.c +++ b/src/machine/m_at_386dx.c @@ -346,7 +346,7 @@ static const device_config_t dataexpert386wb_config[] = { .bios = { { .name = "AMIBIOS 050591", - .internal_name = "ami386wb", + .internal_name = "dataexpert386wb_ami", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -370,7 +370,7 @@ static const device_config_t dataexpert386wb_config[] = { }; const device_t dataexpert386wb_device = { - .name = "DataExpert 386WB", + .name = "DataExpert 386C", .internal_name = "dataexpert386wb_device", .flags = 0, .local = 0, From 204888c854029bac5a886b2d05919c8851582bef Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 13:36:20 -0300 Subject: [PATCH 191/233] Fix P5MP3 beta BIOS internal name [skip ci] --- src/machine/m_at_socket4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index 1d77d99a4..991ff9cab 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -181,7 +181,7 @@ static const device_config_t p5mp3_config[] = { }, { .name = "Award Modular BIOS v4.51G - Revision 0402 (Beta)", - .internal_name = "p5mp3_beta", + .internal_name = "p5mp3_0402", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From e637e83d22044dc8fe5d8b7de866cd1a9c29b431 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 14:01:13 -0300 Subject: [PATCH 192/233] Fix Multitech PC-900 BIOS internal name [skip ci] --- src/machine/m_at_286.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/m_at_286.c b/src/machine/m_at_286.c index 357a0f872..499f0653a 100644 --- a/src/machine/m_at_286.c +++ b/src/machine/m_at_286.c @@ -345,14 +345,14 @@ static const device_config_t pc900_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "pc900_v207a", + .default_string = "pc900", .default_int = 0, .file_filter = "", .spinner = { 0 }, .bios = { { .name = "BIOS V2.07A", - .internal_name = "pc900_v207a", + .internal_name = "pc900", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From aa9101418a8ac11f5e75e91c35ac2ab7a745f1f4 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 14:28:27 -0300 Subject: [PATCH 193/233] Naming fixes to the HP Vectra Series 2 [skip ci] --- src/include/86box/machine.h | 4 +-- src/machine/m_at_socket7_3v.c | 46 +++++++++++++++++------------------ src/machine/machine_table.c | 6 ++--- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 8cc928f91..bfbfe0018 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -971,9 +971,9 @@ extern const device_t p54tp4xe_device; extern int machine_at_p54tp4xe_init(const machine_t *); extern int machine_at_exp8551_init(const machine_t *); #ifdef EMU_DEVICE_H -extern const device_t hpvectravexxx_device; +extern const device_t vectra52_device; #endif -extern int machine_at_hpvectravexxx_init(const machine_t *); +extern int machine_at_vectra52_init(const machine_t *); extern int machine_at_vectra500mt_init(const machine_t *); extern int machine_at_vectra54_init(const machine_t *); #ifdef EMU_DEVICE_H diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 264a220fc..07faa9f9f 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -158,38 +158,38 @@ machine_at_exp8551_init(const machine_t *model) } static void -machine_at_hpvectravexxx_gpio_init(void) +machine_at_vectra52_gpio_init(void) { uint32_t gpio = 0x40; - if (cpu_busspeed <= 40000000) - gpio |= 0x30; - else if ((cpu_busspeed > 40000000) && (cpu_busspeed <= 50000000)) + if (cpu_busspeed <= 40000000) + gpio |= 0x30; + else if ((cpu_busspeed > 40000000) && (cpu_busspeed <= 50000000)) gpio |= 0x00; - else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000)) - gpio |= 0x20; - else if (cpu_busspeed > 60000000) + else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000)) + gpio |= 0x20; + else if (cpu_busspeed > 60000000) gpio |= 0x10; - if (cpu_dmulti <= 1.5) + if (cpu_dmulti <= 1.5) gpio |= 0x82; - else if ((cpu_dmulti > 1.5) && (cpu_dmulti <= 2.0)) + else if ((cpu_dmulti > 1.5) && (cpu_dmulti <= 2.0)) gpio |= 0x02; - else if ((cpu_dmulti > 2.0) && (cpu_dmulti <= 2.5)) + else if ((cpu_dmulti > 2.0) && (cpu_dmulti <= 2.5)) gpio |= 0x00; - else if (cpu_dmulti > 2.5) + else if (cpu_dmulti > 2.5) gpio |= 0x80; machine_set_gpio_default(gpio); } -static const device_config_t hpvectravexxx_config[] = { +static const device_config_t vectra52_config[] = { // clang-format off { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "gu_07_05", + .default_string = "vectra52_0705", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -197,21 +197,21 @@ static const device_config_t hpvectravexxx_config[] = { .bios = { { .name = "GU.07.02 (01/25/96)", - .internal_name = "gu_07_02", + .internal_name = "vectra52_0702", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, .size = 131072, - .files = { "roms/machines/hpvectravexxx/d3653.bin", "" } + .files = { "roms/machines/vectra52/d3653.bin", "" } }, { .name = "GU.07.05 (08/06/96)", - .internal_name = "gu_07_05", + .internal_name = "vectra52_0705", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, .size = 131072, - .files = { "roms/machines/hpvectravexxx/GU0705US.FUL", "" } + .files = { "roms/machines/vectra52/GU0705US.FUL", "" } }, { .files_no = 0 } } @@ -220,9 +220,9 @@ static const device_config_t hpvectravexxx_config[] = { // clang-format on }; -const device_t hpvectravexxx_device = { - .name = "HP Vectra VE 5/XXX Series 2", - .internal_name = "hpvectravexxx_device", +const device_t vectra52_device = { + .name = "HP Vectra VE 5/xxx Series 2", + .internal_name = "vectra52", .flags = 0, .local = 0, .init = NULL, @@ -231,11 +231,11 @@ const device_t hpvectravexxx_device = { .available = NULL, .speed_changed = NULL, .force_redraw = NULL, - .config = hpvectravexxx_config + .config = vectra52_config }; int -machine_at_hpvectravexxx_init(const machine_t *model) +machine_at_vectra52_init(const machine_t *model) { int ret = 0; const char *fn; @@ -250,7 +250,7 @@ machine_at_hpvectravexxx_init(const machine_t *model) device_context_restore(); machine_at_common_init_ex(model, 2); - machine_at_hpvectravexxx_gpio_init(); + machine_at_vectra52_gpio_init(); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 8d95087f5..b8ced65cd 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13378,10 +13378,10 @@ const machine_t machines[] = { }, { .name = "[i430FX] HP Vectra VE 5/xxx Series 2", - .internal_name = "hpvectravexxx", + .internal_name = "vectra52", .type = MACHINE_TYPE_SOCKET7_3V, .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_hpvectravexxx_init, + .init = machine_at_vectra52_init, .p1_handler = machine_generic_p1_handler, .gpio_handler = NULL, .available_flag = MACHINE_AVAILABLE, @@ -13411,7 +13411,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = &hpvectravexxx_device, + .device = &vectra52_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From 9682b88cf2b2d19b0852485c0634f34d7ca95404 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 15:06:13 -0300 Subject: [PATCH 194/233] Fix typos in commented out PCjr code [skip ci] --- src/machine/m_pcjr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 77a0ee392..78f7ba710 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -832,8 +832,8 @@ static const device_config_t pcjr_config[] = { .bios = { { 0 } } }, { - .name = "ir_reciever", - .description = "Enable IR Reciever", + .name = "ir_receiver", + .description = "Enable IR Receiver", .type = CONFIG_BINARY, .default_string = NULL, .default_int = 0, @@ -883,7 +883,7 @@ machine_pcjr_init(UNUSED(const machine_t *model)) #endif pcjr->option_fdc = 0; #if 0 - pcjr->option_ir = device_get_config_int("ir_reciever"); + pcjr->option_ir = device_get_config_int("ir_receiver"); #else pcjr->option_ir = 0; #endif From 3fdf56513f32c543c01d6b6f1c73fc9ffe5e204a Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 16:15:38 -0300 Subject: [PATCH 195/233] Revert Rise R534F BIOS selector to the 5.1 internal names --- src/machine/m_at_386dx.c | 2 +- src/machine/m_at_socket7.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/machine/m_at_386dx.c b/src/machine/m_at_386dx.c index cd24b9161..3a90f801d 100644 --- a/src/machine/m_at_386dx.c +++ b/src/machine/m_at_386dx.c @@ -346,7 +346,7 @@ static const device_config_t dataexpert386wb_config[] = { .bios = { { .name = "AMIBIOS 050591", - .internal_name = "dataexpert386wb_ami", + .internal_name = "dataexpert386wb_050591", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 1bd491c6f..f37ea4fc2 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -1859,7 +1859,7 @@ static const device_config_t r534f_config[] = { .name = "bios", .description = "BIOS Version", .type = CONFIG_BIOS, - .default_string = "r534f", + .default_string = "r534f_1998", .default_int = 0, .file_filter = NULL, .spinner = { 0 }, @@ -1867,7 +1867,7 @@ static const device_config_t r534f_config[] = { .bios = { { .name = "Award Modular BIOS v4.51PG - Revision 06/12/1998", - .internal_name = "r534f", + .internal_name = "r534f_1998", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, @@ -1876,7 +1876,7 @@ static const device_config_t r534f_config[] = { }, { .name = "Award Modular BIOS v4.51PG - Revision 03/13/2000 (by Unicore Software)", - .internal_name = "r534f_unicore", + .internal_name = "r534f", .bios_type = BIOS_NORMAL, .files_no = 1, .local = 0, From d1f101f9ee03ac3ed7dfff13c4fd11abd2a2d153 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 16:56:15 -0300 Subject: [PATCH 196/233] Add fallback for unknown CONFIG_BIOS names --- src/device.c | 146 +++++++++--------------------------- src/include/86box/device.h | 2 +- src/machine/machine_table.c | 2 +- 3 files changed, 38 insertions(+), 112 deletions(-) diff --git a/src/device.c b/src/device.c index cd5adfee0..98d4794cf 100644 --- a/src/device.c +++ b/src/device.c @@ -396,143 +396,69 @@ device_available(const device_t *dev) return ret; } -uint8_t -device_get_bios_type(const device_t *dev, const char *internal_name) +static const device_config_bios_t * +device_get_bios(const device_t *dev, const char *internal_name) { if (dev != NULL) { const device_config_t *config = dev->config; - if (config != NULL) { - while (config->type != CONFIG_END) { - if (config->type == CONFIG_BIOS) { - const device_config_bios_t *bios = (const device_config_bios_t *) config->bios; - while ((bios != NULL) && - (bios->name != NULL) && - (bios->internal_name != NULL) && - (bios->files_no != 0)) { - if (!strcmp(internal_name, bios->internal_name)) - return bios->bios_type; - bios++; - } + while (config && (config->type != CONFIG_END)) { + if (config->type == CONFIG_BIOS) { + const device_config_bios_t *bios = (const device_config_bios_t *) config->bios; + + /* Go through the ROMs in the device configuration. */ + while ((bios != NULL) && + (bios->name != NULL) && + (bios->internal_name != NULL) && + (bios->files_no != 0)) { + if (!strcmp(internal_name, bios->internal_name)) + return bios; + bios++; } - config++; + + /* Unknown value, fall back to the default ROMs. */ + if (strcmp(internal_name, config->default_string)) + return device_get_bios(dev, config->default_string); } + config++; } } - return 0; + return NULL; +} + +uint8_t +device_get_bios_type(const device_t *dev, const char *internal_name) +{ + const device_config_bios_t *bios = device_get_bios(dev, internal_name); + return bios ? bios->bios_type : 0; } uint8_t device_get_bios_num_files(const device_t *dev, const char *internal_name) { - if (dev != NULL) { - const device_config_t *config = dev->config; - if (config != NULL) { - while (config->type != CONFIG_END) { - if (config->type == CONFIG_BIOS) { - const device_config_bios_t *bios = (const device_config_bios_t *) config->bios; - while ((bios != NULL) && - (bios->name != NULL) && - (bios->internal_name != NULL) && - (bios->files_no != 0)) { - if (!strcmp(internal_name, bios->internal_name)) - return bios->files_no; - bios++; - } - } - config++; - } - } - } - - return 0; + const device_config_bios_t *bios = device_get_bios(dev, internal_name); + return bios ? bios->files_no : 0; } uint32_t device_get_bios_local(const device_t *dev, const char *internal_name) { - if (dev != NULL) { - const device_config_t *config = dev->config; - if (config != NULL) { - while (config->type != CONFIG_END) { - if (config->type == CONFIG_BIOS) { - const device_config_bios_t *bios = (const device_config_bios_t *) config->bios; - while ((bios != NULL) && - (bios->name != NULL) && - (bios->internal_name != NULL) && - (bios->files_no != 0)) { - if (!strcmp(internal_name, bios->internal_name)) - return bios->local; - bios++; - } - } - config++; - } - } - } - - return 0; + const device_config_bios_t *bios = device_get_bios(dev, internal_name); + return bios ? bios->local : 0; } uint32_t device_get_bios_file_size(const device_t *dev, const char *internal_name) { - if (dev != NULL) { - const device_config_t *config = dev->config; - if (config != NULL) { - while (config->type != CONFIG_END) { - if (config->type == CONFIG_BIOS) { - const device_config_bios_t *bios = (const device_config_bios_t *) config->bios; - - /* Go through the ROM's in the device configuration. */ - while ((bios != NULL) && - (bios->name != NULL) && - (bios->internal_name != NULL) && - (bios->files_no != 0)) { - if (!strcmp(internal_name, bios->internal_name)) - return bios->size; - bios++; - } - } - config++; - } - } - } - - return 0; + const device_config_bios_t *bios = device_get_bios(dev, internal_name); + return bios ? bios->size : 0; } const char * -device_get_bios_file(const device_t *dev, const char *internal_name, int file_no) +device_get_bios_file(const device_t *dev, const char *internal_name, unsigned int file_no) { - if (dev != NULL) { - const device_config_t *config = dev->config; - if (config != NULL) { - while (config->type != CONFIG_END) { - if (config->type == CONFIG_BIOS) { - const device_config_bios_t *bios = (const device_config_bios_t *) config->bios; - - /* Go through the ROM's in the device configuration. */ - while ((bios != NULL) && - (bios->name != NULL) && - (bios->internal_name != NULL) && - (bios->files_no != 0)) { - if (!strcmp(internal_name, bios->internal_name)) { - if (file_no < bios->files_no) - return bios->files[file_no]; - else - return NULL; - } - bios++; - } - } - config++; - } - } - } - - /* A NULL device is never available. */ - return (NULL); + const device_config_bios_t *bios = device_get_bios(dev, internal_name); + return (bios && (file_no < bios->files_no)) ? bios->files[file_no] : NULL; } int diff --git a/src/include/86box/device.h b/src/include/86box/device.h index c3892d27c..b6e78f41c 100644 --- a/src/include/86box/device.h +++ b/src/include/86box/device.h @@ -213,7 +213,7 @@ extern uint8_t device_get_bios_type(const device_t *dev, const char *interna extern uint8_t device_get_bios_num_files(const device_t *dev, const char *internal_name); extern uint32_t device_get_bios_local(const device_t *dev, const char *internal_name); extern uint32_t device_get_bios_file_size(const device_t *dev, const char *internal_name); -extern const char *device_get_bios_file(const device_t *dev, const char *internal_name, int file_no); +extern const char *device_get_bios_file(const device_t *dev, const char *internal_name, unsigned int file_no); extern int device_is_valid(const device_t *, int mch); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index b8ced65cd..7628d29fa 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -20319,7 +20319,7 @@ machine_get_nvr_name_ex(int m) if (dev != NULL) { device_context(dev); - const char *bios = device_get_config_string("bios"); + const char *bios = device_get_config_bios("bios"); if ((bios != NULL) && (strcmp(bios, "") != 0)) ret = bios; device_context_restore(); From 4e124968de7f985d48850cac059e4e9a3e4c1c8e Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sat, 25 Oct 2025 23:16:57 +0200 Subject: [PATCH 197/233] Unbreak 800x600x32bpp Elsa Winner 1000 928VL mode. Fix its clock and as well as 640x480x32bpp OEM mode clock. --- src/video/vid_s3.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 74b57370e..e03ef71ba 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -4536,16 +4536,21 @@ s3_recalctimings(svga_t *svga) break; case SC1502X: /*SC15025 RAMDAC*/ if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + s3_log("32bpp 928 ISA VL SC1502X double=%02x, highres=%02x, dotperclock=%d, clksel=%d, pitch=%d, hdisp=%d, clock=%02x.\n", + svga->crtc[0x31] & 0x02, s3->accel.advfunc_cntl & 0x04, svga->dots_per_clock, clk_sel, s3->width, svga->hdisp, svga->crtc[0x67] >> 4); if (svga->crtc[0x31] & 0x02) { - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - if (svga->hdisp == 640) - s3->width = 1024; + if (svga->dots_per_clock == 16) { + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + svga->clock *= 2.0; + if (svga->hdisp == 640) + s3->width = 1024; + } } else { svga->hdisp >>= 2; svga->dots_per_clock >>= 2; if (svga->hdisp == 800) - s3->width = 1024; + svga->clock *= 2.0; } } break; From f5aea8d540bb98c3cab33998fdd2e74dd1c5fdac Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sat, 25 Oct 2025 23:26:47 +0200 Subject: [PATCH 198/233] Unbreak 800x600x32bpp Elsa Winner 1000 928VL mode. (#6403) Fix its clock and as well as 640x480x32bpp OEM mode clock. --- src/video/vid_s3.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 74b57370e..e03ef71ba 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -4536,16 +4536,21 @@ s3_recalctimings(svga_t *svga) break; case SC1502X: /*SC15025 RAMDAC*/ if (svga->getclock == icd2061_getclock) { /*ICD2061 clock chip*/ + s3_log("32bpp 928 ISA VL SC1502X double=%02x, highres=%02x, dotperclock=%d, clksel=%d, pitch=%d, hdisp=%d, clock=%02x.\n", + svga->crtc[0x31] & 0x02, s3->accel.advfunc_cntl & 0x04, svga->dots_per_clock, clk_sel, s3->width, svga->hdisp, svga->crtc[0x67] >> 4); if (svga->crtc[0x31] & 0x02) { - svga->hdisp >>= 1; - svga->dots_per_clock >>= 1; - if (svga->hdisp == 640) - s3->width = 1024; + if (svga->dots_per_clock == 16) { + svga->hdisp >>= 1; + svga->dots_per_clock >>= 1; + svga->clock *= 2.0; + if (svga->hdisp == 640) + s3->width = 1024; + } } else { svga->hdisp >>= 2; svga->dots_per_clock >>= 2; if (svga->hdisp == 800) - s3->width = 1024; + svga->clock *= 2.0; } } break; From 0a80ae2debdb61f381194ed5f17b5579d5510cc4 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 26 Oct 2025 01:56:53 +0200 Subject: [PATCH 199/233] T1/T2 with/without adpator name fixes and translations (also for the paddle controller). --- src/game/joystick_standard.c | 4 ++-- src/qt/languages/cs-CZ.po | 10 +++++----- src/qt/languages/de-DE.po | 10 +++++----- src/qt/languages/es-ES.po | 10 +++++----- src/qt/languages/fi-FI.po | 10 +++++----- src/qt/languages/fr-FR.po | 10 +++++----- src/qt/languages/hr-HR.po | 10 +++++----- src/qt/languages/it-IT.po | 10 +++++----- src/qt/languages/ja-JP.po | 10 +++++----- src/qt/languages/ko-KR.po | 10 +++++----- src/qt/languages/nb-NO.po | 10 +++++----- src/qt/languages/nl-NL.po | 10 +++++----- src/qt/languages/pl-PL.po | 8 ++++---- src/qt/languages/pt-BR.po | 10 +++++----- src/qt/languages/pt-PT.po | 10 +++++----- src/qt/languages/ru-RU.po | 4 ++-- src/qt/languages/sk-SK.po | 10 +++++----- src/qt/languages/sl-SI.po | 10 +++++----- src/qt/languages/sv-SE.po | 10 +++++----- src/qt/languages/tr-TR.po | 10 +++++----- src/qt/languages/uk-UA.po | 10 +++++----- src/qt/languages/vi-VN.po | 10 +++++----- src/qt/languages/zh-CN.po | 10 +++++----- src/qt/languages/zh-TW.po | 10 +++++----- 24 files changed, 113 insertions(+), 113 deletions(-) diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index a1ed501b6..c62611663 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -899,7 +899,7 @@ const joystick_t joystick_steering_wheel_4_button = { }; const joystick_t joystick_tm_formula_t1t2 = { - .name = "Thrustmaster Formula T1/T2 with Adaptor", + .name = "Thrustmaster Formula T1/T2 with adapter", .internal_name = "thrustmaster_formula_t1t2", .init = joystick_standard_init, .close = joystick_standard_close, @@ -918,7 +918,7 @@ const joystick_t joystick_tm_formula_t1t2 = { // TODO Validate this const joystick_t joystick_tm_formula_t1t2wa = { - .name = "Thrustmaster Formula T1/T2 without Adaptor", + .name = "Thrustmaster Formula T1/T2 without adapter", .internal_name = "thrustmaster_formula_t1t2wa", .init = joystick_standard_init, .close = joystick_standard_close, diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 38cd36487..339fdc112 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "NeplatnĂ© PCap zaÅ™Ă­zenĂ­" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "ObecnĂ½ ovladaÄ pĂ¡dla" msgid "2-axis, 1-button joystick(s)" msgstr "Joystick s 2 osami a 1 tlaÄĂ­tky" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 s adaptĂ©rem" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 bez adaptĂ©ru" msgid "None" msgstr "ŽadnĂ©" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 7463747a7..fef11a6f5 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "UngĂ¼ltiges PCap-Gerät" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Generischer Paddel-Controller(s)" msgid "2-axis, 1-button joystick(s)" msgstr "2-Achsen-, 1-Tasten-Joystick(s)" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 mit Adapter" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 ohne Adapter" msgid "None" msgstr "Ohne" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 3210dc713..6fc268772 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Controlador(es) de paleta genĂ©rico(s)" msgid "2-axis, 1-button joystick(s)" msgstr "Mando(s) de 2 ejes, 1 botones" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 con adaptador" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 sin adaptador" msgid "None" msgstr "Ninguno" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index ba494bb6e..db85cedb5 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Virheellinen PCap-laite" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Yleinen melainohjain" msgid "2-axis, 1-button joystick(s)" msgstr "2-akseliset 1-painikkeiset peliohjaimet" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 adapterilla" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 ilman adapteria" msgid "None" msgstr "Ei mikään" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index f62e55978..90cfcffda 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Dispositif PCap invalide" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "ContrĂ´leur(s) Ă  palette gĂ©nĂ©rique(s)" msgid "2-axis, 1-button joystick(s)" msgstr "Manette(s) avec 2 axes, 1 boutons" @@ -975,11 +975,11 @@ msgstr "Système de contrĂ´le de vol Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "SCV Thrustmaster + Système de commande de gouvernail" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 avec adaptateur" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 sans adaptateur" msgid "None" msgstr "Aucun" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 7f460914a..4b100612f 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Nevažeći PCap ureÄ‘aj" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "GeneriÄki kontroleri s lopaticama" msgid "2-axis, 1-button joystick(s)" msgstr "Palica za igru s 2 osi, 1 tipke" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 s adapterom" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 bez adaptera" msgid "None" msgstr "Bez" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index c8eb2e6e7..fcefaad62 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Dispositivo PCap non valido" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Controller generico/i a paletta" msgid "2-axis, 1-button joystick(s)" msgstr "Joystick a 2 assi, 1 pulsanti" @@ -975,11 +975,11 @@ msgstr "Sistema di controllo Thrustmaster Flight" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Sistema di controllo timone" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 con adattatore" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 senza adattatore" msgid "None" msgstr "Nessuno" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 8cc00a146..169e4e220 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "䏿­£ăªPCapăƒ‡ăƒă‚¤ă‚¹" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "æ±ç”¨ăƒ‘ăƒ‰ăƒ«ă‚³ăƒ³ăƒˆăƒ­ăƒ¼ăƒ©ăƒ¼" msgid "2-axis, 1-button joystick(s)" msgstr "ă‚¸ăƒ§ă‚¤ă‚¹ăƒ†ă‚£ăƒƒă‚¯(2軸ă€1ăƒœă‚¿ăƒ³)" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "ă‚¢ăƒ€ăƒ—ă‚¿ăƒ¼ä»˜ă Thrustmaster Formula T1/T2" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "ă‚¢ăƒ€ăƒ—ă‚¿ăƒ¼ăªă— Thrustmaster Formula T1/T2" msgid "None" msgstr "ăªă—" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 4c15c0cb0..9747390c6 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "PCap ́¥́¹˜ê°€ ́˜¬ë°”르́§€ ́•́µë‹ˆë‹¤" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "́¼ë°˜ 패들 ́»¨í¸ë¡¤ëŸ¬" msgid "2-axis, 1-button joystick(s)" msgstr "2́¶•, 1ë²„í¼ ́¡°́´́¤í‹±" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "́–´ëŒ‘í„° í¬í•¨ Thrustmaster Formula T1/T2" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "́–´ëŒ‘í„° 미í¬í•¨ Thrustmaster Formula T1/T2" msgid "None" msgstr "́—†́Œ" diff --git a/src/qt/languages/nb-NO.po b/src/qt/languages/nb-NO.po index b4c7cd57c..4cb843dd3 100644 --- a/src/qt/languages/nb-NO.po +++ b/src/qt/languages/nb-NO.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Ugyldig PCap-enhet" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Generisk padle-kontroller(e)" msgid "2-axis, 1-button joystick(s)" msgstr "2-akset, 1-knapps styrespak(er)" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Ror-kontrollsystem" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 med adapter" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 uten adapter" msgid "None" msgstr "Ingen" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 6710687a1..583331a64 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Ongeldig PCap-apparaat" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Generieke peddelcontroller(s)" msgid "2-axis, 1-button joystick(s)" msgstr "Joystick(s) met 2 assen en 1 knoppen" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control systeem" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Roer Control Systeem" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 met adapter" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 zonder adapter" msgid "None" msgstr "Geen" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 1efe0ec97..2383a1c1b 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 z Adaptorem" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 z adapterem" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 bez Adaptora" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 bez adaptera" msgid "None" msgstr "Å»aden" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 88fe48d00..f7f9dee2e 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Controlador(es) genĂ©rico(s) de pĂ¡" msgid "2-axis, 1-button joystick(s)" msgstr "Joystick(s) de 2 eixos, 1 botões" @@ -975,11 +975,11 @@ msgstr "Sistema de Controle de Voo Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "SCV Thrustmaster + Sistema de Controle de Leme" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 com adaptador" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 sem adaptador" msgid "None" msgstr "Nenhum" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index bfd52adfa..7f2e56d64 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Dispositivo PCap invĂ¡lido" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "COntrolador(es) genĂ©rico(s) tipo pĂ¡" msgid "2-axis, 1-button joystick(s)" msgstr "Joystick(s) de 2 eixos, 1 botões" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 com adaptador" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 sem adaptador" msgid "None" msgstr "Nenhum" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index b40d4073e..9ea4a6a0e 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -975,10 +975,10 @@ msgstr "Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»ĐµĐ½Đ¸Ñ Đ¿Đ¾Đ»Ñ‘Ñ‚Đ¾Đ¼ Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»ĐµĐ½Đ¸Ñ Ñ€ÑƒĐ»ĐµĐ¼" -msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" msgstr "Thrustmaster Formula T1/T2 Ñ Đ°Đ´Đ°Đ¿Ñ‚ĐµÑ€Đ¾Đ¼" -msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" msgstr "Thrustmaster Formula T1/T2 без Đ°Đ´Đ°Đ¿Ñ‚ĐµÑ€Đ°" msgid "None" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index f43059d58..f8d53d19c 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "NeplatnĂ© PCap zariadenie" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "GenerickĂ½ ovlĂ¡daÄ pĂ¡dla" msgid "2-axis, 1-button joystick(s)" msgstr "2-osovĂ½, 1-tlaÄidlovĂ½ joystick" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 s adaptĂ©rom" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 bez adaptĂ©ru" msgid "None" msgstr "Žiadne" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 2438c1aa3..fcd12d638 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Neveljavna naprava PCap" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "GeneriÄni krmilnik z lopatico" msgid "2-axis, 1-button joystick(s)" msgstr "Igralna palica z 2 osema, 1 gumboma" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 s pretvornikom" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 brez pretvornika" msgid "None" msgstr "Brez" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index 324fed452..ce701efbb 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Ogiltig PCap-enhet" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Generisk paddelkontroll(er)" msgid "2-axis, 1-button joystick(s)" msgstr "Styrspak med 2 axlar och 1 knappar" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 med adapter" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 utan adapter" msgid "None" msgstr "Ingen" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index cf15db39b..8dda1d362 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Geçersiz PCap cihazı" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Genel kĂ¼rek kontrol cihazları" msgid "2-axis, 1-button joystick(s)" msgstr "2 eksenli, 1 dĂ¼ÄŸmeli oyun kolları" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "AdaptörlĂ¼ Thrustmaster Formula T1/T2" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "AdaptörsĂ¼z Thrustmaster Formula T1/T2" msgid "None" msgstr "Hiçbiri" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index b155d0da0..1c6017b51 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "ĐĐµĐ²Ñ–Ñ€Đ½Đ¸Đ¹ Đ¿Ñ€Đ¸ÑÑ‚Ñ€Ñ–Đ¹ PCap" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Đ—Đ°Đ³Đ°Đ»ÑŒĐ½Đ¸Đ¹ ĐºĐ¾Đ½Ñ‚Ñ€Đ¾Đ»ĐµÑ€(и) Đ²ĐµÑла" msgid "2-axis, 1-button joystick(s)" msgstr "2-Đ¾ÑÑŒĐ¾Đ²Đ¸Đ¹, 1-ĐºĐ½Đ¾Đ¿ĐºĐ¾Đ²Đ¸Đ¹ Đ´Đ¶Đ¾Đ¹ÑÑ‚Đ¸Đº" @@ -975,11 +975,11 @@ msgstr "Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»Ñ–Đ½Đ½Ñ Đ¿Đ¾Đ»ÑŒĐ¾Ñ‚Đ¾Đ¼ Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Đ¡Đ¸ÑÑ‚ĐµĐ¼Đ° ÑƒĐ¿Ñ€Đ°Đ²Đ»Ñ–Đ½Đ½Ñ ĐºĐµÑ€Đ¼Đ¾Đ¼" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 Đ· Đ°Đ´Đ°Đ¿Ñ‚ĐµÑ€Đ¾Đ¼" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 без Đ°Đ´Đ°Đ¿Ñ‚ĐµÑ€Đ°" msgid "None" msgstr "ĐÑ–" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index acb904b04..7edddb94d 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "Thiết bị PCap khĂ´ng hợp quy" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "Bá»™ Ä‘iá»u khiển dạng mĂ¡i chèo thĂ´ng dụng" msgid "2-axis, 1-button joystick(s)" msgstr "Cần Ä‘iá»u khiển hai trục, má»™t nĂºt" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Hệ thống bĂ¡nh lĂ¡i" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 kèm bá»™ chuyển đổi" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 khĂ´ng kèm bá»™ chuyển đổi" msgid "None" msgstr "KhĂ´ng cĂ³" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index a53520c3f..58a98fc0c 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "无效 PCap 设备" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "é€ç”¨æ¡¨å¼æ§åˆ¶å™¨" msgid "2-axis, 1-button joystick(s)" msgstr "2 è½´, 1 é”®æ“纵æ†" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "带适é…器 Thrustmaster Formula T1/T2" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "ä¸å¸¦é€‚é…器 Thrustmaster Formula T1/T2" msgid "None" msgstr "æ— " diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 053dde129..69055e9f0 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -850,7 +850,7 @@ msgid "Invalid PCap device" msgstr "無效 PCap è£ç½®" msgid "Generic paddle controller(s)" -msgstr "" +msgstr "é€ç”¨æ§³å¼æ§åˆ¶å™¨" msgid "2-axis, 1-button joystick(s)" msgstr "2 軸, 1 鵿–æ¡¿" @@ -975,11 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 with Adaptor" +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "附轉æ¥å™¨ Thrustmaster Formula T1/T2" -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 without Adaptor" +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "ä¸é™„轉æ¥å™¨ Thrustmaster Formula T1/T2" msgid "None" msgstr "ç„¡" From 2042ef9257a037c63c4b62449e6bd8b5286aad81 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 26 Oct 2025 01:59:09 +0200 Subject: [PATCH 200/233] AD1848: Should be &&, not ||. --- src/sound/snd_ad1848.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index c25890c50..8f120b157 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -521,7 +521,7 @@ readonly_x: } if (ad1848->type == AD1848_TYPE_CS4231) /* I23 is reserved and read-only on CS4231 non-A */ goto readonly_i; - if ((ad1848->type >= AD1848_TYPE_CS4232) || (ad1848->type <= AD1848_TYPE_CS4236)) /* I23 bits 7-1 are read-only on CS4231A/4232/4236 non-B, Win2k relies on this for detection */ + if ((ad1848->type >= AD1848_TYPE_CS4232) && (ad1848->type <= AD1848_TYPE_CS4236)) /* I23 bits 7-1 are read-only on CS4231A/4232/4236 non-B, Win2k relies on this for detection */ val = (val & 0x01); break; From 1063ac86fd01522b1ccc77d97455d2aeef1130dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= <13226155+dhrdlicka@users.noreply.github.com> Date: Sun, 26 Oct 2025 01:59:50 +0200 Subject: [PATCH 201/233] Update Czech translation --- src/qt/languages/cs-CZ.po | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 339fdc112..dea5fb3ec 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -850,10 +850,10 @@ msgid "Invalid PCap device" msgstr "NeplatnĂ© PCap zaÅ™Ă­zenĂ­" msgid "Generic paddle controller(s)" -msgstr "ObecnĂ½ ovladaÄ pĂ¡dla" +msgstr "ObecnĂ½ otoÄnĂ½ ovladaÄ" msgid "2-axis, 1-button joystick(s)" -msgstr "Joystick s 2 osami a 1 tlaÄĂ­tky" +msgstr "Joystick s 2 osami a 1 tlaÄĂ­tkem" msgid "2-axis, 2-button joystick(s)" msgstr "Joystick s 2 osami a 2 tlaÄĂ­tky" @@ -880,19 +880,19 @@ msgid "3-axis, 4-button joystick" msgstr "Joystick s 3 osami a 4 tlaÄĂ­tky" msgid "4-axis, 2-button joystick" -msgstr "Joystick s 4 osami a 2 tlaÄĂ­tky" +msgstr "Joystick se 4 osami a 2 tlaÄĂ­tky" msgid "4-axis, 3-button joystick" -msgstr "Joystick s 4 osami a 3 tlaÄĂ­tky" +msgstr "Joystick se 4 osami a 3 tlaÄĂ­tky" msgid "4-axis, 4-button joystick" -msgstr "Joystick s 4 osami a 4 tlaÄĂ­tky" +msgstr "Joystick se 4 osami a 4 tlaÄĂ­tky" msgid "2-button gamepad(s)" -msgstr "OvladaÄ se 2 tlaÄĂ­tky" +msgstr "OvladaÄ s 2 tlaÄĂ­tky" msgid "3-button gamepad" -msgstr "OvladaÄ se 3 tlaÄĂ­tky" +msgstr "OvladaÄ s 3 tlaÄĂ­tky" msgid "4-button gamepad" msgstr "OvladaÄ se 4 tlaÄĂ­tky" @@ -904,10 +904,10 @@ msgid "Gravis PC GamePad" msgstr "Gravis PC GamePad" msgid "2-button flight yoke" -msgstr "LeteckĂ½ knipl se 2 tlaÄĂ­tky" +msgstr "LeteckĂ½ knipl s 2 tlaÄĂ­tky" msgid "3-button flight yoke" -msgstr "LeteckĂ½ knipl se32 tlaÄĂ­tky" +msgstr "LeteckĂ½ knipl s 3 tlaÄĂ­tky" msgid "4-button flight yoke" msgstr "LeteckĂ½ knipl se 4 tlaÄĂ­tky" @@ -919,7 +919,7 @@ msgid "3-button flight yoke with throttle" msgstr "LeteckĂ½ knipl s 3 tlaÄĂ­tky a pĂ¡kou" msgid "4-button flight yoke with throttle" -msgstr "LeteckĂ½ knipl s 4 tlaÄĂ­tky a pĂ¡kou" +msgstr "LeteckĂ½ knipl se 4 tlaÄĂ­tky a pĂ¡kou" msgid "Steering wheel (3-axis, 2-button)" msgstr "Volant (3 osy, 2 tlaÄĂ­tka)" @@ -975,11 +975,21 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" +<<<<<<< HEAD +msgid "Thrustmaster Formula T1/T2 with Adaptor" +msgstr "Thrustmaster Formula T1/T2 s adaptĂ©rem" +======= msgid "Thrustmaster Formula T1/T2 with adapter" msgstr "Thrustmaster Formula T1/T2 s adaptĂ©rem" +>>>>>>> 0a80ae2debdb61f381194ed5f17b5579d5510cc4 +<<<<<<< HEAD +msgid "Thrustmaster Formula T1/T2 without Adaptor" +msgstr "Thrustmaster Formula T1/T2 bez adaptĂ©ru" +======= msgid "Thrustmaster Formula T1/T2 without adapter" msgstr "Thrustmaster Formula T1/T2 bez adaptĂ©ru" +>>>>>>> 0a80ae2debdb61f381194ed5f17b5579d5510cc4 msgid "None" msgstr "ŽadnĂ©" @@ -1852,10 +1862,10 @@ msgid "Adapter:" msgstr "AdaptĂ©r:" msgid "VDE Socket:" -msgstr "ZĂ¡suvka VDE:" +msgstr "VDE socket:" msgid "TAP Bridge Device:" -msgstr "" +msgstr "ZaÅ™Ă­zenĂ­ TAP mostu:" msgid "86Box Unit Tester" msgstr "86Box Unit Tester" From 41f2c0ac0bbf3c3406acf93d53af1b32209726a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= <13226155+dhrdlicka@users.noreply.github.com> Date: Sun, 26 Oct 2025 02:07:16 +0200 Subject: [PATCH 202/233] Remove merge conflict in Czech translation --- src/qt/languages/cs-CZ.po | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index dea5fb3ec..7dd1e5d7a 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -975,21 +975,11 @@ msgstr "Thrustmaster Flight Control System" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Rudder Control System" -<<<<<<< HEAD -msgid "Thrustmaster Formula T1/T2 with Adaptor" -msgstr "Thrustmaster Formula T1/T2 s adaptĂ©rem" -======= msgid "Thrustmaster Formula T1/T2 with adapter" msgstr "Thrustmaster Formula T1/T2 s adaptĂ©rem" ->>>>>>> 0a80ae2debdb61f381194ed5f17b5579d5510cc4 -<<<<<<< HEAD -msgid "Thrustmaster Formula T1/T2 without Adaptor" -msgstr "Thrustmaster Formula T1/T2 bez adaptĂ©ru" -======= msgid "Thrustmaster Formula T1/T2 without adapter" msgstr "Thrustmaster Formula T1/T2 bez adaptĂ©ru" ->>>>>>> 0a80ae2debdb61f381194ed5f17b5579d5510cc4 msgid "None" msgstr "ŽadnĂ©" From 5a42a7c6f484271d5d02e3a3e1d4987520832ce9 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 21:29:40 -0300 Subject: [PATCH 203/233] Remove some unnecessary backslashes --- src/mem/rom.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/mem/rom.c b/src/mem/rom.c index 631328913..cee00cb0f 100644 --- a/src/mem/rom.c +++ b/src/mem/rom.c @@ -643,27 +643,27 @@ bios_load(const char *fn1, const char *fn2, uint32_t addr, int sz, int off, int int bios_load_linear_combined(const char *fn1, const char *fn2, int sz, UNUSED(int off)) { - return bios_load_linear(fn1, 0x000f0000, 131072, 128) && \ + return bios_load_linear(fn1, 0x000f0000, 131072, 128) && bios_load_aux_linear(fn2, 0x000e0000, sz - 65536, 128); } int bios_load_linear_combined2(const char *fn1, const char *fn2, const char *fn3, const char *fn4, const char *fn5, int sz, int off) { - return bios_load_linear(fn3, 0x000f0000, 262144, off) && \ - bios_load_aux_linear(fn1, 0x000d0000, 65536, off) && \ - bios_load_aux_linear(fn2, 0x000c0000, 65536, off) && \ - bios_load_aux_linear(fn4, 0x000e0000, sz - 196608, off) && \ + return bios_load_linear(fn3, 0x000f0000, 262144, off) && + bios_load_aux_linear(fn1, 0x000d0000, 65536, off) && + bios_load_aux_linear(fn2, 0x000c0000, 65536, off) && + bios_load_aux_linear(fn4, 0x000e0000, sz - 196608, off) && (!fn5 || bios_load_aux_linear(fn5, 0x000ec000, 16384, 0)); } int bios_load_linear_combined2_ex(const char *fn1, const char *fn2, const char *fn3, const char *fn4, const char *fn5, int sz, int off) { - return bios_load_linear(fn3, 0x000e0000, 262144, off) && \ - bios_load_aux_linear(fn1, 0x000c0000, 65536, off) && \ - bios_load_aux_linear(fn2, 0x000d0000, 65536, off) && \ - bios_load_aux_linear(fn4, 0x000f0000, sz - 196608, off) && \ + return bios_load_linear(fn3, 0x000e0000, 262144, off) && + bios_load_aux_linear(fn1, 0x000c0000, 65536, off) && + bios_load_aux_linear(fn2, 0x000d0000, 65536, off) && + bios_load_aux_linear(fn4, 0x000f0000, sz - 196608, off) && (!fn5 || bios_load_aux_linear(fn5, 0x000fc000, 16384, 0)); } From 3b43627f38f8a5a5d9faa5a2640820d9be8b4663 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sat, 25 Oct 2025 21:39:21 -0300 Subject: [PATCH 204/233] Add forgotten machine migration for MS-6119 --- src/config.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.c b/src/config.c index 4a0556de9..a0ef1c9e7 100644 --- a/src/config.c +++ b/src/config.c @@ -339,6 +339,7 @@ load_machine(void) { .old = "infinia7200", .new = "tc430hx", .new_bios = "infinia7200" }, { .old = "dellvenus", .new = "vs440fx", .new_bios = "dellvenus" }, { .old = "gw2kvenus", .new = "vs440fx", .new_bios = "gw2kvenus" }, + { .old = "lgibmx7g", .new = "ms6119", .new_bios = "lgibmx7g" }, { 0 } }; From 080632bd4a4f29da112f477d55e4424fe2c40e42 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Sat, 25 Oct 2025 22:20:25 -0500 Subject: [PATCH 205/233] Initial implementation of the Crystal CS4232 audio controller --- src/include/86box/sound.h | 1 + src/sound/snd_cs423x.c | 58 +++++++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index 2280824e4..c2b41776f 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -177,6 +177,7 @@ extern const device_t sb_awe64_ide_device; extern const device_t sb_awe64_gold_device; /* Crystal CS423x */ +extern const device_t cs4232_onboard_device; extern const device_t cs4235_device; extern const device_t cs4235_onboard_device; extern const device_t cs4236_onboard_device; diff --git a/src/sound/snd_cs423x.c b/src/sound/snd_cs423x.c index 78b628b3b..10eb27cf2 100644 --- a/src/sound/snd_cs423x.c +++ b/src/sound/snd_cs423x.c @@ -88,6 +88,20 @@ static const uint8_t slam_init_key[32] = { 0x96, 0x35, 0x9A, 0xCD, 0xE6, 0xF3, 0 0x5E, 0xAF, 0x57, 0x2B, 0x15, 0x8A, 0xC5, 0xE2, 0xF1, 0xF8, 0x7C, 0x3E, 0x9F, 0x4F, 0x27, 0x13, 0x09, 0x84, 0x42, 0xA1, 0xD0, 0x68, 0x34, 0x1A }; + +static const uint8_t cs4232_default[] = { + // clang-format off + /* Chip configuration */ + 0x00, /* external decode length */ + 0x48, /* reserved */ + 0x75, 0xb9, 0xfc, /* IRQ routing */ + 0x10, 0x03, /* DMA routing */ + + /* Default PnP data */ + 0x0e, 0x63, 0x42, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00 /* hinted by documentation to be just the header */ + // clang-format on +}; + static const uint8_t cs4236_default[] = { // clang-format off /* Chip configuration */ @@ -388,9 +402,17 @@ cs423x_write(uint16_t addr, uint8_t val, void *priv) case 6: /* RAM Access End */ /* TriGem Delhi-III BIOS writes undocumented value 0x40 instead of 0x00. */ - if ((val == 0x00) || (val == 0x40)) { + /* Intel Atlantis, Holly, Monaco, Morrison and Thor BIOSes use several undocumented values */ + /* 0x25, 0x60, 0x69, 0x86, 0xE2, 0xFE and 0xFF were observed on these BIOSes */ + /* CS4232 likely accepts any written value to end RAM writes */ + if ((val == 0x00) || (val == 0x40) || (dev->type == CRYSTAL_CS4232)) { cs423x_log("CS423x: RAM end\n"); dev->ram_dl = CRYSTAL_RAM_CMD; + /* CS4232 resource data at 0x2090/2091 is written backwards */ + if (dev->type == CRYSTAL_CS4232) { + dev->ram_data[0x2090] = 0x00; + dev->ram_data[0x2091] = 0x48; + } /* Update PnP state and resource data. */ dev->pnp_size = (dev->type >= CRYSTAL_CS4236) ? 384 : 256; /* we don't know the length */ @@ -808,6 +830,10 @@ static void cs423x_load_defaults(cs423x_t *dev, uint8_t *dest) { switch (dev->type) { + case CRYSTAL_CS4232: + memcpy(dest, cs4232_default, sizeof(cs4232_default)); + dev->pnp_size = 9; /* header-only PnP ROM size */ + break; case CRYSTAL_CS4236: case CRYSTAL_CS4236B: case CRYSTAL_CS4237B: @@ -841,7 +867,11 @@ cs423x_reset(void *priv) memset(dev->ram_data, 0, sizeof(dev->ram_data)); /* Load default configuration data to RAM. */ - cs423x_load_defaults(dev, &dev->ram_data[0x4000]); + /* CS4232 uses 0x2090 as the initial RAM location instead of 0x4000 */ + if (dev->type == CRYSTAL_CS4232) + cs423x_load_defaults(dev, &dev->ram_data[0x2090]); + else + cs423x_load_defaults(dev, &dev->ram_data[0x4000]); if (dev->eeprom) { /* Load EEPROM data to RAM if the magic bytes are present. */ @@ -890,6 +920,7 @@ cs423x_init(const device_t *info) dev->type = info->local & 0xff; cs423x_log("CS423x: init(%02X)\n", dev->type); switch (dev->type) { + case CRYSTAL_CS4232: case CRYSTAL_CS4236: case CRYSTAL_CS4236B: case CRYSTAL_CS4237B: @@ -897,13 +928,16 @@ cs423x_init(const device_t *info) case CRYSTAL_CS4235: case CRYSTAL_CS4239: /* Different WSS codec families. */ - dev->ad1848_type = (dev->type >= CRYSTAL_CS4235) ? AD1848_TYPE_CS4235 : ((dev->type >= CRYSTAL_CS4236B) ? AD1848_TYPE_CS4236B : AD1848_TYPE_CS4236); + dev->ad1848_type = (dev->type >= CRYSTAL_CS4235) ? AD1848_TYPE_CS4235 : ((dev->type >= CRYSTAL_CS4236B) ? AD1848_TYPE_CS4236B : (dev->type >= CRYSTAL_CS4236) ? AD1848_TYPE_CS4236 : AD1848_TYPE_CS4232); /* Different Chip Version and ID values (N/A on CS4236), which shouldn't be reset by ad1848_init. */ dev->ad1848.xregs[25] = dev->type; - /* Same EEPROM structure. */ - dev->pnp_offset = 0x4013; + /* Same EEPROM structure on CS4236+. CS4232 is different. */ + if (dev->type == CRYSTAL_CS4232) + dev->pnp_offset = 0x2097; + else + dev->pnp_offset = 0x4013; if (!(info->local & CRYSTAL_NOEEPROM)) { /* Start a new EEPROM with the default configuration data. */ @@ -1056,6 +1090,20 @@ cs423x_speed_changed(void *priv) ad1848_speed_changed(&dev->ad1848); } +const device_t cs4232_onboard_device = { + .name = "Crystal CS4232 (On-Board)", + .internal_name = "cs4232_onboard", + .flags = DEVICE_ISA16, + .local = CRYSTAL_CS4232 | CRYSTAL_NOEEPROM, + .init = cs423x_init, + .close = cs423x_close, + .reset = cs423x_reset, + .available = cs423x_available, + .speed_changed = cs423x_speed_changed, + .force_redraw = NULL, + .config = NULL +}; + const device_t cs4235_device = { .name = "Crystal CS4235", .internal_name = "cs4235", From 7b40cfb563de413464ea8d8086f77e4d8123617a Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Sat, 25 Oct 2025 23:01:39 -0500 Subject: [PATCH 206/233] Give the Intel Atlantis, Monaco and Thor boards their onboard CS4232 audio --- src/machine/m_at_socket7_3v.c | 31 ++++++++++--------------------- src/machine/machine_table.c | 12 ++++++------ 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 07faa9f9f..04505d0fd 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -435,6 +435,9 @@ machine_at_thor_gpio_init(void) else if (cpu_busspeed > 60000000) gpio |= 0xffff1000; + if (sound_card_current[0] == SOUND_INTERNAL) + gpio |= 0xffff0400; + machine_set_gpio_default(gpio); } @@ -476,6 +479,9 @@ machine_at_thor_init(const machine_t *model) if (has_video && (gfxcard[0] == VID_INTERNAL)) device_add(machine_get_vid_device(machine)); + if (has_video && (sound_card_current[0] == SOUND_INTERNAL)) + machine_snd = device_add(machine_get_snd_device(machine)); + device_add(&i430fx_device); device_add(&piix_device); device_add_params(&pc87306_device, (void *) PCX730X_AMI); @@ -576,27 +582,6 @@ machine_at_monaco_gpio_init(void) { uint32_t gpio = 0xffffe0cf; - /* Return to this after CS4232 PnP is working. */ - /* Register 0x0078 (Undocumented): */ - /* Bit 5,4: Vibra 16S base address: 0 = 220h, 1 = 260h, 2 = 240h, 3 = 280h. */ - /*device_context(machine_get_snd_device(machine)); - addr = device_get_config_hex16("base"); - switch (addr) { - case 0x0220: - gpio |= 0xffff00cf; - break; - case 0x0240: - gpio |= 0xffff00ef; - break; - case 0x0260: - gpio |= 0xffff00df; - break; - case 0x0280: - gpio |= 0xffff00ff; - break; - } - device_context_restore();*/ - /* Register 0x0079: */ /* Bit 7: 0 = Clear password, 1 = Keep password. */ /* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */ @@ -682,6 +667,9 @@ machine_at_endeavor_init(const machine_t *model) return ret; } +/* The Monaco and Atlantis share the same GPIO config */ +#define machine_at_monaco_gpio_init machine_at_atlantis_gpio_init + int machine_at_atlantis_init(const machine_t *model) { @@ -695,6 +683,7 @@ machine_at_atlantis_init(const machine_t *model) return ret; machine_at_common_init_ex(model, 2); + machine_at_atlantis_gpio_init(); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 7628d29fa..b65dd5d51 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13488,7 +13488,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ .ram = { .min = 8192, .max = 131072, @@ -13507,7 +13507,7 @@ const machine_t machines[] = { .fdc_device = NULL, .sio_device = NULL, .vid_device = &mach64ct_device_onboard, - .snd_device = NULL, + .snd_device = &cs4232_onboard_device, .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the @@ -13534,7 +13534,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_GAMEPORT, /* Machine has optional onboard sound: Crystal CS4232-KQ */ + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has optional onboard sound: Crystal CS4232-KQ */ .ram = { .min = 8192, .max = 131072, @@ -13553,7 +13553,7 @@ const machine_t machines[] = { .fdc_device = NULL, .sio_device = NULL, .vid_device = &s3_phoenix_trio64vplus_onboard_pci_device, - .snd_device = NULL, + .snd_device = &cs4232_onboard_device, .net_device = NULL }, /* According to tests from real hardware: This has AMI MegaKey KBC firmware on the @@ -13626,7 +13626,7 @@ const machine_t machines[] = { .max_multi = 3.0 }, .bus_flags = MACHINE_PS2_PCI, - .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ + .flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */ .ram = { .min = 8192, .max = 131072, @@ -13645,7 +13645,7 @@ const machine_t machines[] = { .fdc_device = NULL, .sio_device = NULL, .vid_device = &mach64ct_device_onboard, - .snd_device = NULL, + .snd_device = &cs4232_onboard_device, .net_device = NULL }, /* This has an AMIKey-2, which is type 'H'. */ From 69b05d5bfc88fefda83f5cb4c0cfcf22f7307b22 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Sat, 25 Oct 2025 23:05:28 -0500 Subject: [PATCH 207/233] Correct flipped names in GPIO define --- src/machine/m_at_socket7_3v.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 04505d0fd..7336c36d0 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -668,7 +668,7 @@ machine_at_endeavor_init(const machine_t *model) } /* The Monaco and Atlantis share the same GPIO config */ -#define machine_at_monaco_gpio_init machine_at_atlantis_gpio_init +#define machine_at_atlantis_gpio_init machine_at_monaco_gpio_init int machine_at_atlantis_init(const machine_t *model) From 5c5bc12ffc3fd2063eac364e182692ce5d799b1e Mon Sep 17 00:00:00 2001 From: Verloren50000 <110334428+Verloren50000@users.noreply.github.com> Date: Sun, 26 Oct 2025 18:49:03 +0800 Subject: [PATCH 208/233] Rename the Machine Name of Packard Bell PB68x Rename the Machine Name of Packard Bell PB68x: Old name: [i430VX] Packard Bell Orlando/2D/2D/MMX (PB680/PB682/PB683/PB685) New name: [i430VX] Packard Bell Orlando/2D/3D/MMX (PB680/PB682/PB683/PB685) --- src/machine/machine_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 7628d29fa..fe3f4da6e 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -15410,7 +15410,7 @@ const machine_t machines[] = { PC87306 Super I/O chip, command 0xA1 returns '5'. Command 0xA0 copyright string: (C)1994 AMI . */ { - .name = "[i430VX] Packard Bell Orlando/2D/2D/MMX (PB680/PB682/PB683/PB685)", + .name = "[i430VX] Packard Bell Orlando/2D/3D/MMX (PB680/PB682/PB683/PB685)", .internal_name = "pb680", .type = MACHINE_TYPE_SOCKET7, .chipset = MACHINE_CHIPSET_INTEL_430VX, From ae1163993dbabc5affe74280160df161380cb5f1 Mon Sep 17 00:00:00 2001 From: Valerio Vitali <57093958+Valefungo@users.noreply.github.com> Date: Sun, 26 Oct 2025 12:14:29 +0100 Subject: [PATCH 209/233] Update README-DEDICATED-PC.txt removed a reference to my fork --- README-DEDICATED-PC.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README-DEDICATED-PC.txt b/README-DEDICATED-PC.txt index ba3dfa50c..400880110 100644 --- a/README-DEDICATED-PC.txt +++ b/README-DEDICATED-PC.txt @@ -9,9 +9,8 @@ These are the steps to install a machine fully dedicated to 86Box and tuned to m apt install git build-essential cmake extra-cmake-modules pkg-config ninja-build libfreetype-dev libsdl2-dev libpng-dev libopenal-dev librtmidi-dev libfluidsynth-dev libsndfile1-dev libserialport-dev libevdev-dev libxkbcommon-dev libxkbcommon-x11-dev libslirp-dev 4) setup git and clone - git@github.com:Valefungo/86Box.git + git@github.com:86Box/86Box.git git@github.com:86Box/roms.git - git checkout unix_ods 5) build (128 => super speed, too much for a 2GB machine) cd 86Box From 1a4588292f6bcd656114afbdcf3aef905d82b515 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 26 Oct 2025 17:19:42 +0100 Subject: [PATCH 210/233] gcc strict code style, removed an annoying unuseful printf --- src/include/86box/unix_osd.h | 6 +++--- src/unix/unix.c | 2 +- src/unix/unix_osd.c | 19 ++++++------------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/include/86box/unix_osd.h b/src/include/86box/unix_osd.h index c6582b322..a71b0ec74 100644 --- a/src/include/86box/unix_osd.h +++ b/src/include/86box/unix_osd.h @@ -4,8 +4,8 @@ #include // state management -extern void osd_init(); -extern void osd_deinit(); +extern void osd_init(void); +extern void osd_deinit(void); extern int osd_open(SDL_Event event); extern int osd_close(SDL_Event event); @@ -13,7 +13,7 @@ extern int osd_close(SDL_Event event); extern int osd_handle(SDL_Event event); // draw the osd interface, if it's open -extern void osd_present(); +extern void osd_present(void); // future ui extern void osd_ui_sb_update_icon_state(int tag, int state); diff --git a/src/unix/unix.c b/src/unix/unix.c index 4502c1e5b..ffee8df0f 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1516,7 +1516,7 @@ main(int argc, char **argv) } default: { - printf("Unhandled SDL event: %d\n", event.type); + // printf("Unhandled SDL event: %d\n", event.type); break; } } diff --git a/src/unix/unix_osd.c b/src/unix/unix_osd.c index 8122e19eb..61597242f 100644 --- a/src/unix/unix_osd.c +++ b/src/unix/unix_osd.c @@ -78,11 +78,8 @@ static const char *menu_items[] = { }; #define MENU_ITEMS (sizeof(menu_items) / sizeof(menu_items[0])) -static char selected_file[256] = ""; // memoria della selezione - // chars per cols and rows static int font_cols = 16; -static int font_rows = 16; static int selected = 0; static int file_selected = 0; @@ -96,7 +93,7 @@ static int file_count = 0; static int max_visible = 0; -int reset_iso_files() +void reset_iso_files(void) { file_selected = 0; scroll_offset = 0; @@ -181,11 +178,8 @@ void draw_menu(SDL_Renderer *renderer, int selected) draw_text(renderer, "MAIN MENU", x0 + 20, y0 + 5, (SDL_Color){255,255,255,255}); - if (sdl_win_title != NULL) - { - int length = wcstombs(sdl_win_title_mb, sdl_win_title, 256); - draw_text(renderer, sdl_win_title_mb, x0 + 120, y0 + 5, (SDL_Color){255,255,255,255}); - } + wcstombs(sdl_win_title_mb, sdl_win_title, 256); + draw_text(renderer, sdl_win_title_mb, x0 + 120, y0 + 5, (SDL_Color){255,255,255,255}); for (int i = 0; i < MENU_ITEMS; i++) { @@ -211,7 +205,6 @@ void draw_menu(SDL_Renderer *renderer, int selected) #endif } -// ------------------- Disegna selezione file ------------------- void draw_file_selector(SDL_Renderer *renderer, char *title, char files[][1024], int file_count, @@ -254,7 +247,7 @@ void draw_file_selector(SDL_Renderer *renderer, #endif } -void osd_init() +void osd_init(void) { // debug: fprintf(stderr, "OSD INIT\n"); @@ -284,7 +277,7 @@ void osd_init() } } -void osd_deinit() +void osd_deinit(void) { // nothing to do // debug: fprintf(stderr, "OSD DEINIT\n"); @@ -329,7 +322,7 @@ static void osd_cmd_run(char *c) free(l); } -void osd_present() +void osd_present(void) { // shortcut if (!osd_is_open) From f4f050d14e09eb2e5318dbbe02b4e5f89fb81ca8 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 26 Oct 2025 17:42:10 +0100 Subject: [PATCH 211/233] Bump the version number to 6.0... again. --- CMakeLists.txt | 2 +- debian/changelog | 4 ++-- src/unix/assets/86Box.spec | 4 ++-- src/unix/assets/net.86box.86Box.metainfo.xml | 2 +- vcpkg.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29fedd6ad..2f6c18af0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,7 @@ if(MUNT_EXTERNAL) endif() project(86Box - VERSION 5.2 + VERSION 6.0 DESCRIPTION "Emulator of x86-based systems" HOMEPAGE_URL "https://86box.net" LANGUAGES C CXX) diff --git a/debian/changelog b/debian/changelog index cfb4bd9d0..d2606a616 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -86box (5.2) UNRELEASED; urgency=medium +86box (6.0) UNRELEASED; urgency=medium * Bump release. - -- Jasmine Iwanek Thu, 18 Sep 2025 04:25:57 +0200 + -- Jasmine Iwanek Sun, 26 Oct 2025 17:41:47 +0100 diff --git a/src/unix/assets/86Box.spec b/src/unix/assets/86Box.spec index 27805a9e4..e71497698 100644 --- a/src/unix/assets/86Box.spec +++ b/src/unix/assets/86Box.spec @@ -15,7 +15,7 @@ %global romver 4.1 Name: 86Box -Version: 5.2 +Version: 6.0 Release: 1%{?dist} Summary: Classic PC emulator License: GPLv2+ @@ -121,5 +121,5 @@ popd %{_datadir}/%{name}/roms %changelog -* Sat Aug 31 Jasmine Iwanek 5.2-1 +* Sat Aug 31 Jasmine Iwanek 6.0-1 - Bump release diff --git a/src/unix/assets/net.86box.86Box.metainfo.xml b/src/unix/assets/net.86box.86Box.metainfo.xml index fd633d426..1e929412c 100644 --- a/src/unix/assets/net.86box.86Box.metainfo.xml +++ b/src/unix/assets/net.86box.86Box.metainfo.xml @@ -11,7 +11,7 @@ net.86box.86Box.desktop - + diff --git a/vcpkg.json b/vcpkg.json index 73f6d08f8..6a4f6376c 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "86box", - "version-string": "5.2", + "version-string": "6.0", "homepage": "https://86box.net/", "documentation": "https://86box.readthedocs.io/", "license": "GPL-2.0-or-later", From 379a3eaec7ab9deba2fa0615f5be809d1ee19305 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 26 Oct 2025 17:42:31 +0100 Subject: [PATCH 212/233] more useful readme --- README-UNIX-MODE-WITH-OSD.txt | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 README-UNIX-MODE-WITH-OSD.txt diff --git a/README-UNIX-MODE-WITH-OSD.txt b/README-UNIX-MODE-WITH-OSD.txt new file mode 100644 index 000000000..22e45a920 --- /dev/null +++ b/README-UNIX-MODE-WITH-OSD.txt @@ -0,0 +1,78 @@ +UNIX MODE WITH OSD + +86Box supports running on the linux framebuffer without QT and without X, making the pc appear as a nearly native old machine. + +running it that way is already supported but when doing it, 86box loses all menu and all abilities to mount floppies and CDs, it also becomes the owner of the entire pc with no way of quitting it or changing virtual console. + +to overcome this, an on screen display menu is available that allows doing everything the textual console (src/unix/unix.c) does; +mount/unmount all supported media like floppy and cd +hard reset the machine +quit 86box +seeing the current performance % + +key bindings: +Control-F12 opens the osd + +while is open: +arrows up, down moves the cursor +enter does the action, at mount options it enters a list of appropriate files (*.img, *.iso) +ESC goes back to main or closes the OSD + +current limitations: + OSD can mount images to first floppy and first cd, secondary devices are not supported + it does not show if an image is mounted or not + the option "version" does actully print it, but it can't be seen beacuse its printed under 86box display + extremely long filenames can overflow the blue window + the title does actually overflow the window width :) + +These are the steps to install a machine fully dedicated to 86Box and tuned to make it appear almost native. +This works almost the same for on a Raspberry Pi + + +1) install a vanilla Debian Trixie with netinst and without any graphical environment, or a "server" distro for RPI + depending on the machine speed, this will make boot time extremely short + +2) apt update if necessary + +3) install git and almost all required packages + apt install git build-essential cmake extra-cmake-modules pkg-config ninja-build libfreetype-dev libsdl2-dev libpng-dev libopenal-dev librtmidi-dev libfluidsynth-dev libsndfile1-dev libserialport-dev libevdev-dev libxkbcommon-dev libxkbcommon-x11-dev libslirp-dev + +4) setup git and clone + git@github.com:86Box/86Box.git + git@github.com:86Box/roms.git + +5) build (128 => super speed, too much for a 2GB machine) + cd 86Box + mkdir build + cd build + cmake .. --preset regular -D QT=OFF -D PREFER_STATIC=ON + cmake --build regular -j 128 + cd ../../ + ln -s 86Box/build/regular/src/86Box 86Box.exe + +6) boot + as root so it can take complete ownership of the linux framebuffer + +7) notes: +- 86Box will complain to be unable to find readline, this is fine, we don't need the command line at all +- ALSOFT will complain it can't connect to PipeWire, no problem, sounds will come from standard ALSA + +8) additional steps + add a new udev rule to automount any USB key to a known location so files in it can be listed in the OSD floppy/cd mount options + + create /etc/udev/rules.d/99-automount.rules + + with: + ACTION=="add", ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="disk", ENV{ID_FS_TYPE}=="exfat", RUN+="/usr/bin/systemd-mount --no-block --automount=yes --collect /dev/%k '/mnt'" + + replicate this line for each filesystem you expect the usb key to be formatted, in this example "exfat" + this is going to conflict if multiple keys are inserted, don't do it + +final step + configure some 86box vm using another pc with the GUI + copy the VM definitions to this new pc and manually launch 86box from the textual command line + optionally craft a boot menu to be shown in place of the login prompt or setup 86box as a debiasn service, it will start at boot + just make sure the pc will be accessible via ssh or some other way, autobooting 86box canĂ make difficult terminating it + + + From e3908e4d12d9a583c99bab9c2977ffdc000b3706 Mon Sep 17 00:00:00 2001 From: Valerio Date: Sun, 26 Oct 2025 17:59:57 +0100 Subject: [PATCH 213/233] changed hotkey to rightcontrol + F11, aligned README --- README-UNIX-MODE-WITH-OSD.txt | 2 +- src/unix/unix.c | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/README-UNIX-MODE-WITH-OSD.txt b/README-UNIX-MODE-WITH-OSD.txt index 22e45a920..2fff90103 100644 --- a/README-UNIX-MODE-WITH-OSD.txt +++ b/README-UNIX-MODE-WITH-OSD.txt @@ -11,7 +11,7 @@ quit 86box seeing the current performance % key bindings: -Control-F12 opens the osd +Right Control + F11 opens the osd while is open: arrows up, down moves the cursor diff --git a/src/unix/unix.c b/src/unix/unix.c index ffee8df0f..055b4075a 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -75,6 +75,10 @@ SDL_threadID eventthread; static int exit_event = 0; static int fullscreen_pending = 0; +// Two keys to be pressed together to open the OSD, variables to make them configurable in future +static uint16_t osd_open_first_key = SDL_SCANCODE_RCTRL; +static uint16_t osd_open_second_key = SDL_SCANCODE_F11; + static const uint16_t sdl_to_xt[0x200] = { [SDL_SCANCODE_ESCAPE] = 0x01, [SDL_SCANCODE_1] = 0x02, @@ -1305,7 +1309,7 @@ main(int argc, char **argv) while (!is_quit) { static int mouse_inside = 0; - static int r_alt_pressed = 0; + static int osd_first_key_pressed = 0; static int flag_osd_open = 0; while (SDL_PollEvent(&event)) @@ -1470,27 +1474,27 @@ main(int argc, char **argv) { uint16_t xtkey = 0; - if (event.key.keysym.scancode == SDL_SCANCODE_RALT) + if (event.key.keysym.scancode == osd_open_first_key) { if (event.type == SDL_KEYDOWN) - r_alt_pressed = 1; + osd_first_key_pressed = 1; else - r_alt_pressed = 0; + osd_first_key_pressed = 0; } - else if (r_alt_pressed && event.type == SDL_KEYDOWN && event.key.keysym.scancode == SDL_SCANCODE_G) + else if (osd_first_key_pressed && event.type == SDL_KEYDOWN && event.key.keysym.scancode == osd_open_second_key) { // open OSD! flag_osd_open = osd_open(event); // we can assume alt-gr has been released, tell this also to the virtual machine - r_alt_pressed = 0; - keyboard_input(0, sdl_to_xt[SDL_SCANCODE_RALT]); + osd_first_key_pressed = 0; + keyboard_input(0, sdl_to_xt[osd_open_first_key]); break; } else { - // invalidate r_alt_pressed is something happens between its keydown and keydown for G - r_alt_pressed = 0; + // invalidate osd_first_key_pressed is something happens between its keydown and keydown for G + osd_first_key_pressed = 0; } switch (event.key.keysym.scancode) { From cf6149c1c7c8fdddd2a12d8d6687837beb2e2d68 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 26 Oct 2025 13:59:33 -0300 Subject: [PATCH 214/233] bumpversion: Fix romset version patching and rework patching function to allow for multiple files [skip ci] --- bumpversion.sh | 46 +++++++++++++++++++++++--------------- src/unix/assets/86Box.spec | 2 +- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/bumpversion.sh b/bumpversion.sh index 6e2536cbe..76ef07554 100644 --- a/bumpversion.sh +++ b/bumpversion.sh @@ -43,23 +43,33 @@ pretty_date() { # Patch files. patch_file() { - # Stop if the file doesn't exist. - [ ! -e "$1" ] && return + # Parse arguments. + desc="$1" + shift + pattern="$1" + shift - # Patch file. - if sed -i -r -e "$3" "$1" - then - echo "[-] Patched $2 on $1" - else - echo "[!] Patching $2 on $1 failed" - fi + # Patch the specified files. + for file in "$@" + do + # Skip file if it doesn't exist. + [ ! -e "$file" ] && continue + + # Patch file. + if sed -i -r -e "$pattern" "$file" + then + echo "[-] Patched $desc in $file" + else + echo "[!] Patching $desc in $file failed" + fi + done } -patch_file CMakeLists.txt VERSION 's/^(\s*VERSION ).+/\1'"$newversion"'/' -patch_file vcpkg.json version-string 's/(^\s*"version-string"\s*:\s*")[^"]+/\1'"$newversion"'/' -patch_file src/unix/assets/*.spec Version 's/(Version:\s+)[0-9].+/\1'"$newversion"'/' -patch_file src/unix/assets/*.spec '%global romver' 's/(^%global\ romver\s+)[0-9]{8}/\1'"$romversion"'/' -patch_file src/unix/assets/*.spec 'changelog version' 's/(^[*]\s.*>\s+)[0-9].+/\1'"$newversion"-1'/' -patch_file src/unix/assets/*.spec 'changelog date' 's/(^[*]\s)[a-zA-Z]{3}\s[a-zA-Z]{3}\s[0-9]{2}\s[0-9]{4}/\1'"$(pretty_date)"'/' -patch_file src/unix/assets/*.metainfo.xml release 's/( .+/> '"$(date -R)"'/' -patch_file debian/changelog 'changelog version' 's/86box \(.+\)/86box \('"$newversion"'\)/' +patch_file VERSION 's/^(\s*VERSION ).+/\1'"$newversion"'/' CMakeLists.txt +patch_file version-string 's/(^\s*"version-string"\s*:\s*")[^"]+/\1'"$newversion"'/' vcpkg.json +patch_file Version 's/(Version:\s+)[0-9].+/\1'"$newversion"'/' src/unix/assets/*.spec +patch_file '%global romver' 's/(^%global\ romver\s+)[^\s]+/\1'"$romversion"'/' src/unix/assets/*.spec +patch_file 'changelog version' 's/(^[*]\s.*>\s+)[0-9].+/\1'"$newversion"-1'/' src/unix/assets/*.spec +patch_file 'changelog date' 's/(^[*]\s)[a-zA-Z]{3}\s[a-zA-Z]{3}\s[0-9]{2}\s[0-9]{4}/\1'"$(pretty_date)"'/' src/unix/assets/*.spec +patch_file release 's/( .+/> '"$(date -R)"'/' debian/changelog +patch_file 'changelog version' 's/86box \(.+\)/86box \('"$newversion"'\)/' debian/changelog diff --git a/src/unix/assets/86Box.spec b/src/unix/assets/86Box.spec index e71497698..35916ffff 100644 --- a/src/unix/assets/86Box.spec +++ b/src/unix/assets/86Box.spec @@ -12,7 +12,7 @@ # After a successful build, you can install the RPMs as follows: # sudo dnf install RPMS/$(uname -m)/86Box-3* RPMS/noarch/86Box-roms* -%global romver 4.1 +%global romver 5.2 Name: 86Box Version: 6.0 From 8d12c46a3a2ea261502068cb071d0b68a932d09d Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Sun, 26 Oct 2025 15:49:21 -0500 Subject: [PATCH 215/233] Add a generic discrete CS4232 sound card --- src/include/86box/sound.h | 1 + src/sound/snd_cs423x.c | 62 ++++++++++++++++++++++++++++++++------- src/sound/sound.c | 3 +- 3 files changed, 55 insertions(+), 11 deletions(-) diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index c2b41776f..ff096e0be 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -177,6 +177,7 @@ extern const device_t sb_awe64_ide_device; extern const device_t sb_awe64_gold_device; /* Crystal CS423x */ +extern const device_t cs4232_device; extern const device_t cs4232_onboard_device; extern const device_t cs4235_device; extern const device_t cs4235_onboard_device; diff --git a/src/sound/snd_cs423x.c b/src/sound/snd_cs423x.c index 10eb27cf2..4fd630e07 100644 --- a/src/sound/snd_cs423x.c +++ b/src/sound/snd_cs423x.c @@ -40,6 +40,7 @@ #include <86box/plat_fallthrough.h> #include <86box/plat_unused.h> +#define PNP_ROM_CS4232 "roms/sound/crystal/CS4232.BIN" #define PNP_ROM_CS4236B "roms/sound/crystal/PNPISA01.BIN" #define CRYSTAL_NOEEPROM 0x100 @@ -880,7 +881,10 @@ cs423x_reset(void *priv) dev->pnp_size = (dev->eeprom_data[2] << 8) | dev->eeprom_data[3]; if (dev->pnp_size > 384) dev->pnp_size = 384; - memcpy(&dev->ram_data[0x4000], &dev->eeprom_data[4], sizeof(dev->eeprom_data) - 4); + if (dev->type == CRYSTAL_CS4232) + memcpy(&dev->ram_data[0x2090], &dev->eeprom_data[4], sizeof(dev->eeprom_data) - 4); + else + memcpy(&dev->ram_data[0x4000], &dev->eeprom_data[4], sizeof(dev->eeprom_data) - 4); } else { cs423x_log("CS423x: EEPROM data invalid, ignoring\n"); } @@ -944,16 +948,30 @@ cs423x_init(const device_t *info) cs423x_load_defaults(dev, &dev->eeprom_data[4]); /* Load PnP resource data ROM. */ - FILE *fp = rom_fopen(PNP_ROM_CS4236B, "rb"); - if (fp) { - uint16_t eeprom_pnp_offset = (dev->pnp_offset & 0x1ff) + 4; - /* This is wrong. The header field only indicates PnP resource data length, and real chips use - it to locate the firmware patch area, but we don't need any of that, so we can get away - with pretending the whole ROM is PnP data, at least until we can get full EEPROM dumps. */ - dev->pnp_size = fread(&dev->eeprom_data[eeprom_pnp_offset], 1, sizeof(dev->eeprom_data) - eeprom_pnp_offset, fp); - fclose(fp); + if (dev->type == CRYSTAL_CS4232) { + FILE *fp = rom_fopen(PNP_ROM_CS4232, "rb"); + if (fp) { + uint16_t eeprom_pnp_offset = (dev->pnp_offset & 0x0f) + 4; + /* This is wrong. The header field only indicates PnP resource data length, and real chips use + it to locate the firmware patch area, but we don't need any of that, so we can get away + with pretending the whole ROM is PnP data, at least until we can get full EEPROM dumps. */ + dev->pnp_size = fread(&dev->eeprom_data[eeprom_pnp_offset], 1, sizeof(dev->eeprom_data) - eeprom_pnp_offset, fp); + fclose(fp); + } else { + dev->pnp_size = 0; + } } else { - dev->pnp_size = 0; + FILE *fp = rom_fopen(PNP_ROM_CS4236B, "rb"); + if (fp) { + uint16_t eeprom_pnp_offset = (dev->pnp_offset & 0x1ff) + 4; + /* This is wrong. The header field only indicates PnP resource data length, and real chips use + it to locate the firmware patch area, but we don't need any of that, so we can get away + with pretending the whole ROM is PnP data, at least until we can get full EEPROM dumps. */ + dev->pnp_size = fread(&dev->eeprom_data[eeprom_pnp_offset], 1, sizeof(dev->eeprom_data) - eeprom_pnp_offset, fp); + fclose(fp); + } else { + dev->pnp_size = 0; + } } /* Populate EEPROM header if the PnP ROM was loaded. */ @@ -966,6 +984,10 @@ cs423x_init(const device_t *info) /* Patch PnP ROM and set EEPROM file name. */ switch (dev->type) { + case CRYSTAL_CS4232: + dev->nvr_path = "cs4232.nvr"; + break; + case CRYSTAL_CS4236: if (dev->pnp_size) { dev->eeprom_data[26] = 0x36; @@ -1076,6 +1098,12 @@ cs423x_close(void *priv) free(dev); } +static int +cs4232_available(void) +{ + return rom_present(PNP_ROM_CS4232); +} + static int cs423x_available(void) { @@ -1090,6 +1118,20 @@ cs423x_speed_changed(void *priv) ad1848_speed_changed(&dev->ad1848); } +const device_t cs4232_device = { + .name = "Crystal CS4232", + .internal_name = "cs4232", + .flags = DEVICE_ISA16, + .local = CRYSTAL_CS4232, + .init = cs423x_init, + .close = cs423x_close, + .reset = cs423x_reset, + .available = cs4232_available, + .speed_changed = cs423x_speed_changed, + .force_redraw = NULL, + .config = NULL +}; + const device_t cs4232_onboard_device = { .name = "Crystal CS4232 (On-Board)", .internal_name = "cs4232_onboard", diff --git a/src/sound/sound.c b/src/sound/sound.c index 9373f067e..7b4141bd8 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -140,6 +140,7 @@ static const SOUND_CARD sound_cards[] = { { &azt2316a_device }, { &azt1605_device }, { &sb_goldfinch_device }, + { &cs4232_device }, { &cs4235_device }, { &cs4236b_device }, { &gus_device }, @@ -849,4 +850,4 @@ sound_fdd_thread_end(void) sound_fdd_start_event = NULL; } } -} \ No newline at end of file +} From 2a4ed0370f9d329f985b413e0fc2f096438713ee Mon Sep 17 00:00:00 2001 From: Valerio Date: Mon, 27 Oct 2025 09:36:19 +0100 Subject: [PATCH 216/233] removed old readme --- README-DEDICATED-PC.txt | 41 ----------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 README-DEDICATED-PC.txt diff --git a/README-DEDICATED-PC.txt b/README-DEDICATED-PC.txt deleted file mode 100644 index 400880110..000000000 --- a/README-DEDICATED-PC.txt +++ /dev/null @@ -1,41 +0,0 @@ -These are the steps to install a machine fully dedicated to 86Box and tuned to make it appear almost native. - -1) install a vanilla Debian Trixie with netinst and without any graphical environment - depending on the machine speed, this will make boot time extremely short - -2) apt update if necessary - -3) install git and almost all required packages - apt install git build-essential cmake extra-cmake-modules pkg-config ninja-build libfreetype-dev libsdl2-dev libpng-dev libopenal-dev librtmidi-dev libfluidsynth-dev libsndfile1-dev libserialport-dev libevdev-dev libxkbcommon-dev libxkbcommon-x11-dev libslirp-dev - -4) setup git and clone - git@github.com:86Box/86Box.git - git@github.com:86Box/roms.git - -5) build (128 => super speed, too much for a 2GB machine) - cd 86Box - mkdir build - cd build - cmake .. --preset regular -D QT=OFF -D PREFER_STATIC=ON - cmake --build regular -j 128 - cd ../../ - ln -s 86Box/build/regular/src/86Box 86Box.exe - -6) boot - as root so it can take complete ownership of the linux framebuffer - -7) notes: -- 86Box will complain to be unable to find readline, this is fine, we don't need the command line at all -- ALSOFT will complain it can't connect to PipeWire, no problem, sounds will come from standard ALSA - -8) additional steps - add a new udev rule to automount any USB key to a known location so files in it can be listed in the OSD floppy/cd mount options - - create /etc/udev/rules.d/99-automount.rules - - with: - ACTION=="add", ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="disk", ENV{ID_FS_TYPE}=="exfat", RUN+="/usr/bin/systemd-mount --no-block --automount=yes --collect /dev/%k '/mnt'" - - replicate this line for each filesystem you expect the usb key to be formatted, in this example "exfat" - this is going to conflict if multiple keys are inserted, don't do it - From c4a42a0994763edbe547bc2a724d7071f167b7ce Mon Sep 17 00:00:00 2001 From: Valerio Date: Mon, 27 Oct 2025 13:22:16 +0100 Subject: [PATCH 217/233] hope to make Code QL happy --- src/unix/unix.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/unix/unix.c b/src/unix/unix.c index 055b4075a..716fec109 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1095,16 +1095,19 @@ unix_executeLine(char *line) err = true; fprintf(stderr, "Path name too long.\n"); } - strcat(fn, xargv[curarg] + (xargv[curarg][0] == '\'' || xargv[curarg][0] == '"')); - if (fn[strlen(fn) - 1] == '\'' - || fn[strlen(fn) - 1] == '"') { - break; + else + { + strcat(fn, xargv[curarg] + (xargv[curarg][0] == '\'' || xargv[curarg][0] == '"')); + if (fn[strlen(fn) - 1] == '\'' + || fn[strlen(fn) - 1] == '"') { + break; + } + strcat(fn, " "); } - strcat(fn, " "); } } else { if (strlen(xargv[2]) < PATH_MAX) { - strcpy(fn, xargv[2]); + strncpy(fn, xargv[2], PATH_MAX-1); } else { fprintf(stderr, "Path name too long.\n"); } @@ -1246,8 +1249,6 @@ monitor_thread(UNUSED(void *param)) #endif } -#define FINGER_MOTION_MULTIPLIER 100 - extern int gfxcard[GFXCARD_MAX]; int main(int argc, char **argv) From dde256573653b6f004d5ff500fbe231bf0c8618b Mon Sep 17 00:00:00 2001 From: TC1995 Date: Mon, 27 Oct 2025 16:38:30 +0100 Subject: [PATCH 218/233] Revert the k1/k2 s3 virge masks. Should fix some overlay Streams bugs. --- src/video/vid_s3_virge.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index dcf380ff8..e9da4b412 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1975,9 +1975,9 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) break; case 0x8190: virge->streams.sec_ctrl = val; - virge->streams.dda_horiz_accumulator = val & 0xfff; - if (val & 0x1000) - virge->streams.dda_horiz_accumulator |= ~0xfff; + virge->streams.dda_horiz_accumulator = val & 0x7ff; + if (val & 0x800) + virge->streams.dda_horiz_accumulator |= ~0x7ff; virge->streams.sdif = (val >> 24) & 7; break; @@ -1990,9 +1990,9 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) if (val & 0x800) virge->streams.k1_horiz_scale |= ~0x7ff; - virge->streams.k2_horiz_scale = (val >> 16) & 0x7ff; - if ((val >> 16) & 0x800) - virge->streams.k2_horiz_scale |= ~0x7ff; + virge->streams.k2_horiz_scale = (val >> 16) & 0x3ff; + if ((val >> 16) & 0x400) + virge->streams.k2_horiz_scale |= ~0x3ff; svga_recalctimings(svga); svga->fullchange = changeframecount; @@ -2048,14 +2048,14 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) virge->streams.k1_vert_scale |= ~0x7ff; break; case 0x81e4: - virge->streams.k2_vert_scale = val & 0x7ff; - if (val & 0x800) - virge->streams.k2_vert_scale |= ~0x7ff; + virge->streams.k2_vert_scale = val & 0x3ff; + if (val & 0x400) + virge->streams.k2_vert_scale |= ~0x3ff; break; case 0x81e8: - virge->streams.dda_vert_accumulator = val & 0xfff; - if (val & 0x1000) - virge->streams.dda_vert_accumulator |= ~0xfff; + virge->streams.dda_vert_accumulator = val & 0x7ff; + if (val & 0x800) + virge->streams.dda_vert_accumulator |= ~0x7ff; svga_recalctimings(svga); svga->fullchange = changeframecount; From da7149e75ce1abd1988bf872173f509660bb9e3f Mon Sep 17 00:00:00 2001 From: kees-z Date: Mon, 27 Oct 2025 16:46:11 +0100 Subject: [PATCH 219/233] Update nl-NL.po Fixed typo. --- src/qt/languages/nl-NL.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 583331a64..e3c5879ec 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -235,7 +235,7 @@ msgid "&New image..." msgstr "&Nieuw imagebestand..." msgid "&Existing image..." -msgstr "&Bestaande imagebestand..." +msgstr "&Bestaand imagebestand..." msgid "Existing image (&Write-protected)..." msgstr "Bestaand imagebestand (&Schrijfbeveiligd)..." From c5deff3bd3787a507a3f653aa96d8fc1109d3ebc Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 27 Oct 2025 22:10:40 +0600 Subject: [PATCH 220/233] Try to fix OpenGL screenshot crashes --- src/qt/qt_openglrenderer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index 9b1233f7d..c5d1d0484 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -1715,12 +1715,12 @@ OpenGLRenderer::render() plat_tempfile(fn, NULL, (char*)".png"); strcat(path, fn); - unsigned char *rgb = (unsigned char *) calloc(1, (size_t) width * height * 3); + unsigned char *rgb = (unsigned char *) calloc(1, (size_t) width * height * 4); glw.glFinish(); glw.glReadPixels(window_rect.x, window_rect.y, width, height, GL_RGB, GL_UNSIGNED_BYTE, rgb); - QImage image(rgb, width, height, QImage::Format_RGB888); + QImage image((uchar*)rgb, width, height, width * 3, QImage::Format_RGB888); image.mirrored(false, true).save(path, "png"); monitors[r_monitor_index].mon_screenshots--; free(rgb); From cb1033581e2ef92defd57b91bfe290dee11ad588 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 28 Oct 2025 01:58:24 +0100 Subject: [PATCH 221/233] mem.c: Make sure the topmost for loop on mappings recalculate exits right after the first iteration if the mapping's end is zero (ie. if no address bits are ignored). --- src/mem/mem.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mem/mem.c b/src/mem/mem.c index b4225372d..24500ef23 100644 --- a/src/mem/mem.c +++ b/src/mem/mem.c @@ -2347,6 +2347,9 @@ mem_mapping_recalc(uint64_t base, uint64_t size) _mem_state[c >> MEM_GRANULARITY_BITS].states[n].r)) read_mapping_bus[c >> MEM_GRANULARITY_BITS] = map; } + + if (i_e == 0x00000000ULL) + break; } } map = map->next; From 5f065eb6a6b456b547da1768c0f37f2a3b97cd11 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 28 Oct 2025 02:14:20 +0100 Subject: [PATCH 222/233] In fact, completely use the old version of the loop in such cases. --- src/mem/mem.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/mem/mem.c b/src/mem/mem.c index 24500ef23..80803e6a2 100644 --- a/src/mem/mem.c +++ b/src/mem/mem.c @@ -2316,7 +2316,38 @@ mem_mapping_recalc(uint64_t base, uint64_t size) if (start < map->base) start = map->base; - for (i_c = i_s; i_c <= i_e; i_c += i_a) { + if (i_e == 0x00000000ULL) { + for (c = start; c < end; c += MEM_GRANULARITY_SIZE) { + /* CPU */ + n = !!in_smm; + wp = _mem_wp[c >> MEM_GRANULARITY_BITS]; + + if (map->exec && mem_mapping_access_allowed(map->flags, + _mem_state[c >> MEM_GRANULARITY_BITS].states[n].x)) + _mem_exec[c >> MEM_GRANULARITY_BITS] = map->exec + (c - map->base); + if (!wp && (map->write_b || map->write_w || map->write_l) && + mem_mapping_access_allowed(map->flags, + _mem_state[c >> MEM_GRANULARITY_BITS].states[n].w)) + write_mapping[c >> MEM_GRANULARITY_BITS] = map; + if ((map->read_b || map->read_w || map->read_l) && + mem_mapping_access_allowed(map->flags, + _mem_state[c >> MEM_GRANULARITY_BITS].states[n].r)) + read_mapping[c >> MEM_GRANULARITY_BITS] = map; + + /* Bus */ + n |= STATE_BUS; + wp = _mem_wp_bus[c >> MEM_GRANULARITY_BITS]; + + if (!wp && (map->write_b || map->write_w || map->write_l) && + mem_mapping_access_allowed(map->flags, + _mem_state[c >> MEM_GRANULARITY_BITS].states[n].w)) + write_mapping_bus[c >> MEM_GRANULARITY_BITS] = map; + if ((map->read_b || map->read_w || map->read_l) && + mem_mapping_access_allowed(map->flags, + _mem_state[c >> MEM_GRANULARITY_BITS].states[n].r)) + read_mapping_bus[c >> MEM_GRANULARITY_BITS] = map; + } + } else for (i_c = i_s; i_c <= i_e; i_c += i_a) { for (c = (start + i_c); c < (end + i_c); c += MEM_GRANULARITY_SIZE) { /* CPU */ n = (!!in_smm) || (is_cxsmm && (ccr1 & CCR1_SMAC)); @@ -2347,9 +2378,6 @@ mem_mapping_recalc(uint64_t base, uint64_t size) _mem_state[c >> MEM_GRANULARITY_BITS].states[n].r)) read_mapping_bus[c >> MEM_GRANULARITY_BITS] = map; } - - if (i_e == 0x00000000ULL) - break; } } map = map->next; From 8d92dbd0c270586d2953d6c704c481c5f3f4d547 Mon Sep 17 00:00:00 2001 From: WNT50 <173389620+WNT50@users.noreply.github.com> Date: Wed, 29 Oct 2025 22:58:14 +0800 Subject: [PATCH 223/233] IBM PS/55 CPU and name update --- src/machine/machine_table.c | 90 ++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index b65dd5d51..205ad9309 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -6851,7 +6851,7 @@ const machine_t machines[] = { }, /* Has IBM PS/55 5551-Sxx, Txx stage 2 firmware. */ { - .name = "[MCA] IBM PS/55 model 5550-T", + .name = "[MCA] IBM PS/55 model 5550-S/T Stage II", .internal_name = "ibmps55_m50t", .type = MACHINE_TYPE_386DX, .chipset = MACHINE_CHIPSET_PROPRIETARY, @@ -6893,50 +6893,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has IBM PS/55 5551-V0x, V1x firmware. */ - { - .name = "[MCA] IBM PS/55 model 5550-V", - .internal_name = "ibmps55_m50v", - .type = MACHINE_TYPE_386DX, - .chipset = MACHINE_CHIPSET_PROPRIETARY, - .init = machine_ps55_model_50v_init, - .p1_handler = machine_generic_p1_handler, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_386DX | CPU_PKG_486BL, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_PS2_MCA, - .flags = MACHINE_VIDEO | MACHINE_KEYBOARD_JIS | MACHINE_APM, - .ram = { - .min = 4096, - .max = 16384, - .step = 4096 - }, - .nvrmask = 63, - .jumpered_ecp_dma = 0, - .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_at_device, - .kbc_params = KBC_VEN_IBM, - .kbc_p1 = 0x00000cf0, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* 386DX/486 machines */ /* Winbond W83C42 - ASIC that clones AMI 'F'. */ @@ -7160,6 +7116,50 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has IBM PS/55 5551-V0x, V1x firmware. */ + { + .name = "[MCA] IBM PS/55 model 5550-V0/V1", + .internal_name = "ibmps55_m50v", + .type = MACHINE_TYPE_386DX_486, + .chipset = MACHINE_CHIPSET_PROPRIETARY, + .init = machine_ps55_model_50v_init, + .p1_handler = machine_generic_p1_handler, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_386DX | CPU_PKG_486BL | CPU_PKG_SOCKET1, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_PS2_MCA, + .flags = MACHINE_VIDEO | MACHINE_KEYBOARD_JIS | MACHINE_APM, + .ram = { + .min = 4096, + .max = 16384, + .step = 4096 + }, + .nvrmask = 63, + .jumpered_ecp_dma = 0, + .default_jumpered_ecp_dma = -1, + .kbc_device = &kbc_at_device, + .kbc_params = KBC_VEN_IBM, + .kbc_p1 = 0x00000cf0, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* 486 machines - Socket 1 */ /* Has JetKey V5 KBC Firmware - we now have a photo of the board and its POST From 811cdcdb9a2c9e5c8af0aad870bb5b9f5ddf29be Mon Sep 17 00:00:00 2001 From: Bozo Scum Date: Thu, 30 Oct 2025 15:37:30 +0800 Subject: [PATCH 224/233] eliminate Missing ROM file error for 'Tsengs ET4000w32p Rev.B (VideoMagic)' on case-sensitive platforms such as Linux --- src/video/vid_et4000w32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index 4b95ba04e..cd78c555e 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -40,7 +40,7 @@ #define BIOS_ROM_PATH_W32_MACHSPEED_VGA_GUI_2400S "roms/video/et4000w32/ET4000W32VLB_bios_MX27C512.BIN" #define BIOS_ROM_PATH_W32I_REVB_AXIS_MICRODEVICE "roms/video/et4000w32/ET4KW32I.VBI" #define BIOS_ROM_PATH_W32I_REVB_HERCULES_DYNAMITE_VLB_PRO "roms/video/et4000w32/Hercules Dynamite VL Pro v8.00 c 1993 Hercules.bin" -#define BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC "roms/video/et4000w32/VideoMagic-BioS-HXIRTW32PWSRL.bin" +#define BIOS_ROM_PATH_W32P_REVB_VIDEOMAGIC "roms/video/et4000w32/VideoMagic-BioS-HXIRTW32PWSRL.BIN" #define BIOS_ROM_PATH_W32P_REVC_CARDEX "roms/video/et4000w32/et4000w32pcardex.BIN" #define BIOS_ROM_PATH_W32P_REVD "roms/video/et4000w32/ET4K_W32.BIN" #define BIOS_ROM_PATH_W32P_REVD_CARDEX "roms/video/et4000w32/cardex.vbi" From 2bf3c5a864ad8de223cafeb5132efb70b9e56146 Mon Sep 17 00:00:00 2001 From: Bozo Scum Date: Thu, 30 Oct 2025 15:46:37 +0800 Subject: [PATCH 225/233] complete the onboard RTC Port Address and IRQ selection passing for Multitech PC-500 and PC-500+ --- src/device/isartc.c | 6 ++---- src/machine/m_xt.c | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/device/isartc.c b/src/device/isartc.c index 3ba092eb9..0128dff0a 100644 --- a/src/device/isartc.c +++ b/src/device/isartc.c @@ -680,11 +680,9 @@ isartc_init(const device_t *info) case ISARTC_RTC58167: /* Multitech PC-500/PC-500+ onboard RTC */ dev->flags |= FLAG_YEARBCD; - //dev->base_addr = machine_get_config_int("rtc_port"); - dev->base_addr = 0x2c0; + dev->base_addr = machine_get_config_int("rtc_port"); dev->base_addrsz = 8; - //dev->irq = machine_get_config_int("rtc_irq"); - dev->irq = -1; + dev->irq = machine_get_config_int("rtc_irq"); dev->f_rd = rtc58167_read; dev->f_wr = rtc58167_write; dev->nvr.reset = mm67_reset; diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 5969f25c9..97e351c1b 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -1259,7 +1259,7 @@ static const device_config_t pc500_config[] = { { .name = "rtc_port", .description = "RTC Port Address", - .type = CONFIG_HEX16, + .type = CONFIG_SELECTION, .default_string = NULL, .default_int = 0, .file_filter = NULL, @@ -1379,7 +1379,7 @@ static const device_config_t pc500plus_config[] = { { .name = "rtc_port", .description = "Onboard RTC", - .type = CONFIG_HEX16, + .type = CONFIG_SELECTION, .default_string = NULL, .default_int = 0, .file_filter = NULL, From 3689c53018a41f2a0679996b57dbc4b346248825 Mon Sep 17 00:00:00 2001 From: Bozo Scum Date: Thu, 30 Oct 2025 15:52:02 +0800 Subject: [PATCH 226/233] correcting KBC device types for Multitech PC-500/PC-500+/PC-700 to reflect real hardware designs --- src/machine/m_xt.c | 8 +++----- src/machine/machine_table.c | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 97e351c1b..007e8c7c4 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -1310,7 +1310,7 @@ machine_xt_pc500_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&kbc_xtclone_device); + device_add(&kbc_pc82_device); machine_xt_common_init(model, 0); @@ -1429,9 +1429,7 @@ machine_xt_pc500plus_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&kbc_xtclone_device); - - machine_xt_common_init(model, 0); + machine_xt_clone_init(model, 0); if (rtc_port != 0) device_add(&rtc58167_device); @@ -1507,7 +1505,7 @@ machine_xt_pc700_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&kbc_pc_device); + device_add(&kbc_pc82_device); machine_xt_common_init(model, 0); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index d8bdade84..83076edc6 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -1126,7 +1126,7 @@ const machine_t machines[] = { .nvrmask = 0, .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, + .kbc_device = &kbc_pc82_device, .kbc_params = 0x00000000, .kbc_p1 = 0xff, .gpio = 0xffffffff, @@ -1169,7 +1169,7 @@ const machine_t machines[] = { .nvrmask = 0, .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, + .kbc_device = &kbc_xtclone_device, .kbc_params = 0x00000000, .kbc_p1 = 0xff, .gpio = 0xffffffff, @@ -1212,7 +1212,7 @@ const machine_t machines[] = { .nvrmask = 0, .jumpered_ecp_dma = 0, .default_jumpered_ecp_dma = -1, - .kbc_device = &kbc_pc_device, + .kbc_device = &kbc_pc82_device, .kbc_params = 0x00000000, .kbc_p1 = 0xff, .gpio = 0xffffffff, From d9718a9e5f0b07a73d2379672d74d33ba8604c8f Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Thu, 30 Oct 2025 15:04:04 +0700 Subject: [PATCH 227/233] Added the Leadtek AwardBIOS variant of P6SBA --- src/include/86box/machine.h | 3 ++ src/machine/m_at_slot1.c | 65 ++++++++++++++++++++++++++++++++++--- src/machine/machine_table.c | 2 +- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index ac20b3085..628e388e8 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -1223,6 +1223,9 @@ extern int machine_at_ms6119_init(const machine_t *); extern const device_t ms6147_device; #endif extern int machine_at_ms6147_init(const machine_t *); +#ifdef EMU_DEVICE_H +extern const device_t p6sba_device; +#endif extern int machine_at_p6sba_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t s1846_device; diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index bf9a5af22..ee3d0b0ee 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -955,17 +955,72 @@ machine_at_ms6147_init(const machine_t *model) return ret; } +static const device_config_t p6sba_config[] = { + // clang-format off + { + .name = "bios", + .description = "BIOS Version", + .type = CONFIG_BIOS, + .default_string = "p6sba", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { + { + .name = "AMIBIOS 6 (071595) - Revision R3.1", + .internal_name = "p6sba", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/p6sba/SBAB21.ROM", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision 05/07/1999 (Leadtek WinFast 8000BX)", + .internal_name = "8000bx", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 262144, + .files = { "roms/machines/p6sba/leadtek-8000bx-80000507.bin", "" } + }, + { .files_no = 0 } + } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + +const device_t p6sba_device = { + .name = "Supermicro P6SBA", + .internal_name = "p6sba_device", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = p6sba_config +}; + int machine_at_p6sba_init(const machine_t *model) { - int ret; + int ret = 0; + const char *fn; - ret = bios_load_linear("roms/machines/p6sba/SBAB21.ROM", - 0x000c0000, 262144, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000c0000, 262144, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index d8bdade84..e8d46bc1a 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -18436,7 +18436,7 @@ const machine_t machines[] = { .kbc_p1 = 0x00000cf0, .gpio = 0xffffffff, .gpio_acpi = 0xffffffff, - .device = NULL, + .device = &p6sba_device, .kbd_device = NULL, .fdc_device = NULL, .sio_device = NULL, From 0c9be843aeca729d4bdac8e2b83849a77ef3761c Mon Sep 17 00:00:00 2001 From: MaxwellS04 Date: Thu, 30 Oct 2025 16:06:36 +0700 Subject: [PATCH 228/233] Corrected the BIOS version for Leadtek variant --- src/machine/m_at_slot1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index ee3d0b0ee..cb77c332d 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -977,7 +977,7 @@ static const device_config_t p6sba_config[] = { .files = { "roms/machines/p6sba/SBAB21.ROM", "" } }, { - .name = "Award Modular BIOS v4.51PG - Revision 05/07/1999 (Leadtek WinFast 8000BX)", + .name = "Award Modular BIOS v4.60PGA - Revision 05/07/1999 (Leadtek WinFast 8000BX)", .internal_name = "8000bx", .bios_type = BIOS_NORMAL, .files_no = 1, From 1256b1e10ffbf8a81048e946861a831cba707a3a Mon Sep 17 00:00:00 2001 From: Kotochi <185547947+rushieda@users.noreply.github.com> Date: Fri, 31 Oct 2025 14:31:09 +0300 Subject: [PATCH 229/233] Change the P6SBA sensor readings, fixes BIOS setup hang on Leadtek 8000BX --- src/machine/m_at_slot1.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index cb77c332d..eb5c0e90b 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -1039,11 +1039,8 @@ machine_at_p6sba_init(const machine_t *model) device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); 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 */ - hwm_values.temperatures[0] = 0; /* unused */ - hwm_values.temperatures[2] = 0; /* CPU2? */ - /* no CPU2 voltage */ + device_add(&w83781d_device); /* fans: CPU1, CPU2, Thermal Control; temperatures: unused, CPU1, CPU2 */ + hwm_values.voltages[1] = 3300; /* Seems to be the I/O voltage, reported as "CPUi/o" in the Leadtek BIOS and "CPU2" in the SuperMicro BIOS */ return ret; } From 57349bedd368f4d93a9785fc4f637af5baf30d75 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 2 Nov 2025 00:48:57 +0100 Subject: [PATCH 230/233] Make the % fraction-less again. --- src/86box.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/86box.c b/src/86box.c index 52ca8a774..8b2dddc7f 100644 --- a/src/86box.c +++ b/src/86box.c @@ -1740,19 +1740,19 @@ update_mouse_msg(void) *(wcp - 1) = L'\0'; mbstowcs(wcpu, cpu_s->name, strlen(cpu_s->name) + 1); #ifdef _WIN32 - swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i.%%i%%%% - %ls", + swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i%%%% - %ls", plat_get_string(STRING_MOUSE_CAPTURE)); - swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i.%%i%%%% - %ls", + swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i%%%% - %ls", (mouse_get_buttons() > 2) ? plat_get_string(STRING_MOUSE_RELEASE) : plat_get_string(STRING_MOUSE_RELEASE_MMB)); wcsncpy(mouse_msg[2], L"%i.%i%%", sizeof_w(mouse_msg[2])); #else - swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i.%%i%%%% - %ls - %ls/%ls - %ls", + swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls", EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu, plat_get_string(STRING_MOUSE_CAPTURE)); - swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%ls v%ls - %%i.%%i%%%% - %ls - %ls/%ls - %ls", + swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls", EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu, (mouse_get_buttons() > 2) ? plat_get_string(STRING_MOUSE_RELEASE) : plat_get_string(STRING_MOUSE_RELEASE_MMB)); - swprintf(mouse_msg[2], sizeof_w(mouse_msg[2]), L"%ls v%ls - %%i.%%i%%%% - %ls - %ls/%ls", + swprintf(mouse_msg[2], sizeof_w(mouse_msg[2]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls", EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu); #endif } @@ -1887,7 +1887,7 @@ pc_run(void) else fps = ((fps + 20) / 50) * 50; #endif - swprintf(temp, sizeof_w(temp), mouse_msg[mouse_msg_idx], fps / (force_10ms ? 1 : 10), force_10ms ? 0 : (fps % 10)); + swprintf(temp, sizeof_w(temp), mouse_msg[mouse_msg_idx], fps / (force_10ms ? 1 : 10)); #ifdef __APPLE__ /* Needed due to modifying the UI on the non-main thread is a big no-no. */ dispatch_async_f(dispatch_get_main_queue(), wcsdup((const wchar_t *) temp), _ui_window_title); From 79614f6ada271954b2131919f183023ecc1e969e Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sun, 2 Nov 2025 00:52:20 +0100 Subject: [PATCH 231/233] Swap the XGA 4bpp rendering nibbles for proper display. Fixes incorrect rendering of XGA 4bpp accelerated modes (INMOS XGA ISA and XGA MCA add-ons) --- src/video/vid_xga.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/video/vid_xga.c b/src/video/vid_xga.c index 0a9822006..bec538c62 100644 --- a/src/video/vid_xga.c +++ b/src/video/vid_xga.c @@ -2716,15 +2716,15 @@ xga_hwcursor_draw(svga_t *svga, int displine) if (x >= idx) { switch (comb) { case 0x00: - /* Cursor Color 1 */ + /* Cursor Color 1 */ p[x_pos] = xga->hwc_color0; break; case 0x01: - /* Cursor Color 2 */ + /* Cursor Color 2 */ p[x_pos] = xga->hwc_color1; break; case 0x03: - /* Complement */ + /* Complement */ p[x_pos] ^= 0xffffff; break; @@ -2793,24 +2793,24 @@ xga_render_4bpp(svga_t *svga) for (int x = 0; x <= xga->h_disp; x += 16) { dat = *(uint32_t *) (&xga->vram[xga->memaddr & xga->vram_mask]); - p[1] = xga->pallook[dat & 0x0f]; - p[0] = xga->pallook[(dat >> 4) & 0x0f]; - p[3] = xga->pallook[(dat >> 8) & 0x0f]; - p[2] = xga->pallook[(dat >> 12) & 0x0f]; - p[5] = xga->pallook[(dat >> 16) & 0x0f]; - p[4] = xga->pallook[(dat >> 20) & 0x0f]; - p[7] = xga->pallook[(dat >> 24) & 0x0f]; - p[6] = xga->pallook[(dat >> 28) & 0x0f]; + p[0] = xga->pallook[dat & 0x0f]; + p[1] = xga->pallook[(dat >> 4) & 0x0f]; + p[2] = xga->pallook[(dat >> 8) & 0x0f]; + p[3] = xga->pallook[(dat >> 12) & 0x0f]; + p[4] = xga->pallook[(dat >> 16) & 0x0f]; + p[5] = xga->pallook[(dat >> 20) & 0x0f]; + p[6] = xga->pallook[(dat >> 24) & 0x0f]; + p[7] = xga->pallook[(dat >> 28) & 0x0f]; dat = *(uint32_t *) (&xga->vram[(xga->memaddr + 4) & xga->vram_mask]); - p[9] = xga->pallook[dat & 0x0f]; - p[8] = xga->pallook[(dat >> 4) & 0x0f]; - p[11] = xga->pallook[(dat >> 8) & 0x0f]; - p[10] = xga->pallook[(dat >> 12) & 0x0f]; - p[13] = xga->pallook[(dat >> 16) & 0x0f]; - p[12] = xga->pallook[(dat >> 20) & 0x0f]; - p[15] = xga->pallook[(dat >> 24) & 0x0f]; - p[14] = xga->pallook[(dat >> 28) & 0x0f]; + p[8] = xga->pallook[dat & 0x0f]; + p[9] = xga->pallook[(dat >> 4) & 0x0f]; + p[10] = xga->pallook[(dat >> 8) & 0x0f]; + p[11] = xga->pallook[(dat >> 12) & 0x0f]; + p[12] = xga->pallook[(dat >> 16) & 0x0f]; + p[13] = xga->pallook[(dat >> 20) & 0x0f]; + p[14] = xga->pallook[(dat >> 24) & 0x0f]; + p[15] = xga->pallook[(dat >> 28) & 0x0f]; xga->memaddr += 8; p += 16; From 30743b6dfd5a6f16599c3c149b279b4a9265143b Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 2 Nov 2025 03:51:47 +0100 Subject: [PATCH 232/233] Tandy warning fix from pixel_jupiter. --- src/video/vid_tandy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video/vid_tandy.c b/src/video/vid_tandy.c index 3d2be3a41..0130fb7be 100644 --- a/src/video/vid_tandy.c +++ b/src/video/vid_tandy.c @@ -478,7 +478,7 @@ vid_render(tandy_t *dev, int line, int hos_offs) } else if (out_x > -8) { for (c = -out_x; c < 8; c++) { buffer32->line[line][out_x + c] = - vid->array[((dat >> 12 - (c >> 1) * 4) & vid->array[1] & 0x0f) + 16] + 16; + vid->array[((dat >> (12 - (c >> 1) * 4)) & vid->array[1] & 0x0f) + 16] + 16; } } } @@ -508,7 +508,7 @@ vid_render(tandy_t *dev, int line, int hos_offs) } else if (out_x > -16) { for (c = -out_x; c < 16; c++) { buffer32->line[line][out_x + c] = - vid->array[((dat >> 12 - (c >> 2) * 4) & vid->array[1] & 0x0f) + 16] + 16; + vid->array[((dat >> (12 - (c >> 2) * 4)) & vid->array[1] & 0x0f) + 16] + 16; } } } From 75b1a94929765e2ed0c14735c5e2dec5842edeef Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 4 Nov 2025 00:28:56 +0600 Subject: [PATCH 233/233] Fix dirty block checking on NDR for byte-masked blocks --- src/cpu/386_dynarec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpu/386_dynarec.c b/src/cpu/386_dynarec.c index 23f3f1e35..41a61495e 100644 --- a/src/cpu/386_dynarec.c +++ b/src/cpu/386_dynarec.c @@ -405,7 +405,7 @@ exec386_dynarec_dyn(void) uint64_t mask = (uint64_t) 1 << ((phys_addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK); # ifdef USE_NEW_DYNAREC int byte_offset = (phys_addr >> PAGE_BYTE_MASK_SHIFT) & PAGE_BYTE_MASK_OFFSET_MASK; - uint64_t byte_mask = 1ULL << (PAGE_BYTE_MASK_MASK & 0x3f); + uint64_t byte_mask = 1ULL << (phys_addr & PAGE_BYTE_MASK_MASK); if ((page->code_present_mask & mask) || ((page->mem != page_ff) && (page->byte_code_present_mask[byte_offset] & byte_mask)))