From 542d9f111702dd2eb0b4aedf1b088cf2ff206a45 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 11 Dec 2022 19:48:58 +0100 Subject: [PATCH 001/112] Dialogs.rc now correctly undefines STR_SPEED. --- src/win/languages/dialogs.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/win/languages/dialogs.rc b/src/win/languages/dialogs.rc index d32192397..0f74ef10b 100644 --- a/src/win/languages/dialogs.rc +++ b/src/win/languages/dialogs.rc @@ -1009,6 +1009,7 @@ END #undef STR_BUS #undef STR_CHANNEL #undef STR_ID +#undef STR_SPEED #undef STR_SPECIFY #undef STR_SECTORS From 7c6e390c951843b4229a70ac373796f85e303277 Mon Sep 17 00:00:00 2001 From: Alexander Babikov <2708460+lemondrops@users.noreply.github.com> Date: Sat, 10 Dec 2022 21:49:11 +0500 Subject: [PATCH 002/112] nvr_at: Re-add a forgotten check for VIA NVR Fixes the GT694VA and CUV4X-LS stuck at POST C1 C0 --- src/nvr_at.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nvr_at.c b/src/nvr_at.c index f233e82ba..a881444c2 100644 --- a/src/nvr_at.c +++ b/src/nvr_at.c @@ -1096,7 +1096,7 @@ nvr_at_init(const device_t *info) io_sethandler(0x0070, 2, nvr_read, NULL, NULL, nvr_write, NULL, NULL, nvr); } - if ((info->local & 0x1f) == 0x11) { + if (((info->local & 0x1f) == 0x11) || ((info->local & 0x1f) == 0x17)) { io_sethandler(0x0072, 2, nvr_read, NULL, NULL, nvr_write, NULL, NULL, nvr); } From 66d250d011b7212ce31d0595ca3d9344dbf8b6fc Mon Sep 17 00:00:00 2001 From: Alexander Babikov <2708460+lemondrops@users.noreply.github.com> Date: Sat, 10 Dec 2022 21:53:17 +0500 Subject: [PATCH 003/112] machine: Move the GT694VA code to the correct file --- src/include/86box/machine.h | 2 +- src/machine/m_at_slot1.c | 42 ++++++++++++++++++++++++++++++++++++ src/machine/m_at_socket370.c | 42 ------------------------------------ 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 596972ded..052e55abd 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -681,6 +681,7 @@ extern int machine_at_p6sba_init(const machine_t *); extern int machine_at_ficka6130_init(const machine_t *); extern int machine_at_p3v133_init(const machine_t *); extern int machine_at_p3v4x_init(const machine_t *); +extern int machine_at_gt694va_init(const machine_t *); extern int machine_at_vei8_init(const machine_t *); @@ -702,7 +703,6 @@ extern int machine_at_awo671r_init(const machine_t *); extern int machine_at_63a1_init(const machine_t *); extern int machine_at_s370sba_init(const machine_t *); extern int machine_at_apas3_init(const machine_t *); -extern int machine_at_gt694va_init(const machine_t *); extern int machine_at_cuv4xls_init(const machine_t *); extern int machine_at_6via90ap_init(const machine_t *); extern int machine_at_s1857_init(const machine_t *); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 2cc76c69b..ec818871a 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -572,6 +572,48 @@ machine_at_p3v4x_init(const machine_t *model) return ret; } +int +machine_at_gt694va_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/gt694va/21071100.bin", + 0x000c0000, 262144, 0); + + 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, 3, 4); + pci_register_slot(0x0D, PCI_CARD_SOUND, 4, 1, 2, 3); /* assumed */ + pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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(&w83977ef_device); + device_add(&keyboard_ps2_ami_pci_device); + device_add(&sst_flash_39sf020_device); + spd_register(SPD_TYPE_SDRAM, 0x7, 1024); + device_add(&w83782d_device); /* fans: CPU, unused, unused; temperatures: System, CPU1, unused */ + hwm_values.voltages[1] = 1500; /* IN1 (unknown purpose, assumed Vtt) */ + hwm_values.fans[0] = 4500; /* BIOS does not display <4411 RPM */ + hwm_values.fans[1] = 0; /* unused */ + hwm_values.fans[2] = 0; /* unused */ + hwm_values.temperatures[2] = 0; /* unused */ + + if (sound_card_current == SOUND_INTERNAL) { + device_add(&es1371_onboard_device); + device_add(&cs4297_device); /* assumed */ + } + + return ret; +} + int machine_at_vei8_init(const machine_t *model) { diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index d11dc0876..1388eec3a 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -344,48 +344,6 @@ machine_at_apas3_init(const machine_t *model) return ret; } -int -machine_at_gt694va_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/gt694va/21071100.bin", - 0x000c0000, 262144, 0); - - 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, 3, 4); - pci_register_slot(0x0D, PCI_CARD_SOUND, 4, 1, 2, 3); /* assumed */ - pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); - 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(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); - device_add(&sst_flash_39sf020_device); - spd_register(SPD_TYPE_SDRAM, 0x7, 1024); - device_add(&w83782d_device); /* fans: CPU, unused, unused; temperatures: System, CPU1, unused */ - hwm_values.voltages[1] = 1500; /* IN1 (unknown purpose, assumed Vtt) */ - hwm_values.fans[0] = 4500; /* BIOS does not display <4411 RPM */ - hwm_values.fans[1] = 0; /* unused */ - hwm_values.fans[2] = 0; /* unused */ - hwm_values.temperatures[2] = 0; /* unused */ - - if (sound_card_current == SOUND_INTERNAL) { - device_add(&es1371_onboard_device); - device_add(&cs4297_device); /* assumed */ - } - - return ret; -} - int machine_at_cuv4xls_init(const machine_t *model) { From 4e4e3864bf1cf86378def0c698321218d3c780fb Mon Sep 17 00:00:00 2001 From: Ompronce <88358700+Ompronce@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:38:37 -0400 Subject: [PATCH 004/112] Minor changes to OPTi 82C929A emulation Solves the issue of the power-on IRQ being 7 instead of 5, and removes the unused NVR reference (these cards don't have an EEPROM on board), as well as using the correct WSS IRQ ranges. --- src/sound/snd_optimc.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/sound/snd_optimc.c b/src/sound/snd_optimc.c index b54174ce0..5d36d990b 100644 --- a/src/sound/snd_optimc.c +++ b/src/sound/snd_optimc.c @@ -6,7 +6,7 @@ * * This file is part of the 86Box distribution. * - * OPTi MediaCHIPS 82C929 (also known as OPTi MAD16 Pro) audio controller emulation. + * OPTi MediaCHIPS 82C929A (also known as OPTi MAD16 Pro) audio controller emulation. * * * @@ -31,7 +31,6 @@ #include <86box/io.h> #include <86box/midi.h> #include <86box/timer.h> -#include <86box/nvr.h> #include <86box/pic.h> #include <86box/sound.h> #include <86box/gameport.h> @@ -41,7 +40,7 @@ #include <86box/rom.h> static int optimc_wss_dma[4] = { 0, 0, 1, 3 }; -static int optimc_wss_irq[8] = { 5, 7, 9, 10, 11, 12, 14, 15 }; /* W95 only uses 7-10, others may be wrong */ +static int optimc_wss_irq[4] = { 7, 9, 10, 11, }; enum optimc_local_flags { OPTIMC_CS4231 = 0x100, @@ -68,7 +67,7 @@ typedef struct optimc_t { sb_t *sb; uint8_t regs[6]; -} optimc_t, opti_82c929_t; +} optimc_t, opti_82c929a_t; static void optimc_filter_opl(void* priv, double* out_l, double* out_r) @@ -334,7 +333,7 @@ optimc_init(const device_t *info) optimc->cur_wss_addr = 0x530; optimc->cur_mode = 0; optimc->cur_addr = 0x220; - optimc->cur_irq = 7; + optimc->cur_irq = 5; optimc->cur_wss_enabled = 0; optimc->cur_dma = 1; optimc->cur_mpu401_irq = 9; @@ -424,7 +423,7 @@ mirosound_pcm10_available(void) return rom_present("roms/sound/yamaha/yrw801.rom"); } -static const device_config_t acermagic_s20_config[] = { +static const device_config_t optimc_config[] = { // clang-format off { .name = "receive_input", @@ -455,7 +454,7 @@ const device_t acermagic_s20_device = { { .available = NULL }, .speed_changed = optimc_speed_changed, .force_redraw = NULL, - .config = acermagic_s20_config + .config = optimc_config }; const device_t mirosound_pcm10_device = { @@ -469,5 +468,5 @@ const device_t mirosound_pcm10_device = { { .available = mirosound_pcm10_available }, .speed_changed = optimc_speed_changed, .force_redraw = NULL, - .config = acermagic_s20_config + .config = optimc_config }; From c6de006c249730466a9959c6d105b3c69de951a7 Mon Sep 17 00:00:00 2001 From: Ompronce <88358700+Ompronce@users.noreply.github.com> Date: Mon, 12 Dec 2022 12:36:16 -0400 Subject: [PATCH 005/112] Minor changes to OPTi 82C929A emulation Corrected typographical error in code at line 43 --- src/sound/snd_optimc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sound/snd_optimc.c b/src/sound/snd_optimc.c index 5d36d990b..eec718277 100644 --- a/src/sound/snd_optimc.c +++ b/src/sound/snd_optimc.c @@ -40,7 +40,7 @@ #include <86box/rom.h> static int optimc_wss_dma[4] = { 0, 0, 1, 3 }; -static int optimc_wss_irq[4] = { 7, 9, 10, 11, }; +static int optimc_wss_irq[4] = { 7, 9, 10, 11 }; enum optimc_local_flags { OPTIMC_CS4231 = 0x100, From 07857b7fd1b0f1759c05adb0f1a907ca1cdc72a8 Mon Sep 17 00:00:00 2001 From: Ompronce <88358700+Ompronce@users.noreply.github.com> Date: Mon, 12 Dec 2022 21:18:06 -0400 Subject: [PATCH 006/112] Minor changes to OPTi 82C929A emulation Corrected bug introduced by earlier pull request which broke WSS audio in Windows. --- src/sound/snd_optimc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sound/snd_optimc.c b/src/sound/snd_optimc.c index eec718277..7a76d3258 100644 --- a/src/sound/snd_optimc.c +++ b/src/sound/snd_optimc.c @@ -101,7 +101,7 @@ optimc_wss_write(uint16_t addr, uint8_t val, void *priv) return; optimc->wss_config = val; ad1848_setdma(&optimc->ad1848, optimc_wss_dma[val & 3]); - ad1848_setirq(&optimc->ad1848, optimc_wss_irq[(val >> 3) & 7]); + ad1848_setirq(&optimc->ad1848, optimc_wss_irq[val & 3]); } static void From d11b901a53e369cbdfdc781f37c32df0d04106c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Castell=C3=B3?= Date: Tue, 13 Dec 2022 14:51:18 -0300 Subject: [PATCH 007/112] Add suggested new macOS icons --- src/mac/icons/beta/86Box.icns | Bin 169574 -> 315191 bytes src/mac/icons/branch/86Box.icns | Bin 194973 -> 309676 bytes src/mac/icons/dev/86Box.icns | Bin 217773 -> 317326 bytes src/mac/icons/release/86Box.icns | Bin 196323 -> 314012 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/mac/icons/beta/86Box.icns b/src/mac/icons/beta/86Box.icns index 0068beeda30c9d8219a71b4467cd5e0dd35a9e6c..e1e78daa7cc05da5b0f53aa1b281a995c11682cb 100644 GIT binary patch literal 315191 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�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
!x?OekBfR+ucg%PF>@U`9wWa9AhHHk&)zXmgZVZ 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 literal 169574 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 diff --git a/src/mac/icons/branch/86Box.icns b/src/mac/icons/branch/86Box.icns index a2631c66ed8764c3633af309be5422fd5bef64c0..f466bfe3f271a5c61c6ba8793c07f3bd0587ac8f 100644 GIT binary patch literal 309676 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%0DsqX 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%0DBKK4+uV7W`Nc@U%-ESJT(Klo<(Bc!9Q9o& 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

#|dUXB@)#i9@o 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 QLuN33MF0Bp@9*XR2V!1ByZ`_I literal 194973 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

^C z%srqc?7pZ#<%aCf=S8)rdelnZ;)3vLc*&u@u77OZ3;yb34z2`u+j4Cfu|Fq@ZyY`L z5hDpTkOErL9UWNVVR3ROy}a`(>YBqt+ZdJ2!U@!8f2uS`aVUAJDj;&hAy!lDC%2S2 zb;vgzUYdikRix4_@|u2wt)}yV0;?OD@H0xdvTQfckVOYmv-SyLui?lj+Wd*gVQ#Y1 zBnfDwPK_}|?^Pv};!eDzRh$m5pp?9x+Nk62(|$5Q<}?WgPko}$l!Mq4*k?B0U(QZ) zTrsL~CMG!K559&y@l8sE_S)jEmmS3*dwIZZ47Q=NtuaB-`DC#uFFI^)b2jpcokMOK z6`Tj9%?gP3)hK$7-)leP)`BlT`%HrI)ff;~UKTWdr-r7CRaLHad;4=dlvmbHFm#2s z`e3ClqQ|rK7bA0j)8T53Dy%5WrL7V;vW%)(Ld}@o zEu|csvg53)Ok*)ox^+M?9r5#exeQ&~d;vbw2A@3xmw^xIM}3`0b_*eFww!(12rNvp=xVOSdYyMheZr~Y^ zowpf%!zQaC^AqW$^Oh%0DO06~5faKm5W6eY_8E$yQ^xdPiONDH-y37~a94 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Π`!~tPTiCW!_mkvO&j@00% zU6ZGOlmL5rr^|cp8G?Qt^PgVyP8mlto=d`|O9xp(HZbI9OL+IrAY1siD~c?Q&Yg*{ z2FckcM^oSIL~A8O?+h!xmw}GTbGA-31R8&lK?gfj5)4-gVcs0gFrLFKNcu-lhNMm> zf4mCdZ$b(N{eD@!6?q~(51FWZP9?}>369=a+Ut@*ZwCZ}mMR$eFmTZp+O(bk&4!cue#l6%ECGx$?9^3AIZE9OgGp6KB-&KjekR zeyR*~Dvy0-rg?Ovkh0uO!G|BvpBPG@u?hE)(hd5l;BQlzo$>JkGyZq=ucSu)Ku3@o zjme8ps?#+00QGyxV}?n*lpr2wxP75gEA8y@F*cb9jXMCqaDOIbA?2l%{Oom?8ydkV z1iQrE(dF_XT83CBo0zUg1-Ib>kv53 zP=fGyGLnvFG|y>QaM*iA1Y;YN;BaI7x6JJ6)UQNrQUmV~8@9Om=gS!RF=Mm2h6P{x z>AlGfshH6rMpw$qJVM8d2qmdKrdU=e$v$8=6Tp42CNhx^-@G7>)Ui?q5&St&E`MrQ z({mdAVT@ZD4uxn zZ6n(N8{M`f#NgI}qU9f@ZWIR+)S*Cmhlj`(dg&a0 zO=D$U)fG4ai-|@`3oe#l>?ozly6o;PYjdcZ2FsI-zvz{s~;zH46RxwrkYktX+%p&eU5vqbX?+P==kR?(tKk zru}MuQfCGH#F*hsJ1T53r^Glk1;4xCcz4wIg$#D=!Qi-rMF5_%!{Db(e-*_`&TPfO z2+gD!7};D2tRxxH&0n1cr3N3#)S?Fy3A`8C5F5W>3}8 z9=`V|1vl6X#J8&lQr*EPs=Fp@fZ{V>yq!g0VW{~xFkly|B2ZosOywfh1lyv(CJbs9ulZ_7B5ZCAZNTX;lO6ofC#H0Zz^i*h?TZ4@2&a@9U zbbq4erD55wo_wM6Rrae!&eV0Cn4tTjpm9dAR3%a7F)RHtg>KJlB;z?YqDFgh-*a#D zH-XcBYG>_B3?g7t7XY_NuNj{Qw2Z)S#w3DvhuUvko{nxF&AX`CeYD`4rEpbwf`tcT zkRkoqmrO@+1(hg6BKZ7D2BoS>W^9APu{CzjjTvYhmmH>kuc*!Zg&@Hl#3=m?t3RX! z;{F*R`)vZ6oF6uVFFTAyOCi_x_ee;e>#lpDN~#pZ$9zm{186pLV)Yz5kdxGa7aPu? zpakuaEQWdNuKub2O$Hi??10cYL44vBY+_hfcR*7Db+!S-G76ShILGm&`KZT8NtjFW zTd0e}Pe??E4_lrOHzl-$S%YzZB-I{*`2F?E9-NBRa(Yt}srT64dznqD*7eGk6G}rx z80oO?`%!ZXTB$|DIeB!&cQGN-b1SF!b2m|R?nxcA!Q7x2l=j+|&Mn&OM4w$ISZ-11 zk{=lxl=M!FCnn_CRO-S4oQ^9HvQTx^7gHWz`(ZqvfMD_P_N~sqi(DvnEJd6;t?h=a z`K@az68{VJ(oz`8pw&0RCRh8;lWl^#ccjeiXzynU6Z;XBb+|CwN?N0fX$xPYTCsV) z#2TOenF6iKJ-k*lV#^jMjV~+d%!{jOle7%t9!w-_AeMT*wcHYo&A<1>kntPNJT`c- zcRzmHB|)W1(nSq?ro>N}g%eMh%kk(UO<7?rWaW29RF3b~{EBHElLgrCgQa@j{pip~ ziGUtV+420&f0F)0cB7E1@vb_ch$G6Nu9#I>%}1Pe%}_vkYyIK_F%6x`qUTunz~ft$ z!v5p@3(JE89x3^7XLE|QJKzV%6rj$@26m^NNSHm3^4P~7?dMatmqjXUuH*5fi_C7f zTVTuU9DZ(lFsyIf4vW}%uh@y>AcWkqqhJQiVNJVDsNr;!5@$zwh>6ix&oAbQo-3;q zf$l-Dq58eWpUjp`lbQj&liuVR4fs;?^BsXR=)WE~qVl*hQ_Hf}KX>3G!=%$1WLZKq z(mTo8h!<7`lPs1CM5tuE9%$f06$83U=Nr0JsdV&FY`E^~vTMaj1I{QPlR{e*^+?_Ip^Q?7KeI&Eaa@Qezipa<@Y{CtIJ-5 zH8Ny`*eD}BIyL-4cgG2`N1gHuDA?eH_0#zEI6iiN#8VPV&?03F?H6d50Q~}uF2vBw z?UA0$h1U8e#=`d0<5zMoe+H<7x91Akn0x;@3SCv+fYGwYH0vhO_FI%d&#kwc}T`)eXr+iafVA* zX?_v&Y=(W>5hKj1S0pMwW#JH$m_Am+v{NyB}rqCdN@&=)K8aykTRS`&gG|# z&TbD5%qUW1SdgJN@lB84Tj*;F)1G(*xU@W1lumm&T*77>Jw%-B;nG?t2k)z#?%d%_ zBy+iZ-8U(EqzD%Au?B6R?|6rerC;dfjN*s~ zDTXcu@hEk>;h=&yK*W@^2Y(h-K&1pQ91gU)Ojp7Hd0t{)YL{7)U^)sj&CA|?+?bD* ztLWNxR|l*svprcko@|wN1Zff3?gL&2NUNG5lND(e(7aPm_;yV0U+#@&(NNo-*(crG z@*a)$Wpl_Z5n?E5nDT-=88_QQtnsNf)S9lTc3XgGivDJSTYF%`^dKYQ$O~ zRx+*trNV=~!N+t-Tvqx($HM|xVUE4f-7TjCjAGO&17&V~Slqs;Cj;9mrh_A33Lf5g zGp-w`AkcQ(yI+@9e7SMCuDhP*9O3RvU!1Y zgV-SZy?%^=qYkZcreO1X(*HK3JO@s8TQ^*vjwY|}=|QLoNF@khA3@W(WB#J5X83!W z2lmnh3SUy)*U;F)&o3%8OY;bUqE8k&^r$&g2_ToM&>MpiYVg6hl(`?zoSn>2p$hI^ zG;P3Y`>5G>aOVre@mhG8H`-uPWkg?4TBcHqYTdkSaFYelUr$pG;dw*O&b+qFeFXCw zq~0+tv9~AWCHXy$9@Y92btAo6kwB zX`~CG*)5#u`P8ac4JoG}r8Lie#J$Tv+F!!w!5_j-;rjz8!b%2Wk1y)@^nRy0YwANO z?oN~=L%)wTK5C*I`HDGx+FTEn+QzYS4X`!5qRO2SR6eD`-&~7nJd1#ffxGMty!E;I$uvO%lG3Xh}?o_I5O^)cBeUjt-9p1kCFAarnloC7|i@`H)NC) zaLV7;;qYJ(s=XNb{$-fYy5L&9!dYa@+U8Kpr%+G)cuKYl-R!8cC9x&L?7rZR1v{|a z;HGN(Gln=avJR|l1noHgbBilk+DlzO z3EW$C?6us`1)a&EPQ}H?J3OW6n*|M&LZ^DHZ)uZbV(^*Q0pTm*XUgYF0`@x%Yt?RU zM_J#gJxdRs5zJvcl3|3b&3DGf)i6FyfZ6QCx<@4!Dh{ana=h}$5OemQYM_WU@ovg* z69Yqkz-v)#G<#TGQ4)w@Rz7$%=5rYtjLf_r5q%ytVHIQ!Nkpz=lF7Ec=dO>HAu_yz zIk1Su-scTEHyilH9x(^#Djl4=g6eyB>;0vN=F@bN6L5Bl+uoK%kj+#&z%=FNIIaEX zSOvg1pIeu$6+?u}>w-%o+hv{T1?SqSl46>QrQ@wNCzMzM&vR^7lXm))xv+|54f}CR zT8=W=z4zGyzShk3W&iwmW;7(c);X zI(1K%Yoy$R7I)?u`G!bpy-r@M)N@}c^W1k_&Q-2VMwP;xIy&NFXSoGBAMJhH&%l=09sx8~@83izR^F1%g;4N{;OUKgV{ zp_803vbW)IZnPze4E=bTnCC>rs+28?F)hBrprxgK7o*1qr)p39CgJ7c$C8U)wv_wH znD2h5cOQr(j$7uYd5q*q8a1xTRm~s8N|+)&_Gc8;JbJEa6cgITaD!YC8IO2|4G~N0 zIT-75J4&Xc%gzgDT`9dzs=_FN`a~JjRAmj>{2=t> zOxtR#l{xQAEg#A?fCprdW_w!Sv%M>m0=RU|-;v}SXqC~PAGX1NM_r?J;6jN?tWQ4( zHODv9-Stsyu`#(4T1kFIK3C(7K9dYp7VZ)Yo_fdyAdjy>o;3!0L^z)0=$-h*NwG=) zLd*VqQZx-wV#Y!256Z$kvbu>5H#D3uBm$<&YAh&2|AcL=@>~4bYxiOP8o*LmxMFEh z#hUaCcJ8*MgtkwJ->{qD0!hU-ta=70ow{!%w!q0n5@=;xgen`;i5Uahis?IkL+C*$23U zFn70bTrD!9K0xvAY>QdyUXCN z^*%<~`Iu34T~L{~JaH?q13}|36y__9)GZu@BpIH=YuH4-0id_}j^nPG+(LL|g!!xn0 zU5;9>J5(SKCt)Z096cyHvPBReOVD+2UXlxQQ`{e)4UH`JRUyv z_6A{UUtR9^o5R~#HPGLvy_!pSTF>aGHG$xTZ}E9F<@+p^H9QnX{!y1kt1vN;8Q>fdv=1ORz#7kdcLf3z%B z0kJ?9WHw_4U^!nVBq-+bpNZIbRKa)4SAPy5Iqi+&IEZCIkmnl-o6^%?=PE0A>;kDZpkNrU!?obtIP= zmOalUQ{FO3{2iEJ#B$);-&GQ==6DfupfpPVSzty2rJ<$mTsWFOOd@8Hm#YJt&^ zKWoQXP*m!5Q0rrRNS^2xmy7dv$NQc$r0Kw5rMnM202Wcml`YTJLLv zS`IgOm9{p@^gC@LQ|E?xvb5o1&_>DIV|NjqBm3hx26BT?kq^JLGJmKzeF(>+GsQ3M zg!0ILBy#J~;-lE;GfH5_%o;r~=Ln3D@-3ZNe4xuD6f6@YYDtL5OwXLu{34aB46$BX zn6w12__tG$1l5H)8a+cgT=n52nxdhADlUrtPckt7F`!@kf1|nu;A1-sXooK%wa0L9 zitWp_b5_iok#h~R>NP^!YL%rF`_dnu^=*<$Tu>_Tgjl((nAZ=){EyF?LsYf^bJ7YK z)``jyUo7KjcelNO^=_xVAhu7-oKO;aifn{Yf}lSHIrb<+etRn7eir(}sS}@pc%c8puC;fHt(a{on zW_mL9)0>Arf2nv+FA|$Ow(LbSg{<$KX1MCT$1(DnmH{A|kAUd+TniIisE9T`IA_TI zz?)rd@A8Yk{zT3}M~AdIkqCd`r~^fFdUf1Z-p$M8Ln_vBCS7IX3mD(cJh5j^R7IO0=mrqtqchpU zp$y49k5a75s}qT>Xo~`=xC!8>kxJkFC7t!SnUrqQw&L;0ICt__&F1OAT3)gr(AIGKssvFk1w?3PGKq?eHGRvTRjjbqD{==H# zhm;)|ssXC=)jNv^vx0J2d&esLcownK=g3P;)mt#YlZ4z9snfpL%I-|ayXz3?yTYTJ z*EubDpXh~!+hriO=GctCUf&zxb$>yuvo$8}==AN0^K~WRltq>XBg!dz-R%ni(>{8- zB{ICyK^zDelBU2Yy~7eN>PjY>$ge`#A1Z3=9nZ4Nt=+eBPU2n|d|2XqFgyTT2U(Uv zPiVfvAIJ)}a&VZAtR|jYM21lXm8@RMWvoJD114~*qfg3ib!JAfZ5(Ui2J_5YC91a1l#*=yAFS*4PsPl{dG`WZ@S|qF%Z2%jhT)& z%#Df>ePY=Nh(jQZ*`)kN$J_bi$hlP4pQa42jk$sR@#&m#Ej`DDuhj8C_)dQF zX!yXU!-ELVjqhgqw>41@d_DDTaf8Er=-QUp=6y7R9zoF0;J=drI)v0-U66$EBSFlv zm4e{opq#euliwUp(!@sYxK}K==+~syo`Bd6QV;QLWL!l)845dM#L{YYY6t>mHv&QU z-&{a)8p#jUiwnwD$^2S*U6Nd%O?!Zz(0L9Lc)4qY4^-LHb%^DkDl1(Es(h{42ZR7cRgBJ z!)-;m&YI6794Bju1PTYS)a3Z*;VpCE;n(bM1uc6H`<#{A+M>l@Bis}Z9L^OJsE9NO zCwjS#FosrFSIu7$=NvUTm-!1J8u1d{2W<`Xk%XcVOW`)?hz#U}kY!v196s~w^ydB1 zmd$G#Ag~GZ8_*d})*A<{2Hao6ZV7&KQ3A@ZWMq^RxGrAu+Y`!Sc}w$cL%Bfe4Zypcrf9>RmmJ8pjXot#Ou*s5= zk@5JDF?socoAU#Od|QwE;S(}BLHECnS;!f&$i@nK{#$TKz@)3t&&W6@7+XdUYMoke zLu_vEVW#Br`YfpT<+cpKCjshY8c^GiWX>1=J`~Gg30C43+u=vHwnY_Ot8Zu+pBu8} zvh^@t!tAowHA9bsyu0~!{~qX|C>!8m?B}j?z}-@iuziEwGNi7d{^258*tZxF_9vi2 zpr?iZj=zToBiy9T{r#lk)}$yx!t0kWl(Jrk*h=z^r#%k~Q-H~n>VbP5gbE?8_y1{n z{*`o~*LkA{vg%A)-RW(I>FfE8%8JjCh2{#fps0D^*M&`znf_@uBot^iYA5qW{>uvK zd1Tw9n-Eojeg2hH;1!$a2jb-Zd8a<}7u`Q^e+K+Zt$m>Q?|&5rL-d)3DB`X3Tm?UZ z0ir6mogtO;)QJ={_L>dM{$Kh3sXAC-7GiYl-oGzB3|ti!!K!ZkTNL&!Zsg^m^Mw~7 z`xl|jqv-nh$!>5CVD7q~|IB*jZqzu}#yUME`SNGXE?D#>{E_ zZ}*f50hj9n?udV{1t4~yWFsf`e}DNAaOq|68PE66wZ?g59q3ZwPpMD9x0s`+tDEB* zw6>q_Pj%cJGF#Mr6!`?PwzqL&aJ}TC^I>M$^n-%yOMUov2D_ICTwa~Kq2SOnZJ@J< zY3lB12jyV?p0@r>CE9;i=Ak)~>;KF%K-&%0S9$*3b}Mya<}rwQMBXnbNJPj_%r@PnfYXRK zaqQp5J9PbQj z^(L)-%?OSnh^%1szb%-`{?HaYTi|Kpp=W$Bx^v3-^FQrx1fwv2dJl>@$tWr+ zYW@oUz4CR2T%&*q+kN+B-LZw_AkygY{}J{k;81tr|M1LMqGZWlgnDe*laOUZ(jt^f z_Cb~sLfILTq?CHHW*HJvw(R?mt?WhieX?X5gE7Wz?-}L!zrWx6zpl5du3Y9j=X;j> z+~+>`^7-I1TrK?S)_=&?E^QQe%Y`V|*7LkQ8yFm{wNNpE^TFC`=0ct_%I!{-PWo}! zjS#mF|MU!^(|t6YXlrZku9A|H;lFQX7q(ZM2OJ1$@t0 zOASo-!xrtK=EpC|2?d6RuTI@M{38d~I5U`Z>dZFQ}<7msRjwZ@;qB zAMo?{mBH|Rqn%oo-^dT^-Ie!`2>+cb2rQHFZ7#&Hi)?IcY@m8?-(^SYfbm`UgDm$L zj`5C)CHvq&EWF%iLn+nux8C5IIeUvtf55DG-2~o$@b?RmBwFJMW73jlnH(?V@?-74 z^UnY)C^+BhSC~qSxnpsXuf5U~^}}X{)a9UeX2NQNg3emPqC(Cj?sOT59NekW@CK`k z{O6wL-um_(LEBPx26a!n)S+??yy z_Wx#iF&g}MXN2$r6x1F+EdplI>WriD%1HHlJ-6IW+bw*cVwDUu-dhCQ+>bX^PLIUG`^9PoMsV*qtnV1pWYU0C-QJ)}l?OQuNwxaw zx*ZI7eB%LFwdm;N3koaQ-q=`U|y;Lw~hLoDSX@a@UcX5lAtm ztp+RLbOlhZYhw>xinWiqL#6y(4n44^FJ%tAi>I02+2z&%G}M6x!;vjzBPed^t71Q zk1SZo>L_0*J=aRIQGX}1;&D9M06!(#TbM+fiQdC zP>Uoa-+tEf_DSeDJwiXX)jx8tQN8wE2?Jc~g`U4nCd=O%>K!|Y zie;l^5eFVboJ6j4Uv8Dtx@_4ZecNCo19-$Ezm_Q({jbU2+8>(GX=_aA&dM^>F>CN% z$;;OxJ^lT(t8GgG?(P43JMrZZdE`vpLWxkXW7HVlw5JA_nG@5hE%KJbam=;lsxi&A z4XCghq>ZhutBXgVr{`ziki~zDNyg%*>(c;FF#q|#OOY(`YQ+PZ7e^emC0hnW`D=Y~$VFas!7m5uZPjw4ja+J( zcK=A=&y0tzF`3H7jJ00Tzu)c%t=jvYFCZXw}pS^?@JGl)T`hPwImms+YBO zeX?JU_C(;1TNi)Air~G=Zbp{5KE$P=#rq9V`*lP-of7`O0UGwp8DjB`yssv?_dDX5|_-5<)N!6uc%d9%bvvwHa^;A3L3dfIR$ShRc9WOucLF99FeX&r3xK(D?P>+ z5`L;zD3G4zSiDGR-_ExozCmgfYA2yDYz|+88vd{%LLkhqFP=MleL;D3`S9*;JtN7P z4$j)D=$))f>J~D`xrIZ(9uh zPQ{Gu+-)(N$Bx}Z#gzHCY$i~H(om?FOGOy+mr1GYE)KAyK~IN8|19a0b{K*Q%pTJA zQW95km4yNjwNeX__GlHiw)Jy$z{+rRT%XaI*c(Tt&9A~^>^h6 z_C43^d;*TkqYz))5X~$#($-x^EzWG-jH??|&;lyxyE9Nh|1aaIp>BV}ND@-2>B5UQ z1!QmMkzA_Yl6}A_4;ikJnAvx@SLhKzvkQ^FsS7pFQ@YV6LW4(Re)rW<$hXFAwE10^ zL^mp&&!d7*K!RISt@Y@aC7pT3kUU6#H~FE*C9>O-Pq?c5lTb%y(-qmDnVnt*$lul< z^?b6+mB!!l&*yG==O?^;rPWoKWl9a~tJtjV!V_6NQ5vh_X}M>%-Dp*>S21d!@#Z9J z-9I-mX2yw+sYH%ijfJ7k`*-H-EB+yUmhlnJc^D95j`{49yP74K@G@q16HCKqcq~2U z9|m18a2Xq6#XF+;gGUPeWM?Hc?&gGqJV+VI3MfTa;jAu4c9Cy*Qn0F%7k*4^&CJ+i z$^GA&n!X`@oaSeimt}wc)ZCXlpj!QMf5Ul(j`F|zhQvbNW(zIob@%Wv7(}I|y?i;^ zh`~5$oI}FGZp{@&pOZ*%QY+5%x!cOSj0ctysWF* zPA=Ca%c}jpVb&<;0A%#*IdJ1Kh6h!b1O*4D{t64EUQ9e)@pON~oNoJ*zg_l(!L=DU zZO_!te9ttfiAqjR#xXfqAj6$`s{X zxh&Oh#3Rq`tLv7|O&)0++vq8q5h9UqS=-E1?Q?vcYcfZ}VYQ9c4dzgf@02_T7nakd z_t^d%bDR?Qw|BHUaBWnin#3ks=t)}99jDz6r89=@<9Je)oVJxvI8=u`iG00SBb=rm zT!J9{-RkZv=TOkzxL@DDUsW|3k^*}qjE`mE4()pWZEEiOom&P>=`m_0m;W9@p*p3o z^q(IYKN$b9B$qgg2;{7H1B6maod7YWj9iY4HW~Ln0eR?;Iryh@Q;&22!p_HF+)Ru6 z0uIyW^X!iycUyD~5MgR5-V24GR0 zaL)7>Y~Vb-AUe$aSGDg47d2Ct&wTV91%T@&QLe)i9n zcm^CVCOitQ^t0wMtJH?A1|~rlOy)vn7OdAGWmx=glfWy~0NE!@pDa8}Y&SXX`{cyL z>UiwHiuI|J-#kb$I(J;2?$^<4)IIU%8>0N66IB=N_km7?n!-*undvvY%xRb0FczN; z6y}9Y;?9D59sP2g&H|p)FS6&MKWPiQO$~7{H5KFyeOrqA>%FoSmCeW`e+@^oWbrU#*T*R*}Jf@E;28>H<;FJG5Skd7Cp}%h&0M~Vd)|MZA z+HM4xwf6m8XE_1NtN=LsABZE?S9^VV)Gso31iptl{cBEf9kf9%QrBFY4 zpzPuI(=5-9J@uh5)SVXVt9qHi>p$fc5=2Px?x8^D`3mo}ycA9Uke&8SzmnJqn-6)i zZ+s#A$eUV(%k=G&&}Ue(vi9l}f+*48M5*&QqGjLB3E5|$Deh8zvDQ$t*8Xm^>eGD> zES~u#e7?OQh{@~v8F1wcuXw%q9AgrH)Z|mjqdb|=H(i9NXBVoyN1Wn5cdCv4kSQy= zCVSw8)-Xq%`a}2lpM8S5Y@VH>tnB8oS9Q1~V6iu@vAti=wx7FsWk5*oj%&c#f3L_J zvd>mlo`@z^nJAuOS41O8L;aT`8-8g_eLPjR%zpnfE1UKyl}TvtWt&vnyS3ee;{3wS z+8nhh|8@zc(+;o69wtV;q8#^NTnH-88{}%JJJ^3B9`AqKyv*Tl2;;|(E7lHtMyp|) zXI@ppwzk5qMon1lv}G1l8yplF88{V0h6S1Xj_OZ)lE5mdIo`VHbma=<1o)W+0*$-_ zVFW)x!N0@cA6U$E*xqkokaULs^E3TJDa8adhNO#}(nep!EK1}Ix zFIL^lEQsfFFfUfGE20FQ$~V{lJu@$}WrI#ld3bkTD`)ZgPxTu}R9l|!O5N5h1s!KX zquB&vFJ;gk^1|pzHEvi|vlDT3)>?leA`McHk<~ zpJ?w5bp8W~jl*dsC7M#W4a4r&EOZedA;%gwc~cr97kraxFS;Ti!t$WSLmI=dm{Awu zOx=7}hWuL?8Z8gYBPuU8p!=qA2W+=t`i(x-heVmuSG~XOqNam10YxRw#8XN(C8UXy zZDjv9fMftC^*1D&`LsdMIYnu~1w|vz>s6V-m=CUo>Pka|*SJnGiHS1qh7>YifS|?q z^R>5YPtGCdlAPl=)9?QIOn?=DKA}D{+fg6Rm$NlLygrf21F28hE7A*NeGI61vf zu7MQv8iefp8W2DH$-ae&iZUUhwTlyJ0?XKsFOAseu|90Xx5kZ;08uPhET z_+O=MfWc%sMs5!N1@bA7-pd9~uEY0Jl75w{Bg#->fL}p8+RC}!U!|| z|1{^a(Z;vop`59nW1!LE((mT!(khbGdd zLN7rDg!tq3pmqcX=>#it^Sm1(5}|i@LtX-6pgqFDJf6^COs2(NgP230K|OMwJynm< zsB8Bf$3cTgZ^&h+3%jKLUWSc;8EDW2=lzUW!IJo8ccwERgXdgzz;g!`^#7Ale)@Ck z%Fl?Ztg&Bq+smYPuosd5Q#>`+zlQ^?V+KO!>AyCjhzXGQyMojpASOBo*PH_RXB_Y{ zKG>ga(i;cb`xaQV)vKPN-%rs3K4P*G7_E{uqWQVH^6iEQ8I1heeKrocS%qI zl*d1e^=lCd4}Ls26Cw{lx~bfE9_{VEk(f{(NYnLBGzD(8c$HoWt9Y2@DUstKz>v{v zx{|-!b@1>56&SY-lyd{Sh_bz61L{y&>BCtARoS7_(>Vis%~c-?V=aV~?)_w%cLcv!OS!~U*QjC8(-XNB43lS2f z*QM{KmKidFuQZ(7ZVxcn>mGd=Q;^qxwThlzdPPNrAC9(T>njSrTaD4U6Tdg)k!PVs zuzNBoi-x;1@5!}*#fogsUS;yaho8PS{S*iXqFHPJviJNM4j`tfgey-}G6CHn`=`3Y zV1j$K8MSG|p23IZfQR!8va*}5#m3}Y-v=8T|4Q2-+%=ps4!;DwV6w2s1KH4gRtGpK zhyy!U0#br5)U{TghqO+(i>F)agcFr*XPHBrhX4YILwL>k|0XLN2$q29b|k#gnc9({ zAQF@C3i(qMyl zfN^+9ENLBjfqkz|ANM#Qo}{&^)+^Qa0y4dkafQ>}P6|wjlwgxOdXfSC+hI=hBv!Ud z);!1OCiO)wn}XbZHfSO|8a0?HWDAgc!KZ?gXG{J|6Z}XY=8Z~~M0x`VvKXX^j{m%F z#U5(JD3pw1{lCwOO68x&MIjp=_!ke3AwE4VleF2d6L|l+!rmaN_k*>w##f!%)v-GB zVgQ>}dE-(jA?l5=CD|Zb0+2;TM<~d;MbMj7;T9ZX_Ntd85 zOmZ#%DP~FfJWGmPD-@$|ECG3#V(_GKNxM!#9o9I+nJy;E_2EvtAJP}%I-NG><9$~} z`X&Qn1SuhOrmhz!?WkcB%FHN3Agcj!4>!25H_lc@FeMJK8s=U3Efoo)QmMUnJUl## zCY;ap^w(i|p(A!tlI*B};Z-^vh;NW&*R?$y=!>io`SB-V>Q94AkRI%)6qU>ZP}fxJuQ!+*~y#R#1@FP)JeEIpSU^ruk(| zy6wv{?sI;8pHaC6{Y}D?7fb$Qti8!tZ3F$9zf!@QC2?k>b3zq|mx8HBgznIB;wEnx zkkqr`*P=t-H|j`>`a+nXwpEPBDNOxH8GvJKd_ow`7FY!PIcC<3(_3Rd_ABw&AnErzB)~5WL`5;n&-ympH0wdB*dBThU1)671C$7=6 za)1ztGG&R?P_%0P8KTDW>VS@jVn9$KWIJF+O7bXuZO+rz1_|#1Ck~YUriNDl4vr~( z7_h+yvmdktLQeF;a?i`PhbegcBs|kuA1`R{+Z$SwL-<_o$jOW(<0v!-is2`DqAM-%50-32=pH=UBya9vwVn4mzc zGDkb^cUwZmVjqWJ2BS$@iDI`^opX6rWqgO0UYp0~On}qRF88s7U8r`JlXN9DL$sG8 zWWNBp5i{`d*cAFXPgtYpO?pyylL0sp)|9UA^4ilSqnbVJsu@@zaJ{E;t@DZ^8?>57=*2fz@I=0(L;t6BFS-f(fiF zZN~Fgpf3Cy3gJV_m|{O$+dwkT8~#&_Im5*GmMg)t(srBmp9)yZ2j{$M zhd*@%h(n%?oKP-XU6*K!mad3b^b=4IsmI*XvnmkASA}@t>)}B=8P;*IyuiYD0N0t< z!;9fPBczgkv1rl<({P{b`mW(kpM2}54Nqkt>T|{e0VRozq2|gt!n50576QTY+GZ#j z!n3mllOQ`QG6Z+WSlyLo8ZVoD*94SPJ@E*M%3U+ zE(vwU>Rmq)BB(NmY|VBje<4QCC&8tRPU|D)-{naOk&!Uvy^Onu9W62QkrBMn>+rM z`9plYrji?}TYrv}U0FTx>`Ou*JfaWIG^dO%_9uqWSup}Wc5AEMnyiPYwl1c|%%K*qWpz!<_t8-hnCw19xl2@^UBue29yt zfxP=@+TzZOjBMvdGU7-OKdO2I6Hm;w3qo|kyOIeiSxpg=j*onDCuA71S<)Ff2lI~U z)b3tZ)6Ic3a_V{P%zvi(aXN|2uSBGIIlKxY1&#V$GT?!zXealnuDfoE8wRvC zR0&xuTyDf;1%t9a^vH$cGI^#*Dzsv|j>Vp`6v&+S@_|vkHX01bI5ZDrT20*&;Dbseo5z10`y0Y z0*%||8^)bTQ>%{1M)9S@WWZ?J`4;J(f7Ho1aOU%!l`(;LF?6&Q6!lWRDGR8$nY)t! zt74R&AoOf^N=`e5l|94{6E*V57-a&7@g%vUQf6whEAeO$;MOUCB*M3w9>2il;G%JX z*-L|)c00MLU6E=%Yq>@P^_Lwn4!H|0kt5`$aNA)XZ=Smwe5<1s+wVDt0>x1TxvTrV zuuI-Y5oGP7sGU;RbbWEr+C1v6bd}N*X89Vfeb^H=+@ppf-cTV}5rfo;2OMQVRh z*}jSA{)+I4NP>(BcJg>h4nyezQ`-thXO@CUd}Jj^*7cL>j%wAdAORgz{3*E z9GN|el=q?nra-xvPbP+3<6NfvYmdNWNGTS+XG`Z9l4n@-Hx8n00FEq>DK7;*b-xCH zmNgWF<AxX`Tdp3%qHoeGBvA+yiOjPefC#WFTRGvgU$D6O; zp=q{53`Y((Jifzme8PW2LF#b7ME1Qh#f2{dCD;TbO@_9d`cAJy0LAnm)?i-}VH1-@ zjh_A?^duVX>SlEr9^k6^{pALfI@d#UV7b_Nx@o(_b?3CZefMcmZ8o9ogAT@2rw(fb zbtn*15b@{@lXL~uHT(MYy!!H$ToY6E?R2n^162JXXH0`n0HhPT)jCNZovQZ7|1MGT^wCXyck$_(thik7;1&C3Jf;VL zXl&$tZtArAq8KvLxNNt%-5zh}@IW?H%M zJ!9gd#y|)ELht32(0ysha(Bi=w`;Jxc&|h+`_{Z~HD#O4YjPSW6|Z)??g%CF1JiSJ z^Dqfp)nR_&=Q&hi=rk`RjM-tm_hN-qIrd$t4#o&tbF}l-};e_`ogsd^r zMX|3h^bDN1kB;$9E&AJ4yx!BxRIZlH)Wj*VZoxgD6{OAUp;RlC-bLYEX?IN(i> zKCjxZ!4X5E;O?x-d75dHtUkQ8KP`Qr0O~7YVi*`CtIoXr>+t=Ph->HA^Cz!d%Vy~n zF+4gs`XsvUlk0!L=A}C_rJLUiDo1-H6w~ZNZt*837Rt0`9eu)H z67h|D5MlnQybQ$dGITDR;YF&cj z_-m)}8NzHRV7|gJftR~=o_)eca!$Z=PWg$8MsmzXcaX?S+?IOZb0a&WFjc|CX318M z;f*xu!1LJPo&_z_Hq^aKkdVWZfQrXJc~WF0cha#v9HoklI`k^Yi)DGfI{qqSkUIoZ zcDIFWsc(n_3v~h7+w<310lYR(b@~7m(+WI+(xZ)3)aPm-7@knFJP;}v=+yBR-l^KL zd6g$R>WV+bwXat}yC|L}YK{e|1SQHi+q)IBT54{0T_TNx?QjpC0Uno=)IoPELA|HG z=2XBj^IZf~h6U9cTaAcMd2?RVp@ch=rxrTQMy#Q6F~RTa88+^^A3Vb(NOkN?^XqAF zRo8LpeTSzcs1#N*OTi3fW?356)Qtfu7f~5C2KjiEQPbPwCfC}^LdC6MV?V2h?b3~D zo}+HLmv)W5usWdQi&PH>?77Gk&vLq0K-c_!0p_A`VkXNJNiC@7zVPeAoa|GG();lN z4%ETb31Qf+z8rk;bBFjXhBwC;KcPY-n(H|Uh*~R?3RZy+E$IPRE z&_vCDE(Te!5|UV}<}^+t0fZ{|$#9}2JngsSljV`=^5p40kD7Z;WJ9j0`AEVQ?6;oO zE262AQxeTlj};#V6|%%iL;Eus(-qUN*9LU(sTS}0@pQC+a4zCrN&Ypn5xSxP*ZJ1~ zwWBxe_dGy69NA>ZjQHj?W83FS9rzwQSSO+RxfPkEL`l{E^w|Y5q_aBnr2i6A26>6L9rJ)I zzvC$3l1}jbtDz2GJUX0~+ENAQy%-YFwi^Vhu}Ad&mYA-3%#WT3s$}7FY)jDCzy3C(czLU@pTgUyYHF;naD zEnEq?IrS&|jjLsxk_MSL)Gk6@{>8=cHW4GSgP{IjI7SIJP)@mdqeRuq}|sbt|(b{Y-zIzM$9ycQ134! z_)Y9{M2wW)$#7Y}d@OTaN3R@8!=c z7CdoLkv9vE{!=YwqtUpPI?ogK{;9wvb^XwL!5mKV{E#_g&H4fA*>mN>EGeF?f^rW_ zfD<)-hIh;yD9(jEY{u~30VluuZqpJFRn*3zLJNUtTiPjsbeSLD0#ou+X;GotU*U)1+?hPW;X^|&8Xi^RO zfKRK&1fOgbq-{8GwaA*a@92w5fPzk_&wy*KLdL62r>mRk0(D@Ag8v1(pKPDl*&wnl z1x@+XAk2a#4cbQZlK2%ezCA9Nf@!OY?%Q7lm4fEYW0TFwxD&a?(RqBkdk?V8?FCal_RN@G}^)E?{Gvw`_xdK2zKro!IaQx7PCaDl!*u z@KM;j?Zf)&$W@hW)F@NKN|=LJ#SDS8yY+)>kO{ z2n3aMg8OBrNDzP|7J#LF=HOFKIXQ{u37bw=Uv~q}WX;yYdroYfHnHAP*sJ8K9_ZH= z6-8vnPR}YK=Xk}IG43CSFRE^nN1w45b8nr0iwkt3eaQb#dc$}XmRRV~wi;T4t=D)= zzQ0k8P_Xc0yt26L<9luTLCkaMe#s;$8+O}d4io3z3%4^XPREVXim49Nx)yO z!zOGMJ3I##{O1k_{e#$2OG3HZkicCd z_1Rd&XxSErLnK$z8gBf-{uw*!ZA#{a*s{^>j_spZ%G5rGL7&Jl5$9@Y_6So5**)|g zJ4Bstnfd;_g5reH=oKY=9M@n)-3CE74%EeeP)Rn0A*fXoK#PLXRV~c6ACa3ID&RLf z8u-MfmHa!#r^+*6tRM?S7k*qXXP~DoaiTH(U(;1@S|TMN41ii@^C5 z_@BDv<4A4>*p{jOipb#s&d`i`FBoF;7wlJnq`X<7mspVkqkGkC{Mk=-)R26X*Ws(i z>X#sRI>!Cg@^Jc%uu;Uo^uH_NwcVizKLsO+gA{ijFBDN50c_X3))X;W|?Du9P!M9FxO0N>Vm_O>{R$i2eD z(?b?a7>A@ZU+|WlKV3vaVM%x-*+BPpWEdS)u0*fbwgmU=$Rx|JfnWZv0-D-}6A7j< zc>F|;$V{ESpox5_fz!R9|4*C&V0?`kqec%xFp*+&6U^toz4bo5B*Fxda1}0QzCzpA zeMU;Nc+0q|A}y*ZRJyHgXX_VFL$6kNP8zjnQ%@rZ-hIQ&TK`5-k0$Z@Cg$HD>v0pI z0rH&=D(yX_|6@jbA%#HMDL3hsha{qbq!erM&82m)N*#&Va`gPj4^ueSFakFeW{zRX zDh`+_QXRXm=NCk$Y+V*lusXC1;xCt;-rGknE@Xf|%ie=ZN4)0(xU?WF9u=pAoIy~x zmuVhD2N9j<;`?XW$|wtCfkvbig=TKZbMw!P5=Ox_vTPH|$ekQ;8Mi8Nr7goM=ia*N zCeXY((9H$LK}>pV9se>wFa}&7Ha7?G9rBR+eQ~xmo{oOxH@q z3)aitp%$`&8fPvHcGDDmU3t<{spY*>6*pyr{os}Dqft1^I@CVO8-@mTnCUWmXiO4p z!z`ZCBhNOn>re{eT-`&+@tg=Eck{PU>P3r^?~&oOaV+(r zIX{pA-E=*!wde`u;GpanYzf7Di665scNHLwS1$$LDc?KpM;_^f!(J7yxVibiO;zt1 zxnIm?`$8^2)%~ToRydX?^6J0bMH|zVPmGaecgJFkmMoCS1?>JBt;HC)m**OM`&T)l zLYwL*)I&+q0ElWngL(ZC)7&f@ZEdHI_|C?eJ(1XKs ziNCpqK~0d;F}vE|bX+Z>gNg;@bS7}TxB+vATxbddqKWTQ&Xt2PpU@jC2z>JKuV43v zt)7LtB54GV=sitfj?@=QI`57Nis!kXgjKv<0VTqA~#x?OX!pN2zF2c+~T`i1xsj)=u(f4*Z}4s8Id-R>k!T<_8AzR-*#) zWxFm*xKm_u938*=*lkBYg?Ngcs86rIc=8Oe8OD`2bpM|by zpzaxNw!wFP`0`es@R1CTR-FFdPZt`zBs!D=h3MF5;q$}$mhGsQb_#r zhuHU4EGKGJ#!kd*d@oTdz-O|gH~*8>D6R3Jq6q*S1;5le;mg4xW-)O60UYHJKvuRGqnwN=W?yr*D1hw0+{Kg7OuoW8B?M_z2v~xv z_=O`UkGtx+0NU05UoDXr=TS$<8hp()g7r-!Xr9nBDZf}i7%o(qMoEQi_misLv23dV zZMS2?ny&3k5r#D9myTO+7dwR0Er3Sr%ss!jfGOkRo#}?_bbz#`^$j{?@Wq^bVF0_u z4jIUvtdTA_%O8<%W2vPMDU-9bzkRpugs<$As4s@k?`i@nS<*LOv1S`nF} z68xGday^NQ+{FHzG_87Xh%;zl!ftAycBM5YyhrDag#L%C|Cm5Npr^;^AYrIpjNBCcmYOkIQ+y4X>V&Y&?nD*Frvf z{U*x;VOWS8yp0SZc}UtjM?3((CcTE21B+R}lB`m_=c80Qn|>Dhwd)wb?>(wxzdrCt z|L%u(OH$HMANkNv@(5~R;_tVdCmlV<5<=)yf8>~uoxa8i`(dnyCO&$qq`b_1yn3o+ z0K{UV#}Y7+t#ahE=+d^F13lX~a}wNT;H=nYeq<-RPi~V+TFeCxhJgXHjL)@Wmvq{p zLqc)!i-2JF>Il=TZ_spSciz0j;)Zed$?dNOdS4~$DRR1Ww1c; zZOQJ{(zke^0$QGmNI+oGOblrEz6nl(+pXDF`x}O)3a;*@eMC#cuE;=|QXL)Gb%J9Q zk(Y90)it$8hVg)@FmDRk;=_>QC<&v^RQN`$JG|7E7~++=$r$)upPz{|jtx=0MO`zj zv(|PdDYLs$w}&D{%1a12MhEp#Rcl`mwpxz+#Tvhmxo%$DLQ6xml4r&bL=h_zDKUp$ zGpo#omC*{{&aBr6_USzxpmJXe08yXFP#Wpwp@!#HUf;y0xy~C`Ig?`@atGhSpFT(c z;FZ>smrM41kiC518q-i$-dZ24;(Vk)j6XDZ0YF4OwQajy4`>IqtChoQ! zcWuIyia(dyA3qKWE-mq&u&-h&VLzkTjK{aUfq~jcp`cafO44dgc#lW(ul;O4(e%?A znO9bl&9{Fa(czgArNyVrYOQ?Xe{ z8IRkh(<{ICh8^}P?>lCJ;?|LqJlM*+8Ae(2(H(aMF(4bS>nwE}>_%))I7FPl9-mljNPmXnq15Tb3hZ0an2o&!nk(K35hOtLw zw703pb(nk=0r4A(0>5)Iqp`T-(U+qgTZO~!kHR`wb$_mYdiM^8rb*2SX!@Pgyd#OqHr<41)OJoRn;+J8zTCQo2)L zPrErP6Y_xW#HjXjJq2$0yEck&7@aW5=hKTYZ(VDYl4D|K&lVtaX*RUmd2q|gjw=81 z%}T&r7l+Div~fwL@BvIz*eQ+f;@OxISyHAgmj?$qrwwz_-*sg<$f#YHHC;;*KRqw2 z4(*3iw=vVWM2DFwMuU-Y#yWJRc&v!;*6?HIWJl_gBa)P#z?JZsaCrb`qU%*b`_7>b zF$Jje&k)ppB*D#tBgT1>x5qr)3Y;ckxbRTt<@^({ddl`$C;QqckZgoY#mDd2FN?bt zU=?H;+cO7KWOLnab@|4+7F}Pia&qInlt5Gd>v3bGphnj!#IG?HLQC$7ik}Uc$+&v9 z($`(HV#>Eii$6f~9yO!UhE%c?J}VR^tl`uDLe0&hUnqOzV#q!bp}}@Svbu7!TrIX9 zp`c9|tM+M2eQ+%maqFf` zd%d@JrXk!Oy@hID$;g2n>Xf?KFY7x^P_2jakgtd_HHg01&4K|iq1)K)${_W+ z*uO^yxM`}v>TN*Waf#1En$@;FoQI_| zUN^j|!y0-A?lI4>mfW+c;;L&qnjd7`wi4V9>LXiGn+Zp>rtd(f66y^+yx(;jt-=3-JedVM`Z~{}Sfx4u9HYyp1vk)fnRh2zNlRh}urt3+@Hx3oPaNkL9HaugjW~?@=21Z{0przNBX_83Zw3(cRM`3&(nkVfP!H z;YS8!ugOC;x>B|iI&5+T`Q~C`vTDz=ids&%Hy%GK4si^%f^7XPxtu-~1YL@>g6;?| ze(7ZEkWLrr88fX4T-z}Ec^V!R!w>@O9?ol?6_6k79sZEun7k5d zOES#u9M=$h^8C=N8M`&{Du~t*j5FYCU?fHpW1o9 zW6a2YlpnCq!4h{qN7Cs4jCqrLcvUBO$Q3{&wI3LgYYOXp3|sNx1BTzvOm}%~-B^zR zs5b!4*>-EjhO1XT@?>*sxeYkZX9~ancbv1r@SDXE(y?Yhpn2 zOs_pSJ;Nga*IwpO@i2bOhET9na6tHxSzw@ttp_iO*d=`^XpnniGkfdc$F#={EMg!y zoj0tU*E5IhB9jb-@M*+85zHl4$m?!!!8)@P=yG~bL7is`6O)1Hr3u$CnXs6^#tv6G z*D8*URi<4`AXbGSeDVhpUL^SFt<_7oHIPlU7&J7=Burq+zmE_k^6!@vnwAz$9ugZT z6SA4f=|vRG;U3`wfm&q&`02O}M0wjp&0RGu+=4@fQ}@3gtnOKJ#~m2VyOR*&QZ(8M zU74W{_tP!(mkKK1}4ay|i2Ne1Wpy_Xf z&oWwAlN21b40!<{*=2P~O32QXx;}7o9k>#E0OIA~3jCyU)Wg<$3L#On_cWcEr9P{5 z(;IExK=vPHKEKkvCCR=dSfmiCwDp6-a1?e`6ftFvdih!LYDunjYfe&3rl$GM6{c`_ z!Yd0L`D&s5cqOV0;b_`bj*;IJ5v7qC7;a2( zyJcBb2)S~*079%%8VAY(RtI{}X%>Jyr}v!wTi z4*fNBS)ndg{bPRrW`;J-<#9Nz9(F}Fw9+m-nwop+&XwhGRJoXK#h(zLSpwFV(8Y+u+)N>UQGqXpWmO~+26S0NS(6UED*i=h^VoRYbpMEe z0AnBsvQl`W6~TrE*%71pmIsdY?3FSHEegB*Daxoo2aq!W(lje7m1JCJP=U z0@6sY3aoX=vMKN<96=HL%iUS8L|u+XAI5dy0j-Qq%l)~)6%bWc>7oj7Drg>56J$;EJU-FvvYjG(7&b=WP|*TtDRi&zcT zi>WsDg!}i2P#p3r^2Z#Dq|#)+_IT93&XC#}mj?-bc+}a6HO@5<{Rr$?zzKGd>c^DH zLK`_LTg9mn;LhH?bM)D8dMG5K z4~@u>ofzx`%D_R8L!>oPhM?B4ZBA+vxu6%5q4l~i91}OW<0A#f=SqfCzHhBGZWY?{ zFH;ZjFgnx0&1R)<=s7H&;tqQ{NEx*2%vc+$MB*_99?C{q0 z&8v(ioQCEf=m^QqHk~B}3D7n)3J*x2n&uNvHbgy=0+A%mYwM#?I!3GrHd~H2^kjCQ zTZ=eH4SE7^D$)9s%%1Ij{F%-uZ>TeRQ@mU|GHNh7%Gh@vQnb}G>Uj(?EDr%)ir-S{ zkPejwaF+zWCs#DJJ@b-GyGH_7aFqio_~8ge>61PE6Zh9JvlEg2h;Ld58>Sj*7R3V_ zIhFPm!_$NJu2g&Z-QJ2VoEm5y_FM^yl!j>djLJg`r>2_L>{?^z1y0U32Tn>fkJLGD z-Eo^p3nx#g~vZXgjl)CCIDZtnTl^uIR;^`f!I#oov>AJIoX zmX|!i)F4PLIG%Wlt$J-3SBLWzoIwmUXR`c*T$)qVwI665vfGYOns0y4hcs9eLu=GS zE}gYACv|%CXxhiaE80~0Jtlb093wz(J^hr=d7DGk z9kqB$;UU}kVT1QCYXomvG_!1i>gwR|P53EBFF>z6Ps7_<6bo#T))pK)$GV<<2 zF!8CWh^u0v{D_}~dJ)|okd+?HP1H^238R~7VopCl-XKNmbBTThIsF1!0|}VZ5xeb9RQ)PcR}(M3Gq{E+jaN#IQxa)4|%MZaw;o;wXZP%I27{DR`q{K*2Fz}M2z zE;LH>(5_)Wl&Q*`9F(YZWIQR+T;P=J;`U=Az_&k=C(XcHa_6X`pKC)PE^X?mF}m5) zNC#M#CJ{3YK|4QKL$}^dxf<3wU26FL^Q)C_(anP;P9c=md#GRuqiJ)?K$NoT4oEbq z@jMhRpBQQ0^Hnf`UnMzFYnIO}xHEQNyC6TxAGcB35R#T>-7{S-fih)FF+(fs`Q+y1a%F-RZ57dB;zF4W#C*f2z5tNBqKi{7rZ zYKDg6>Zd`8)Bp0?fm3L^;(}|}%`lJzBkejU#r*pp;5(15x*_-JXzKy))-Qe(i+U6X z+fk=zV>COPRb}Sjytgd>R0^7Qb|IjJG;t(yEn0=R6``68D;YJCI3@lr@uW&=p{B#7#$Vf+ zH?_VNucJ`+=48M6907xCjLKUeRn+7{~zx;$KFH{LdlAZB*{2R zr6QCHS;wx9z2`YcR@p^1hi^s0Dm&wll^mm#%`vhMhvXc`S@+{x{eJg%@8jX0^Ki!d z^Lp>s>p5J_*%!OhcHdz3Tx=Ux_s%k^8(Tw-K7*QQD4$O< z-dhtJ&2kw^5muFNrv)+HhoQS+$6R9cdjS#vp^9PE824r9ol1AfboV@Eg7GMGU5R;> z@%D?A-;n!%Z=eDfS`Rr|6LibSL*GP1jR7dw3SK2n>zwQe9A0qWzHz;-*g8v3FHsWe z=Fs}BifETw<7upOJbWGNNS)tMafM@;9A$Fqzl%qxk zH34EW-Myc)2uq~*^oaYw+$$-wDOisH ztPX;mHsQy=3&~Ib|FX7qYg94guD!@eT%%{FI#?kj$n^GA<0K=2Ph}x>A7t&%0ob2) zwByFF`jz6`3j&D}izeb3p;XuPdu6mGZ;!wN=_7Uf*T|#0C9jk`F9H(tiR`7TxBgy` z+@$%1UE@@{x!bPk7BQbztrZfG+&ekZkZBD{@>v+BkD1!Hs@ft|?cyC;c54hrwnUUL zh}*E$z?%~1Tg1_!N;Kz)th{E)_>OexLvgZ*>8k>T230PJJTE~nqY>c@|6Y#x-6f^? zZLK8&Du&Tp}nfG8t0jC%H(D5iYYkMU!f9LIF4oRJuW zk5)jJQY|~Qz|58*dm)p17hk>RHx=L3h18;~FM$TpdQVT;0PI$+n!|}auH1m(dkH2JoLElj=7eJA>pEhWOrlam;Ba^q( z3*6oIi-_u&1Xr2gIi(9Q0Q7DJuHQ+pPjv3h;!gC>(O#46`iQTSlo&B9sd(!)16bOY zaSSPEP7w~D9NS1rgr3q7alMt8tRgoJ1-2V!6{L-UsesQOY zwk(Hns*Tx3_NfIuz5e1?*^XvDlx<*Jqc53J`Y_{cCw21T6idbah?jAq$$i4^!ZlBBOUyYA{^ zkG7Wid;<5O&M1T#2(~w4pu4bZxuN%I)?!qP_3;z2q3Z;w-{s|1F{2b7B7?GOv3zcn z6N^zP-?AtOJ(pfW_DUdRi?&U^W3}nql((#k`%)6SU{)EKNyCC8p{A` z;OiLo2VK#jnw{3W2bg@}#ia}8nE5B4s4(iccB)qIw0ijPPpdUM2V8K<1A(eR!Nb6*$k+8Itk9On+$uW;Zeu#9*zP$Ez&KA zFcSg4<9*=RR8h4MP(hmlmF^5FTTSekjh;;B!J_pS+59xo7{h1>F(Sh}QbSg2g{ZCY zWE}?Z+L5Kj_``mU2f;XoWphcF2QN5%W$~Ybf2SyLk>T1$5W$>RoS|9V*ivrZ1OQ}K zH99nosflVUu0c9wsUnBzH$XbuDxX&C$f06 zScR&6IL~qK>Fn`ELOPR(qTHyObQV;PLbYmKWHDncpFVOptU{xnFc@r4i|G0mG$Fd$ zH!#jKuTfOdf zH}hw&c6PnM?0m0?txw5;e(%4!98h;Gw2RwLl{(m?N0*wOpK#MURI?KZFPLR2uVLb2 zZ>GP@k3nu5*^5#q?0p<7wXeSpDL;Vo7N#)BEzVFs3cBw}4I=O=P*mwKSJQ+Mx7FNW zy~U5_Wvf)DrfOA?(@n4BJw_{!{t6#;cyfN*ww{KaxSEF#`p8i z4nLqCu+UNEnxFN?dM)ntViv>Jyd=8ZvldUas%3?KA5JV0nYVF=x2wJas>mpX(=N!p zA#`lLozv3+@c{o#%3@~?Wx8ZukNmxE>duHHu))rl6GAO)0k9k{om(iqV9alIeiJsS zYN}|cASGNltIRU~B}HxQbCpk0#A}x&#(IMnhd>^a>i6MRIcv(vTI<5IQYYA0u%mk} zWoY9_KjZ8W-}UE59iOX_J-P<1)}XC>)<1~ky1o4Jrk|fxd9U>y7bA=*Y%Tq`Fp=-w z7PIx^GgJv*!5+k)st6;PD?M7`y(M>v<)LHXlhpMA57e$gzb;VI0$i>=?65}^HX0Ob zRj=OvdIS@o`)S=7P)pDzuT^__URPxhdCnvjm=(u;iOKm}!v+jX0qvS|+Ft#1XupWd z*f^A1W8W(b<5YYVoOQavled&sRf|jA@p2p9hK!7lL*ewG>yK%+9*LeUYTYza3T1E% zo$HhuH!;PMlKpcwV%)DcqhiUW{`Oj-6Ye(ecTTLoFs+hq|SbI+Ps+64F|R{pFOYacGHD7(~8FPxg*tx3=mnHyUgu;nzp zGbe^0J#>&ytQOXXtUIU_a;890bt3%s4e1Q|tIHrxP7hrQthFtvJ1i zoN3#_Mr1L_OKAHM4Qz9{w@UX&7_wq;b9t@dWJ1I$hTP|MVRC>k`v~3&y_ZfnwmYC= zbpUT{a`&|CG)Bs`Vd#@0M9)IX<=sS(aRbP@E?T)&EL;m(nN7&i0y^Ox_cWF8WAK36|Yhf_4a@8aLwM;|1gtVvyrVtDvclfGc8Ry^d|7TZ?}w z-_6Te<#SJ*yo&4F$#cu;k$^Y(_mn*0(w+XED1@f|hvz75aB`THyFienv+jLzE;#Z z(+HIsD=%~`0UA(sRME7CObaKLv73p}iN>F1CC&07vt*?oNFsJ;2N_QcB@QdagBqBH z?SdWT8CxkxarXtlAyv2Eq?D`Q4%q~2;8LIT2o8&h?v8F;U@sIZ9NgXgoENP3@$>{H zhhhVxEz4{zKOtCWlO+%_ryi>I4Bw>Ls)Fzhw=; zI26E(Vf!&+i9?xkT~;6Oo$YNQ?#>r+iO6%KC#W|WwZs7g65$sz=($Z!7WwZhjkJhqh9C(@}07Jk%U(PY(5SLn2E?Jet!gvtC-DgLTA$tQIGFQ!&FN z50@IqG`f-SqG{Kb^$hxMndk?b4>ARvjMTCxK)Rry?zXu|#yHgrITOkM@oKm;DQGpw zQTQWc7Y*g!rjupRd_*P2Kk^V_!PUc~j$`~knBDIZta30eALZ9efpXH`2G%UrwnMk^7-|S(%nWFt871nmd2)Yv8 za7%TUsgddF1(=p7zTiqD*f_E%Gd>@gy1`nBvm6`f5C59|>$HFE0}3wXed!*JH-1UV zI};M5SnulLr#o#xGjYrFxtt}~co5;!t1>6fXKw?w7^bi5fK1p+`9wF3kAB+VECgSJ zAPMr_H%2Q%L!HQF}514^V+!G5C3Xt;Z%L5wp(M=O~&-)?Ij zd)_xeoLf>-yt1R6+Oy{-(Ga+XCt@@L*Jk7zxLP-7BkTd-1h+=J3Hx#3!fx-l6?HT# z649iQ0vMlj600Wk7@{pKt-INV50)fE=iKS)1xXZo1!JeeAmOD^ChNpW-2M0|fyzE1 z(T#9<1Os=G8MZ19iW>)Ze7RDZAe-lOiTD~FVKxbC$VF`*Q$pFGOj`)FqUb5mO=eO4 zTaoA`7QiXbP+&@fm-PV(zhGTsw!Gy4` zeo-|a)sVSYh8(SOZ_|Q5M~DL_()m;t#ssd*dW!zpQ;wQuRmIM6W^qRN(oKjGsa2hZ z2R6unr<5Pzm=9lA#plwVnllm}n8voXYzFIG^?Fiv$+XIrHLqi|47Y*@e3sdtRBe@0 zkit}CwY8*RI5oWFAvS6@(-(|)2Ne0Q)IrLZj63%bUqe8{$=e`Kp-7-2$^)bClr3;X zZd^u{?ma;y2sqOlUT^bxY}hZ_G#-5hxEdaCfAIGlRM;rs?O(a&^4S+8`V6(3zy+s2 zYuM`0QlijlSMr!z>Bua`_YAHee$i<7Hb_E1{4sln(ZV zjGjb2z0h3KKgD@vN!~vupG}oa)OLEd0J+6GiZ%n71D^aM-B=v*`HdTZrdIIi!e7LF z7Kq(>AF=ouY-x{tI3}?OJ*#;=5r?Lshttn%*2X!sQO8&+mo$YCN8{IBv)_ZB7i)Uy z3c85{Sg;mdtVZ|D>k_CEZIBn2lJ@@d$(ga1mQDW(wf6bM!w;DnK)33bu%Hf90r;1IYzZeHn#Gvlxt{6y*0HT&15blV!5a)_PkGsyi&}cMEde(+ zkF@5Zx#s@-0y=OvT&`cuva!E^uMX5=bcdr*+AYkIQZh+Lys!pG@S!n)HxexHJ!f2_&%G6oJa_hou{ZN&cpt``KD~u|#z7z3+53CLkUazta)1_Q z(o8c>!Fwk;mmRjXKpNTx)7`Tpg{SX$Prt~TLauMv-Z{{)*qlM*Yk#iG&4;l)Osvwt4e#bTQ=50CWB@Fd@SsP-0)QN-RP;54*I=uTeB8yL6Ee|y6A5?6K ztr3q+5_394`L*IRa=8vE=gAh{=4;m4iNw7Cc)^Ewt|bATcO$qUJg1!KVOy?$rhcs6 zo$U>vLdLc)IYtI5;QzzQlzIzFWlF8|hLeEI&oj+ajNl2h%vQ;Us6?W|J7SY#pY+ie zjyziAlt90eY^bmag#oMKaEF;unNgt)PfyS-gb*RyM+@LK?2nmbAAqo{UirpyLa z2?Q5{cK3cvD5E5t=qoy)3g*g$R(iqr#gmD)lYSP}wTiMkYZAK+zMcPyBk05aIfVpd zvp|0|>wr~BHIg4dvuWd*Tkrn>)oU!pii52EevL7Da1XBOv)TaEzJbz^?rn&e*n($T zRAl=vSaj)^GsJH;9JDV`;BUdjC$VcBV*x>IaW#5u{7B>A8CGYk8)ZcQTnRiT6~y!n zKimO`sD+Nr-_q=?A;;%`t1Ia$$a}Buon&k9DS-vsJJO%6F4qy2=7ryablWs}p|^WC zN%M2+%G-rVM*gF)<)S$D*Hv-eVJ^1!r>|lekL8?FyQj#{l4>cfL`K+TGg{J0;{t5% znCh2osJ-3)qv_^+5ETu^;?$lD`+;U;pQ!t?wMy_FHoV9I%oJ2e>*+16=Zt7UlR|k* zk-N4IV&YlHY(t8#gjD%h*oC;^s(lnoUx@ZNf(GHuzI zV{W)%XM@TfOBg0}kj@PU-XFcDQ*qnORJm3Ed@1~lA{yg$2v-F|+_SIQ20hs3OQAjc z0s3W0xsz=YDxeE=fLVIJPW?z3BH&(t(MFOG>cfDn;os_chkl_A7{u0XoYMy`47u@* zQQo$WjNq#n6Fjwfkyqb#HesQB23ytdFY_fP@|nvl-*~VPr`5KbJi^?j%JsT@j;5Dg zrIEweL(4c^d|J-}sF2wkBE>@;N1g)@`m*ac-K=>MHYm01fD7!c^*9Qv&1YVI-ngS( zbT7|)u9v3Bfn|7H0)HxCUv^N7DRiY^B8W&A6CFW4;F{N$C94HmvSy5=a-kp&3w4v> zM#1L*)?Jj#db1MOWKPP5EiCfu3-)GvuDCX`I0#{$>w2wi+bH8(vw<>Oq4GU;-p>Yb zDn`CvhxSW#JeH>m=7INQn3xxL2%aeEn^tN1(x$uyt%Ju1o~AuU>1NQ-flRx8ph-=m zMo`|dnUA7E>h}AD>&VN@vYgvXePjaXZ?D6D8H1|eeFWau$0)5XuzH>Q5^!N)865w9 zmaQ=I+U4Y{!@(~fi9dKhRZ$Sgq}q}cgj#ok;w#%fy4`hKI@qd84lLD}PkH77)pDb^ zQ>`d&1xw<7##zVeKoDWzu*1kMWdYb}fROLpj=nia3C2;r+H^YJSVl_%T@?e18PA)Bm2U@csS#w~syF;_eTc+>&RO z6@dsQk+(x${;%fYK4TRS=j!2*?*T8rqb$Q|G%%gf=<8A`tZaP8h7ZcCXYg*3Z^#f_NUt6;;Y#UV#~>?Jkps)F z;}Hba&Kxz9_p~7nfHtjeGJL9#3zm7|hC!4!_%LalF2ZOSX*zMS5bK?RsEd$Wr0uz= z)y=L+QoVyKth%UZ8@Kp43kZxFNJKi+fqv2sgm=7zgn2Ijc<$VueZGfy0B*K5V>+F7pn~V`lLZ-P+hX0snDMI938a#kJ+tv5kH4NvDDOQHeCAEYkDFxiVA=j((5*{K|4Iq1xM_DTY7~ z+u$Oo!F!&<+M=dF6T_uE3oN@^`7k<=G!lQF%Sg-1#o~+>+i|!>?K>~{v(B;``!5b; zW#rwYuW+tj=2vxpC=8X7|+BI5~Twy z!Rr`ulo_IXdw?zM>s2|HM#s*0ScBNiBkAN<+fnL?P|G2?x028i8P3+p20w#OlIS42 zN`l^UAv+VLa z-e?-yD5<++l%d37>TKvFtde|L9=+eSt(fTVz=jSIg=Bj*kxl_2# zu5hDl%q&~gb4L2QDR^vgxBrfK+Qs{kD{_mUgSOZE(AXfqo!h-n2}cc`R<@4L*>%-~ zt-Fo)pyc!pdvWDy!0$X-TU+A_ti}jdv;{3RJ#!s2{_CzoElEQ<-e#d8vE%o(CIw(<>}^;;X=w%Hw7QI4}W6FgGR?)hfCM# zr-Qyurgz502~7Lk)w!A+@f{sbYBV4(K&cK>-2K#VB@Y>fapDK?IKT+JQa$C|iBUGm za8*m7z;J&$cs{8}TxRBm(@oW&EF`<=uJlq^m#I$T(=@_#*sxX6sIc-i@lG2|gUa7Kc3TJx+%1&6JBco4Qh9)U2xe@)MvO8!E` zCN%JVw_=N}f3}2?88tATZJ76>pV^&Q7mpqpWOOAJBwOE|bfE5o zHI$6-f0aWVu4APPAo;VQTt3vUre`#|f3!;(E(__PhlRQ@o+sXN94IA|#3lUXnjopo zOeh=3THFMyshuyg`cpv3k{6H{w2o*4WOUmSkOP~){Y&>x`H>tbP=_q#4IUy@=&rd> zJ2e5n8WTMYA9iM_x8PXxwZ^u0n?}pJsw;2;rsIv27F-O!h%}|iqU`Q%3lpfzA=azn za+Gy1x4i*06nd+fbo)k6@KWRx4ne3#pD3Uj;A&aBIFQYdKPi9w{z+Wubqf9MmUHBh zj2+YR&g9#gBS|R`P@0XJ)``=kroC!@QfCF?f4+2+gEv7}-P~EH4(`&0n1Yr3M{KSEmON3A~rskn2BT z4B$){wV>(j?ntMiZkMuRD&u&3MvMW-(74$h&pO4s4pHYhHgQkzNYQUF`W@A=K%a18 zwBQAfc-Ac~uH=T$XIubjYi9qFJ#;T12{+ITpZUX7p=aa}gxbkq;8csSfK${ZQ!XkQA2&N$2e;Pi)BEcukRB*^ahMq2o37Yx<7VHO=V2`@*0xMzMG$ zQSu=x{R)L{%d0O5A01Yv<=ltwj{G8U+D>k-eu_r=ZfF6;Ez(QI$9{Ev@T*bLz@5SN zn^&fynn&_3sdY;id^HoQDt~P1#u#8oeDosIkz9c#3XpI zYNA=^8bB-~VA1*W9G{w{-G)m-of2O|o$P)NK2#TUT5c6EZcoa%wMkBa6;G zp^4U=9T0)iURu++g+DvcXO;+Nn-sd(d&W8?wG#u!1V5cjo}Wk1aRq{=O3peW3S+C^ z4dxyrS=>Cls?+d?E*9IDB2S;u0Q};AX&D`g`KkDbE4>%URzcm{;wCn< zw=;zCz3|F9T&Q&=tmz8wp#n!ZmnFVqW z#FJH#i#=akZVSic-}|J;_=R8|9k}#)FK)}}v0{~&lQQ^hiMJ37C!R2y?bbz_G{>4s z$?Oa(p4h4R8QnT61)$#tO0_-u&>;cw03S@j{=)WuDE;y5`oY)YoHaq=#}q(a(JNAF z0h~6?P=I=Ck@Jq2f=*}Awl93(_O(iO?_vJMrGb98q6lL#bKvoE_!ChWcONpG@N6%PSOt?g6l#%Dsgj%w|m!YQCQ*Jjm0kh{fh-+X83N z|2(kI%Hv8;F3VW^*ny7-l}KrjVhL7F?Idd;bIc1SSj^^$P_Z~|Q2)Cs26TtcH+Z{J zUOFHqOlxJyx#E;AXQZcLp>-AmF!|^$3}pDG$JE_XVJXyT5<2;3s>5ug%uM-6Th~+{ zccedx`EpqLDv-SbI}CRD_xggC&$vg0fsnb9`9-3B!6!f6o zY42lAwE=t=7VRS!7Y{d;gS#Goq^op!rp>gBBxmclY|8 zl6hoE)+X&0DcZ`HM~`rHIy>!#TcCo6iH(v%Ba=fpTH6kgUFxK_Z^1eztdGX8&GEkb zJ)ZKo1bwKCp^<}j^3?&Hj*){!Tf;r+^R4wwjQOp}hcAv6{Xns8&*_>UxA*I^5$Wkb&wtqP|Jz>QXF+MTWd&N+(g3WQ7}Ki8qJ1&* zprqB>ZqK>mG^ei8{O8OwX|^fH^f4>$5n1_3^9Pwkbg+`HgoruVZV#Il-w>8i|Ek}`LL51AHH$8l7s-q@Ed*trx)bdPDBBf}kgv~l?kT}u9 zr9NK{-cvl&xy>0*=5qS7XZSoo4t&Vd01rrI&x`L(?lNvV zkeY>=;$?3?VZg`A_5Au)R|l*sy**JOj%=QC3}qV8?g?H4K&xuO6BQ|@(7e-+__hu2 zU-=xxqN=<#y+^vY=`j-J#b%dYBFKVC9SFiI}OEX7kRyZxon{`G2{m1c`9xHH(y}KE^-ACc29w=g>esEgBjcNrtaW zUUZf_1}Pv@YLIG-MZ^g}3NkM3pTCFMM8*9e1j8$sTaUkX;}HdvpnaLXiYg@bLPWEm zJSTZwjnx2TYWS)jRxGw4OOXeAlaJ~0VJV4y9uEs3g*lp|wNp;<9l@wj`paB;vA8`W zI0M@%qKPA53jA-r8q@NV6==KT(WgZ#zS6i<*IiF@4EK1tQ{74Ilyrpy7x)i$Y~m!l znf3O|eTI?CHJbSngjD&!aV<7;rwxM`?SsV~jWQ1c-7YxDUA?nse7F!w@++9`eg?3r zK~{`@pkESQGI@b?gUA5;y*`Yty(X=3x?tm5!ha8>Jo`#^n>U@Gj3ln?YD1`xQSuN# zK7yucX_8Y_GxROR4SV?_g)gD*OGr%N$D9ha(maBn@T2(-ZEE)9V~|r-$jt#!WyC;i z((L!Ajt<6IA+oOSGz~y%TiW;=xHAWNq81VAf!1A69M(A?Az7(TwP;?_y~P6Xucs&n z@w~z3reB)n2Eg10sFp@0wzha;4WKTcW;cX{r8miyP6A+x3(p?v6Nt(8d3yGp(!5h)zds?c(KphY&b^EGg58ZY-@} zMr=tlzJFlblpQ#3a8osW7=s*X8T(Q;2W&Y1qZX&fe{Z6~bb!`r56GFPL3#wTx=Zi+ix%Xn@rJ34uE%x%kHLW zpw(n5fHdXiIHU2`Rsj&s=hk9t#SjrPTHw-%b}0vX!TENon24HO=~!#cNqH8(3mjY3 zr0re>F05Qx!(Qy7y1iuP=lg7aaYsLbwjQgmE!j>yaN7{{TGyRN1C_F(xE2k#lWCx% ztp{Lt*&Np$v8z$S9KMuS7rnctM^wv=)Nm^Zco}up#fM1OH5C=CCEWw0RcE+oBP!VW z<4)$X?aW+ZwAh;{P2SVu8ZLLE#RAri-w$U{HX(A%T^jU{8y8-UHL&XfO!dIqLPy0k zX`%y7l}&uZz6##tkhQ?#v}r@Wc}V1`MX0i!FQh422*t7aWGDV_$wLS7IBPe4cJF== zDDiXFQFz|Uq4SCa7Yh^*x4OwT%E}y6)!zNVw}O38WnsD`m(>W68D98o%a)iHzrvP# zVvZ>hsz!@TS`l=^d}!OW^|_(OG9wDefDJR;FeKdzQ7(OGNoIFjGi`D2Qxk>kyW(J| zEOrV2)=SziMm3H}So^uzU2Q9rTr|}V_m%iWto!-7_*KWCxGcK#_6r)liZ5BF7-U>q z!?0y6FS zT8MU?S15sEL|wGpxMpJ7@b0?Z`H_}LGW7i!Vx9vPt5~)m!nE)LgO-r+T8J7On5;ed zi-bQKH=6josHNOn(q!jdy=#92am*|?#ceoGOuupUXw{rFR@4aPwl^)O?ACK#wV2Q@ zf*arpPYd7~(nBt;Wn(PLZ7AttPTM(-TH@NBRNb3Dfi3o)I%EYS=CNTh^;dI+A95tI z^^pRosmcPf@lNpj*|wD!a}(Yobx+E500*R-Vtqyj-rki?0aUu?EXDZxTO~E-hOF@4 zvaZuQa3Mr_)+g@-o8ubl?t03#SQ%aosU*K3pRe&ipG|}+2z7}BP5N^ImB*JLc#ZBZ z5rHS!d&GZokZaPp*s?d55Jf|l7;_N&0y8iH=C{ycdV1q}L_kzonI%il=kb<$`ECBp z)%!3XRbVSDTsAYUVoi7oyLSF=RkvK2gzUy*=3cL=FBAxHS=8#ei6i=PXH432kgj>L z8pt&_^7*aF=mmSmIo;lWaa8~7$^aB32D8}{>j4V)bLMcGk-ej|{;O+lWoT;r4BAl( z+=&k^*1;Yw=H4cR1t$eu4|;OfRM+>aJZbBG*|R%W)m|}h)($W&MueQ-j(f{|e6eo|az^F-&nhf#puNW6{wrU2QD-}Ks6G$@ zUXVZ%G7IqCWe8{T1gXHElJCHZ4hy+;FY9-LA6Cu(icx{Pm-NQx?~#H%QtcA#n-FOF zr>P#r>Q0-1KqE7Kue|Xg<9eo`**o{0PZkM|B?}<#(!FlwBZ4sw>UKc35?FQS%)S+J z^Dm#IIhN@uFe{7{ZUls@u*}yqbq&-Pi>qE^K{{YJG+BRs=UZ z9vEJ7&3oa0Hios!Uj1c_90Ftsy7v8&oS2(p|LSb0X0RuIfXvuu zOrrRjC{vMND{3{?36py&M}NIKvXxN-4IA5PL;H3-g#{Ihqh@$*+C9ayYkb}l)|IGw z^3`e|^oS$RkBd|#Hy>naVBJ*>u{Y7pI2-QESFHS)lX;Am_bqdndKkCZ?XM_)54PPD zNa`Q0$=?i$0pQC`<7=i%?-UYFp$=@Kk;JOOja4inM2J1ht54`5tE>BSIY6pTQ4Rjq zw2?=t5s+x!Ii?NR3?6AI#V>c5Yd zC;-r7yV!$y{sYTW5)koYL1i+g0hIFw;)kkjr6j)Pbh2$`D5 zJjq2@_H2(Liv^U6Zu6aILVg>b@bFUgczeY-Jpa2jnYWRr{Qcl?Yf{_CnH6Cpo20;v zGc8B3-69T2TjE2}4stB5WjpG2$z%-Sp9FS}jH-q)T{DY@%%}sK*_zD?8FoRom3ADj zo&adZA$m|)N=IUuUfHu;LU!;?_R@&ql8DAK$xOOBAx#8B6PM{Ccpnu8yL74}H(k%} zlkB5g@9mrJR11s*|J^&zfg+P{fLb5gLh^(+xttuo+24mxlcxNF1!(U;r=ee5U^yRuo)pd zJvDto?UQ(}0>ol*e!>i>#lN16ASlh((dcOsVM_i1G&wy1C0r!^cQP>lA;4cWAs@(z z`wxHdV&Ob6*^U6*;Y%ouQ5=F|U9@`MoOvT+wqZu4MsQ2HvXo+5`u(GhRYHkVmLlSD z%+ZYKmk&gIPRy7<6gL5J(h5n|@ycN@EJM1x+g8A0r_=TTwpZPRP!e*QtdEh0px*`B z_b5Pq!R2r=tbF}M-4nTMe#)HbpmD(zs4-VTiv%sDjK>vDj3y;W> z!e;nP*ScE;J6nK_hTYrcGEu}|MwC(y7HI0HHiwb zo%5^$Tnh%ety#3z5Tt)D1xT0JGSd^OA71%;{-fwIwLom{*t8W+7qqZE!*JGqi(}+9 zEdhmSJ_522z8ZR9z9PzC-)G2nUz=Td_e#z`e`6ddJ*dHnLiz|r?lYQGtE1Kf8?_TZ z;Jo0U@ZE@+#oPNDRPG<{)GQ{%SO0iBaPR6&QO$)?h#{sL6O0T^|&9&I+q;Ard z+|n4yh%h@c_c(~M(WX%2B`7a zZ6?W3kzBEl-|4g(j4gh_Cg_7PDh6?sE7)EB|bcNMku_UBk; zSMQrUCUDOW_?I~D4-Y`rL5igi4$YVSTe5;J@0;mJso}W~NiwRSV%3Yej1_2%?>KH{ zAj47p94n9b~hbCSf?wzgCP^Ye=c zy>V-baO59i$~+ISrOdAVVFs!I)oh0|3rv)}y1US8@O{e9=fitd5oOO~^shrcqu_fT!ay_7K&xos zSusG90Ap77r~99}emUm)d6;Zune%wrl%nZE!3R&*U17;#QBtSa#w758ep65_-@k2& zI8X=~bekO80rs~6C3By&$l|9bs!WyyeB|3la&MmiO&@zG@o(c%`Ye!JpcDG#D-TI) z@UM2b%u}^H&y>suL%S4c){o}+oG!9~>#_>B|n*Tx(a${>3GkG+x*OYqy=%z0C6abw}0iHHEku&GdhhhK+ zVtHM%no~9GxP+=qnmH%-+>N_v;sbi{n&LLc(*tt zbWeAu45g)~bL2TK^lS7X_D7(DpeKcY#-IQG2sdnVeLEqyIU$S`b^qxFrK}YqHxs<# zXwO1JWnnU;df>fwf`yRQ`@ciaznlv6I&V~eMx7yG?cH{SzLwvpAomPaXd(;vV9x=+ zE@YU<^gC=QC=fPkC-Wu#E3&D1Wb1@m5G8><{^exgD>g3l$L@PW1Kp{^{7LKYw?75` zrQF_M{O`XCgCIIggOtOq^jukQf-bTux1AxL{ltM3IQo(e%>JMD|9*6^zzjtH_`N@0 zdIWe?_#9Ss`%hEYH@Q()1}_v|g6v&_Hjkj|<0iTpMm9aC*!5v=fmXX~yvK9>SuNs# zM(BEHJ=9lcKA;G8ruSVGD&m*lAKyM5XZP0=ptZX|SGL+4n=wa{nQw9Iwm}Hw0mGgr z{G;c9rN%l%l@j&)eTn=t5EwJ3!JqCa69ita3AiHvycU4ifD-i`{`fXm1^_SJbwA?y zez!#R0;&#lx$uYh2VgE{Yins`I|r`rrTS3qHwKLtv;ra?Ay;?TPY$e=ymtgluT%FM zt|R{L&kA-g9(Z|e_NJ^|&y=p_E~crwqaCnu{&(5>yOe1B`!N0{D6aomXMorZ)K|g( zjooq{U?%O4fK*1F-97W$H=Lgx7$f|y?cB_71cHfpD-HXz z4?)bsGTwoKhXlPvtW%u|IQ4nsNB;!x^kpEHPGEzLT6Ud~pU!nffMB0H+zHPL;r9ln zDT=~>l>c`GQumiks_{Ga-;=oBu(h`t$?+T_b)foB1e4kQt-&(|a6>mO>wgD!WEjw$ zlLjAu$6p^tVgB$I6n%>E{Q2|dFNj~uU#7`5vY61FH;>lrTS#_?8trz9;CF+Ye|}YN zTH7x7JBd)SZxPBl9~KdzyIeQD6-cnxc@28ReDdE==@&{vZX-Ni9UmCM6b5R$GB!6o z;c{|vQ7e|k6`e(i$TCHjm7CVr;_z?ttvNQ|@YxQX(6$R%q5di#Xf#owy30t_K)gdj z6greAqOtZLEXYW;gP_@x|IEq4F*neKY>Z=2n6?ska3A%hg~eP^qV@LO3L?%PS%#FY zfg(v$Uji_Uc}doJBzapd3Q;#(ArovE8e(GjQHod%i!QQ*X2*I+>bTZfu-- z+EVmu$yVFkNdD`ss_qiv0?v1+z9y=?vCc|K#pmbe>wDiqzpq>$iDH|;>RR_u16n-Q zImeIu2^9$PoH^$;$hePcYHDhz>CR^4LLWAL0QG1Q|u^{fR#lq`drcS8zo>IpzM{Q-?m+ zo1?$l%~ATC49-p4Y|}6=*9d6DxvafDLrI>!25mo}cag{4b^iA6kQm0Ewl{L&%)OG9 z0i=(Q+F8ACUkGi{id0jfo)a4jmOzz1st~j{J0*7;JWI^n9at1aqt8S5JY*((3!bV&WH# zB+JCi(vYN*UuEAj_9VU_77-@R&h+u_NjFe!4mpAAf3_f4O&zGoh2G#;uIQTkZuv0k znS+;KLKUS^thb!u>B7S;}z?=NVhGZBuJ4Hr6N@`wDI@jE?F^BTi zv=~<7ZUNcdW5bt?SPGNQ79IGrdOXwLaRWVYp%;bG%o!V@%N64aPG+a^2OG+>o+*ry z@1A?1GJLJXHm=`P>1lIBh4_~M;WHGiNipn`9{%npFRNmm?QxRBSFSL|(dK|y-|I7b zw?N~M1W)|gWUM%Dy#-ZgkOy9tD((($nOA%>2y~qP>Y&asG4Sk0$FJzcGLyHaBzjH% z`0Gw{#7ol;r#CK1eh_+6eMZRiNWNmZpW@@M0uSK%jJZP0Vh{qMcj7fsg=!_Bv+ng6 zPcR3M4#Zjg?!i`B4xtKAX+Bx;L6M?&Ur8--8oBCocj;1G`SQ!&+U4qtT@*X5e-zif zq!SHyW~4eQ0=tfUE%8y=Z}_DbWf`3M)>{|;OiU@RNXLVyyV=M?oE(=OvoVVXq;G;Y z$4@>%4?6Z`4h#IO@L4g#)#ezM$f)BJhP;236fDC1(sAf?ZpKUUuz$=crMq{!|fsM2>bG86Ws1S=r4> z9;J?-YhJDrA9Q&P%SD25_yCB5s zaZ`$^%$b$~z$aMv@}I8Al}%mu0+&7`PuNqfLt{$sDXN>4-{?RTZOEuw3`+yswa79V5zz1YAGM0WnW z0C*Hjj=wCgH`opg_hfai7%a2h<45UhGvi5s15wOi@=kn-R7NL1q%xMQn;%m_E zBc>C7PH?w5u;rlOUh2}#p=Zd|gP8IkPIPC@T9fV9^cuZy<6+;60^ljn)lHe3d=po4 z_Q;FxKq75M*UW2gnT{r&hc*PvX2(Ci^Mad5%&>hWs1I(xkp-tgA zpUX^*`ms<&ePM#Qu*^#z=|CS)R<5zPh zt_B{kRe+KCW{Bq0m-KPX{PPRo$RBQ?yFFC4#@xX#2j7+FeXoV= zwJY?pF;{+#-2@wdwIPE*tWU09Jb!CheFHE0?`%CM$6p3iiph$~MPcL|Q;+rLxcU~+4{&=U2b=DWy(7`reeP=B4ti9#ApF_+?#N31{P^C3PKzbNjAZ=s-6$AzbAyR@B6+zHZM5>KQ(Fn276J!LjfR56e${?sTr3)cZ zP>>dtE+t5dNC`2J5K_+F$2KP4+_mnz)_ebbGlIu`cFunG)7w62yl#^DzR}~;LiaOQ zCHv-mr`!dny-s!crmJSAi1iE~;C@zr_b|v;F6`p=I?M(%BahFy<<4<(G0*ty+k0g5 z?4fvKmw_cvL2ofY1^whak%>#m@00QCYIohZUBJU(-aiyZHy2Ud5*`?%5jjGLtQ zN>00?FQ$L2x|Y^Ta!~0~iyLpN=JO8syIU#xPG~U8F*`HEHXy=YrMqo|gC%R4cz7P7 zy_I(!yN7o=>M^4--$?A_k^@tE9a+r*1^98dN82tuDEqxXMUnQ9h09Njy=mD}n0-JH z(pElO-7?3K^3OD%*2;LedHyt1d24#u3_QFp*=_6BNNkDtz@v1IT($Yf?&h=JW5>#W z<37>7pqg_&IL>+a$%Tj0*-DAAabJXZJ$mRD7cA|3=q{U6eeb2_PLdSE-WLYyjp~^D z88|O?*>>yL&xa6_SdzwukjbWXhV~edL11W5)V5~ zpT#aE?_AVW_DycMlDv5tLcyCeSgcJ~W=2MAZ13~o;p67p@yLk7V};kZYbSb{J*+x|_~|RnKJ$lj3DBooOxa^IKiU8}gl4$E!=uY*gLE>}nI75L}g$4AryGPEk3!0dAG`Mw7%;J+twHPR}GUA3GH; z(QNFNh+J%5NDW?nxIB2tZRySLopM+H+Lp;5Hs%{Y+?Z|pnzQEGv1i1I?bJ2T`{e`Pv9k~-4Goa5&=8&vx zKtET9Nm(gtx-%D1A+>nxH&o6^0@6XyqBc%H7F57K9ND2Fg=3lna$|scW=l5d%8=bXUR9!z7zy% z2TnavfF(){**Jf4vq^2&Lf^(@{F(b!Q;uRYN{WAO`6?1uLE^>X7lT)@t@%r89n-^n zIB_dL=EtmTR$lyD>cGHs|DDb$w?B+tW4UqG-lwiC zwchr8>xQqN&`<6TUT>-B}&~V5=B;$i#`3B!b7HNltev^koAPMHFH3NtJ8iVm5TI^~V>DaMY!(dfE-4Q;jgfZWgP?n8C44T{GXY#h<~4P2R!4ho=4udRa{q^h0>7%;G&T9s)J3$LJf^D$O~FHAu=I__nV@ zAR%;0YyZc;;C;n`eOY!s4!VylQVv%6wqhp;*F7y+f$+`;Z-9N3U-_jSFpq}o-fuIi zSI(nPM<%GJY%VcHfd6*yu-{&=)$@|~aYGXXLLyrzAO&_Aw(e%gj-}W zh;SKP{0)f_2!A2O2+-f;FIPwcM7~B4gUAF3NrrF116L7};5Psjj9fxo0`UK31&aDE`wdg5RhL$ z0|0=3U4>w9E;)d58bXXrjwXO#Fq*_+1Q8<12tqV~Lug2hfVfORBEAmFfO%l8FaLva z==-?z&*MKH0k#`Wj)uOiK_Dm~09i!;AmH^^11kIe zQXc{m<|i;4f!x&xph8ymIS6sp7s$W@fXR`7>%Q@o?02BPa5%x?8)JQk<_l|sQN$9M zx!{e*B6lGwf$)JPzVcZV0`M6D;Q;d)xF%n6_`h6+1dREgs_Fl78PKEum&<@&`)^(5 zef)Pr1Y&45#=+iZ*;3`D2n1r;?p@pWBM{=?QXC<<1pI|p)dkv5?6&u|Z4SG)ZPRcF zzW&IdGm;h_CDH#ea?R~(&r=^x7>Qk_^Ng*g2R%93WG_AuyTvDvIjfK{! zXS=KST2vqNxo&zz;@pv|fr(E}FqMY$S~`O5Hm}mE(Hav^R*a!u;a|$rCERXd$6Vd@ z4ENqE{zpVnqWyZ(H!OSPh^X^t5<1$Hw#xW7Ye>mD-*L2Fp^dzAaKFqyAFYm! z9kT0G+34*Xyyb5@{k^iI6%`wJJmD z*c)5-bPu2E)-EkYRg9Hfb=u!8N_QdU89ilA%uT)~R{Ue=)4Z+~Wa6^+4GD8WC!9-< z`-F=>dNk#BT)}=iVs`V*3M7ja;TSXEx=^20@XThJ`uom5LV3tg=Zn2NKKOG1mCQ~a z-tA>)hu8qFB@trL-d{)v{0D?G_(33$cah&m#1VHF{d*1HoLSYNgFsj#;8a4O*kpf5 zQ98{{eW8?Qu4|b)ob5k=tx8zci(Eg@!c& zA%+x}T%P0|@%*mfd=PzrD7a+tO5S7jaNh&%?{~jV)80;&CP<+qn|^%k>&5UdGf2<0 zXJaDs<=1MEj%}5FVdS;Vx)t(E%W_-({eyd>$h`xsO^{bVIcr9Wu&nNnRbRmPet&t= zpJE0G?YR?q*S^B{{f6INf+Awg74Ho&(BB7_YZyL6eqIkx_uU|V1O-*bgj3^OQ?5vT zpW@}@X}CJCvNE2uFOj9reWI@Gzr+XmPs7EtXqVkWZYx163VNyXR#gP z>(Uq7iDe>AtsED@@Bg$&A-sWh%|hRbVoFQdi`Ee z7!zi;0G?t)-YsE7G(RFJBZ`BcvP$*EP|(CN<163qd)hD72gELV>a1yPM<^B#Lk{Z6 z;C~a|X7L7q$GnWZuz&dv-fu*)cs0UIx>o%M*}m+PoVPSr%}uLn&_g9cS6om>0k zaWm+}+J-dJc_SZWn%0Os0&{d;Q+NkS2LbB5=1xqBFjATpfWdjS0C<8wf57XY^)iC9 zr8D=)L9mTSdipDWP~z}G&!sqlQ-Aa|y#Am(B12pRg%U6dpa0ss_UGqGE}ub?jeo%V z^btQU~-&)qO@HY=m+rd z_-2F0THl}Z73hhTfIr;)me@Taq(Qqal_q{5E@?ZU+wH&&!!Eb?A+A$8n}wvw+VdEo zL{d^#(Q=VJS^;Ff!uWcL4F8VwLF{dIJlqg0KEf-sX<7aKenil!n@sS%91xAmk|J=d z@Kryy`i0`C6+m;?%f8>oUkvs{Obiy12C?N%F~Via^{yC1_+BqBGAZ+ zwBs}VCYA}STN9EgmpENAN($5!Za`vrsV&x!B`L_tsKn7K``|2I*FUk`Mefff({ zeIYUAX|R{mnwGD0fR_1R!&%!CfU`D#`$M~b;7kb_AkZ0B$s3|94n>l03+oQ?F>62r zl-UUv5#{ZU2wd`mzF!rziX>3b644fo3ehbbk8yP4)b)Qgkzp4S%{q?W)Wt35FqY1X zlLNzA?7zeCbxrN9V5u0hCD%k)eRvgMx9S=%A)O(Hl>hba67qJH+7Z32t z0vk_Az@Jd^k`V&XuZXY@;b)jTE`s;pmIjI$#^fBc6OsE!pgy}j9oj^scQ@>&t=#uA zMdUF{0I)^R?>^8J=78JlfTH;=x+=EZcKx+)C%FJO3Sv@qHvn;!t46jEki$#4}6U*0B6 z5^=8sWNAW=g;UiJOa4`4c7Wj*zlw-Y@p?c&zl_IjA_QDJxY+u`av|CvB6?uv*hJ|l z5M~bR72W&S3TNEgaYNFiuZ{e-(y#c^KfcsNnkMMTE^u^?b zsp}$2<$xw2YP(AO<$nbxDJ!#Lsdqqfi3?^ZB))PZvY8Ckd zviPNCCkt%$KMK6m1>)HT**kMU96l&MiY zy>_Ujjaul%t)4n_I%1)%=z>SSFbD+l9asvpB``h0H#}k67WMXBq6lIh0vmQ9_-uk@ zDl*{R4<^yivmWc-7i>q6er(LW*pvqKF+er4vZSQs&tqZ{&I%w%a<*~{5fM@RuY-#T zHvb>3T{~>;y0=FhYK1`TRc7a!?(!v&iFo}>V3W&$QTvMr`P$?~au$Z|f-xdf0zLoy zp5zEm?qxRfx)hMy>#Dg^B23c(MCGvEOA}%28y<&cr90xitgu)dwgc+4<4;%3qTRsq zm`V+thGp0Dk@)A3fyBhb93Q@dc?!7*1!eWOoI)0B0mdpmpK)QEFb5rib?89_#h>LK zRxVP23NAEnQxPg01U}=Tlm55JmshObL_?G6=U?Q#bNkL0sXA{OIV3)-w`qtq-S2V? za5@FvD^5Wm;$wRq0wR`dc?7h|3c*7G>&~QIMvKT;@+#m*c*S+T^4bDCAicEvmfuiU zD|w<7KQ>Qu?Lqgx6qmGsjXcG9US1egNzQ^6CqvYC5 z6qL`JBweHr+}lK~s5rb}uyJGjVQbF>abUI*?AzSGA~;Ndz1r-y z5=CJ;pOpo;Z510f`U!SLcMY7No`?kAn8GILHyD?{rAL*D@XhZqv9u4j{VVOTBu4Cp z-OIo2YmbP4l?2?&)$)1XKau>DbYD1k%J+g#hxn<|LR95WBu*P(5_e&+%vOj#Ojrqq zW>mQe1?}WC7y^vMnJS^J8fF5AyqQ+nYw}}D5z=elG`^)MBk~3LEa|7~O@B4ahKj~5n3g~A(~h0yPYCLsRXLmto(+8 zFi#j7!x(IKd@uPg1{u;N0iTO4o$i>3J;lH3LDS^rHO>kE63>DdM}!3)!qV*%*ZSfo zv;f{9b6|(+zor8u3QzZ|1}cOdz%mucH1G0sg=wYl%oJHh3g)y+vbFm~HdO&QeKlwj z6j@zd3fPS;(MQ++%PpH+G;j+p6FnbO#A*jfrB+k_Kg#l(RSjwUL*URbz16HQzB4qR z^B*PlRDDOn!w6>$P2&_a@ch){x6)lRw2vLCp3aKIB- zcfC+x=j-xW?}D^WjkcG+cQHYJ4p*Y_P#$Hpz~9A?Yhcy22IH+Q!U0c!_TM}C_VDT- z9Ps6$+YG3*|1{wsNbSyYroPB{#vXWXsHv{pK5fe8`pQBt;-LAIsh;_(6*t+}#_YR~ zQ0QS(T^C+eSOdCp@gEeM+MV3-ZZSF=&4T84Ils%G3kp_B!`txO45tC}S)KZ(n|08* z1=CCQ+cIiE=$c3~gbc6Y`u%y3$TubZ=Xo$oIevk`KBA7#(f496}@ zr<{QKX@-WpcJ12bwK$&b@Sd{}pPgu%jPp=-k}|^JXYI_U1MGn+uU1IgfPRTu6JJa{;@}(F zDY?2V$~qP*cB*+=`rDMIq)ciX`ZQ`m^UdD6H+k#NexAAYv>&mW4Ew4BWOZbPp{up5s=9dC+n!1zz>R(xc0Umq-H1dB> zS4JFv0QHAVuSW^;RpuNMi>GEj7`=QrQE0#@nmReN$8a(f6<$1?fPZY+MSb+^-JRB} zZnt?@8tK%;8)r_PFKdZAGSS33>MPk7TCbW)+N}#K6m3a8ef@%=yDAL+M?=H@|pefAoMM1E$`Crokrk5N*pQjVGX!!PVV+$1Wo8*PG0f+=__JCdi>EXZgV!^bn8P?!L2-0q>ZzwJxUWoZ7aVsKMHS z`zAFVR+D_~e7r9{pVeXoRg;v(ZnOS!mJ>tLbc>1%2OzsMp!`6q`h^eb5&jVjL0PiD zMXw0|wt?t{T#|O@ya>oEV9hN?aS*1B;YMJN>UO_o$ld(4_T{in+mJN4@F3-5vsYFC5hFRmrjwF`K0Tvxj?abcK~*k`(OM4Xr*c8q{tyWCJU` zkw%J-B)y&D1fFcg4`90mD3938*}!h)Mb5^9UDMUYevEt1@77^MsoXsles3CM)GpLG z;$B1(sm*M(;8g$6!LH80#;i`}-zeVjz!`x>u9V>!f2MqrM+69WTIgd_X^05BRUnwK z8@-4VM%CG)0D~2Vt>PwFOk8HjOxP&Xq#ZR#j(O$c;IHmoczXp1yBVpduE`J{oK zzi|b5Vk%F^clk*0Q=;+nvx-M3y%oOVCE@PvlB=gJ=Drn}HhI9&AS9C~td=FOy8%$2 z$X5x)t3Y#x!j|X1rhAV0BK96>g?7^JlxN(m_IQjhi`#5P>-|_!T5~9*Q}WatwzQnp zrHuc?wmR~l`$AW`Rt;xi!j^ZtFvu>3#JGXgW8`kpl?Z9)n1+Vx>R9$hyISi;qkC}+ z%^d8U`h`$mfggpF>fcn@kzs;-iZ3%&Xb-kBICleKBBm_y;9GvP`y8y=XElou!Xz;a z2Y|oAPRfc%Z5u4L|1~`#`LURxHwd8Aj_P7U+c_@75^YiCIo--YSjZw61pCDQcd0eYFD6fIbtxq>rZCYccvI%3styeXcK;uS=Eu-XA z$3kld4C>{o2uJJ7I}@iWGpeZp7aA)3-H9uF#jkTY;U5>NuQT5-fA_59SDg_dwH&aS zl$p3K?Are%1;cRqsPDy?Xi^VOYm2K~(h`v)f9btp%LpJ7P_Alaaj30Xj6zSQq+%dH z>PIu&EUW<;wJdDM>eUyBYx>db+Y>FUYCH=)7oxt=t!#SW;Ly=Xh*c;!sPwrf5fe{% z*Ed1TE5q0kJ`x#6$3ii&7t3f%m8a5GW}DoTjPICn6JH&?bO>s`MG+{KFO)wl-u zhO)3NT|U@;gI=Z}-Hc+Mnb=AQzBd<&{X)k_q;J(Pz-NGrJmVtK+|dP?jP{dDM99d5 z$@pK>BOU@W`n2NlhKJ?Pzo8fQ4EVVgP|pzqXAi4BEqX$CU81w^4oBh%Nw75>7dmbg zYM9Gyl3H+@UY8gUmd&`fg%n&8@Da!J40`DLsh+c}Dr45A+y5YFn(PKPlHJwFq2w^` z=dL)rK-N4N2F(xI?%`=-p@%CyW~1;&hAzjU4-bvzO1-&8d#G5G&T4*Jv+&FauhYPZ zQyo9IUU5huof&rj4+GN2rz1ARe!N_ASufTWZbk>iQG=a!AS_fT`@*aykyVD@t=~>q<;FqMU2pYDus(j4$EzmDNV&RUP zwH@B@{Bz9ksL$A4OvqR@Fax-mrWPmZwHS2OiP(^_c?{&$*HDR_Dj)55xMH~=o#A-k z-f-{CYkr2HIU;y{Mq!@VjNb?k!wt#emljrJH$!avM+sXV6B?r?R5;7uopqNwMkF?K z(7_e44T93rH9MeYB?=eQ8mNOo2h6*mKBY7IS0(5+MXPUQyqN1s2;?-pU1{J7zUM1- z>ISFjgon%#u4*X}R~vkk^HecGT9s}=%^i1GQn+#?G>FuC^H2*Rcg0N;v4ENz1uJec zfy4Dx&em*%z4DDdRwAk-0`|%W?;T$GlPChjb)SNDA20O>}C#y^}Z_6 z#CS96(+&D%`bPaurQwiCT+RDR)s591lA}EAIwF zm0p3*S+eCgR9R!+_h|icS}E^-Q{ykmZPaUmZ03e7n9y0JXFILi#jlJ9J8OD&ry%6Q z1{a-dOr=+3!8y#Y4)abpn%a3SCGKZ!B`&!a?l_PST$dn{5ZZKvEKRtfV4^OJ&?M^! zyFxM02LR%mVGHokEjbCV?jkn?d3iYd#~&o1I9<>H6p zeRudY4ki{4n==M+IIfd>qf*DZmZd}lp~1iAOKVmJFmJRZL? zI1C6wPVW=44&wR*@`EnK>I-qbvR!H2N9!?=eJj3Qyg`tROPOlY**B8C5)&JyQ(rx+ zX4R0!YyO>*CaB&vc86V9NR78SAk%00cKfga1Fl@Z8ldppE6#Zzne8o?@*HoTP^DJjGdyA` z%w|?6o!UH3VbqqH`XWb`-QP)mJ7V^iqq*wGS9(**M0DAJE;BwR6it39HN5W8^Gt$~fAhH#6*?a09-r zy_Nej9$$Uo`AVoSPQYAwF`z8Enc-n|?w{taBiOQw0j(2$L_dnke6u%2g=^1cyb5Mo zSTQ`^-d@vx?9VF9CvIu~^JD$|^WjWg&4omdBST&x&D3k0V1H8hG&VKe z`%~ri4v~1`EgVm@P)-T6v*9YFV)YVh+mpQ?YV-AnPsgRTb+#DQqq%HFg{JI7t$1A> z3mmU$1PI(DCN{i`Hh-uu#h}+Xhu^a(?v6_dD|NVO&|pbqN*2{SPC8#j5Q`m|DR0Gg z&y}zer^Y)TN-Z~8{kht>l^NVJ?Y3j`0G@Rs#<(GE%HEE!`X=8vr~0%*CZiG92z&+~~T~5Q37W$J` z73i|6(~UA-!+J{Ew0$c(8g2BBZ$zt#XQrY)pal0DR?v5(p#=1Sa#9|Y>cP&}QnO$k zjxk5gemH1exILe>`X)`Og=j&Yr25d?mp3Rc-d14R)fHrAh100YQ=)MSdV;bU(fXXf z-;cJSj|{1E6xnyoa6EI0i=aCGt!{nLtV8ABs6k@GdUaGZsqeJbsl39DnmGqIXnf6? zbr&00?*i4fw6ZgFGB;$E?X;LQpoS;suNmQ2S$>Ltj`6*5>HV`8{QFIxvVqg|aD{)z z`BMD$ETCY?d0v-83 z^Ijet_ik9HFOvOnmR}vRjBsO#i$(bTy_G=HSC(G_qVAj6%xS4$O>a+6qua-o8jQ?0 z-=m~WHNW-_MDD-gFiSf?|4W2!%OKt;ME$N}4Pa_1=fJPV8LO$zIY`AWYRj#+(f< zFaAO|_cl7@X&tel5*lIZ>rdh5r1vGx?<>RV`U7Q>zkOf)91B0gwe4HFQ`~Q#Weu2vfo%&HN9BfM>3Ub!e=yhS94AG6Qy7l+7&n6woi&HP2szX@? z2&nk6y~%?I)bT}iLF|3g&k9QLKDJ@vY71?YMAm_Qp#^o6w9N;HjN{PmLo#KdHLavD zmwct7(-WOWBV&p+ck2vd`0=me?;gYrPJOsFOqv~uZpsF)=Wzkn?gg3@ZIPL%LiM32 zFOD3|Hrjzd`lL?D5BLX_fA}rC3Y^Xq#6=J!j*(7vEz=T^_OvhCjDi@Uyh1vAhTxIO;sMUX?_;80OyM&f+Y-5glY7D*(NoAtiLw8`|QQ=0n0U{P3LzPGI zb3#leSkEsjqt8tSD&aQ-EWja9hm(g}ftvY+yt*EDWv5G9#@^UOqXjS8MjJoaW;hM` z7UZ+h{Du$jYD%5d>(RjjFSGd=h-Df-pM&Ql0{jLLle7AK=z9+vj4-={1orLBPsx}uk@)ud);4+Q^Fc16l+@#q|FqcunwBltcDm*_5{{%PJztgON z4;|_QO{Rzy-%Ph%L@8AIMx|hpFxE5-m%*`5?RsaC4wKc6WNE?*v1KBeh&BzwfMtZ1 zffJqLr}A}hdBzgv!{KA0^~;V-y(KEupljHI0}M+R{udO4ug+Hcpq>_**Ejq(s4dqe zx?OONG1dvCwWeoVMpjKf(=|AKDwG<=&PP$-6`M%2KepgYXQ@vesNQZkZ}1hY^bksw zEtDBvyJipXHWnWe1HCQ}bBO_lsT0vq!Qho-)ca9VemUv?Slk8M=T_j=auqg3Rt6Ba zV4>QN`^f2zb6M!*u-2Kyx7H3^`&%LZLklaY=>zuCADd++Ivyz*UQrec8gSMeyr0Xt z*%Zc#TGN;fGWpL+3M}jsyQmV$xXh{FLu+gEP&d^oGnaV~q`q=uM5TN#bR?x}s@G5$ zn@Mu8{v1x5649To0GB8{!cW*e7~6JN`)1rxO0P1NYZ>K|uwEjrBW<3iHYa#-Y@E8( z9zU;{uU|^MwWwz9poh!C#Q*^a`tbNC1#GrD>hLRiw#P&v72vZxG8b${kMJCu?YK6bEBe@bpgYxo#1^O<1b z9Tdc{oU!e4b$f4o*dkcZpu;R9u9;Jq9zvXL5~M3D0GS6KW6%h{m>(vgw%%HEl~s4f3G9!Lq>=c;atZpjFq;;+Rzme3 zBD3+jG^o{_uEz)NB;ODFGM|ypa-?B948hm3QeDnGsmRWto2$*A^@hgj{F;@RqR^9J z84LaykqzVOAb3v04}dCNtO7&7_&Lqd9~*NYtW;B~=ysx_bMVoJ?V zrTau2^%a*<-pvLmGE+6#dnAe9WN`ZY`l)0lZ~!j(6_WZxh(~>uM|j7;4*l+sGb}?k z`8+yE>mlKxM_q2eS$p!3a~|7Ls{u@Zsm4RFqgb;o&$w;p1qLS8Qd;u=F*fY z<(CH+w(@d%zFVcQ{0It0Ai}&=f6P&YKaax+%ESALMSRYfU%F?M5xuhNYCc)EYtn{$ zNcY3{g#b;RS9V)o71bSCYjbS-U$?epprFj^M+Nk(-g59|s@%87wFaJKjfGN!Xh1vS z25pCB#FLq5A3H*JcJ}?xzHDM)9hIkwFRznxJLeb^T>xSsWre3>FHM{hIp$j|_BGvV zBNYulGCG0sMe6A#u-x0p4JnHJz=4UuGqVK^9Q@QoP3gH{E_PD)34v^gbe7ks7aZb+ zH?u%6&q@Y`6%>T>C@|={Jq0sfTA{UWy&#m1Sz zIy?lOtL`icTCQ<1q!Z%9u&?{uf2Xt`_T+UQx*IgV4!o-+XX@iD2Ol;uT3?`(fdBc`g(CZW}tGXfU-SKv=DnCD1 zjmn7=I97UKo6e$*6m4!qx@RpRzXQC)-Kb{nJ~Y}ePDz7CSKJKqUd)NUuxf9Jnc2K36|1kr9Tpx8}o0!3F^cz_jXf?(?2M9pOF z0qJ&|77k@@lpobk+1kFVk;9(qO-!s4m*iarG8g!ZFo%#;;GB*`wBI#hi6cvcR|*K@ zEoo7N*H$J7n9VD0%3iCVU~k6G5;Je8j6MILIj4}El}>HSm^y!s&Zk(p6!3P3$}Q9~ zh!34y{dbI$s;gaxn*9xKOh_I z^xaoZTZx)e^uV3=CZRH-!@Z~GG6pJ(T`SFeR_m!*9(rHA#JW@Fa7BR4INV(ZKPhnX zi4nE4|2#2AP9<;3bXuQLSi^MMlST;%zSD|C9#?2kS)jgm#D^a#r>OATO#9v_KlKV} zE%(BJ9;fBq))5kFfu6ZNMl`&)w|5Jp2W?K9pUecQZQkkf{sb6_c?Ur5p;HPY(o&M7 z4S4Focu8KoFw($ua7^Zf(oW&j;)C6Hofi#m#d?iDO3A8x`&B~x9(ql(gCjNL5?Ia8 z3vLiWwy_NVIY=?lHgkb@TPvKA815ZIuV%Kcj8i@#8#dNm9x%cT87an3gd8r$wMEd>*0Il0urZb*hdx6qF(M42_gR98zK$9G(-xctT}<)V1lrB!-uWt zxiEh=#$^l0-pl&?hL&Ms1HvgBpu2vH&Qq;tSF??D%y-h*cWrR=%ZYAB^fww9BnEch zjhD|v4T7FV<1_iRsCoCv=6l%DLE5~l$16}P^e8K5;eZ=FdUGXS5JQQtC@+pmRRuNf zf*kzG{D*HJiW%losN;(yn!sy&`rL*Nkl1fmVnbeT)M`zG!o625PtuEMu7vVc=V&MU z9=CAgxZ$9F=ov1q7C0F3w5RzYhzqVa4aR%6Gf*C{*i<~e@*H=nJaIlB8|E9s{?^$^ zgIkqp*lZmU2|EIF5$mH~nlMVzNFccVujvuDd=WCK%*_2+Ao2`^@NRjSIy$%;pL8aQ6@PHPan&Qd%lraz^k)q5Zv z{Be)U*?l!ry?fG3whCU8pq_X78it^?_OlLrlz|*7J=s%?Sx4Y=*>WAA2MRZn3zv&J z`A;FZw>MzDFY*o?ILi-$^NPCLSW~^QstZ~P(xgF~PlH$R{v!;C zA%2c8^{PvW?0Va+F4LI1h2$}m{n$4aylVMe0Pi@jh~~dw9Tpz^JJ3y4jSJz1KAt>K zaT@YV>vfue15}C=49|-6UWz~11$4{$ z&3d*%_z^=+zz8A+yb|%1)~{S$xx_l0!Y-?g?&=eOb_rAvFd zs6=A5>%v30@Val-C-&l4MPln?@#ICB!^ZU?%Tc3`_o6y&D{EZwzkfB20yo^gQ+dt#nU9Ww>eE3zwoU&; z=8DZMbm6hy_Ac^+V4AwLb2cUEDzd^XkN*_Zy>R{=cfI0E@FT$#wL))ukd zx8dCRiL}Ur!d`mB6WE_TNWq z)G1k%gt=7CzM%;A#t{AWz8w=WREPk}sqp;fABe|o#w76I%mgM zV@_tGD3uw{U*A5t3tt}#qPMvRYnrk_>Xh_h;oZRNhjH|yz&&<%T7a4$UZyQ?5jOOA z3>|9RBLMnIe@aQOj;|K<&)5k}$SV}J`XxP_UDcFej{2Nk+GT!r(7N*TyTmSfCGZHS z%?#|zlb_>(H&h(PIMu?SzhvG-%Q?5Lr8QN=GfC$${2;TinX~qeL-_KF(mJ_t3R;gr zic3LcJATtBdA1t3S-4*?b!2`LbgHpw*(=Kf=7H9f0VjqG4}o;Z0F=uD#uNFZv8zW8+*elx{&Y&!Q41`8bo3qO*8l;~*qwDB+yA(7CTH5} z`?~-*O(T!RDWMA=4i;pb_dd$V^PEM8e|nX=GqX+x_&K(oBTz=+L;*N>dG=S(!phBO z@wko!l^p|(im~Blz z+3+%2Hr^}}bV#(?0-H-~23ai&=Y@+t$P<5GXkXqf7)rTq;b%Wv-nZ~60Lq+?$y~>f zt7hEL5=?INa30zh{u#JRLkt~Yip2H|?=hsKpmByBb=Ge5T^PIHX$Ukz050;z3z(T6 zL#dk67WN>Sk~o!E$0G&`mPpU3y6Vu-KFD)E$LjbY*LiR9W}jM)cjWh|9UzHzIv80-aHa5ipD z6CAQ5nCO_ty&{INGi(ZJ&nA1z>6PS6$>vJXaZ;alyxU4d(*CDM#yzM0`Vj9%8nnZ1 z@CXx(ShCyypv@03fGas-fssA;LSM~XA+d2P1Z9O2NPx63BM5SDb_xNW)Mng+kS5#n z+nb>%EW~;z;A(xE6MQ5=aRH;`hbc_FHx!i3fA3qkk&zW=b!3P)z-^8&NYBwYHKo&w zvvnzJx7qCb+lgfa70B*l*zwAeFwn8>i?-}nM!D z(9H08<7{ZF1%;wkFww)h>aquXqg{c=M*js~Od2$#`8DEI-0Jy+!M*|du8ecgIDt!u z@_8QU2Fag0rDI5en@K4-Sh|qN8Jfa@UyEb!Iw5Q}7X$8NhAyy#&wS!E9poRFdiL(4 z_c?o2&I4VBk;R{Ojq$l05f4h5aV7@mz>$87N-xN-ISo3~IvZhhVxjkx^5Uw04hT|*4qB4F9#=N6;*$-GRkKmXTTCSnN%k4@AS;<{24n(AW{QfF~t zx0oKA3&lC1m=Ls2@T_L^+3`oJCmTotf%-ZI#4&~nzW0!Lo{QjdKV(?W(c^-mU9iMb z*M&FHR(}q`Jsk_#OrS5o;nZH^R?r1p3>7hI!njeY_t6oRD{`UD$*HGBFt&*uohh&bR=5BWiGT7BR zf8T}x4j*F6Ee-s^*uE5Ds_+Ex9rL*gEtHGkWTT2Rm8b` z?8ZbR8`2*I;-L05ndu)(t-6T4utHwLP#d-j!l!`1=gGgpZD6}|j&2mx6m!OMrya_xfO-ToqGKmJ5%L*Jlr=I9F@n=`+) z;H<79gVT$qvucW)CGc7FaxArG*_@%$|IX3Dr~SHC96)_pWizmr5M*W*MYs~;oNe*EB^Pw>nRALB8cdrNGik!4oL`mI>39miG0Fw z!6bejbnpwBlT(h@oU{!)5m1x&yP;2rbMu~=nOeC-Thsn?2V&I2O2*ph18%;*Rr6c1 zdVFka+QPf{6B~D=ebADSy<;0WvmVd@_`0L}bF{533}9&$@HZ*~GlsEp3ws)N)c=XA zvffMCEPiuX>CRd_C%V3A9$m>u_pnwr;gLaki&4F5tg320| z<*3=7G}K3qCEehLnB0z7sJ<}Jahy?r77VX6cohyD50cFVOd92Rq(oCFsOX>|pll5N zLUilVG^mee<)k0hW9z8pAYwf5@{J((b20N*7extcBOGNI1q zx9sywSgZ`aPa4hdT_a=xmM5vhdW@DgCH$I=vBR()vkG+)iYg*FD{`gkCc4?%ZY_e| zH9SGDLX9Tl`WhJ?&&EDIePrKyuCMUiz!ji&*5Jn2Wd^Qcc1lkI{|Vp6X94c8#PR3+ zv!hIHV&_{70*{W*{7n+XYYF1(?eEOrs(?VDVGqzV>j2|K%nxw=)Hk`urp>EB-N)nN zZ9P~gJq`_}77)wouBivztuw{fn%*&sya%Gdpf!4%e0Gj38|HyiMb7eTaRS@|#)^N| zeFI}_-o@VO)IA|%yu?@WgQ`^C`+)H^R;(vKnC!LUsnPDZs-4yog4+hCE{i{K0^ZvL z_GF%Dy5Y-NBfD&oB4v_0K;C~&hZ8n63oY2`%&>9_HSD5J3pB}cA8|m-n;^^7H~;wz z1HG?UxntR-Nh+e>G)^n;R;}f!k)p)ZOq(M9%!hXq(vI?X=U$C9Y1VU_ z3LlwBT0P0?{Bu4lCu0M zOd*Z@{VtrZgLWRGSAk3!<}A}GbO%7r8_*&$+c>OH^R`cRnDbhU6MDf1F+#XfPMUuZ zpalvT2@`RcF&>=hImt5!ds!GiPYZWz#fz=@5>ZAd{cL0IYt zWEnUpSQLFqTKL9Y@Nyq(+g+mNb1^tA@z3*Zw{8Q@;!sRwO*Df}maWc2@ol@>Rah^x z>Kj*r*6IW^U&NhP9hVx$=^h8^T}lDf188tIg#98m)4z~vB`mkPNDBh z^F!C}&mHgwvGM2&$bYtK4-aQ)f>?Ux-&76x7pW0aea@-z1d(11Q15{AS-RPx4Xejs z2AiMJOBYFh6>4O zF$x7W4{)b*r7^8}J)nLy3t9t#Jx^nydx=%enb=VMSe5ylEWDD%;^%-Vp5#1FcpESc z`U+{B>#`i)`EaY9d1A}UC(^^`t%)TL_{F>l9jK&)^r4qTtfS8S{$-C~YcfNmxOA%N zff7Yqt((Z&a4a7fJ>1gYBc!zrCz-*|6*g&^2KV+3Z2Gik!h>Lwe!B4$jUS7U$x$FJs@;3O|<-i;Te=CFYGkZ#&qaZji47e6fD!}$myJhpE6BGCFAXnx!t?97I1m$aA ziwF_P^4-N4%3<~_IIMq%lbG;{ir$k2%-OP4xsY=An}>EHd2h+R@Vg{#2dwPe@-Lsj z#C`?8;bXPGoyf^#?H!(zCJ6VL2d43KXCAOwa;*cQ-n?VmNVw6->2$P#nq_C@A^q*L z7rb4xKm+2zXLoFS(75ViqT+;i*uGFe_!KdI?s~(+u6h$yBd~A3?2;=bbH}o%&4HtV zpI;;m(^SohSgJ3K*~P5EGrmn##%t;7sz)f>%H%+_=k*a=nOj%8q}L<#fKtFGV~IU| zYueMQ1hJ3za4Gy}X%KSlSI5y<101Y`6y82|pL=9d1yUi}aXXQk@R{>np-V)PPvdZ{ zZgcDF4I&187wjh1VMMzeWFww{F68(R$ql=y;U6861IAMx+x9(_GF+!65moTJgSLm% zf@78jt^!oVQCmhPG4|mgVQwF6U%uRAc>p*tGTLy_XURG3)%43-#@cPtrqY!q-=dvT zGsfdV#efs+(kWQcNV_*zeIf)qzLz*U^q&0~G$S0y46ktg6iulLAKsP?P8Ni?#n3DR zXZZBYi$s>~dc4afX`t2lisxj17g*%>t_07;PuxHg}N`PkLys|)+ye7VYt9ZkW8`I4^jmlK(f5)>1OW3>#td{ zBINF@qA?FDFSd&a=LuBHc5W3^3rfwW{~y-gJRIuw?H?CP%N-@rh0qL5|mJ0sf=V=!jSnC*8>pXd2LpXT%Y{`nr? ze;oIHzw5Xi*Lhy&@;YCy^YR|G5##^b-dg|`&jVK>4?5e~*_lp`HRf`lq-G#9<6Sww zU~7I`N^%Df@>&XEhD-$Z0X^RhZoB97L4Se$Qy9ljTW%wUy!ZY)2EI;MQ|ZQMU!f~E zK3oPo{Y~vaATkx|CB9n3@}GL0FlaCze%vc$c*1mqINs5iMxe&M+6qdn-MBs1^%U}{ z1bQ#E`<+ocoRu-63Cx@q>YCYG^^m+eN^1*A;RX;9zCg&_h~Zv=15X;B#YyjTen@qW zC(V|MNhEK#T_}J^TgbnKNS`BZ0s6S*6tAl=W`sM>dO|M&h%oU1Kq7Z(I8<2F^O7QB ztf7|BG5{u1y&T7h(gS=_CU+G|!Go@#M)`o@n1*OCw@*|+xozljfR9MVxRq`C!ygoj z_*{KombU=pt+}^o_P^ppS(ggsgO`>21TqH)riCZq5pSo*Qobj<%>K$Ur5}^134QSy)f@-pir|V4-D)WjP1d6_O;z3Twy0uPZ%QHCUTa))FRKAzjw*w z;t>_t5EvsV4goU5Z|=53fNxE(uxJ}!RP(>-z=4~jLC@_G@Dmb{xQz{;6kKD`vawrq zbyI(@Vi1?bF}WPDLII+nC1-wJ+suaurfOTR#bFj(mIxTi<5IMJOBm>Z8JJf+Ku-t= z+HI-WtO`=N4pmM+#R)Wpat6ZFi+%MSR;KwZZ6pi$UZ6xCTld*r?VwtbW6C^ z_^7FGRYyl7l)FS79fVI81+1WSAbK)*jgxF{{w9Qe99ON7U{Dg=nv5~<-R#aPf`~Xk zgx8i>OplP^#7Zd;MqLiC=WoR6y_Jw&ii>RqBVR0tVYK1!xqPU5D}z5hBD25~2!M2< z$Jfy4;p%Gth`yhO`DL1xsejhLr&>h-Bmu;TIy>}doz@cfslG=j^k7f~9K@Qhb;TgX z=nZ(ruPyC>y1%VT7QrTY@LG;Jx6s@zkmsL6wuN_~XXwxIJ50o{dvVgT6gawbG4vW@ z5eE@bP}pTKdB5c+1>@C{%3(RGKa%&2=I51JAf4LKe76&&uW(}7mR`fy%%;z*<*wJVBA>j8aKpJ3(??5q~ zF-4+2Cm_Uu>=(6iqc+Hi6WOhMq1KmV{*W)fw@&R}^v{4}L)3HF4X)XNP%f)|R$-3G z5Hqm)STi55`x_1Vg1uyLV&mw-Nh-P6FrqknQrxXRZ~~{&rK*&5?4C?(sxZv*DqVlh)HWv=B9O^R3=D#zSY5 zprkM!e@jMwPR}S%dm!|oXgYDG>J~5VI)Nfb;7oIlF9dw>K6s~vN#u^d_`$G|P&gR4 zfymb4d45>Ag|E9Zei`f`fd>;rux z!A^_oomsc!XBDU+*aQYAa;m@q;d*Sa)bl(TUE$!6b>l+!fNCxOH$4Vb;f3L7T0HM% zuqb%^Urn;S$6)+A)a(wXpAYzx-ps0-0-n^xUzl?f`vQn*{yqCeWrE!B_aif}KU2fe z3}IiDD$CEuJND7yiXJH?4*Fy9;BJ||LX>x=L{JkIA>Zb^~3}} z&)%p&p$G_#pasH0^=|Y+USave#u)PCvj%R7KB7C?U!ej$s^KdIc<6xO8Ao7Mu7R=M z2Ru+*O}Mfu<$)IKw;Mk3qo}1SBsd3TvKcGOVG#s8EA2SZHgX|G5>K7YF{`;bc_Rit z`EkxnFQ^Tz$4ko^9g@VC95-b*elEc}Phn6C>ue$zzFV@hHOdEz?a1*aI}0yyE|&9ncvoc62c-Ca9QjgF}p?290Ozb zuER(D%x@2S`9@4n0={>yJ|#6Uo)G+dApie}ym97jMopw%*y>1P_mw{FhZshzgo*f# zGKq0yCs3u0f-63k-2yGhuWi{xkX>xqPLQ2{UZ7?7p11=?^@vBt1LiCZu$NManm7&> zNdbgr3Pj-}r+%sAo-FYL8WXZszE;_mqw1OL@?@@+q*fOak$mU}5V-P(4R}0Vx5g;K zGMx7S{V4s@ww^quQAC~FIP%{{G98pZ<}=jUj?PwP=p6zQ~Nf9Q_&c;4>z_nWLX@b~5%JuMu&w3^s5s}Oty zD3`#z2P|`;2b7aIU_06i8?aAXJNnZgFI>ApQ2-bfikkiZ-3<#CVSwGRf24jxmyeVUu)!yf=WxFQQ}`(`?A{ zG%4UcHT%IBrNXTyobwj@69?-i(q$@NwQNeDdA5a5mxTmPDv|1-+(*sLn>AGcy9Jq; zlokk7$CR?v>OxU_1b;|^uFsbd`G8xQALcC)l67B)tkK&rhd9UtlekBW$o^_ivWzre z8w_Y^_`2S0f7esXc+#li^ChHeeD3cF(_^!-ONHT=(!xQlx?lbzP(wlMl9O=cv@9Gy zpG#C@=QTiW4~=4wz96;=F0k9!5)YzIDIz6UFzWCFKJ?lN0TRc+c01jlp*!fz$&rxM z*JDPLp>(A>FsLi}k+;qY(73^9hyG0|u?qwJw%yAjY&sNV8Zm&u?_Vj*gH8_AEq|kA zqg6~{K}EWt8+6V&f+*bOE*_4ujI1EZ=7ZfJ6E6b0|C%u!UTTzOR~cb#v0erV1M*$8 zpgN=Odw*lXD*kGc5t~H-Bsv>iC@m&K@CDjZMIYfB_Yc!oU`fPWc>sym{;JK^sau^S z&8=Y{Q)=-+rv3@CbIzmqVw{C|c!N>|K&d|vKMq=Sw=^X%QzTBe-o+eSeL5@+9LR}QkM+jv@Sf@><;nzL6^l(kKH;^5wzxL6R(2;du;L@pV7h675=(CET2Au zwIq%Tbl?1L>qSL}6PIxxp|VM{sN0ux!2Sxh^DKLmmUrxT zVbc3;f`%N|j1FhkFLeSWMpH#^qGd_GK4QT6dIcCeGSW1$Waw#F&_kdgRe<6N^Sm1t z#h&c*-F7oXD|}@&1WqSVrrKUq(s5*HosFiVE`T3-GozcTx#eb9I9);ZG39ImRrVhY zf$AGfR@aJXMKiJ`@f1p=SBx%1$Y<_cM;tpQjuF~gynwTRulbMpz0qF(>{=f4?V%gi zoaBm#*)3+g`-Icxce1PCdPI-K!vGf{QC_q?QA+4G>m$DpG|A^SWIgx<(R#K!1x>0v zHyq1SQ+UT^>UDpvb7nlR5S5=7GJ_ zX!Z_;LVf485=ja#evMj8O63|~lLn?5JGDvmJ7pr9O>t74ysN-=0dmhZFbDAlb7EOy zI&3JQmez|ob^i7z9lotHZafg+ab4p_w{(kUhd)fn|KlLKsbE|MqFcJ?xLI)neno|k zovuqAi>*wMoobmygHdBiV=U06Af{y-BEXEk=x-u*xXFI>0^$)OVtU1kRRm>24JN>v z6FM07Co9hn?hkU%g-(=*qzEzj7YH8HHH^w~B^eFBluA?<-la6;wR5|tR-DNPSC;_@dhAP=#f*XEy) zb_DVU!tva9HXaX**5F{+Shsk7mZ)n(YNmYP3uIgoYpld99Knlg(9EJ4u>SebjqdQ+ zzrenI>$+97*E0f=`$gd&^V_n-7;1!)bN?l@yzYdf^f=S8ZhZOptE5r|C~wP8DB$@A zQIlPmi&?Y_Z1##pH(g(W5m3%MV9I12Lvyvl!meAoC`Y;CNs&D6cQnDop_L&<0nI?` z3)Olw1-6nYk<1054!X);=@1XkZhqiASRF#KqHbmB{RLrexQSh%`G4Bgp!1Et-V`tf z@se>m#EWrYUH3a3^;iM$VvgTOMP4@%u=6{@&HAszgZE!Ip9rtcsV{87GyO9y5_YA)(;`yCSNoq~CYBcJ%(8WInkL9>2U+8$v)V(}>aJb3b2NN`$JPf%S#OLr zuslH9=lK?BaDUS9E4&njMBQ>>Dr2S@?mXT`@a3`%96|M98JP)|@IAz>MfjsjzH_>A ze2{Ft?7o+YZZJ?z->PdYwk&j}6Igu%;Tha~rW;!^Xp&`nMPA>hzv*WJtsJZ~E6C;7 zggi~JUt8U{_xJd0y)$L{i&6+C%8y9JUGlI1`@64_s0uq&!4jV!kG(!RstWH3=$z@6 zVg{wz3wID`l=Qkq-|B&JZ?6U)U8YGmdraPM`%I7#$r?q&*^xJr)jqE9N<%2t!6UTD z)l~ycr8w2*UMHCmwLOnLwz%njZ&%#6$L(?4g|3n-4tAUD%}?DP_gtT2*!n)Y{OH+p zXU-nnI~!ioSc)~UJe2FC_xby-v7>IAx~jhI`d*yR*cWFa(>il~ByV?X%YgnqCvt=V z@+PX3bOpeeyp<7rGnd>KKuN68CsItn%Y6H-429Q;ZZj16_a6>$;7-m@(6sY#@`*WrTY&AJavZ<;jQ(=h&p_D>ve zQ|`z%Jn4A?S+1SxcsZg39}%Ay@RAgPtjtP(EnasVXLUU_8xmIHe>w)}o-@yKPVS{Eo0#aUlyKej`3yk6RyRoYZ1 z5^!kP`g72jegiEM$EeC1OQ>U-$DjuW@$O_ia?Zb#C<3n|v61oU!_mY8f5j!(<~`f~ zPB!eCxflw~Zcxt0^n=S7?pa>gPpyYo{q(ZALsGQAGU(L6FDTT5 zLGn%Ot8>(;F!NaNexE0H=C{8L_MjduFTK7*o@ozh|BON7MmT;vHU)Qao@#$Z&jq46 zAJMBX=U@>;D)8!x)V?DmTq@a^PKD(rO@>+>Y^WLV6}{Jso5**a-FV`PA&=IxI8`Jh zXqIhn?*oJRWd6YX&kg(6Kb=SeAJYAd?Zp4>^8Nl)zODV<@L`ORrd^gd7Tqw4IH;yl zKEA)7our?xIdaU8XkED@Ts-)fZd1zFd9cy0a3OJb?FPexB$!M$W~iGXvX(JR{IeWDAFRby6>;WU_7iA4=%t6&HybHDxVZsOWbUl&?Hq0 zXQkIm45RV&SOkUoE#)ijG16QpL%l>sYUvKMb1yXb%6L2NmVFz#1BDH(30eUUu1`)L zifKrYO$_z(J3p@J)pjOg0n?@um+dlI6BgwCIXm@SMAO2EB;bZSkKeV0s}=KV;^%c~ z9qwVg@h4opgLw;yOyh~Hr9d*VCp+*Lo4zB@rI?&*k)nS%&wl@1c6j#Escj4(TE>Nr zZ-Pp#g&oM?2eqipqNkwr@`CN#bkOTlzgvlJ+qkiN4IeF>le7EZ!{hJx_iHb>QsD;? z;(|t%Q3W411PJAr3f#4q^1>;G_RK?;kxQ}f$~xbbZtxYp2#wZErYbZB(q-qWx`Hm` zIG>*-V5tGE*1(XffG@Wpw2hawBi)VYs?uM3^@HqyKa{qEF850zqf2%&$!$$;^=z}N znnO*ADIx;sb&ilI#q@>i`N!Hlpmmv{1wGsBBG340w^YiAa!uya`ye@MZYfFJav0m# zo~M!*xez7NIT|=qRG-Lv5Y)oqF3X}a^pKO(=mlbNEo)M_=}GVN#W^Yq@_~JPH;>W_ zh$f~1;Ysz?*Q=bzsh4dg&gbcBqf8LLZ0Z(x>9o|+(;c#erAqoMPDIssdEe`X&Qh=a z270enCmw#ocIh9>gh*X3=$6?pCh;qTWSie9dlT)fGfy%*xG-Nv0^u2rzR%0bHWlC z;qe*mnyU87fy*DzS;d8L&~q3n#(s*I(=EA~qah60`EtW4kDA)r+GO*w)2|O_sCiA$ z;6qSHy=K9%C=`{p2~(bUHsVXMKiuyncwXs0bbxwEHfOrSyvsn5*eRxR0yO3a^T%6fGUhH{fww%u;6=R_@Twce0^-D3J9}zebmt z8X;=Ri=~*%n!8i(4LLMj`U}+tuEr=!K5cIWrH)Wu)!c?=bYI)8;PeI}wvVv8Z`3+9 zzX9)q&gp5LgZjjt_d-OQ{iGVwin z&qrAK2#w^w!bXH|Mox_~yKvWZw+nB)Xb#?~d2fAuyYN=&x2M|BUkfwScDe9muf54G z-X&;|ZEsUR5PiSDN$)?RYcW5%h9c}_1fy$@17S4yO7buW-K`nmVMH-CF}r$GUI zMO^L5YiL6(S$7U+hc{Z|EjGhb`hA5PTb+JE16&N(R8n@R$7R2CYYa*!huc6o6|l4+ z|8?(Jy0=jIn~r{*Fx9zBOVH05#8y)Fr+e^zyq8a-G%Ikn#<=ZK*v*KslXxuOCnIs( z{?KzbC~rrv>(^`fhl;v=Oy);x9ZfMW&6TiNYJG4G z@{5xJDGXd;d%A4L)Ed=P2fi^})eB{ZM(xUbV;I?J`CuUt=fr4X^46ue<;tx0Uf10^1FkGzot--J;< z8&_6WZQasSGO{WwD|`Fi@NU1Q4W#>_P$DmzPTrgPvm)K7XtiaXvrzY`WT;>{Z?jAR5bHyYYYv;1N3BM`Xw&T7>nSc9X#nd?F=jAjB4gmB@tD9 zK5$_e8iNa)-W`Lka(`D}8TrdbGWt&Go|9)%nRo9>nx=Fad~m=k6=Zyc2p=G$7SsRk zxaaXY1OL$-JOr0b=1bdI zLG!#V1RwtQzhU?dA{5a>ov&VW7J2zKXhj8i`G*vC0^?J;bewT&44M`VAwhd!H(s)S z#C3kfCt=@*Db|`b7i0W<>3LegcShp#NCG_L+-k*mys z(vtC1=djb`a|P8FS0x5HVL=JH3suJAkvtYLl>w^>E3LflsJRViq;90=Xu5)Ln*e@)fN_lY2qZ7`s z-$$B``U;&P?G`sr*r4yk3Av~+?hVz~k&OtPNkp62k-xVTqSGdwhJ_Qi2-v;=og zOhA%%`X^t}epGlo`lcO)^wulRLg)DFz^ttOu{YN@z?1rYogw;mw=Y7hxa3SDPNv}CX}twf+7WTP8q*98w?uy z;QgmjqJnn-&TTbWyD#?N8*Om%DZ=U7bVcrTN$4v>r6jNX9RU3-pA)pk!JI?|O>Lh2 z32p7vc5FB&hXKL>)R>81a_m6a^05$(ubbZ=ZZ1TT)gdB@Ea%-N%|V?C`lu^|h4!x?GHleU-3Iu^_n4$1 zS19wHjPTcBwDgJ`+|?sNwZqrtjN74yeFe$JO;4sSI>ukR*sePqDT$Q#SO#Wz!F%u4 z;NG3RMf%+ENIt>VGQk;tv(0GRNBkT|ua=rYkt!!)yC}mvMw5aWvaEtl&G@mTVDNIH z*5r1@8zm(7QOaGocJQf&dkdB?2s~6*)0>zGRDwUZ!6GB&tik?{`wAM|d-h_d{&kWv zidGa1Z^MZdrRYh&cj@a=x>PgFjDqa&NUTEw>B^ueNsR;>EQG#Iu(#kj ziJedhXVr(LS!=$^nwiQ@x8c^$mUi-fV0$EimVZQ2YfX0wdw19sBB2*e9GbfNW>W;% z6tGHpQf=BxmD7I7(k%)p%=;CxP-}Y?kBdOViA4ZlK7Ld&&<{#oUrp4{fp18?<`qEjQ$ExbxUTj5qN#ENF3Ay){$KK|GIC z)jVb|nkkFq#aH3JAeJKy6hO|eiR=stk3>-v(g{QQ4FiQb`2(y*sp?!%QkQ-@#zNOP8IpdA~VR)?asO z4)nf>x9CnQ3vKGx;6*M`^&k*^%L3(b^(ajpN-S`yR<2vk#wRfxZEKCjFOI?RHgd=1 zi&%wK|KLbp0wYIjr%hesdX*1~Z}oC8^dni$M@-E1&PF&ZjrHhvEuUTkvigU~nJ(Qy zs$1rIe{3T#(Pi3u$#RL#pN^PGo3VCywVkW^xi#J97x7SPTj@qUQXgX87`nW^d5O+- za!S8THe2Bu;2K7Wh&4`l%}4`Myb7mLHhRe{#XHq-tI$ZKoQ{)}qebM^(M*|jTs8-GaqsK}y8)$Qn8t{$k2v#fkMfhxkc}4h=7~LCZH@L889Mum`&!1rI&lPU%|%w& zGHGtIDX9cTL9Jbj0ZUa&w$5d98b2At*hJ~Wu%!yLypFwJ#ZG|sraP1@w{uluc01C! z{Fq$W){I7`SycHgTb4(^aGdZtdu=qxMoLU;ln8#O+% zh?&cSG7LuhNX3N>puEVO3j_UR>*$%{ zZ4{O+w&8n3A8wWlGANAMjx_(Pxg+(n=Eff|wb@NN{xEg;$BQ~(1CzygUKB9^t4Uc+ z`u+c#TOxg?1OU{H$_jxJnkYW(1eBuyB30gmSxA`N{VSV+6D5bRh#*MRi$p zeuM;zl~oj6zM>(%)eN(Fp4p4{f7R$K{J0RVVRO@d>upm@pVrtthg-rPlS!!66qUGrnNCi6x|UE9%ZNhe!=ElC@N(eU*O`WBpvl2K@fnYUWPC=##Ro zUG(SfD;ExvV9!MSpbxks%kkSe>S5lSuvA>ZrW?v9P7l!QlTPHXI%Oax8&?l}->>d* z>m2*beyTEE*7=(1dhFLZa_cT+TM-<7(5t@ziN+BSC6NHDW)27Zjy2UpPC-4IO2j>7 zSQgYdTm@-iU`VNXQ=5Z`5(J(h5o-SU?Y2;t!%jF3+pf+#u|-=i586+io~3@LzNUn7 zm~Uy+6%GXrr_a$ez4p^T^^phxAXvTZky<1*Teg>)#7mL6hcViR$UDVOqPtpcm+n0O z*RkycjvH{_3B!cU;KjWR;<1A9TJebzKOlIQ+8q`Q2&Fp#|G{tS?`XlJj2AuLC-fY| z33bj@a&^<_@G-qt(ZZasP@d_nx^p&9)pEM=$ht_ELX1ZI$~_GYr+s93Re0SM@sYp= zIZ0a?Mo680bnnDD0%_t%1`$yKmV9**r>D{Xy$fKDN_oZ#G19MF7@V7wyj58{ZmdJ+ z9v@J>6Q6naxK9x6a7Vq|4~@`mKm zfMhI;La;H79))?eVVeF4a(BV4tjY*=YA3lcZm%o@S+`{Vv7cnnb6AzVSD>%jmt61_ z|Azp}u~Bu(3;f=QcJ`392;rx)sFOPtNqBQDF52lNeqH-0i_jxbN|(j(3qbd*59j|( zeNpsXz$cLum~FzJ2ibl=c=wJ6S>89v4wUX>WMmzR z0-udQbpYQ>GR{mFf^nA;ve7pu;$$49elTH`u6G|lue3y9CYsJ(vs8`NNv3Mlel-eo zx6}ES;Up<0(i~{9O1QlLQ|+m&R5ix~IV-HQGC7-0t)>za>`A!kXFKKIuW%)t3M*N( zkJ0e+Ghxe2=SbQm+$+Bt_Y7{NO$Aj|#^!gkshY{sZhe|~r$iE4oe zUC@c~IJ6;XAAd6S$dKpK#&d0ECiv?odhSjj59E?6gMA;@956gFHgW47)_h3)AAZMp z_k~sfA6d(!(LH1JbNc(Fe;lH7d$5#5Q~5-jd%Xy1tCks0dLD&8&@0#Xb|vk`ZaHy1 z64CVLUvkfklY2#~dd=Z~hDq$X1J+OJ%X zM3X_$HYLrOX(;%DcfDND;!oePk4ua`(h%n%ubmh)cY@ASXU z%o`oIGw?duLzJ+KnDeh3OkB<+eOf4`d`DI{OnC)xdZQIkRr9CAEjm7Zy1fGbaDmci zo^p3`r;1)mljpYjq@>PfU*XU;Fiv==(+ukj^h#}^e4fd5$lA9sQ=}e#KhS#O?bxMl zexdh&{+wv=c#v(DdQNsTn>iM?Ip!L&m(=8Y!mp0os^hAduIicpYWwq}-F}2hUgYH0 zSh2DLrf<Ad5e=<$K{V`c zOGy*($8Fv+;KPa5%SGG%yxr?WeN?OrTthdI^eZpp5qgwQQM(@>?)v7lQQ0*93<&_5 zN~YzJY15)ArsYmLmOGSFx?~Hx=BkIj>zypJP3T`MKlTXA?nnxn0V?>ydhQ6Te0q+| zbwUsVQ<{bpH%=W4afq*BK@&-1buKJq+|*yJJ>}PP58Vj8Yz*1#Z0^#yZjxxFXwnr!MKt6kEX{ z&(;l^90Tf+J7=5HFQxT|Uu`}`9xQSuP#{8n`q;bS1C2$G;pINb^$#F*XpupG7|KmZQdvO?llx&Bro{MM-fzwGB1zs|1%H@3AY~LpPV(zBC>L-2q|7e z(gVpuDk(nESQ5$m?RT%yHGc2vn>w-pE_v#6&`T8+k47GmsIjE)Sb2_}Ee(Id_|-=^ zt9Ohi8G~M4u~c^M$%3rY%Nf8U7l^ZTj8mGPn9&TV(>3081&ssH(N~DU0IMcXi#wHq zh9`YV{&c472mm{ek0KuJXg;>^cPC}gvY?l>w`8uXDR&!l{f0M>)uMIIsYdG_HSndb z9=OFN)N=BV-|uUgnQ14bk5sM1*4 zH>uW<(EAEcLsxqAC5h$18TCsS@}b)-&!1tbEP$13EbfZ0qyqHyoKvk&c^UYXC8k!w z;WU(M&3`T4V3C2?|+6MCABsTieunH&U7B*SIJQvh_^rJFY>I?6mSx9AONy z?i57mk>B znZCujD~dGhs*=)=lP*mAN#^S1+h;*nHT3b0)9^CayY(ovs&nP#!32rQ8_2^4u-Z%eD?1loMZjOJMZ)<({Oc4b!zP8RxJN$=eSM;mCz zi0$=f@)Jmi3IrN)W>Eh*@>89eznnoZhZZzhoK$$Wh7jZeTkA+T$Ko#gX%KQz^2J6E{VmU)y@SGQUekjzqwvLh2af zv656h57v=SxEv^A`XR|9)#<=e7M%I0K6d}3ysP&h7Sd~+87S9T1cEu%n>_2a&!#Two&8~XPOjkcb3o@_-+zhR?7B3zPQ zL|fW&M9)9`vycRKh?532=EUmlor0Bs6@s78Fwb`gerOMkGBk+@jmp6@PM_^0j|M>N zu_Cj9V^VTTDQ*gX<75r4piBsR)rh)IJH{T-JWT7GZO^b$*H8zS{>Qy}chU5{G3ao5 zUVT7Vv!n88U1W7Vi+(Nc&XIzuSANwePAV=^9!1ybVsFJ@OKXOG&as=T7oHx1Ro%#} z4??6muyt3QMGOJjrR>&vC;sR5jD0uoyG$RH<4=R4K(6CPi?0KNnmdwJm1P`Xe|d*H z>)!M*#ku0*8m|e@eqApwJ4nluUDkTGBiGi9^~NLpk^#QdaWDY-7NVV^=5&CZ>t9ES zq#!#Nh#vwfNliFY9y5s6V;kFNzRD2+4;9uq$8a<-6PG9c0pl(j+m(5GHer%9J1c;R|vugS@t-gDCLiE&ITX=#n-&^2~DKj7-sQ`2*0 zm|(*8w)8Fq84VSU_1G?aVAetc$xp-a4U{;iMyejipsRU$UVVK4C2N z6P&O&aLd<8(4yE7SC0M}=L~f>Uj%T|%wYL=KN(unnJ&)Ook`L^l5NwF`Bf4bj|Vh1ZRjM?zK@b_ z8iSs7vXE}IFYH_8I*z`VQ}tR4F<=;7<7EY)Y_3XN=XB>xwijyH?^}Y)>K<5P=N3F= zB-=VC_9KGza+v(VE!TO6OMB1-ebOj`>rryyNx44ACRAkn^7~7 zp&p-Iprt2`tkNsZSc_sX<-ir=W~0({=^eoaa#ud$FRP~-e>)AHx;&K4TzbRCr=D~wXuSn;T_*E__!l2UupbE~V7S;1WnB096ti$=Halponhp3D+)k!vOeOq}8s{?g6d&L(SLF5f>59dBLm1rbBuSp=}swXPsMv zcuXz+#O1w633g22newa5a^SLiwvs$tvi-kA9RSnXu4|sI6KehPg0%+ zP&(5^2zc_YwDB!yhDS_81WYx@z#y9#XsN2A`*FeiIQ;Mp7|Wt&6;FNGE47=|hf7v> z%W{+Cb!u>))@#%(-l^y6g_#Q#4p@;%M^^Nju9_K{0wNK!Y13>8qZzHd#H(U@#?WRD z_P9UkJ$P=4&5|hUHwmrg)$6{69NDa5IkemV&Yf?)x>8`k+D`rZ2h$R?(Yx9`&~SsI zu+o)9nXR4Lv7aan_UAwUZWN-Pe&VC)fzQj*O*-wOL7}(Y2mCj`HMzDf#R0zJlJgG5o&};4{NwrW$TqrrLK{z4f&FqNL4+6wtF*vpUElrlo$QdK z`iFm}@paXXk0h@eT7?F_8)ik0fNZ6`fLs2st}>4283-1Q>l&j4o-0GqsAIme~-DKTW4PTA=n8u?R!4 zW-Ck$!23y%=*BEzcz1|sNOB8&$r=Y zw`r9M0hq0&`s<(|g7Nk#sOR5{Hk}Z>y(db+hxD)zyFG%Iy(C#AIyqnZCg_3xX2La` z7ZGYP73v`Vn$#Wgm*dvk2Rk$eLkl;(%=l{UnvL=@fP4vhY%^Di>C>QbtllsfoK-VD zLQp?pgO6|(x-x^(m#Uh`M00kePq4@~Ijp7 zEJI@CW>O1}+pM0{FEYfL!Q=-xE9USdn-eYk^ic*0fZ{Xy8RYG6)qp!qL^u63Huz_} z!*=zI>`=&Pk`X8VBf4)G(W|1G6UOc|^Wb*O6(ljdLPqxo9xh_;LpsNr?V8)hi(goL zQc>88;d*;p4dr{@MyH|%9?&|`7hWA)`w8Pbk%iWIFWO51)wnq}~gy;?*!W-&G8H^>M`Q zxCC(@^E=+wN(vlo6mFgWc*I zk<1Ay;xKo^3OV_nM&0j-nU?x!0~}9pF<9Sm60$8NzcgLA7yV`0Mr{srx4n-7&=SIZd!`1VS9yo#-=2J%sV0h(JEIYjCga{$Pfe&d z|6C>Y1U&4@xy3%kX^Z@&OAXf7sgeq-)(_|?n)WljEbZai4OCVs1vWU2PH zLM#FZjkwe*?>T)>D0ho(Ui+a4o?nCyFTrQ)vx6mDD{*~^ghDS%N)93QqtQ*kJ(HMb z3~_bfLmFpz|YiId{T3auJ4i&R3YRw)qH>ZN=1n z(v=1Quea&)C+D1}A}OV^c7%vk8pdgl!uw-mPzJw>V`T<|85hHbjMA^*F26{v?Ln|3 z(faYndxaKR1b`Az$86gpr%a%ekad7)MVApeUL{o@dx8YwS7E9;Z>raEKOIA1^jrJm zv@FN#le$&Ny316W?hLq+z=$@~+iIf6LDP7TS;yx5pJPzoD6ik3dEKh`E{&n0 z(Rl9}hzQ0M8Lb4UwcFo;V0{b5Te>?KjG`ue7&zMD17VEfi*x*CozIWfO4!r-ZwUwuxPTlj2!v+a~0 z8h>xCEB@2Pbtn;+_Z!dxQwPJBr@@@P{negk4?%}NdI?y^2EzCa-v7Ia)DBzGWQ0=n z7jM5#!~#W)`C1vK$qF#e+IWi(ub)mvxaf%uAWk0BxwbS@zE`-N>k#?12@g4S#x67!;{+Fseej9J_LV3S0s2KpQx zUlTGsFa@G5ma5=rktUH6UD{n0c?waM^a0`Chz=vNl;i!-`VUe^5Nvr(!oZkC-mQk)^zi#-N(85_V`X0FxvdCH6WtME7ydk+4< zdgWaLJ6$4CyO?$kta$|C#_&3z>hr*;!=vy%hF79@!c(dpo#7#S{`WBMkDJgK4buK{ zv1Oj*AO9JQ>>dHw$!fd8U4i~>TVu2#sDBt9(V%U9kRy=*+BD}KpTurHmhCjgcFjRs z26Z=2vmMcdy>v_<1>nk~#G%ND!=`<@cJt7ccNpI}N@l|994&pF0iMJ_BHx>Q9($>} z7yJB4e}kEuns7Bd0>6*oS_$a}ECl6kIK>By z${v1t-E)4k(=I4)@7}>9U^UvvrQ8fKH>BK6v$G(5xHaeASi?#08b0O+{oJYh2(UP^0r__A#thN5lA@i{>n8tB7GV~H zy;6RzcZ^f}0PtT{DVM$cS7mMO&mUT3?xQZ!nHBhVOpyuWJ{xUqRkNE4gr6an0jsq2 z2(~|3i4c?0lYJKyO0R*Y^D4AKZm!qD-<%W1`s56yFF*YzNntDk&NYCOT-JnBvctfar! zMz)ire~UNc^U9?Sua9r)n9#XfZdxHvmOY(748h6nBf+&df&ybAecpq&xOKpq?`g^5#kNZTAWqB5Toy8(>AecbuCdM7$wT?=eE)AFMqeyRqUw z>gjjVNJhusLNsd{7Cg+R+Cu=db-Z}}7UeeCevSjCka%AMqmyNmZu^tr+v$9zU@p$& z!E60wM6HAG|JU1>heO%L4Ua7(B1Oqo2@%S^&y-3fQ53SaC_5p$8J>zHO9^FZv`E$= zTh>uemXf9HyAop?+r$`SX1;T`J~Mi+>wCXHzOD0R#~>MK?` z-h{*Z1P`X%E?hD)G#+JnOztyMbJHMUCa79z&+MpV#=p$sKp%(=^k#3 zK;?ZA52)2?cVi`^^`d+i+9xFxr(FO_Vol-6#MDLg*cn~7>PeH@oPwfq6P zgke&B8zbO2Ob-KXcjo-1O^j$rf?O(1Rqz}hM(Lcz;eFOVLFT0A#1*)##ulUC&s_Jy z{G&$iJoh}Iqu=Lw2ZV0#U!T!feJwnHGy#3@7*C*KsQssU9FbsvbNnYqh3hmjG^N+^ zce1Ved5zB{Vy}gm9H*;HqGwXw=Jvu`~?%a-&E;?r=n0Ax=X6Th9Gg z<0=QI15Dt-u9Qr)pdwlM^?cWJ4fWC3CZm(M&D*JvWIn+M((O_2O;`DtSY=Jhe#~0?nab(PBgeF# zsO(?;mPzPY^rw9tzp7K@T~K$HC9RQ4-AcpI&XD=P+gqlG(;QInk<$Q*0SoYN4I0geLs3_br-H6eH5k0MnpVM(f=*#;}Mnl)q~4;lOA+gC3d$pB<$^ zGhX++zz*`syJKa~oV7G128(@i-(u%J$VY&^OQO0d@XmP2JT(Z#RR#n~B=UoT$W-By z6mvj!`Z)t*gf>zTNXgL!MNxsR|FYlk^xo)fxDJk*3y2o(P?B63m~RcZu0abVPOL5+ zmje!6TbzB29Am^#|#<)JR;yD_C>xBvZuq%;S;?nIMVmx6A3 zc5)@O0q>l=#j|i1>M#LRh-zAHzS&!a>I8+aekV~5npkRV;t)1d-Q$gMGYTXGl}>S| z$PY}92IM~7rTyS4;S`NcL;LsdC}6Kuy0X{` zYQ*J1*=Paoo596BM@N^*i@h+kg391Z1qPP`Y(&44*cf6P+r{i{vF|fWg$bq=UDEla z)qv|$1!T2$xHsj1k=B9vngd!F9uI818t+AodkPZ!&Xsoyq@ACAbJH`8C~JH7M?M}D z%W0?xp>`P$V!{>~63E0uYKlO};X%U9>x?R^2&!~D=L|0sVubbcEe*lkFsuxQb1pty z^mt`UyLw5=)Og+Y=c@W@I)w&b941aj=-~Rj-s|8{E-fK<6znOMImf2F)ZAj1T31hr zRu#+0Yu+q^;$_tr&;Mn=jLw}E{jt#x&9s7or&mcxZI z2(rhBdP3okT8yKyQM3JvIUi_cYR=r;juOAqXwMmgR9uJGhNJfw4OS0ealPW$&nQae zqyc>j^qb0aGUy~GL5DIS7%~(~sbNVvaBaP=5B%*=) z&s-_z>G=CIT zV|@liBaa$qNrsG8>Kh0gqdANUMd^6LosBv+H*{n3%k?jB=-41_9$gLUbHIrN6g|A| z;{nuTQqU`KNI@?P`)M43x(y?BrtNi}f=bosvea3VH&wwwW8F^j-aI_-H$#@}TaaPC z=}&|>S00$KMJqgBYl>X%1F>1-y2j(Modb9rxK$q-{HRy@6R}Jib%xz2Sx#sPKKZEx zg}*L#KMAJL>)VT^wxil$#QW8ta`JrTWg{g?WIGUDov1Evk{Fys`^#X9yj&A35eug0^GG(@rBw8%&?3f}s zC&clHkZR7&M3WDaxzgW!H*1F-IsUyx>HJNV?60?oExqz_XLjYI*)6Hue=VE$dIK<53ZF8b9DZ5tq! zZt0>V81Y~K07&_tfg+DYt&k}O0qVdNT7qF3u2_u%F@;Z+n4wCGdtc*hgTgnI1rshu zphjA%<>$#ups0Uisaw2XP>tups7rd@%Oq);bIsTjXV>4`p<^qPF|h8L=a-G$ep7Hw zZ{z5<&dM2sUI9Anw(E@emxChE3bFsfCv_8cr7SO6R4Baj>UPz7;ukeG=Uys|LMu2o z(=fes}yT{PW^qno5uO6E+`;jzYGhE~Ft>QSQ0El*9OQNzgjd7HwW_X)GaQd`mAOxrri z41B}cv-`T%m=s*OagKDF!qSD-sHcrzwK#~QQZ~VnL&2NO$kYUIE8I_k7%Bjnkmo#1 z$|M*8U>-+!SNk4D4MgGN@}-EZ=O-<1SO*MZR)JCtQ7G&d#@m&xl)Ez$E;+ zsPqF`dkGh6&^p4mz^B> z^B+IedcK_{wu4&)^@ALa)@3k*ng|i6)yn0Gmvu-~SY2Q=(xv+D=vS#hQO(fOzM#j# zD6zqD@<5l~@1=eP6bftTi!QKXgvn*-oCk}v{j7f&^ZTdJN+?s-U8^pD(RzGv6Q%;Y z9D3I6Xr~YpoLq=$^j5%<2fzuSUg01PL@V7C*i1;~5xeWt!nu^W9 z=z>9}d&d9#0WIhvOA?kb4Rusyq)Gz@gBh9>Sd_ol$P zR4P*AYge*)G;LFbf!?doM3-lKBcz&;l>(6PHqLpP7u zRe@bO<4Cl7vvHZ=HGPBF+WiRAjs#i#6rBZ%GfFmUj(rpDn+3&f#o*Jq z_3Kx7#&-2oj*v3Zombx% zCpUYal$|=F5SPf@GQZ?=VGG!ixki1j%J*~t2d!-So~>cr6w*q)gRzt%9Dd}5$-Rr~ z&HzXII%*Jgtvi=pRfmRHop`l-b@Ywy?yt9H|FP@(zBf=#24<{nVQ%yy;}$9e0qw4g zw;YjNv)nSswb)Pock-98`UR;Mw*gOOy)mykrme4YKW_R8^=k$k4;7o^-U95BOs<5T}YKe$(DrfEzJ8?j8@{=h(0=KNzF=@Wxw`q%b z%C^iMa%2{UW3U+zApHsODvM&qZ-eo~!dQ92yn zKKM%Z^M^vd7uQY(rK_xSs;cgJuzy{s4`26EV_)y+Y0CvoF>3R_a{ks8B{*6d3)1+O7Cuy~=eFf>C zQi9d8zfr%DZt)?~e1I>otGR?viHtnWpT<{F1CELikAb9`sBe_YA4L9mY3wPW2DiN) zXUrKvhyv=2t+&3|#As4n+MKoyab#clt`G#0t)Zu7cCf&c_2qiMXur<+Z!L)-vuY|# z3&p4$0VdW-DaifXlBBdoGVX)izjq$-Gfu}C4z2v}J;2KEP-l&-@U!=>RHYn2!>0nO zP$2ZvHF9-)H3^J2iv%vXcgIQhguKjqYaReY&;|S3;uKfn6Ldo;xsl96i)NzPm z|K3C8Pmi=J)&@uSJjz(bLh(S1)6i_kBTR|eP*9;4R&D4}{!Z4c-C*&i2KW3K+1ud) zwD|e4d}T)U3%YQHI2}{m_?wb{+QNo=0S!tH3MYg?4XwJ&U-znY*~GC7Sdm{lP09|# zWBf!Xr&@Y=U!+6JHLxCA6Pr5*Ie8?uzgA?N4(I}0!iP5mb~vt(AoY3 zpJO>tuBgLtCeH`So|aVNlOU8fI|b$Yb>sJUKV$`B;DnVoBQV6#fY}>x)dfzBGf{-> z9Dc!6M#gK%0I*mnbI)1X$!xPwxhxCy`ZGPcIM^)U|H@|w19bhq zjg4*(RR)n{yr*2X*!SXPLpeYW%8N_+>WuHqf>Q4%)fKtcU>$NDJs%VmVAQUNYpgGr zj79V>|I{g=!km6QBpjSZ63(rrButV!kjz#PHyDdRvPU!e130pc4jTv)E+Bg{OT%j! zSrc@zftl9dwP2(Z2Pa7O{8~WhS)f9_JX5w;w9U+t+qyf7hkAnHy+&yTX4BN0%(RyL z0~1}ozF@-oKwB+laIW7zSVt;SoJhTxvP*>B!U z0A^-}L^GGm&crpIgri_;AUeq~V_pX)fT5xqNl#8XlmZOj08``L^rR}2Z89~k9|SZ+ z7j>~Im7Ckit5$F_d{H!qNKsqtUxf~MdmsY}m`u5;5FJ}t0hayWmMQ_-jO=S&Ls*R* zfMe}T?s5H~&9q>)5|^Hxg0_1Fc2iezaE1K`s@XvOIFVWq05~@VGA7gmn}6?3eyT#m z03?LfoPM6V^M`s7Baj^Xdk?@9|LL)~NqX})+STd)vO=4TG3{%-bCleF_h_&|0(2Ae zO6f%dt4(VvqhZXTE*&PggHd9nu|dY#KgsWRGxEzYph}Nl`-ddNaGaK?bj58<9%wZ;TFSD#ud`5!#!2zXN5^$j1R95@H1Qp=U5Tk+EKDva3?ApDsjbnYS@ z#u1H>bQ~?Y&-Hyv((n{I_>iE2FEb4{=11t<`oX~tdXNm@R!cQtSQK!^06H3a8>qj3qWETC3K@(M09 zqE-<&6~uRK9bjbThNnRHF1&KiVSqF&^bRx>$B{J|9t+UBwP%E!8IXw(e~P$LNBuP? zaITn(_S3@YGSd+m{dZbMXZ?>n|0!vqz5I5Vf8YL2hBJ6VYW4zT?Bh}nW3)$O)c~b@ zb*(p7U<7+1Z`!(=y{%h+kS3yoEz61@WF}|L^78*cXlx(^MWST`8{?q7P$hWxEl~#I zO)0=-~{y*70=B3q7N7ut z#{aITi`}_xNLV8JNHC|7Webb9Awsj5JZtqU{&^tp$ zUrPq+LFNeRC$1VQfJBKUid>>F63Pci7$_m0tg)N?q57{u-`F)VrF|@bjz7R6v%MEM_T`td2&7h;KEb_+NoODOSf{&jsDLvul={oOOu!bw}^lFMIUmKt$lr#6I*KIPqv;I zA#sOX?&a=WqdlU)(u{YRKWD^G+CxYtpQw0!j?n~saTjo)6KiA9clb5Qc}(S&zGwEG z?%o0J-uVgBR;TYSYP@vUbp~}+qYSw1!MdAzjLsg6$~8;Bdc@XYJ$~YsKp)j)v?rE_7_%uQAQzfV%F^a zy!HD&@>e6k2jUUHd2GhOg!#%E`{*m&(Xfs;+KXd@a+qow8EF~AuvdSz=)uzU_&hBe+Y!fW;lwGgFV*#3T$ zkv;dNB5>a98fUda!9lat_aye%Du$$>1RDhcdCqqV`-+Kal8333$MRc>F_smoZOcZe zB_(?@?e#1L*|T(f`+TG1EkPR-wk%4JC(5v+iF#%AWpe!X&?_3L-rH>)<2>~tqqYfb zKkh$BD*z4`vo7?||KtM(ex>)W=T9*L))d~Rf^@a;;@!;79&=L#)t?&3vz zpEXlC2Bq25IUY(U zW2J0Ht5mH6bA31tfzWZNXuJw>aq*05XjJq_5KT&0gI4nR8V?Y{n%BM7$b2Cv;Bw@J z*GWdmPeN&sfA7)Sb1QC)l#-i3K;x<&xZ&f+9LRnxuajp|Ok!?&4reUo)}nQ!S}_>{ zxD?F{G(20slWNjp9R(+^Y{v_hOIE(@xL?DCX;o4w9zcm+szSY7LI=z^t@d;cjiax` z2bgMBpKiNM*kEl`5qL9bApukq#7RU5J1r%_zOFXm}rXTrb#^`TE;m(6P zO;8L99XObjyACA&wz-_<7x|+0KP5W?li`0`dYoFEq>drnBVe?;Tr_&i%fZRC6erv( zGUSH+1sow+=q!#rGyq_huOZBndJ{Xr0%&=n^wyd!l5rW(gEDHD*5t${K_;;w_VC`{ zk(Zz2hrVa)tp)*M+$wf%m9S-C_v6{-v&tmp>(16*HO}i!6y7)y?u0jSjyWM{IhnFp z@%Ayv8IQxc7iEx1D+jMuRUMqlyryN-b7MXWlZcMOwH?0I$oUmNvNG0Eg5=^7s zk<2zeS%8$fzu37y3;VgbsUhun^AGwE=3Wm^ZGrcTj?4c3?;_Z@I76(qyJXRoH)ASt;s z;fb?;-_^|HPA4*nw6IipmOLANmQ1`g>t0;dK=M8RW9lx@)KwJ%7+uY=29O2k*=MfI zs3dzJUDy;k$hf4hr_+=YvzznB&w|+YXA(}yDtI&Z%n%xQf10N{^O}_3dTj{ykk)VZ z`kB%3|)cONSVKiikqp zXx_R)ycOe4#2URL5w#8isoZh>g(9?dSA-u~Gk53|=&u)&%_SJ;9uFBkf9(;Pkj(_D znq0l8Q^96|JT{$#F3k-2sQ?-LtmxyEx5j~mqta(5&>V>LzTwi{)lB8b`A`p@sRYWvn z_M8KMXnz+-3rRs?jS9zVNXt(3XzKKpEFJsjq&Z{xmXB?n9yc{@*p@%g5i zYUt!ra{#S4AUZI;d^I@hpRcR+>raoo0H<#EUU@OgW*WHYswxJY7nip;k1{wTiZTFW z_IeGKG5Cu^RiRjBva5O`!&bWW5tQ54>ICja^yxd3M3@~ZL}pa?Xj1}S=C#!026jy? z2BL^_OUBb9^Eo+3^eX~a7Q<)Y?!@_ABz$GDTwi)=-Y;G-yIt0~8H))M_7!x@>z<9t z$tKKOp!GeeQ^|@(&8SYT%3?CGesim^RwDF(gE7Ma|H0Il8Jk_96LeI&FUf=SS~_VQ z`Wyqu13UPPMzS3G#BwcKTdLKoX0kHn#ehx_TxRiwcThTcw##Ie+}L89sh>X5H^7e# zR2pCgntL=XbE&0bFD_4i=s1l!H*ew9--q|__r@37mtMm)r+(7a(AaY|{eZ2lZMsRj zcaU%#fd=oZ2$axplZDj?UELLrL5LvkyuE*Tx9Rbly0_v%ro@p1zmUu?_oET-3gRs? z4SGD9JTs5KRVv-TRk?h7l)^3nIAyMCFm+2irgTq!Z6vEUlkr>oeN1$>jBG;RPJS^2jK$&57<8Z(?l3u^YlTxd0*HI z(oknGzcY0#Z$47Rzqlf1zB5k{*HT4$g>NMu-#Ge>_@@F^9VSEPJ}O%7kA%9R4Rp!MwRp$5GB z1obp6eWcM^p-yZT)4y6qzNqbm849S{O8fL^ekGTvMO@jBMB2YGAlFWfJ`tf1GTLQv zW!|Vea3reEM|j9G3e~JOqc8(kgD+*1Vs<(L%9?y!tN>_ZS{Ci2M+aC|-95vw;kdok z;Bemm(!tVhFmGE@(RTV(&K(P#^o89yOAypG)s?vFhswzPC%Yz194)TlwaQd8FQiO;P2)KgCu8z`q@#;|)ZwQ7>X zoFP%W52-V-*iC>2fvir3Th_Pp0~RQ_!4XckNRA?2X(T&hR)r?V+hwI>=9L;L*Q}7c zCweNe6IMs^DjlJY*ZM341-0sH+zvAM}Gk zg43UH8(Hng8My_c1v6X6MV+XLau3Z2Xe7e9D5fY!e}8(IM*P0YOpOX9=qZ8jBSilvyX zAl1ma(#C3bqRVI`)}qfj5Mw?*X} zs9dZV#H><@j5qj-ZuWr9iAV9!GiAOQSO)oBdg_1gObmgAva`)xFv@vchQ-F{N%jqa zNcJU^BaVP;G050zWTzV1n?y6;wT;EHB21}{zc1I>%7ECSbXnRJr%g(?DX3MreZSZX zX`daXrb(@gVzwkk&39Gvi|45&>F15n09#5pQTd~Lw%3nbol!{)c6{Cc(GuefChnc8 z``vSVk38uz9=ZjH?Q5k8KVqQl+xs zhGfksJ?>i*&RYI+rXpOTrk~?hwD=EM<=;avcBQFd|$3^XhOXxN~Kmy3R84iX++4g=YV!AsK?ic1tS@mNL4e2Xpeq1DdL zZX=$Vd_qUIS==dHkfao*bsOQ#%E=pB7dFzCcOV@*ecY=H-KhML9RY+BrwnvR^9F2_ z=hBI`mFL`v7x6fw=4`c?2S#|s&`(LUS=v%?51ZoCj@1l=6V+s6ZZMZ0v)vG>Sc@L> zb8s+wH&*(_eIY;uGTn2Dq!$~*bC1VHtHVCmMhYHoyV!*Kcz$g;JLUfBk*r5SPmmZo`?EF3F?;j$-B5&yZ8S?ws(LhKz0n>$YHE7ysoo}}>Vd(s)8`?P`Qm`Bc4tq8D{wO`}T605uVcyA_p}*nMzmwOQs*jnE z33H-8y`>sT;Q#~zFDv4w?>LtR@WSrs%^-IvV4dAY^7tFSN#OejZRueV*v3!ezro!7 z6f!*uj?k#oY8k_;Rav!p4}!EsFGO_wPR+1=yLdLpXM(Zd>`k|E+CsytoruQ zwQhh6&A&Y>0vq|-d-6A{`$)%Te~y{uXox~5A8n%bKk3}%Q3259R;t8cx_X26q$Qhj z-ltzizx*(4*hfq0_lV#59HGWM$kb|>#rnq>NV7sTp~@a^V_lK~II6nbS}&12x}_i5(W$loQNwVRH;?CCl)x4YdDYI_<=;pLT*_LyYd%@T~_zYUIFHbZDkq@3E1dlDzo8qd!q&cu$(-$ForHF%xGSo^ zzxw`R{9p|eLeO!O1by=hU~>NTVJ%qs(Kzux;LF*SHii=MHQU{K5U40Q)7)dfdHMSX zRY`!^i=2Es^y5410O+}yrSfMWhzx7$0GQ~X{xkpH^?uB0xtI=yE|NewyX@rt=Qm;g z_}~h*VnvI^^u)*8eFHEH{nPo;AxX4r{nqg{LI45gdIOAedIJ#szt}N(fMc6%`@5_N za4gM6Y2d$jTM{C|MG0jKuuujwf_*s zdw}P}l~k6pIwBe?8qS5q2;z4vR#O06lg>SYSkY2IK`QNDH>^=u5dj5?h+rm|z=XFCF>_ zkZ7w($=g3{_C*Vo?d zP=2iPgm&cxr#ou5*uBr)_Dd|dMA$Zx)6@}QsJUf#_3km&hk_A9w=*~xg~V8Z9BN(>IZR79*g^@5PXu%_s^W(@N8W7 z!q{2EPGLDm=YRwE4CPPojJ|p$bB9!Byib{DAF%wp+mDCWeAODxQZAn6@hITjpsTDh z#MEkFlWOZ!+1#~TP~?j4#>$j?P219FLUVhCND;A=UGA*oK`(Q<_-d-S+hr0K{V!P* zUvxsUW@X{6FAAKT3H_!S`-*vKDfCptpw&wK)4XzhZn54@<)BsOAPe8V!=JB`0hZM5 z&5vC+G=#~3&m1tOa7P#`_{0Q$guo9B#+=6dyG1;W<>XKt!ERQu9{$qkk)Z`@)$(Ub*p@)FJ*KGj1M(5t?ba#gW; zRr}1&)9<=T(=8(sONeicyV{l;>+4Uq)t66Gt4kCb-IDia&&L-cK1X1&7v-&W;Th92 z&AE#O`~9>IiC>xSxmU>l$iKi|9{otVqHKqdonFJ)EpO2^YAGA8zO4&(-JCMOOk3JN zJbH7_8`4U7LIHOJtd3lfJUWyuyQl2Ru&(Z{+dB!Ct%z+4SnhO_RXsaJju$%RCmn2f>+q`Gj<<>GT6KWXFL-6K4n z_&1)=Bs@ub@{;ShrnKPE&4>IrSPY~6%$w%@Hp|lHrEm50iU|d7A=yRfy-Gf@)%i*Vtvhg#w%%FwHF^C8%^MzE z%XSZC!?MGi9XQkZkI64eO|jhzaW0kkq81)KR9(J%({tTIc&=a#Y@o^Pu(ZUsuMXmR zYzLH9t3_CDY2`(|SZ;W~P4u9n6&_eDxp z#?ohd$;9P%-jiL$;ok&I9emdDRi$MM@zj=HMno>Rmp5ffZRHKd6GMf$0$_RpOipa5B)E2~*$0@$RhIl`>>*oNL$}p=zE#9L?ta#JI^g1z z?0GktqTQR%LSZ~Du;lV+P*&Oh-O;ozmY0~P1?vdrBvgG<~%EL zxsUViYi)&zFFQkTw=dhm^n$jjFxP1QQ`4`yz93ljmg+tX=Y_MBl~ooN+__{v#f!QS zegBqsZkOEwQ|MmsaB=kV-nXxviJ66!Z5{i1a|s`NPcKJzHw%gLo);Y)!T(Gpyxl#_ zCEPDK**ba(d-VanjzAh>m#kmwl+w`(pg zZQMK?dHDs*PMXL&+xvT+1Al)GbXMY`%Xu%aCw!Yim_t~eY~B*W8p0N`&eZL^tGz9+ z0Qkz@`{H@;^DgdJlKyy)%*jk#S|AT2Fq-6t{e9Xrqc7zyfV{^O&) zm(@v=Lyi}{!9vb^`ajvR%lxE?(f0*#@CixmQB*s2;*^Qyc?XZce{P0H+=-68mzZB% cSyf$A+uAcW0YM5t2a*}kKZzfIe*a$hKiNe?1poj5 diff --git a/src/mac/icons/dev/86Box.icns b/src/mac/icons/dev/86Box.icns index 5ff137b55a47114bcd3988ab666df6e9d0d9ef3a..9663821d5b12f9d5daf3d8274a25a284bc334c41 100644 GIT binary patch literal 317326 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 zǐ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�|zIoKUN=H+7KsPvut|0$zcM0BpOa>OXx3X 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�OC| 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 z zT448W{8s&*=WXWNhDRzCEuyoPg zOZwiEUrOyS)jzEhArGQ!iu{>$qyn6r$4h(b52l?C<3>3R4*SV9l<8SqD5%QVRMPzS z+y3+3bpG}Mp++2a=hB>!yGU&FS5(GgU{{xBD|6c)>>Cgb^_HjGd6nQ(81Kai#TsPU ziykd~PsW^41bI;wadUBL+2~|~H=GN)U{xJwTYss+%ybZE=eqDux8Zl?O2fvAC~td_ zI{WUAf~V7!(6(x_`4QEygK)kUto^s;gv7CmoY|yU{a%O;!9kA*h?ok~>p0ImiXV|X zp(0iEr2Lc%no3$@uaV8@;E}Hxil4ZFUH_K+Z4a$^8oqZ}Wt4f@@R3yGzI%afp76%N zhQ!0i|M-V_W8X>HFG0H0i~`S2?~F}{ZHU-c2&2L-S9z`zSEos-aS1T_&e8$b(u0)H zmfk0#HD*XF(v#dx^eDw~u<5e}frv75Mntz*9TUR^?BL4U3Tba=#E3 z8;fyza^_;r$PJ3>6v*feqXvL5*}+=qyKbND$4ss1GS%2(MpCE8%xisF63Wt>y<5G3 zHV>Dr7)o}@S@@HQbUKoUO=ayMiebL`4=pfdXJuuz)SlJsh4XYHER#l?lDJ>IY-UOC zO~s_vW5=*~T5>~{iGw`-2&#}QT4^RIa2eAgH1y^1yiqI+V`aXBFO%1~Bw6~7^IeK0 z*e7e`GrBCG+H=2>CauPeJ^Q<=l+xgD`sYY zPeJKWS^3i>iuRe>$f^XWNK_ooR9R?=yjvc+>@g?ba(gooa+e%CV;58DZDaHH1^~e+ zl|z$p>STv`QOUeU8O7la1>V~hPIOE1HG7?uGhql&Pak1Mp2*G-pMGbh&?IupI2dUz zmpo9y!`xWm`Tj;-=dd||!U1kVJnVy7sj_RzqY5%PmF^Bq`8EhnPh^LlpM$v$#^N*@ zcOTk7)jZ^KsdUw{>t(O%-R`ybN9%ZXtQC*$t_C*2XmFQpe+j*x_Q+b_ z@C|;D%#~<%Ax;$ryTUgjuHF8Fp0y^sH^8N;Vim1Yc661@Sq*$g# zgN!-D{Yi>DQkv?tL*n0xLEYN3`C_^m>hH7?Z30h+{zf|Xezn-5aa|!=fIl19#;9GV zE4rCZh9C;fBv>5cz*=IvNO6MWXRkE@i`etF6YI>!-*awbn0|(+xgG-%V$O^04R`)s z5dhPIOUKLIoxy*D(+ayCJP8KCuX{{Dh!Dj1AZHYFf2$mC9sl&ACeGbO{QBa8Ad3lx zeT+q$)fl7*?-9f~Y@qZ_T(Lld2Hn_&or)pfy4Tuo&Q)_*|Jacz$J}95xP}ZOhHxr7tN>cORZ)kwrJ&e`#l*rXwnWzkFSIRdQ>OH*_h{o);IFPdwxWT6ozuI4E{g6Qivo<*p7%>0*d{NT$h% zN!527_F<@0*cP$$o9h(MIJ_wOEnN4m!^th*t)Fwa{AD1|ct~AWPcV{vFyfzLu4rSP zh3b{I@eJ#UsWhYM_m$ig3i*NcyF-6JG;lN?C`<=~cv>_z5q!?8AFMk<%L{C4#$0mT zF9;SGXe}x)*VkoJ(I3SNlib+Ax_9USQRpRy@b4&tfPt_UDBvSEDGc$DzXv3nxM3;W zt;;vroj)RY{9m}1v=LyZhx2Y+Eh(tHK$MV*zBj9)38f%ubE}K=lWU88XX6=I86bno z#GSfUXOXDAYYg^4=$f7L*nN-iGnJe%Ic0K}>Kjoh4hU13PSy#=0Rk=i(IOtxsnUBX z*VM{?1AYV}qz!db>GU-VQG~rxLVwi8Ga`eM$6kY&M7{(EXahXSktqZ0RjlO5tZueA z)ut@`Z?O5v1zVrTne-$yJ5P4>K&y$BR8nw1KkHHQ6rm#nL>-7lJ*boSumZNMz?k<& za%E>ZH5gp2BNgJNnKXW_2ENVNx1&_;PQR`{#6`V~TCu0z9K^maenEONi23hoII^~C z8j89d>k#21{#kd0rtid09q_%iNn0`$eOGW6ywoNb%0X)kl611}OUSMLOxoDS{GQ~q ziEDfAcHDCQFy{Y+zgFewa2tKBZ;rQri{UD#Jt|SM1qwO&E41|ai(tR>nA3!{c%B3b zuW{nh*Ax65iBHXHwo~EsYYCdJb7%17IS8MOg!p*SmB}$9key}w-l&g{gWHbwGOBHG z9;Ie46U2KY^um3CLTo9VnumnmLE?9w>W@_Mj*8zx*?RuSd8>GXp9!TbLQE?`9O3L-xfxX9G7W6v)JUk~XL#Tr*@7ceG5Rf< zHJ8|EG<$2rMpD1j3=9M^rG0cq?Za)dF8T2KsBUg8Tzq8*>EpLppmul-Es>c^M^C`x zmFV!IZ-8v(Y+WUN^XBvF7G-1a`gp-^TKoO6v?y`ucwJpS-a_}M?xOM)R{h(G>V)E) zZEnu>M>`PX!y|&A!Cw_>Xz1)A@!y24L8c|{P1VWLtK)C2!#=C zKh5xhY}BqzDV}^Yx!1%*XMxn=ZTt+o>4j;0u`7IkPskgc8#WzbX4<99Y7=iQbT(Ai zC`q=cxRR>NnxeVFlpZEPnlUnc(ZQycaC4(+P5%h`C(6}FjE z*WXv~je87H%*<#Bj_z)ggo*n5yMA85|A&q@U$yI|PbPJ2)M_&;^-KXX89YU4-c*LZ*Ej8wHwfu)0{2$dBX&Wh+P`V;xefY&_=I-AIqYU8!yYX zheZFrj*E-APPYBaC-7)gS|W@K0p(0Qx(Rc>b9olTOq!$^nzh>~%=`~AAbxa2snTt| z&8ToP>2h}jUzhwZ8yGyQi_=F1b`1FuEeZVRLI`!>A03(W7UzHl`P1 zfV%a@A!@Snv1YQC4JGle7aA|-o8Q48A#edE z3};=gApVo`Q>LJRuABX&Eh1ynF;@l%DTha$rpit-V*#_KRGGL?Zg!l^VbbrZDIS`8 za|LgX3LiFJE?e1rc2M0`%u-`MJ*v?8LE8j8k}rNEcYrT&MCU0*SWOrx>~zx2ANC!z z>h1)hZ0Ifc-7+Eo1>aZD_ZM*LU{=0~T$@Xo){RBX(b?H}+vMJ#VHthPNuHpqVPnoT zGM5YvB+Ew_%eOL7hE#nJ{1U#w6o)H@xu|&!mMt$@m31U)k&vd-QSh)YvS=gY*kas* zg9H7A1ZH~FUR-zShqBnvv&Q38_Vo}J;)KrXcSSje17HA8JQ~4gZG?&?S8>iIi)&eC z_}al?cCBp&v;Dkk&`DHuBN2CUq~tlrE2!()hW*N~XWd)RUqG;f(L zX@SA8C=JPhAiI*jxR_6rFJxB?TF=jqJi zRQk{TidkeH1l`wJ{wd%%@XN@JH|tSg@zfky@w9=Joa6|5A1PWpz-lS~iR3E!@P0xX z)$KW&!QErDpmJIzE~y*h!fe`CwzHiw=_Ve2sXR2TKlxj}V_UScU#d3t#S8M8l0_U8 z?%x%V?X)DsVs9LV*0fWbUHoLB9|!<_9J!t!pE5xe;fYBhg{<8-<4i3E)=}^!KZdwc z81l8cnh+dGxQ@JD@5m8}pkkwua`1-P3MrbkTmGXD>Kd9d&7^0`CX;Iqni|BX2G%0! z;9~|Qr%Zv+8}j9pr)Iaqh68m5*`>3BVFH#T-tQ$<^Ag%W;kcY3lIClREI04+Xo!=V zFvNeRZfeQij-(ziKdvxK^i&XV-(^6JxZ)GFs4=84g;j}xNa`c10yjK3_6N#;8x z3^TV?p^`d6&MnDfnQ5jc1iG9w(Qpn!r$u~e!*X)3RL^RA9LRx$GFThmkKhUdb~fC% z&aVTe8N5C{vWetrF!F>Nkq=57Lhh-vMhaArbt$>7J!~{+Z@VKk&oX$F^ST5gSNZpI zn7|jq^^W(Rnuo@HTVa&&_`9EPlgt9~aJMGEuJ!uP7tw}-Yyn4;<&sS03#{~iI9qve3>geE zofmWXh;90v=*vbSVkcP9#+d0V8TgU@&GX52<-yJPr!&>(A^@vC1&Ur=EkvXsR0I73 zQ2(y-<)sCJ#}pw$D&8ZUIyLfVkJS(qN9b_3|A*2z!p7x#af-ywHIOH?Pyk(eNMx7~ zsQw8(MH8&baGCSMadX+3#6WLR0219cpK|DGS!m{y5Dyv46U#s~@`ny=^pQtjZ5px@ z9KQ|eck`-TT|^ISk2kJdBF`*YOKTR+)JQM-s}s1PZwF9VBZ)}_@;0%HW8@PnZ-nJJ z5s!XJsTX81UZ$(RjHTky&3>4v?jpRRNVqAzXHM$3*_aKgMj_a6xt(03*mk%`;PUys ztZ9}{CR1!ZV(dA|*t~5zHi)^lPr|=nfwyxV&+RFbR_}E2j#WuoJi(6JryrvQP>Kk$} zAaRWJ2IZen;|Qlr=z50$h4}i>jzNZe^c60Yx|a@lfXmJxhJF@>TqZ(MKXrI5M2Q|y z_a!=SQsc|(N~ce|`rEe!<{}@|jDR77sfs-2pVG+WDb`4YORwTZK8XGwkAkXa2MWI9 ztp9c}ZPR1@MDsReu|tryeOi2mC&FNnBuBYG)jGR5eYJk~l@BY^ev4}27dy+Zk4k_< zP_=QbjMng;X=85%D@(UT!Pf-WY27IX$XRZfjS(s}O$qV_<)T7FnQjNmetrtF4%hH_Yj>UNwxxw&fgW+q;W$iUU=ysFnIfbsggIOW;1&S-4Xf zVT7;v9}#WU$*-!E%3QjQ zXRp)11aLaAKFuU}#aYVlP{=F19f_=o2N0kl@<#UEQF_s zd*9g7%A{3~XUC?fe;|YD!=DLU)0IZV%lh;31I@9;2UbJhHMv^5d0YcE&a6`prpf2r zhWDD4-0I{JYUvbo1`r)=Y*=je(EF8H<@UH;4ht7GV~7`3_hlm0YHWFe2EZaT=bS5N z=m+_w-}_;Z!9!I5sOQ>Ur@HLj@MBe4Qq?lcjuepPRNdDLN7`3m4G#W*Hf$3tTuL&m zE9jR4Yvm-Zv@cG-%MeQ9(scCd?^(^y+4{eZqy$SlSMygt0D{qhGj7fLbdEg)p)z@O z1^{pP;L$u{-I2e&*nk+&p^oxJZoASKHQ~edQOQ3Dc_wY}zO1Ydwt*o&WQ<75(Z^Z@ zqFQ$K1(kxm@&84P0~&DGp~2y*b}j8=vImI5RSo1oH@lv;s$iw`ILuaB4gOQ|z4Bx(3)(fBE1;4QFq%dZnG z@HvGcAcwZb&z}*uHfq>UK?J)u)zUU*L<^fd*jra<6eKZl@b5|`vU4!pM17`RVSTd_ zgT8Hk>3qbv;DZlR$n%UXQar8iab@5(k_Nvr6G0IPN(!WbTo6ez05m!m(*ep4=Xr5EYlyMl@_J%S zv56I|v7x(A3av_I7})Rs}TAT@$=z<5I$Uze6HKQK+}CY97*|e!z_y}3XbhPg_gb5z{4o1u{xdfZ@4FNWN7$u_@o@YcB*S24VJsR;EUYLQ*r9D zHTv6rz}<%A`b?1>xC}eLD5OUXW=qe1S8P@pLxb^e>JUbUxys|zbGG#{;K|F14oOxk{BGU4gOWEeHnIX|8o)1LlIkAbSO&4WZ_fP zlDyg(q;%5Gwv{Nyzn_~~H}61ah=};W2d^YWPL`Tq$M$c)V2ZLg<)mWD{I>?d{ahtF zK?5VLDAFvdzOx{&*YUUhCnp ztF^QhRcQ{bA&7Di+9iWcfkP^a&A@SQJC0;JS3mEK+JaIQLDR0hiw>c1ZYWzEL*{YO z=k>5c*AWW;s>p`|+eSe9y308Or@L+;&jY^WEA7suGi5T}>rtCyyFL`X`(1bd38k1o za7yF0a`*tj9Xm@r^!o+&VWSYhew~lvBUSWheir3ry@9D}C$ch@70qf+`A2_m^Fh4e z<6rHy?Biy5rF1juhPfNup;a@u$nANt!{10u8ZDxdDfU6M>3Fs)#xGxd*O}lR7>M7P z!F{-=OKU7DhpX^p9djitTGnQf#FRf+sAT37w~wL<)hDqKpDH>AcO~b`>M|tYA^aQ05G6fe|6$%smKC zWw^dV>XxU2v6_WOW;(^&26XnvZsonZN%U5>G1g3sjMyY3j-FRv(3xv4Rl?imVX}rY z`l>{mpNlfxEqRx%BU+0&|E^`bf8b~KGAB9v;KGaO=oSUR>7#{lH*~y_uzhek0 z>KmgaHc0%n-pq45bmRZ`pCD>!cDN-Yd0Z6+xR1nV!AAaF?b7J}Sl)BH0@pvT8U!Vo z8V2w!Y=uY@mR0S{^DBM|d2C~a^u#gOq{zMHcwd0alpi)O{l0o#v>zg^?JZ(T*h3q^{+7;623-Rj&bvDTt<_eEq5nG(DEqea~ zFtyqREXcEDiY;HhN0}~2MT&(tpSBM9xGqrZ{MoQ@-day1`ovBdZ!(sxAx(q?Q%t2( zEdS;qt2;{tgXm!5ixzyBuxXM6;RD~)cAQikwfeubj(MGLy`OLS>5Gkf6+|P-@-m4r z1*ulN_5?P7;&1!LewvTc)ngo9EYcf>MOWiG6IQ=JpRR9_oo_O={_rzGBITdFJbZxb z>rP*!MH5^s`(v8Olac2C`XY^FP!#bM69Y%7UI2}HM|C_LU_ojz?lnjh5i{`8Aa8CB93Q3}C}oY)lKW;I)&p@VBQA=;4uF<=cT)4N z68w@)hUYir$>IS4MxON{+@luz+xh!XvYzU{pEN94;rCDdn*83Lt!>4hBw`rxj=HxN zYzXDZGO?}@qC}m)lfD5Q6bXfVv=qLm|RXTpazEbE*QP6|n7U_mD3vToJkL6$v@K zI9ex{!PR)Jzb%(^oq$nr<5y#tci5Gqdk83q;=|qV&^?QOQx#ere{rPdUZeU>m>ow4 zc&^Y*U_;+S`~%$;{R`NDV$r$Fx^O2CRa5Y;{AKBeAjKCVURW@+0FL%91jrc%-fniM z+*r_#R~whC@g`mF82>7AG4!@A{b8{ZlM2V&KYOI67+3RuTRD7osipFai^t?pZV`xE zh4w}CeTjs?6c<-ywAi(%S8E-e|LpWoo{IdXax9K;lisenk@TmOZ#knIe?TqcX!KDM z?-f>^TI)q9dMFd=KfTAP%8d}pXfKQ=Nz>ETNR}>q9W8XnP?)?7pcEt6Hz4cM5;;0m zHcJTxIv(a^1<`JS>@f=PwgfqKVO-*To|w^i=hv(b)FPP?`ghybztr=5qQZt5?M)Sn zv6IVc9O|kO)0gJaT_2C1qRY1ISUoV#_C~~PcmK(LH`wW}Jw1%dtdw&VK~A?xJhsor zEVJVaX6BRV`_PDD)AKsE^6z!#r91n8{+oeN!$^`k1_PfQgdUTN+MR<3T>Jm{Cw?;u z3jaZy&k~3=VE65B3g%C)k(|fcB`dbxBA>TTm5s&1Y+>0wr#%!$I1`V+mwJ+mEx$*(&hF8!K?2VZfhL!ow3qfiju6kH=;vD#EQf?Ad}84G>@kAGnSPNaaD*6cF3?@fz0tN{ckE}kuWT98zoy<)Ny@q*b~ z-=CVK5s5U>43ID=c@VHg+-#s)+iIfHY1Pae-%wGpKHc(7{`*D)tHebx`z< z*MtdoY0H%M*Yl>YoMAZfE-pslB@t(JS;E}q%9T2-4J$Y6$w)_bCWZo(ZXp6Z!YmwT zFX$B}M5Y_H-Oq%l^B&C#k~@VNtuxaDd2=2NmB%8E#2-xR^#kz&@KqDd| z63oLf-qwNr{4e$sVa^W?tnzVL1dWR?2?4ZkY%xS}W5ujw2~j#QL3CE4rN7K06K%ML zA}1PCJ3Q0xhn}mPq-q7%7P5%e=$h`dRGJzOryI>utD2tX%%5w>9E&32`*u1$2_}!T zp<{Cps~+aGKQnrt*I-&3Qg}n2yqmYCO%|G4PB~>>G&d66?y=c4J7i2AYm#K#G!@L! zZL_HC_ed@q4~1P@U9DLQ^cV+`#m$~oKkLS!_fasA&n;I-=;BYOo2V3@Kzz5~9fY(1 zu~L2|q3Ohw+<@-5Sh}D8R1*}|u+b)|GjtAe^r#G;h}(aBvX>CbMgfw8_r=%}+-tQ{ z+{>W^8W78pj`i`&w%>%A)Bgp>uyEZNW*WJzToX^LdP>HB5_-`L?RfFiJ%4(nN-=BW z@cDi8)fuqC=v;jkY_R_BXQP3{lOshYFMUJbYTNTF`$C3aQx_)O-H+E>FX8;c(qdo} z-Z7nFlBuCqztXU$wm}EBt8O&nFw^n~S6h1A2sp=})svuti3HMDmc0fXKc? z?%zeAhNou~u?T($^lOQbT9+Z}&?|^e5&EmelK%at_n}O+&c^zU^Rm{*emw2T|FXS* zapLP`!pIf-JB%ydUWr^|NU&RXmtlIf;Nz?bNJ7^rZZ$zYy$pK}shI5AYfFmuA3BZ~ zUc}Y7DfW8Z5pyLrUBJ~ge390FgSO1od9dcJhgst)S2+UjKS?JN1^9YgHmvyL0(BE> zDmr)q~h|FPhk|YfHo{r2?MG=u64S~End)s z0js7D>L&`Cjm4TanDV$ryw$|WB@=&P{=94fYTF_UCm~-jPLP~2z>Av0hl=TKY9R?0 zCA5?(qoYkd{X3klN-1q}^gkHK50`^>(|#DK7I#@Q`5`zCz5!H1{0p!=95`D2=GZWR zk*VnXJa(jaK||lqNM6gT+t0)qcBV?Sf0r;iy)02xzTf3U2#rk?p9m$%;@8EzTzfWZT;NRFC zp?e%>dFr~=Hw0cdvFpEL0pRE;-!e5RZRyb?>H5Jo@oRH<55JcZqH{HLE1!+raj|ia zC-T^BFn3NMAZ;UvUYa+NE6f3D!nN}RGC%kxO-vbi4Ih5%8!PtHnt=*tc)t@`KP5zYH;Sz)T?_l({Wix+&LA<#HLTcH-No1s|4ec$t(9Kl2%4OwD%XM?P z3-g~We>5R>!whF4v^( zX1Q6yOZpy{-e!|FPEuJDxs_-O=#IR}L0^VRI*br04CDDqRZ=n9vWL=N8ov6R`D-?Y zg5r@X#P3V|Zacb*n%!ze46zBGnru@jGlfbVJ|h_l{FDP2d@5?T^qxCDOVVU6UKqf< zP&VlppXgoXF>~5me|Y$*>Fm6})-6d$nL^Ks$N1v|!D%K-d=xA=T*u-tJlO=3t9~+dGqmC$nH@`g57t0$A`XB;9 zSi$W2KPz$p&}n0EUzGp7#v&bM8m&xT?T;TTDPyn4I~^T&t0{joEl4~n-6RYYzKC_C z8j%LX^|*odPzT|CnZXxS2*3>s?2!FI(d|%@-!{Hw5Q5od6tuY8)5daIYK(!#+WfVd^UHoh~bZB}d)4tre z)^hy8Z^e#8ECw*`P@NdQOqHMcPk2q2oN8fl?{axcU;FQEQ6j2FD^=RZeB*)SE6ed2 zb2?qD>1nDA3Wkz+`Iupo)6SpBjhQYV*Ls~lV%+Y8n3;0epikUfkBW*BB5XW#31m1pH*%n%5H_z4YDyUI%Fa#aMm+s!|sq@2Ee zo|o?VO)fde+x0T_L=T5R4Iuq+_qDwCm%(ac3gqUsQExH3*_S3>p{NuVlz{e#y{z6v z+~&-Ab;1(ro8cfeB*wGT{9SvLm8UKa)57kP2C|?%#}>qA@lpcng{tN+i$FXY%EmS3 z9d_zZQsfB31Fna>n=$|0<_>e_d5Y2KIzhF zxnB4S`)B*_)3GshW%|c6HM48HchGMEcw;*yHU@XBTbzaelS$*8R?z(Y%*-2_nAX&v z=>D)`F+r2h_2EfNaJDhW!V)S02;$m|$lK1x4)Ws^M}t$o`qwtG`xrM7-J+fSN1 z@7uFHN!sObuXrCMePbxyu=?w(3xTA(GYvXEv*xx=zkU&TS`iCsA&u&WU}m#Cmk=rs z05AcVv#cC;-e$A_BZRHy>-DhIISFB}A!g|D_eJ)&DHWbzM{T^ zb)S9_+4DGwZlRE3dW@AQ@HlHeO8L^sCds*A))7w1Rj8BV?=v6C;+Px7I~Hry@*#X4ea$y2=5pDIfcRs2cAZHI~ku1e6A%rPlMds zbKIgNk$7ki&I!2tOgmFfYdWWvK*8s_v19ywm_1LocGW_X<4HE*s|L@2dq@=sRc`1h za8z-KAEH+1bgEeuEt=p0W9Tc^=?8AOGqPR!6&kKN2kO@pCaXaGx7@5d{@^Rdl!4^z zaN0m7@y^(5xfkP&;j|`Z zKiek%I6mMEgy($835x=Ldv~Uv9RAnylOn|Urb137MQ_DTUU@9$H)2#&=%?_55&s9y zOo}+lD8@g>bXW)T$HV*W8JBN$*gWBaBw2zuXehZc$Uq);xbS?wsm6LA{biY6JY_0* zb(RkEcD<|P)ANLem+IR!lyHA#g==M8>eb=am!A7-`ijLY7b(j_D_;;-CIbL$!4k%Iqn#tiGO$8#e&_~f@Hio4CNcWh z=h>_hjuRevwtZdqq4Srw@B?Jv+@xAQeV`J3JiCVE|`M9KU<4orTun+lO z@x_{J4OTn1`I1x!2r-HbPz=Lidk*ekqP#l_Q|mF&YOMXU+ss<1F&6Nk^$%tq$qM@d z6BR#ww~@?eo%j9k=*nJ?PSP*dBxXzUkY7+2LJZL~!eR1YD$i6{dcdn<4ycC~5AX;$#!2+-gyoy>$Vmb_{R4H!gUk#21%NJ2qKuHbW zk9I6>ggyz$uA|uWbK#(@ufWIjKIivg&uxaA3Y>BYR#Aji{F}w zv>c>9S0bHya_QkYMw5K#FrNVa3l(ayXg%@BhkIIko;+zlD$IP1-*a<-<`%CUJ8K?W4f zI8@D+V)Dn0pLwL|ixv!Bf5vgWB!$frROzP$3t=vXg^~F!_hQ3=+4CRrF?~lZ@DfTw zh$LpW;#~v@Zpc(~C`?vjsi4^8!aa}xQozI7*0Xw(%AXFhw%hM(bw*+rYwi^>p_B*) z{%@|mq23gDH*jy5`2E)oXsYs_;Q5e-OHpwnpuGAGwe0)U#6NwpCmc`@N^+XI>as5y!9E39NdS1 zN5yn;1SK{%bPkwrVg@C}w;&Rg(FnL=YrO&NE~c35t@VAfQB%9ETuDa?T7n!;l9U;PKt}Ufo;u z{=TaI)4RJ)@7ky9>^^(#wfg&%ce>0tkFgHVY0!HrtG$$J|Arm4>db;>DFuq{1q{Ho zBCJXV`{Z+~f!H#ezs6`9TZ24Ub*}poSFR)%E!gp>!<_IMELMQLs+CP+zKCmn^a+nJXAhf3Rk6q|CmJ8`F<)<9w*gT!dh0e zl-O;0L=;BAjcle5#G?~;Tz686^>GtcCTZ8+L0UDdBgk6A{K_KhLfu;iZhWCrP16!O zRjfY@Bskw!{h>a5vn%M2l6)TRElIP8mx>hG;)Yji(vNv-QYvmg@)H00$a^?=Cg=<+ zd6w?{;2~>=!{1nFU?eUn2XX?dgxdsUXpQv68n;WG$G&R~H zyh$k>?tQ1gA|}Y4wQWa143Xq5f2Z}KRZ}V)6cVf+$Q0HOM*mEI0H4o%R>h&~_T8_J z9DV`W!Ei)J#C-TT(fhjKL(H0GUNGHDE*5}Nq0WUHWQ+#QgPcDV)f?8r zobTTXkELpXE9*F^!uho$0`@u|RxxMA9TSD@Q+)1rQv7Rhx4D^WBl`j&UKSZJWOfDt z?FkBVQVA2Wk8_qmk|E$m@NYBoZ5@W6SecEETtbyZ?Tgh#369naT)6zF+5EMad1;hL zXs8tZ4ACvg3>PVwuqwbr4IBFonRhEvphGq>Eud|%xBS2enhYiA63AfqsS)CVG9RF< zf6D<7ZR2@JGA)_n_fqU-^`Azi1fkwv)Vlkrr>1Z!w=D(ck7o1YNczpK)H~O%TI0O%;`S3}Y+3R3sp1)pS~? zlsK#wgl6~My3YgO=QQPn?kk{klc*M8u`0nw;pgKd!=z0ubfFGYg0)0JDzbrIRq}_l zEW}`BIiP9Hs~~qF#nzEK1IJtqJm*?cL2!I*o4i{7(>J*)cOtp^dM6M@lNz`Q-vd~C z4f18Zu)lDuAJFVX$Z3^=ApU}@z)wPlg0I-HoR{R0a$Om{ip@&QNYR&srZtvGKUKE( ziG3B6!yGY>r}|HsN(qz>N=q$tgvTyg#P<-wkA%Nkz*0;&Moj#P_&)WNaV)^_odKJn zzlTw{gWv>&mO>Yqnk_P z#OfA3PWwCYZ;rcEULn-<-hpbDGTc&gki2`gI{)H*_}rbY+fE8RCRE|)a0rQ2;8I4gHzQhyd*cIi@AG33 zj%^Bun|bnO$qngw8rf_PR2SL&v**2@4VF`X>BQ}PWj30_6hp)Oh*sYz$l-$N%O%6} zH0H>HN)-%|Ovv2%Op7|?f*c8k?0u(f=fx^J=`Rl0hic>MtEC^;>n5D_#0GLgPJ03p z{NSP@&9SU)ZA0FuHckFPEkTlHC*)4sa+Gxqc?QBh^@?Ps%F%^2et~!TR|UL(+{ZjNnghqF30=DZISs zkvhd(z=$G+8Emmj68gAuWARDE5+3&v5u|wGX58!Pc>S`(K$)gg0cuFQ9Q~y?+u}z* zsa8N=8pXl3>T-}ODhLOzggN96uXo1x?z{Y28hspj&+p7jT!pK{(6pu+;J#_-t z(Gt=Ybhy;{l1y^>tIqxg0xDR&^o3AokQVnF(8jf-3~9>Gc)bW}G%)$W|K^TlOi=nJ zH&!KCOg*bS1i0HI|Hb4_-Keu`1|u#v-ti-x=>(hsMNRTNx$;^?$~W!yu$ID^#;$FR zC&7abM3fY8g1YT~6+OU(PjX$Y3tV{s!kWF(Kt2`>VsNv|#H z>#kOumLZTV(twx3MNlN^<^4gse{V%YAz3#9nD0CO$C7hcT^e)0Iq)|S@bbRk|GdYN zh#+d+P5wW|u_Pswyngl{%l~~=8#CT^IN`ti8C>o9k3Vg<@D@D@bk`oXs}>97571G5 z(!~u`-9M3XzK!#AcNbf>{u=7$n&HP*mCV?(%<>PL+hh3z7>39fAH)?OQtF@Z|6|jj z{N#=sI=+AVI*6#H+Z;E0&$Z)BT+CY~W9s_k7shtBgDhWBUWdx5GVc@1E-O<$HoQ1X z5MU*IQhC}VKU?c#aCM8M?E(JhW&#sk99e-bPcc9C^Lv9f_RtE762Ba)5 zT1hTWS5Q*;`q*H&7HFE~NAWVXS)uOn$@WSJZ-9Y-Z{{3t>T?Pl|2dlvhXVpFou!;y zByF4|Pe8(yPKE}{Um!gTNM0c6Z)a)B7sz4^+rV#@_yjPo%Gs@b{ahWNM@!B3*tAWqhg6(_Vj>o%l*QKPySni62O@#YqT zcH{|>oqz*KV*DxY=o{pV4hb{SRz0HzO|Wp=qAU(t)4)7$Oy7a02V zjyHA3fA_0fn$hV{eaO1@Fx5-Um*3)m?kr!POmf=KM}HC z+A!=JtEvRLO|v|}sTtAvP_XVgVvLnP3zlr0feh*Kh#i~ZHxfk#WaxS9TZ5IVRWyXX zCtAK7X!BqELi`nsuz0*KAQ=Oms~+f5%%B4T;-6M7p(U{9p4QpmrVI8lvYikEl72Gr zeESyMI|PyEa~Q>(u1e#QHt^|E_O6{Uu|!PN-X>|VXaL2FN?TnfcaWAtKV37QT1xKI zmM?3AMlR-BtiTrK4jtY!A-sBXzHlL`2I%MWz2UunpLfkfcsRoDrPj^+^OBfXYa1Hp+U0orFLcc>eUII5z9GhIiJE@R#=TKv?f31tr-;4drKWmo>b-^6&I?EoNlCW+#JdV z2O_#y9ToavYqds11wZi{I&{XhyS1A5_MYSeQJB)&m)>5Pf3X%2;$bQMzz&Ls=9eA;bTR5TbwK5v>T??0&4ato^6 zzgx69%u++~0=ML#J;V3)rw1q9XqVKu!*RfmZ~e*z8AqIBTX-E#txpH8(|S1;w1ADj z$Tp~)5;M;hurc_}NeCjU{R#ORN)lgm;)Qk zkhwFzrjo4wweSZ{nB>cwGalVlnQz@HvVeNOQ%4lMv{i~2loGDEan?RJ=_;@b#`N)y z6Dc!4TqBPP{?u{{U|Jmd+*3dVyM=M2BWfPD`u9w@%Fb5C{?rA6{t<1iAR#dV3wtSN zAqcZ?Ko}A?UaX=h+x>CDY2{`+e~l_$*1Q-RLzlBxouspk^6MsVz_H=e>apD)PvJD& zcP)JdA_?4ZQDbzTzNDvl0TZqd`EWPoE;jsw*o6&qPgAUj%B-Cuw8+A>pnpzZ;-W&Gyy>cA^`5HI&6>%H*xG zZIfPsvN4s-BNMsV%;^|d24Nv!$B~^{@q9z2C93|UOHpRlL~+^kpT#dD@>Xe^rJBEh zC(}KG6kp-I(4@QgM?KR;n>y1*V0SFao7ptmRL1?7(Dky;R1luWLe&27!H2cDCz7J* z`$x7CO=edg7x~;ez!}7Z-@&Vf^1Ww_27?W6%RzN%PYp4e#v4v|;jG9z8bBO5F_F{f za$Hz6YMPt$Hx&31s8$r*fz}LQdj!8{Aiy=&d3z(2T1~>;xc*j1z14~mb?eHB-%ifE zCs_ARqQHgvov*>VNR}s@=F?kyL-seO7r~1%=Bi)>2@2{%=_mEabFBkG;(Md z{L=GWN7UhO8TnDb%3F$&QV>3Eh}(}4T=sbD2;#&(E{EJDX&e-O{jS8oWaC0ho`>Y{ zm%ZO^Q+0ls!)7|nq_(?ziiY{e(K8rKC|)=O6yC9^cN<0*j&q#S~nB9yX1zusJgnfw;F(f&w*sAf(k`YN6w&m>QFMqq*Ab%gIH6C^4E9Hif zJ)>#BT5^a)lHx&B6u>B@aOo)A9bG4gXUpczpr1R&$Hovtd~Zd{jPL0Cmh5W=wk}#2`@5|z}QYG(pM#8lMAQeTMz=@sVbWOX`SdsK9vQUlo0IpX|LGH?l{&!@< z;Xtzt=BpS8F-T!`{nthlC(lLVGmk+Np_4D%9;2PGxwM0lw||(6qqeeVy=B>ul@J`? z4Mhwz@Z7R4xA+||?Z>3Py64VI%XgiJoB~*W*^PBEGSc#1xTjy(zx3QLwcrYeSv=sh!|2YFVFcUJWH1NbZ z5ILiKR1jF94P$cZO22%U!BT#qx|_uDhXb3ut|mv46`!dwUi6pm@$WxANgG-DN@E+k zlKpJJieCBGTsxJ#?j$bsR)41Jw{3J=dEGt8FS!cC_AG`tq7ph-R~P5SR|r)Jy!BBo z!H4Tko$JP7$>LDFfmhXLZ})P1%`Gi}S-Doi?C0uv)kkq0O*pEjhGKeYD)UTnY2b5k zycs*U>S zw7Z#-sqDQV7R60&A|u95Wh$1{uua_pLjKU;492n%$t(1gRaE_%3(S3P1ziIlsY zLUD`Dz^3_$$+k>%mfX7pb44@^3X-9z7VFP(-BFk1Ft_JLF*|2yg0NT;*rSC#o#ZmP z*OvZ+s(dRe4&8t%$o|J|uhG0 z#oLOQQ1Haldy-nwkl&S~5gU|{HEix|2uIRf+c}!s15+d+*v?9lK->#W09eeyetBKY zKA3z|mIMlG*zg#BXL-B?A$vmj&E#37_l+}z`T2mh(PR(;J?q*^Juhqke!TZN8N}hr z5y`Qs>i278YQ-i2>1&znYF<2yyA_ls@$2%7?mam>(-qIwO%rz!v2*LpHw=+cd!GI#AHF~C#(pj~u=$!y|yTt_w5 z{Qc4-8`i18HWSqNYxUspMF#Euv&$&8i4fx-0wh8h@mRKuRiXO4-S3It z8Y4@r5?3}-JTuM$l1afIAL_7crcgkaz8Uy3VGaJq_ffro%Jts%mh;SK)}JZ|!4*~3 zds9TjS=kHGZ^5EN4f$LdHtAi@Ku&+{Ouv`<`~*o&`{%CEkA`k6YO-_)q>)O?zj&;B z={j1RAL&UB2}EAHyKsd(V?x071V3B%@!w(L_PThH&Wih8I2JMX9<2mj^Ns0t6)myFCDTL}hv*9Qi8%;0k_UIXu7>pL zXq0y5r%!uXuF342f)va%PMYtZNIO;{8J0~cCCJD)-gLB6F>o&fo~ z1Rj>O-v??RH{Z9vHc&`w@6s}*C8mKH4{c;@GOxF8tOlWxq05>iRUA_GM7Nr;v%dUt zt)%S*G5eKE$TrZ?T3d*R=y#Hj!YBSW8d60-?}@X99+keUmtWLlLd<<{cOrf$Dj%wy zGW{`(B;?9|?>2*5W7!&IV6DmNl;@lPVd;F1imFT2YrDqz%CR;~$?8|*hFCGFydFMZ zLvkWb@Wt4jO`wjF2F4xpf^tlghgh9S?XI_fhqf+T-k`$0tIEyMkVTInsgQ5KL_U|A z3r_@>-OmtpDP)^+!0IaNFVQN}qFJt9F`dGc_^Y*gswVyANSin(AHLCO(lhxmqZ8R<-lSC$QCOCyxQ#@UrQK=Fi|=_MOy+VyuGOcuZNZ^SB60i|kOY z6+i=ngWoevYtA_P!)S=nliWAO`mo6FTBxNpN5>oHV%ga))ZiF(#V#syr(vBy=Yi0D zTYgQJ`}3*8v$w{pD@} zp!&Lr&R5R3Ic_QEqMu#uRp+5Tc8o)_SA*7k#bReOOKLe#x9m~Ilb*ExOU!9kVYCEo#0Ab;3s?&V)&WUfqR2}{F5V!b|@Q2F% zb+oy8!e`G=b@0%qC#@N3f>cdgy%aAYPsxgWg~2Np9Ya=Pw)x z%e_nBW~=J=P#+I{llD7n(Lkq#R!GXY8S?%`i@#28NO8kPU-O&G^G1O}5F|r2BU_1P z!{*2`Dkv8MNRaVPu}c|(9)f;;3Gg{+#@%KszU=s$8SG648t@*-IoJmCqGBN8v?QE< z^S*PHxF$l~VtFDwtNT|`Ca;D8G!dR5LksoFL%H$onSfDW^Wxsn5oM+m_vqRW#l78? z*{#D>Yr~f8d1c+9$QwF!f4Bm-^9{n&-4)S97>Q?#v=Er3oc6n_(MB_7)ED6F{2N~j zsdPLEb{HtfkJo`$pi~wTi3&wk5>q2Rjv_1S-dbjs& zM#WZ!>_lUz7zAf9KhyXV=WJ2Z5=NJZP+cYIevqN@5(KU^fXqBvCR8G9QPA%_YOUvA zxCJg~lOeMF0Ev^-ai75wn`%*g>AyRsqWNkqe=bsn*8%yYD^TLE6T46HR{vH?oR2I6 zZ=xG1|1>{rk|&YPlUk+cBw)MXy|P9-y5LewL1s%QxfA7lcuKhQ!5cYhxtf1E7W01( zTDD8+$9Ji4PP0yp!l`OqRe{!L4`{IAUeGmgpieE_+)G>G&%Xy%)}6O~=&D8Q6jlyU zDLAnD*5`rJ@IESqmN#67yJMjW_h5bjnDED7v#z@h$jW#$zDiw79LdbBcxIp6}XC8C!3W=yuERWVJgT&%%Tc1}f4S@U_qaleAfQ z!0!NmufQNPAzV5x?c~cXh^!!DQ9=bPuHTH|m6T5uPIU^n;%Vs-N@QsuEGIXw&IJUz zUka*o>p}N_tx&#&DyS5sqs>R3q&z!VC{*oC>V>R^#BXL>9?Q+o`<_}qe{9yT6F!jf z0{(gwy}__e@C!f$)iz5*Udr9VIMJC5PR4%XFC!GTfF4p6s`xud84C4zk%^>?7CLXe ze7IN)ZJ>>|WkN-#GrB?p+AbN}OFj>H1U@^#;4Q4P1T*J7zNUb?SB^F4LB?T#@-!Acqu@#z^{m>+(c z96SNO6>3`u=pj8Kf6X!&vvRWu^B7m-81e__2rCtwk(+;*DK5r{KwOE=Q73JMpk&rN zf`-tF8ZF!DTe#EUzQ`{K7AcajTqtr^C5!Kne(vs^7ilp)upw%GKlS271(joB+@id_ z%S-~#yx`n)8*Co4pJU#cagD}dzV4cyYgB%1r=bM;`x zzWz3IWdbtzfh#f{(RA~4DxC+k;Mbqw9pNCUcIG`&1>-P=ubWRpZ-V>NIBdUvDJOpT znQ7|j@c?%SK(d8Qaqrv;ci}|nq^l{gkeT0jZ!ElIM{^zXKuDx$!0nx~Ux>V$;9*g@ z-@r3iE2RoE%hgnM+DYzWz%47&DZb{7AJ6czRTjbO#}`&9Yqvify&`$I%8T1`&DaB7 zoS(|+}kGcS{z zp^2_O&R!8|J0ZL@BJ~nYSGJPzF^0)9gaMT+e>^NZ`D?bhdgPmZX7bmT>nv)50 z+~)~PkjzK8*n~xCuq-;9yYh`-qvNI7-VlHH;@8y`91?#mK(2p{aMjwLE&M(GKm~cr z5B!~M{vq?NAn=jl=c@CaL?ZL~aw~2%m66RH89u5RFpey7R0a1AMvyz-^_H1Yc8@@Z zQBkhl!VgKTGVbPfr_0Z2w$~?<1L;7)*sXMuj>Qs6H+zFJi9bLqT}Rs`4MoBg)muf! z(lD^hhGoT^HC}+8bP_;ps7mJqPlaD-F^}r83_i|JNx82|X~RM` zObvZ;bG|>Fbmsne9re$_9&$!vN*FHd$id+~L6E|k8qQjX|NPk)IBeUSChMTJO8R|( zsm{Fqa*DanAH=a%Qg)Ko&Jlk+mv#J{<8ur|4m=^s5Pg~RthbCY;J&=u+oM_feGv-h zCXDxf(q3`P_mbTuDQVKp2bZFlw5xm>4&w3Le+jLhlq32t3+^rbe#O{AETSv(cih#L z69Gaa%;&Xz@G^n9EWQFv6U_AGC^9ec)B48&J4NKs=yZ8hgKvBJlmPH-(UwNw6vlH6 zLtKI-UjJEhaab{PDz)m{47G)_fplI3;>5MF24!N?6hy>6{J=3<4dVyWvVRqM z9Ie>Q1G;&2kdrQZ9$)PwG`7|w=f?BGf8TcAG@rn9ZiHMJ7qa>rDt9XBbwGp^q@%!P z)34nGC;UaA3jXmjg9(O0IODT=vrutaqdor^P2d*Hk9vsC;DHgN>?_IpSHFRZj?(J2 zr)Iwri`KH%o<|5O%!+U7Z0}kIxQx((1p%2Tx627KnGM|(^F^*YgK=KE-CX2-f_Fsb`kA~9e z<@m_4--S?}MUN)9%H>E{x6mAo>A4uEzkOjRaNr>naJz-H#I`RJA*iw9Fu-p-bUE1A&e zdQee=flFm2r+mU>sq>CS$T^urIz=m3_@hI&Myc5fAZ6+uM;csNf8=0LDyp#V#7imB zVX~N86nrr}q#?3Br+q_{IhGtv;WQ%rt^EyYM-Y2)Ipf2x&gA9?N>t=oK1P&3d7bqt z9mwSy_QG&Qjd=28<@0x|ixWSPOANB4&XXI#P^$NW08e4!h0DMoL(U|1oDIr_uwNR@ zvR1jl+md`m2(1PXQO5}6WV~&Z;!wUF8DAy#SPEz-p6&k9hnE**5TvA4Wz zRx^!{A&cd=Je?wA1qhU0jL<69gd<>%_sI8UepNLf?2xbLkR~lYRL4A|Bz+hq8E!ZC ztNw<~bBiv8g9kAnZwLILX9KOE%*w=kwkCmt9^N$jbHYDuH8}6*gzu>V z?@_>wh8b#DAjP2fxI0)rv&L#(zWJE!-5teOR{fmC1r#HD{N&5u zJ;|Iu$$d6UU8cV7JTxseP^Pr>mhMjQ0R7yRsaN~?97ls!`}TZaqo*ggL_$?d$m-|W z75s~g+OKJH5I;@{QV2mS_mVZEZ`LoH6xu9HAumK?L9{i_BXY5w!vi+Y;s;D2$FgAf zJ?^a~R+d7NpeJwHD63XH`+ffzBQo|(HY;lo9Ykmm&=|u2K*pBP>nJB8+93dFarbM+ z5)&y)zrM88OF#e47%JqqA8QRVCNQpsJG^24`6eRyk0kI6&+Bh{RmOdEk=wYsOLXy3 z_SJPblBTIg)l==0=2%262X6hdcOvd0yB<@Kr<0lbxzk1;IA^1x@ZRrVl4$*q+S&aT z=hJ1gGEr`LxBlg)HK zMZISEvlaJUxr=S5@Y_t$|ANNl&ih(oRUAp@RmQ?LAw|0GZ^$~GZ|J|_Y%7Yp(Abj}vR2aeSLY{Ge zo**uwO7W<<0nuP^-L2pAoR6}kBA0f&P?NY=y^4j*5e3%LEjJ_FKQ!_Np~5JxI*-NG ze92{)rLw=vALe+5LZn|?ya(hbQMopkm9`h);SRzZ2hU`vQgQ=WRCn^~0cnw^>N$u0 zThyXa{v|#sAOui(yPq2{*(aIQNMA0$olgyTKBe`^=z+9GiVaEv3$EmtH+X?~{=i2O z<(=u>cGtNI6#h?E?WqsSb7s&vbOrp&L^E`#rLMcIVN2z~B46Oe<>9(|b$pVq&W`nb z!nwTz2w(e?Ph`sMj8NiXc%p?-M-47pURnJ+u(#glT9N;A36lpgxc()ZlQ zFcR{U9_s*^euT|^x8qr^_x z1+8grP7Dv(oyE`1kMKOB%$@Pbd*xw6Q+zMbS+z=lpR%u`B)y2WU^AWndH=SfSgPi4 zn~O>t{Y;dd8B0a_CBb=~;HusMU+rV)zZ~gI)IuIuUj7M{TtQj6a4R#FB5eXj1xxNE ztX`#~&N^{^+r}@VE+SS%kOX-!mZc2OaF{xt7_*+sy|uC>zPIIZE-=5T&+4RzzSZc6EEZtB50+>YbG3Wvz46ZCiua(o zBH4*7Jl!RX%WcncF@QArE#X)3BNti9&xu!qhgy!HHNTBIh&?B~@N6beWs3 z%37_k55x$56oE0?*$bF`>o^l|*(!e#8`n=xBc&?*h~+7eZ44-LVv)tAb8-hnY-iK% z!vq+*#63R|E9?*)0%&E+G_IM@Jgl`dYjhXkxM7BG_G~E|IeXw}{9rmq|3mtO-D=5H zihs*n|C=@&P8={sn=tlQj-X$l#@?C3O4SSeSVT7=xA!>!kA|DGI8RD0S6R0F7`wQ& zm3={8=V~y5h?nEfpVY=#H5px3XZ-%vUMJGMFD1IW)b_FE zzt^Y7UXI676_f7DT~a{gF{|cU3vq$A0f9`o^Mioy0P%}Lc4GmMe6GVJd5i&|r*1LjK9+V}naIzxZpP7S}w!)f_kCBz$029qB$ov^4 zeyuN%2Yx0oT>zkO_PB>Z6L!0Wg!zH#lInr`y0!y&5xBCkbag}WWtStSU5)6ud%oT+ zh7Jayz~f(GLX+%%VQp7j>N1o7;W0Lxg(uzZ%ipm-w~PXfE=mELJOdEe?ou=Z0ab;> zYGW-xbcN^&y#4H!6SClxC`7^OwcXh_hWO?Bb!HU*CuY9ehD45^tL!$f7M~)G?f!6s z42bYqX0zFmNHgizJy%r853SVSA8^%|=Q6!!G?)#A z$#-cQT$Q}De0WC@p}KbA`X-l$Z-)E2C8g1cd?(KF*E;FqbW`7Q=hPF$YtW#duW?}Z zdCU194-!+UI~f$u4(SR4(&Ey=$+*Mmp;f_TU*~NP{~99(bRXVVmT*>dv28pWypv<{ zWe-*R@WO_+BcR}dJdTg9>F)pw$R|&IYz3%FD>ebYkN-F-V8Co`YiiN+U1IDxzo>>s z4Dn=+j4AQ+0EAW*aoi(b*e6}}Q?({Det1bO0@2$?O(O^;$Oc)<&+?60W%r6GAG(wu zip?kagUd9rQ5S~=W{3rE`6aXxd@00w6y%j^%!K!5R(ZKMEn3$sYbN)vQOPKPlOn?g zgfE}r>LPTShE$N1*d=e<45zQNq5I}BBqhR*G~3s+kwJpnj1v_5P!e|CYAi;t${Q9N zCZl;*Q-wcEy;xMoT76U*UIjdf;JXN3MccWI9e!P6K-Zc|+0Gc^O7xu1=>X9|Px9}U zH9zf?fYdX`+MLhsJCou>hzSIVb5SR4X3UR{09m#-*ZbB3KT01I8KPg}^vHziw7Na( zVw)7nT2m77?gmyS^SUTA1$~SmTN^k8sz}D`1r1-nRwS*Qr4|4Qu38ls)wOo{8C$us zQ7%e;aC7hwZ@z`sDpQ6D{=8zf$-am%&s7cyGJ*&q2=uQOu5(kg$j(nQFv5gsN#Ix< z%J#J=P<9q%69j0%3XYY5{sod&qIhBH!+pwSgQQmVmi^7=9)a5P!E%SC{;ZL ziXoNaV+z`Co5m@nlE2P2ghJ+u(;G@&FQRO(Dvm3hkM@7ei%eqZT+}zMAFeb6_cg68 z9{p0Hx>S^X`g80T9)c8^IHg*_s`K%RwqGePEGq%6XtJi?4ii6z!beu%+uj)cd) zMUm9J*>feSPp93*obNP+`8|E#l!-?93$To%gbTim>)V!g5l&8T`rj!ueBadzqDs_ z(N+n6sPthJ$qRizd;`a54sp9n6yOtZ&0%zTTMM-SRl!Rz45#Z%HqvX&ech=nId2|-U>(+i-(`&*y0?e80ct09a{$!R(~V@qXcLC8&x4hP zrnieL*r)8G`zx$dvvZ`_m(8Da%!%1m@;lJ|ss=Lc2dUW?M{Ux~M~&+n_%A*3AWoY6 zfzff%6e4oR`#%RT)g$;T1?&4L6?0F2SQd0WH(cGfkVW#u; zK^o)3J$I9DV-Nzd-lLMR3}%HLAQud{eD5O*=!^SfuNyB)jmAzh2lC-`DY2AZ%toV;A z>=ZE?$eiHzwvLSenIHNgws-ro{m0BvC$rWYpbwOg%)$E>%dLFP#2&W!Us2Fo`~YEBgmnU>ZU4MkT=Eu*|N4`kqIBz7O30(Nn0JY_ak90lF(X z`Ak;M^BWH%^Tr{3Y&i*li8I2%sZ=E0WO=XG9qbGJV1Y`9xB5qQ4GY)YEsXx;rgvE% z@}^scqDgS4muTedFOD5NJdwG}=kd;2kg?e*+s&3eqD31C>(Caq zQ*8drPkl>QKc7l4d|}j%$I@mMPjp9`7v(~U|IPs(z*l+Ku36!5oiJnb zCD3C3kPryF{jvY|1$f;}CN``aoDuv4wuI4<2!Om5onzbLt=e-kJbX{7ey{7*xYwfk z#`H$F6z*UNh!1v?4S{4tDiP;@3NVJ9N?IX3OnyEQxpJTV;XLVwx5o`I~bDO#ySG3%D+Xc-sj`GhB917_vRVjr=xAAbasv%Ys zEjmm2)8<|v%+<^Vgf%hqdcpf&=6dy?zzR&M*{@FfT4<9#)nm=B3Tq1n_2VHwPt(Dy zjlps^c=(A>Gm7mN83s|28<8vG@AH+upE?|;FBjP;hbnCU6DhQdE_9<@;}jX`8M|1- z6qjjgXLMQQMMwP08uL)b8Ktk`!MVskZPz2=buNb``N;Kj%O8x&Yq!3XN>7xbW+ zBzRwo;r4^>5RRTKP}LLUOpo+AP#Z?d-bLp$Rifn_Go+N%HWM_+WXBUR}mF%+Z3z z)OjZGDvmMU;6xk)WGj>cg3a#t#-`NSr?1_5 z+-G(*cC+M;a|v+I=qN9?-NU7Yp@&?iLd?yU*YQzKW#G%8{!=AMUD3m|q$AWbB{t06 z#wUZ*&CCwpOMMw~YV^77n96cj6!iEx^`>$+2WEeL;xWO&I3w_p;HDKKHvy7bTNFAS zwm9wce4Oa&@N*mkxUEd#5>GC>K4?02cJ#3TQsdLvX7y6w$ro zFQ)sx`|7$$QzgB@uGR-2Ww$ZagI!=gq`rx_Ujn5{LGw$}&(AQ*8tt`V3o?rJFL+>FBk>|mfZ?Il&AdomwBWC|4@$baWwBPTwERTUuqV!> z(5Ff%dCjy$dp#H-1+8ylS~Dtjk%~VZdhMUSk-r~p>wjtj$1?{BhQX(^M*czcNJ8Lu zf5t)9jnVD=FZ=N=2w2!HF{6COe;l2zHQpw#IMD0=MiLQHdbfa5%+}c0=9E{us7*aA z08NVjW)SP}ls{M-iU}t-5kM*hTw)w+L$^1uu>&};0pl{)9RmwnD#J>_>BfJ8^9Xfp zYOd#5ezfh1X;O6J)ifDrVK<6riWV)^b~a%Q33?iY*%0$L#1p8)!y3=Kt>QvMH7p_; zm-_kzA8w$>vgYor@&1r zmlaJ#t>XX10y%d3X-%JQ+6_pF=&OkUCqI{g5a4J)cs`<@g6OSevPnR}m1zdq89b(D z6yk=O6h>VVF7Ir9w$8wE*qpI5@HT|3rWC3p#NmVQx1L?; z$uwa`wfBk~dEX!ZqdR66-JW8zVC2y*K3oci16{k=SSwh6c0ACz*8NDk%Hak>{ME{&*`GbR zw#U~^i1$woOpQz`WC+h<9qx(A+*PN#c=sgts}Hc@$j|pxq$LIIhayK-bgZ&ae{U*Gy6r48t1jELXy*+h@g7=D4mW(d*$W!%h z!cQSn!eYxw=t$#*4nBAREz(ZzK3%Z*`kIibW|6ZocQYp>s>Hju8@E1IFO`x-`j>-U zMpNm-MQM+2n&&6&k4%(nKF4`fPa&C@dTa)Jr@xv2x@*IVhQFr#8O>WJtr6i2`cRB{ z&(){u+Xqwjpi=XupjUr4UsWaK4R})>MV-ovy+zH=ov0&q#>gU4`!HYKTJ5KWv>p{w zz0|?Y75x=x4DeAJU+hTXkzu@U6Ym~Im@UlOv z>(BhFd_vgqjAOvvhR)_veM|_`GqK-vG2n5iwX@%WCVX$Jmh8p zRo<5dyCcKX#gCSt$lDQ<4v}`!&$zt0TS;UqgKnI#FNR!lntcxks*F;%oO|}OF8nLg z=?ISm?8IW$sWLBghUEJ>e?+{0bTC&$B-%KXJ<)l-LpMvvKR7cxHz4Fhlc$}_$s^0B1Wo~Z$fv|idEa;>^AVV?mp9J(kBZ)dU{@tvSLDgZsC4b*8gRYE+=1$CF&?V{;rX8 zS_#JV^3InTq3DaM4|)+7Y`xES9KZpTK4g3qwogZMh8SmAgC^;ICAWAMT{CQ>W-Z{O1Fh(X~oyf?mn73+Q<-<$XYU+<$v5QG|<# z5d2^4y=PQYP1N{%k^lh&LX}=sI)e0Gl_J$bM?jD!APCZ1=qgpEqku?Nn$mj&rB|ua zi-0r#U3abf^?tbPhP9HMGH1{1J$v?wWU%WTcpO;`$}P;9REw3xQi@V7-Gx&j@kr z5TeT7wQKEQaK9k~1fsv}=5W}65rHz&Y5NkGTkwMMVuc@1WNKg9L#xYNa{eFS+JYq#0oN(?=aK+tkD= zp0wHLBM%nkj^?Q14Q80zuP^2u73mIfOywQ4EGoIxi#^MF<|2(9y{GCsUK#N?{Vc%Q zWZ{&2>q>u%O)*HJ7JT2h@EHT8$3wmQ>sdmCon{DIww`g(?w?+K1tU0Y)Kr zy1~l{p;o}46iwV>lgQ2H?eGEtf1jRScD$oj^V2xme} zg7&iQAM;EA!!b?!F(9(lZ*97LH8O;_)mL3#*!pcB_ALVnB}$oB4+LQJ88lcwa&$6_E`mzg21YM?JU#c}t20;0-k=0A7Mo7^N$<1k=B(I=7!%fqb}epCC#n^ki6ou2QI z^xIJeTQZ#d7#~}t_nD*i9f#KsQhs-Q?n>I~C!*tLV^?=niDfNwSb0wq2A2ZzhvSfI z2w~BFvF_P-*Sh@uw9e3@6W9lq+gy1c@^-(5sxNeYT)0zbvGX+ii9sA-jidTPm4`sT z$L%9mzy52XGhX{+=W;iQ3bnG)MoUAvG_ zvX`HbB`*mpwia9w1BdPw=7piy@}-;EE6#T_F?)99JToL#ZwasP$9`b*{u~ zS!H{|o4t_>7Q9{hL3PGeD&Pf&j0yM;PB>wbk}d9G#L(7sIwC0v@i-n}LxeI%YGG5p z8rT~Q*LYa5@=)j?c|D|BeKFb2f4tST60`?$!UjlC9W)#;e|d33=MnTasqYyJ95YRY zWcA139y7qc%(my$nyC@MP-6C%vsYL%iCpE8%G%L%i92Q`iKC=lq+ABeE_b{%3Z7P` zI3zFMdvIApo~`;wyR}iOX$?9Nfo1iE72ar{-;(swA@AL>qz*>ahYSLJUd79nKQML0 zhx#D)&FFh-^19E%a2d(?OW{luarJL7VM+tS(z!%q@k}6u9G2O1ja{zA6!>Ih$I2U~ z&`LUGu!<~*W}|qAq7dmn?WqT6CFCa~uPf|?l*tNJo*#c>Ak2ez!hXvPA*ZDrFsQ+9 zivbcIOp~#9=Y#i!g#4E&F(a5kQmYXDN-!_QyWgq^mF&kMM*`_n_N_l*UY#c|zA-;f zCpPdCJbOj-XL5**!szTWo5jf^_Vvuk0+i*!334xp&{y~E>ir6JLHSy+Xk)ZSs7$e9 zU_-3N%Rb06CoW14WNM1?K=DJ=O*lo-87NFiX!_ZGrXlu_sq<1;CLyInj8jOTz9twU z5n?B--a7k@1ul$g{$X@t=&}`(IzE)$>Qy+^X%o*2l~;}`(CJ}|=^xsX3TA^W>CN+@ z8kG^(;yax_mz;(K8%sYwI=HeDN9~ACBl?9~b`03>IE3|#i}dwOEw!ha+=Q)l+x521 z_cWL`?cFFfPfKJUKd zD6{{;y2kBNrFSI{J!?pVTDQl5@5djk+!V1Q=w>>qlHjS@Ofr6nl+@$F%-|8@vZ}ZC zhdl3y78)s$4g>xNdc9-USoSA(_(PROvP~7@fBFqpxQ2`K{4#`~;U=Dtf-%tXeJ9x{ z)@Q4zKyo+^*>Y=;u|*o+c+kHPQegwrcZajzdVi)9-n?s-29qR9^TIQpnd^~@>( zZs%IoLz3s0!d%G1xkVsqIV{7oV+FW{7Y#T1WFK2jdQ7m=jWPGw>H>oXY<4-(Fbb2vn`bLsmczmSc8nPihYKVg`s z&HgN>BZkwkMg1BBI#pO|TeH|6boDy~qjTEW)63Op!{>0x%#alT_-QY40n}c)|Ji3w z!S$o%2h+?&wtMxGF$1>B8#R1=^Z>~HwR?O89J4pJF|3NPPoICKH$iFr1ve-Hlt?wc zeIYpB@_^6x9+5TI9bdJ7C+@;6>ofifS?wehr#C41Umi{FgSim+XPzu%Ne-6ZPlAPEX%Bm99d-oRdn+JK{I`_ z06|z+Keopb?4#0%cCN1f=_>n$$+G4803Dpm9=Tpe@q|=}+M0(dCIXqe-u+=LM3NRk zJ(>48X%TCtInm|I{0NM?Y76^D?z~ ztZQ4#V#9>R{A|JO>eirP0A&K$)i9^?*`p7#DG+1a-IcE~CfKOKHuNH$fUkiV)LI7= z@tG!_kn&vOvT|m_8+aQH03}o9_>~#(i1O@+4;C$ThqutYq5n`2QD$_yyeez28@wO2#fOAD$sR1+6P(C8y2IA5Ix$146vVnnERAEG(BWWQhUCL zaqsA*m5z0_;rKoWUTfL=`B0_A98=8|;ijT#N=;C`VA)?t1_{Vt&N|qd-P#zn4`|}i@@i-%CZu@P45PHYdkLY)&(yB%;Np=( ze7JP%KH3lsXda#R3iEC+T~;2l#3Y-h8||XYw!!g&z&ME4PSM2|o9yVJ@=EF~t-mv3 zjl8v`3$W5mia74WK5I7K+3%|A4wYi$%mV9JRqpu{%<=UdK0D>&s#g(CFX4<%V;T)pcK<#ws~kAT||InIG%rxW{cw<Mnzti?63&-kjLE06uR?{moB zmpc@k5U9*-J#{iyp|`|PS9U)L2$;jvWv%(ApQGIxw?soNryqCr?Z}-IK71z#FfFqN z@wje)q=zu|KiR*|FK3X@GYD+9+bX1^@tPdy?5 z_(JHFErX;ClpYUuw!d~iWiKCy5^EnVu;u9|wZdc@K3tutx5w;kq>Oo2QwT&Jfh>p( z>izH6rFOhiHEDLSo9ue}*LO8Xud3-bQOj+K=emF>KZ_=slD@raN5`t|bi9^|Oinz7*_UH$) zXZd*k!lhabFv*JQ*?I&H>s_T+0iA&|Z)BH%&%$g$I=VFE1 z)Hmjbdb*eOeS_;ZF9{Q4kGFcaG7^OSuWIM!w;Xq>P=S}4Ls-5MD)-k|yO6!C&iSs) z%0zKPFd*OC2(ud!+%9a|aHT8s83cCv*vn)4Jv;=rXjw~Zbvtz3CTw4xf@>tl@@(t& zr}!j&Vw=0_+u?)=WB)SC&wYxcDtsm&x7LNW3L~Z}6e7HR&g!_zYh$GS;mccvM(uoy ziSFh@K2SnW`vb8G{o6C8GHB4bc^li}{K4}rKYyN(O>N89;p`*xRjm<55~O7_TiG+@ z;v3&vA`?ro4!&)E;#j|L&`F-|gU%pBR~5Dj$9P%p8I1s+Y({TaISKjU8j-$H_b?xb zzOmdF$w=gqdquTVxLN4f>(HRPOHXtW<#bWh59W!^c-St_oh6q?rbn|ryd+)}P1VLg zRqyhYxN>dE5?(_Ocxm;Y_zG{40Ks2AGdw@0tWMyZ3(I2dxPAvi27|5+X1fv6tLzvv zlcJkr-`DxEYhUW-0o!umW?JDx6#a>v^#C&w(w>Rc;Ph-a#jMa$eNjN+S9@a|l#}vCM@vP`NA$~LQw~QXxu@R-Z|Dv52QB$2 z2G3NPF3ubUaaf4!BWPvN>Bl>9E?Y2>sm7J8Oss3!d1FmvfP*s;CSRC50kdKiITqk3 zkvCVYaf(|nRRtl*{*zVfGkLrv6)7CD9sclPqPsNt`|&bKR_@+a6^PtIw5)Ar!vlIv zM)W6YK%@EhbL1-Qf&Ic-f&1jQ>`*HnffOe6Q)eS=vBI%Ayh`^ziU2N5Ky^LTdn*(r z*mB0mNP&BZp>^U?oFuxKMK(8z0ZeJYLX<{1^uxM_RD(E;uHvyB5qFRblqA~z`&o1# zF`RvbB{!hPZL&ak&4pAXepTeFkV|upl#x6krec`OHrfDh6)e_H`w0|s5>R(iO^O=2|t|H z0R@eHH1NASe{LJS{NX3kJmT6_U6-qyOYC!dJtA0K;tOrdQ&|O0bYz%ZyYMxFwA+Fd z4=4j`l)@~g8nyU>1KawL-?2xPBDhtdp8YsOkO0Ea;%Xl2={NplFPwI41HUWZLS7Pr>w9NGy=VKVw09oO-s6g9W?(<>l?!nq{Ra*#aiMI1ZUbL` z{)83%^`U6Fg5tM@)wqNa@V)8%8Gm|mlIthGHQLn%UC6}VH zk8Ow;mI|O|oA&D89&w21*I;M;BaITgP5Joh7ut#H%#LBO!_b*}ngS1Vj5cM7-=n8# zUI>c--umA68WFHSL!rl!21KkC?f5W@QMM-SoQz0@FTs>VOa z(H!RlQ%TNRl{bzU-+|8c41cj0_#)`tyuebgAKfG2!-W&dHkIu1J+Tp!m2a}IE{paj z0F-{`?tbriz9pogx0KqRw|>LGr z+9!Y;hkmD5RQE5i$Ic&hNSS)w23fl>Bxf%I*f7FNFJ0fC9%LdcVKxkKBXN()4C8Q6 z;!;j7p>=3C4EIm@4%?KStM^!kq}{2A7&ch|Aou>s`R5q=>DP1ZUO@vgMI;M8iz>lY ziU=PheG6{kF4sL zeSXtu<_^UuH$B_#Fa?$EA;ow7yYi;~SJL$O@*)8Yg`(M;Kqoog}3}+ws*8rB{uK~ zQr2gct}<@bpDd+G+*SJgs5q1v9{ymZNP+gxDn?cab*rZ&T8h$2W4u$3pBhX@9ye9v zGSC*c#vcd1vb$>4Kbb9^kBU>CB-&b$>qq{|mm_5n`Q%AkHa)L>TX#S2ozmH256y`> zV9OMNp!LcNq{yK_&-B&2zAAWEWXVU!_06+848PjJ`3|!!=FqYgkm93D0nc=4*c`>h z%~gq+%U(71ooM7*CJLW?-B}K)2-~+E);BEY582r=wuc)9O|gZ@NAP4P{aWuEr*#=m zh59vob!ZT$VfUS23(c+KrVNx;e$SFCVWJT9D&J6s?q-BbPCvDztex+j22~R>Ty?C2sz(ZHUXPrcR_L%pYTlp&2mt2d=MEs@IhW zAhOva4vv)5kS6+X5{){NoZjcc5{R}FXR1f^-fIiXI!VC{A(}kj4sITQYQxu@$IR{`Sk4|WeCw}fdq$dt^xgX&U z=YMvR`>6`vx8!@hTwHFQu?8fZ6~HDOo&FT{#@Go^j4suB&K#WB*>UcBU$I=MGVZvV z$y%Nlg)Nw9&0+{R?qmQLEgSpt2U5Ik;P0}~PCrW=f5CmMVnV&5_1I$XM8$@LbwGd^ zqANSqt4ST`$}Ax$!WCE5l5k3gn_I|I6CGwqieYzKEU;xhKXG3eYtLB8DPrxmVM_jV zfEad>oxh1=^j35mc<5Uej4;qH$48RXvozD`7U=Z=YiReQl#th-nmNckMDA&_Cl$tp zeShsq{(Mt~n5U||D|Ao}+f;&ExaU4ocz`i}d$3n=%S>{$$`|r;zu44|zcP+c!qI#c zND&%nVC!qN*(OAyPljq# z1}QlSV)oDx>?-xE39i*AzZI*s98(se)vg_U56uXk=lvWc`ZoR=<>V9~D+i}cPf0Zo z+WLIf4Oil-A~*=XZ}fo6LSpK3Lb*(0_5svCkC?YKJU|^m-<`@6@J@c_Q1Dkol`Mb8 z+ba`;AE*19Eqa5nYwvdYUPJc#QqM1!^C(Xb$ff;+r@q`ca4^s9-K){}y$0X9|u^XsGxF~u9 zK^AMu`tehxv9~9@BaG@Y#qCQkfoc&!LV&&90`Y6X8|iC`DFq`y3pau6_Cwqn1ky6n zv+Z3!g}9cpSh2?lH^!0dHm|zi%odNC4xYB>%iB$K+LbJIED@(FWSFG0z{nr6+gCWj z{&W*HF7@{3wNYj3Bi{^GA}6Mvl=2JY#C29&9aUwADA^55@>uO(0WH2OBWM+K_U}@O`SY7yP@&vO?ha8PamXN6|}s!+P^od8lB z&N|9272Pa?(LYDNgSM;g!Epp1%>=n8v*0Bbk#l_dmuhOu=<)S+q{02m4Wha;}*VCj=X*4(P^+!I7Yu>y{+(*5Vux z$L3;(=(BGi4^I;P<>dLj*V)hBda^2_=w94Xe9&u3Bq+myWFFCCFa9_S?^hi<1}k(= zo}BLl++R;&`7H${5(Ib|IgtWRh30m-b0181=9RD}G~j}Di7WH2FNHUViuS0U+|(E# zR3idIya+4~hO6xvi#8op0TJ^olLw%N0>KDX@dI)+Q%;o=XIzfm>Txv~s{qDjdWfXA z$cYS+i|l^)Zc$y~6gFW&)7I=SaA#t`VbV)z+Dd7>bIF2t2!5aVn>dA~XYzcXf6Elj zS6919pR+HL9LhS+>uyo?_Aw+q2$xsjK4lv@y3ELwXemc0gsi=cip?+lrHqxKq#DDL zW$n$H@qYWP#)^&!IeB9W{$@xZ&OKja4HCJBNK^*q_C?l+L$3|TwIK$UVAkN@8CJce zQMBk3E1E$6)a+*kyM$*S`>cS6e#z<;pG%whE00KUnUG*;>?$^R8Ucf!)$KN+zSOS% zX?n1O5sssKPnpak`W|i-UEUxTqr6tIsP!w@heVCo8pPYz%Qe|87{;)(k~ThJ98{-A z5jaj@5JjT~Nk4PV2wA*ih0BB#)fSrPKwiecPHj!nv};@&5rSEXGcs5Ug%TfuNooXG z8B{n7L?qXA<uKP#jiR2sWw~c zO~YzD?XyxiP7-uoq*sAcO4B%7m+I^qQgh4l3rI|t1s&uBjz0*lr6wy89pS9JOg#aP zQ5uCI)R0$RuT_s+ee2m+MlvL6KJRAV+U6ECyLlVQ+}@M@-XkZ#KqlgK%kJ!sQC86Y z@YqI--j67S&IqZXW9>zkQYLu^O!33a%QKS=_YaO)hjq%!Ov)-;$^c5^WvG-CzrJ0K zvQXlO*>}XBs2!YAqvDdTRQ$3Hy7ov+-`a3E00gju&nOo{+Rf)52itqbBy>`O*?oWZ zR(Ty)FEUwvxCRSYe~929$cv;Re!Dj9daI%#(qP$)h z=g4|+l+^6CB|i60z3*Yo%i{PF$N`f<6+h5FfAaMv-2*=4tj`+jVv*NoTl(psL?Vi1 zu44nP1m^7uEYC={{zSZ=nS?b$qX%iDpNSas#pNzJ8>1hD zbv_P<{XW?&PwiVL6&_a4HBdlu5McD4X7iGQ;e4D3I$aLOPF5P_fK5il%WBUK_9CW! zl+M=cy($VKoz574?t>}2Y5f|;NziRo_NUk64n{H+qDuqZzr+cT;ZTm5e=qcv{WVA3 zW_n@!9j2JpyPG?;Bv&7RwT|*0*f&hHafvbU3KTxa*+$~!;N0}uBQv&A*uF=pFw)9* z^v)uGX)cWg`Pr{e(7?8Lb!1@+5D#HpLJ)~~v4h*R6N(aH>33fZFpEuw$K)^kUY$AL zE1S=!|z}o7j8EdrcG~VnS@_=49&a{m2m{O@#mlY9s7_RXMls*w+3i(<%mPmdxQz@)9 ze9yLRBHLXRok^o#RY{G0#g{+wjDjo%K$>w8S4Dhj_{3I!e&=@!yK-;P!fIv-ioMBC z+t+&PJ~MwJv=@%P@<@n-_N{L&B9Cj|HYkKr*+*-6UP?PNksA^6XIR60#tbwc#lSzv z{2TE_l?WZqflizgpDCz@6^8urOquTa&;plw%@cnRHoMaa$Vl&{}3 z1Kwozc{=;lrPrsue$8x(8qK$S8|&_l*uBAGw`NzC%BZ-OsJ0b|n=UM(QZ1P<=uV}m zQ<7nW#o*8uT~&|`**UW6T!)u~B}Z-l{V6Kwh z<(r`lXJ5LNS$wZBN|##nIvJ(rkauaU_=0VlE$7XgOquL!-68skbWhD`DUDG-pXGZk zti8Cc-yQmJ74e)HsLBtIIJDRYsZTNnVV2pYDv!KLKqFJ6Wtt4~MOyOg`bxZrhm4ft zbnI*Ix7ibx11zqHf8lLTArwD`BGrf?g{fVl){ucS5{NU+T~*%aHDVEzvmG+7@2!NUoGGo314(1&hbGs%CSs1-7jcmT@6Ew9LsQ&Ll2E0SW}1Z zZoJZvsGrRzkL|T@KfVl&VwLM_Db)CkV_cZ{%gJXKvO9iPuyUJV(6sol*OZk+NS@dC zHSb_EE=umlLSfv8r~ShV+nNtNbEKJy{gWpcmsuEeIpSBVJJGI;?gzMx)z&G=jJJUr zJ$8m#PoUKEl6t|lE1;=GrtFDN0nHWf-973y6q97*ZqEGxGmux8oIf zP4hwFcQ@mN)wo_6ICYo8AKP~La)MIJLklr3b?P*WnEYSuw+geo%^125$&BTQ?*6H( z1c-jriEbl3t))SxCFh!!pM1BC6od(tKh6D|EPDm$3Rr~0LYmM?_sp84_Fd-cSit)( z>Wn{_p}=opC|c{&T+fw1QD{ANtMv@3c};}%7pWMNpE6WVxE$%vC^)uRoP6D+#B`QDPepBzMJ^>nIxIoeAz1>}a+qzAJ2*a+it(o$h`n{0gj73WZeuIWV>>a+ev z)UqBRUcPRp6}|$D6L7GQ^M9SUC`;(&RQ5DANRecqunwMJCM7E<3H`;_j|p}Ev{RK2 z{La)6dbM<38$2?#+r94AHHC87?vTCtc(tjG^3z>=_N&kyP6P*|RMr<6wDU$_z>H-x zcZGbqBMUDfE==w=EF4Lusv=}=Je<7?=uDbhNjCig=6?tl=gTA}95*K?=y_W`t7MJ8 z6uPobu!ze?uan69K(g|evI0dCIET&HjIX5jCr0e{_WbQye-T$cLWFgly7Qkx=H@gmdt$x%*;N_Xg;Wkekf z(A>N`F`XGau(+EwKYgd+8Z_f;=u;W!5cBiX_N3jcRwY-#ktCMiFlfg+!l7*SWT)E{ zxLtN=M?T?DYk_XbeN6Szi?NL_)oLra=8`3c+j3wXT?cLuWhlP?WZ=MDv-M^avTz%B z3T|q9gO4U#O2V&w@bl!r7rplOP@HG7wWQ>yurL@=h^w96`+A2C$X{g|SG;@K(j!No zB6fb0sJuRO6LbW}m{UNpUfsi2;=s|i-`igGE7i&kc>2;~1bUTXtl1%#R z`}~oQjg9}X>*-fkDS5FV^S&xG7xWm7$hVjj68rziL$LSg?rxIjkqwSyQaalE(YzP* zo$B*GQFv^h-p|_`sjL7J8I|Cfv-jDAXBVj~`cYRjt8$AyzBC zffjtrwZ3;mdm6JWMo&Z`)%xeVo4}ZL2NvH)dqp zIbN^4QmuRJ4$nR$iy<5$K09bxSvA*ILLwjo^BELL(8I;u%-7u7)hbL`Co$lwaRMna zNqgL?rpU7N?frn^KG96WaZM0A8yP*CFJQ>1xeA_%@ytTAENSa zzqH`eKTNM5uVwFiJ@*I@aN|lMe3S80&%s};*Tu**n#JR}v9LJPniT1v*kQZa+l93~ z-D-dcf(b_EXuReclGcxeL+Ug-7?gQsVDv+9tvtYpVy;>!C zfs{M)`n~P**`f-A2EBV8OrcG8>eeuSo*e9hX&rI2UEwtb3JD$U7=EZJtDh2lY;NBV>GV=;hI>1f27)a4UTRT!s z!mHxoCsxNjXdDM%0WoH5<@#M5R}>j)5s-(_e-|ZBz#xcbMGr8f?gwWz#6_qnJRB-| zt8SM!A%j6LdkU>C#`RojDHr7v&Y$bKJu-$$Nc~b2AU189Ko22d)?|M_Gxx{oQ)u=f zg%fp!=|Uk_5S3JioYB+1d1K22eYYoODdD~C@qP+^Uh+1;e_o zN!iG%H@*(*`Wox{>6UC$N~N3D8{G%IgF-LtlcbD#Z%=DAo{o&qB@x)=i8EmCLAg&x z2T{39aofz1YmBFhTIFx9vcLAqN*ej(g8*9>Efh+wle^rPo4~{^W!_Pr`k7%^ZlC(I zZ?EIAX>h{G3HjwZ%aq3c-#l^3bG$R*j7>hrF8NsZ#uRCiu>5pd&XbTBm*?csC>Ds0fbc~R;z0;V*5uRwASMtG*UJ264N zIHkcJ^h_GnC)O@8VR7#sUF&BxzHsnFxfT1LCX}8)CIt|;BARKc;X7S&C|N1k%I=gN zAt9@2OwcN!qqP6-ea$e>88;ZcXqbH&VU0^SUfW0&(j->+5FG%?fwZO-%DV|s_|E?> z70weXuo9;RJ2ix!@Gzkl^~=FIrVBgU>h7q`S+xJcQT$!Oa!ZU2Q#PS+6l^6>KIvzl z?B(9a&y-HuM{G>byT#r*adV*;9ojX>A%r0x519KG3dFu#{|fRaUHIz#(cjKJ&PIb- z^Z0|IedVTf+MfKNfnQo!jY*2t72T1pouf8X-g)7jEStL2#YM~Un@p&H>Dkg#T5D;< z4t>emNt}DCIPoigjf`x)1y)XSw_p0bZb{taJNhS>JVwoQ+j{wp)q_tyZZE@HYfqO~ z@|xEBch*_I@y7cb*@X0Hj_5o>wnww6!QaEP!S{p){S-bz&04?a347=H+tIemE3tl) zd*K|CuvxlQHD}pc6;AGx-e0zC(95h75Ob90J8;hMxcQ}>qwcVDF){b*FxfyJI2gM75h z52H(`?&i>zXs5rQ)AZ@)&NjxEvA>R9O~^JkJUiea*t%lj=!FvW?fi`T^^BHDnIBa_ z$q*C&UVYP`A)q$7%Hpt7E!twfq$5z);D}=fmmp zZcy?F{rt(jRCPOP^c@QUL6i3RT%Zwzu?K zNp^ZYqm<}@(jnCUyk(y%Gu|7{3MsbT#Ykg`?y4_dCOZ}<#GcM$F>EWkH!GFwRP&{w ziDtlh?a2?F{MKIx-vxL`6Qq)zzvZXY@K>0=KN;wy4%Z#rPZ%8nP?6KkJ0zG`0k3Ev zpR#DeuBT$R12l0q+W0fbEX7m7TRgC~z;fv`rI9h<`~Au5^=B^?XH4&Qhwiq4u=jo3 z4p=`Py3rxqKUfk1B$VK5$t(=QEJ*#q54*dm8LdZh6NSKUg#bnza%9UrhZr{u*@v7ZGnk~9 zdRW&<8w~cjtyY^co*|2Af&MKaJ5!U7+gbgb?$M`xH7ik?oat z0kZ0~q~lHnC^tX4{%KS5ebytN3K!+>&{YrXndUL6$<+bvC5XVL*C9v_V53 zXX{)htffWXBVge;HPW8kU3I!ep(Bm-q``&|^3Nc&w0`^saDV?xuM&~Q)2s0GDm=Xk zPp`t$tMK$HJiQ7}ufo%-@boG?y$VmS!qcnp^eQ~P3Qw=X)2s0GDm=XkPp`t$tMK$H zJiQ7}ufo%-@boG?y$VmS!qcnp^eQ~P3Qw=X)2s0GDm=XkPp`t$tMK$HJiQ7}ufo%- z@boG?y$VmS!qcnp^eQ~P3Qw=X)2s0GDm=XkPp`t$tMK$HJiQ7}ufo%-@boG?y$VmS z!qcnp^eQ~P3Qw=X)2s0GDm=XkPp`t$tMK$HJiQ7}ufo%-@boG?y$VmS!qcnp^eQ~P z3Qw=X)2s0GDm=XkPp`t$tMK$HJiQ7}ufo%-@boG?y$VmS!qcnp^eQ~P3Qw=X)2s0G zDm=XkPp`t$tMK$HJiQ7}ufo%-{(nTT5(faVgUVeERS*D#VJ}{xz)LJ{Cl+E5!groj)fb5u(%B{7HbfO z`y|GFVrL9+?-2m*M5w{ViAW$E3m8OSREc}X9flhK*r@-x2EYjk1up%&4!~U<`hPA3 z;JBSgTv-4o{W%b3kn*?o`2Q3F;=`PQ_|O@mdR%kkoi*VAnWl5SfkAyeu7Y@H0REXO zUef?~E&RXz&$v>Wp#Y%)?pVAtu9kSsDBPPfJRYQp(=H4k#0k*^uwgR*&JGtR0I=o^ zP8d=B%>M`k;{?J#(_LtQtKhFd1Kj(6`=P+!(*V(byPEKLuqIFs$AWPpA}>^cU+5oZ z@Sh3)Kd*$7?G2oprCYo((9<9%Wg^A#)5x_nZ{EeZ9&Qs15EJ1(_I*cB008vbNlnc_ zOHGZ#z{Abn$;A!;cwYr2_G*Lg&~_+Q7u_WJcq`^I#8iO1QnzU0 z)RlUX`Xbs`CvKN$7p|AUHD@O{9oS(~QE#@RRhav&_S@UEwQEaKHmzwBbcpW5)2p|* zW@TI}d!z?V9MhA{P54s2cgX#ODVTaaNjbPj!5JlOpGW`&+0hzAyZ{W7X(4>F328qK z-;ir)Pi0spqPXd~qrX^K&~=_!@G>w#)8<=)Tps7ES?{sB8)jrwKrCFq;V|8PA7KBr z@meZVIm)a1)_UIxJoVle8OXjB8BjXf}goUs$bd#v6&ier$w=c zetaA-F&X(LfTNk>Y8kva$ohVPTqH_?@ZDIfv?F10uws7MdV8Xp{eVGIPcLWUNK>m08;v}y~YAXOJ16ns#?)!qa-jOuT z8hY(u*Jd(hh(jZ;MqHIr`9$`Z75)(pDlxnxkW+eaZ<>G5fiBtzq3D{=_fl+}B%0#z zpc;1iQ5xn*sQUbhnYLXbA4-#0EPY2tc&obQ)MLCpWS|~ZU$3Od{^z8;c_J$q>*+S& zR$6^jMtkCB!RfyHoqmE{Zt-#TiHYH$sxmP#h*LzJSkS7aNmN}8_Socn^9JwasOH6S z4uS{-THV?r$eeNB0OoqQ<2M*UjViytmCPAE{>e=LKEeKRdXbyuCL1|HM+}cL8+;fo z?nriV9h{O9%o+uk2UrhPm!4T;lGWiIzZR~2y*}@2 z#fSoE4-jv<&i7x7I0(3jz_T>A>C0}(uZ}Cj{AVRWZ=ZHB(q7Z@Q+rR#i3(=%%b} zP1&ckpJ*r#W?dvngmSdfEBt3IIAxkNaTi3SW5=v7B-RQZMSoFA5{F1^pHln~RTkg} zEIGfr{-1eNt-%}|Fa$&MqZ`;8V9Rz=5Kg!mhe%jo>-Vk?=0Y&U@1@e=zm~)ac}4)< z17i1_DN*cp2#L2i^Qz|P5^$5EpcH<9vg-f6y?6X^?fpPd74=t1GRn{w9cQ5$Y(Qcn z?L~twx;&H;XO{@8nlvmiq~uTJMSq3gw9XX`S$GWvu3r6n09RCpgWwm4;eD#ms*)<= zqxpsU2uiB7-+k=pUm$=)>*B!0wKT*aKOpMZF6I~}mb0Pvw+bEN=f_fDKA7?qwjcl0 z&>_B%S1=*Cs-&a*k@>GYkt-al^GZ2;z+l0WX(oJB@;;%qeoIoYT ziakJHQSl?)|7hZFz=g9Sht;PvEJx@)vA+_DFC?-d_JFGBHzoh7X1RYM5i!BHs-%o~ z^tTfjt`U4YgA!HA1CVy@@&7EtK|n!@YojAd;^lEINmAe6%Rj`z)36IbD%9G&t~mL^ z_&6(uK8?e9p^)Xga(YOqk@N6}kCBMUD+a~)JA$b*LMa)zz&02)hyfe?{bJ$&5#DhP z*N;g}HQwnV&6fHK9NG={KL00=j0RV}9g-&xw1*vaGWWF19j(ct0DFZjE3I3~=_ZMg=`mf7g6eGB4 z-4+1&uGt)NaPs|E1q}%2dE9O0<4pfthk#(8kOSZ{{8!mcWo4`Xw@VO3E3Y7g-Xvhk zu^mvb|Gnj91*epM4i!ZQdPg8#;{NeJ@BDTv$MVxbqi++~?%-VV?&5P?cOjmum4N>B z%QH5dk35@`V;qWIVkMfe3~*IDHJLZyyM^;Ps#^<7F~U!NhphA@lb;wQkLby{7Cng7 zI{mmtQeyJiMyF#U=OXT&T>U>G34Y=CdRG3A4s9^Y`?nrX(U5`|PTd2*9haVqgsgs= z0TLOQ`Cy32g|a*UY#7UT5pMX-AnYuwR^=1-mN&~9uWR+B3R@{6^~O{$8lu9n3W#)R z`hm-=s$X)--nIrr87#;AVckL%wWsm!Qc7^N5 z#b8nHYc%?z6ujji{Y8w|7IQ`JqrV$Hu0N-4-S+-xJqoUikg+CQ8GCG{I53gFehD`! zf~lVOVfV!bG-LQq10;ftWm_Ds!w~4;kc{SkRjP2}%$j4pIiqfad3X9mTn}3 z{x9x`6kM3K0O{<0;i!nO;Xq$Vj=+x>aL6qe-z}W_Y%F6j|Jw3264xcm8(vOd{sxW# zH8_KkSWFhY$d*T@=0Z*l+WFak4o?ZTy|}sAf*XncRuyYS!1bXMLfQL4G1xfJeZYbZ z9*$~$Z1}I)Y!~)oqh~Yxd;f?4h;OR1r-zI>@%&832_8z{xm8IG{;#k|?nPC($d8_X zn~c5%bigV#?hf?W_>F#kvn7bL^Y4}HSo?qx;ea1c=A3pxmAY(SSIKp2yLk_SRv6ej!+Wz8cKp`)#IQs09w#sSe?Ms}TAQzyEj@Vt zf&MCqBIIxq9Y8q2$}E+Sxvpft9`W_=rFXu>H&@vYo@+MhuocXg1+i%OJK)?{*`XQM zul_Hd6>+!^`2xWwEk`PQ)b5=DWMs5LqESY)4D8GdHrbI159xaoVB1ePQ#pL8_0EP9 z?%vx-fUzd~5sTQK^}&l796WMjgC#d1#`~c?3s2LV7m7yPt#;;S-SmB2w4 zx2(6QZl!r&hv~EwD>6?(WC(P<2b6o|iFgQMAQ^&M|Hf!NnQP?At?&Mj@YjgY>t95>V!(#Qp>Wzi(6?)Ga;$$0%f~n;};pb7tmzSaC(u$~_I{&ZA>4AS7 zDqv0Q?(8l~a}+R@KLv)ZmV;|_^1cas#E-7>jJ9W<#bWAyCkq&N7<8b; zt`BS#_)CTe3Xge4Dj_KO5@c6Yyj^EgZu_qdI+wiI{t#cCTH7a-6Z9yfOd|ng#s1R} zNz=icchx&6qLznfKw8ACfn73+eIjl^8IrtR19jLM4r(&mbl#)%ZHzVko$!YEYr37& z1fZ!&K@hsza|ZpQ{xhECVqmb;Y?%I!C6zn5L{{10cUNIoJbyn=cen~=Ky6HYk&uY| zTKh@N(#6;)p7r3>4XJgJZxwUgay#y3-A^JEvdobUus{yej<)~<-|ORB+!>5YsHZ<) zl8jgt=e6F2lsitu2UkElOTDM9Zp`a#wa3mxmY|eRMc)M%!$g;U{Gvi0Qu(Z^l>s{{ zS#Y3YwDVTZi0wjxoS$L5%tZ^21&03DWQt(hRgj|%CUjWpMsOO_7lKb+TiShlEzhc@6!^Ja48Fhj+`L!=7=-u! zCb4GlBl!CTCUj99H%VAjzkg2h*A;Q01xg&-00maF88%}D!Iqa(9-oR9nbeu z$3EghtG@wlHJ&wUv9 zOY@J7`tY$8`ugE%KiJ;L(e9n%WjCU3{q(s1>tW!nH~af(RmtDX4lh7~kPIWMl(n|E zohr4}opQpJ#-H!|xS&tn^@QQAl_jHKAREk8zw^1#S&=bk>6tr@e@st|%1l5bZ=ABJ zwAY+yUDSZ;B`vk43^5+*$}eI4u1ZlpfRoW1&$MzbeR5=kLPC&iO&)4gfipmrtXX(Ma% zoAau9+AT*5vFE#ZbLN;uc$#JCMFkuZemuoF-Cz}Th(d6``f8Ko+5!e;(?^R~a31Sw zUe$Y>u%s3vjP|)(xiix?3DlB!?rerJNzH#L3Cohqw=c9zQUkX#b5?r{Oj#;)1$e}{ z3UIEth9;&px`@SkIZ`ffBT)w#*ISfSUf?@M*Z@n4+qEb7m&V+40WVVi9PH~Kw)^$P zCCJ}?+_F_ndj^PRw+5gxAf)Z5PW6ZGhj+!-n%y-^4a8a{y?kVJXkc-KDnYC@{ct9| zS{6=<3w(O54E!^&bPRZ&Fv1Ca;I{p8;uqMXTtcqJbPPFjehzTAh@&aZP6U(4V=Hp#J7trAN=QebDJkMx zgn7^>g8;P&159k<~b{CNhLwxxgc=wq;BRE)-P5KB^0JC zfLXekVH^h8BQ*gXrf!KV2ZQAAiR-oGR1Ccdc>t^8Gywf#Pmp3G&>*3Ixw{V zy9;=#YZ*~NfDBX%KsQr%m&U?Bwx&Gd4}`LM+OC;^jh4Wt!~KVfBqX27(+leGV}XoB zIotc`nc!&#V!6Eawv4Zljg8c}5oR$r&Z3OEb%j04S#~H&;EdT)EJ`ue+|oX?l*!A% zHmp+D^p4`?Z5v%yJ!IR}p(0)#osvBTaTloGLD8Lb!Ft4(;t;RjMnb2>k55@~zI-Dg z?pr6`r=cViwfyat_d-&-o~J?;L#^j{SaMF#`H?9aA~w?Tw%T{oOW8p^R-PyG z90zpTq0u9AaEZ$fn;l;t`T_6tGx?*uKCuX|(C2=e~c*ql%`eA<8KlWr`Su z=AX}Dp`y6&pGt9$YrX;_gtwr^9(F2w^ppX>5|BBsw8(no2U~5-@EV?rw85}pk{+wO z*CaZ}6m`LjjCVyk3pIoaDHT;q$v|b*=yx|shdl94bk=CBia5E^)ZO4_w5KxQ9gK0% z0mE2==YC5KUp~XxVy;SutV)b*LC4t2U=G47hK9Ry)sNo$GqsCDnF%@u-Ns0sn|50AOm(-*y!TjMYK__K4`wXECW3 zC<$UJ{92}gIqDf$j>6+$w`}H)%^QHa;GQ>Z3-ZP^8+FxXIG?w@R z49ElI+mp*t-hHR#Zurk=cncnynvm}JHX@GtFB|#Goz-y!wba2r8lU$56b9=^JBcTQ znT@>XJEzyC@GM!!zK|R~tX8W$nl;Z=5ry=aN1xPe&*oFbabS zYSf`TkO*2ekGx>uo1|ugd8+03ZgL~i((8E zIW)8SlqSji4RP*Ldjpx#Rc9L7GMVAleGX#JT5j9gq)c1BH~$larZ6s@~n=-@XoMPi%yMfDBa)@;CH+BQF%Z zRMUf|iysTL!{fd!$=aAj+WnV23(|;fK^@VcT&emy1w^{j17aQ+5X`rnfj%^~>wQ(x zluJbpr|yOJ+ZZ$3;!WvcEt@KXo<6bO(X#bL>#9m*fccP52_mK%0E*r34$6#p&gdy8 z>zPEKJ9yBd8l5e54p6ee2Ch$IRXAz< zuBDqa9AqtWle>Iix$8UYZ0N-7k&TMPhTyhbg|apfPz7nBtod9iRQ!GG)|X((T($G7 zkyznUkX}zG*(y;t<m3a-3cjY5jXT$R|9JA)sR(%=2uEigZaz)9+|$jUN5d1 zJNCCW9*=$Mn=@CEzV;rbaCFGx{*=k&H#cDBo7YE~(qF-RLfDK_$<&xozddnW_)W+1 z4#X6S3Sx&zwkR|je&OJw$4!l+cbOPwMD)fWQ~3sQ^@&UMj_yIZ;_%?Ft~&=~CV$yq z9GXf1ol7AXTO%uC(t_*bnL|X4g(Kj7Q?Lng%jg>F^wW|djO4ocf1xhI-bk?B%6bpIe##FYD0Kk)z_VK4Aac6H z*&A+^OYYpDXm)42Kz;ywAJhCg$hu)U4OIc_BaDJKd4zM*vGCisr5b19$1+e?-LJH( zw!tF|h=-y;b$;s-pWH*#RPvTViv7Y9Sm74yFM6p;m<*qSuJv*s)~0aC_FS+=W(blj z*H-72@XOh)@%Y3hqfv)0UgXEsP*xr8?%Rdc8N=fW40^m*6m`SS? zdg&Ty(_6LeaHO~D-$?;(7+1l`^cWW{T#gEI40^27u(@bAV^m-^-RoS@p0Cif)*e+x z%FI~^VwkRC7=x=zJ%w-A3T-M(+pqgOLQPE1!yZJ4ZJc^2NWN3%z(>+roxAx)If6!P8?f~5MYIoCiT1^;j90?E|L-(tPlU3fBN4QA`-~&Y5({lrP=Tz6SBi- z>-}^il#Q6%2-TM3`Kqt&o@Eaxjzn#YFsj_FCl-~&`!Fo%U1w%JQ(b*Fdxa2=A6W{- z(*(ZNLR;&tv`74%;L_z!g95{7v3k~EE2D`H_|EA`7kAhGOVj^0l6Zg+v|0YYz|$Xz zP)zH`PjQiOWPC-o@=3-KW8udUQj@Bd@!jEXH$wwPgV=Xe=`4BAd#TXKzys_8+JLaY z^eTSdalBr?Pv||y(K-Hp0HOc1hj;7U+52)#t_-4C`wLlph#!BeeM&I9J8Npmyivsh8 zC_97k2xUJd)L6`qWfx8)Ss)EQxDzNo?6iCJTC~JqI~l&SM}^zYx%|Bp&IcDWxn`S1 z{Bu73xdC~tRmm=&x-}2Li*vVZusOvOOpR?;uZXLGu7@{hbb#mxl@)VZMdvE>b($(Aj&epiLb zZZ(q@P7qy1r~~^!7z|*IU`OwaE<}zK{G_)x-;ss+x+6O_!MC|LzSXd=5mYE#`>4@t z#>TtTKAoWAelsj?`;`Z^7iR-JOvymCy5itS{2 zdqw0)vR%;lJ5T*)ZDJshGs^?mY(ji{asv=(c%snj<>$od(Q9*-(%C3Qut|C5e+k+m zD?;wCpqzo0{>%hO%p_L|_uHRZ@vd29;9`^kdaIEo5Hred@_H*VQ(i7LL%5WCIVOuX ziLHf&-!8vh{H%39pzIL!1TN-buu!)^;WBt6$eG(w9WWK@etS)yVm42oeOvA9;%bIk zy}a<9%E4s9CSoc{M?Nk5_AB~*ifr<=FB42cvAXRGIjYx5p+9jG`xe_!@Vh3^QwH~K zME-PW*6!({#@`Y4PykNvKob=VoA?lRr=)YsE7R55hcoRPg{dh0w1J4N6EjL1Q!33X zuEKkrbE^C3(oJ-6Pk|Ht7f%8S<$*(T0iRN|&tqZO#HSSeV|VITa%};&AokL~1Y=G^ z#J)JKC*S==Ao8~*&VT`yTuM6RhH-O8@=hhG%gnObk;%F@6+Z%bvUVK>}k*iZzTxP8OY9weR9V@kHoZjQz3kjiHCl&;w9^k9WbodJuDJu6EY;hWGE^m^WXuxtrn!1{XyS4_7%{VP5Y#1~!VZ5v!BxQkY;8Yq7HDGktQ?>#T{vI?A5pU20M@ zH3N+Hvr#`cvWw5NthWfJU=XKi^7?hr1692RLIv!bL#(l(8SM8#d>*kvMzG|M$2B|2U#kV5{KdlDO>fHuAGILMU= zf$?TttxVf%S;wgmgxCW&|2LpcJtj6YwY9-ZP~COp6mB?ExJ6_gXgy)iUPZYkVPz`p z?)!o=9%%YlQ@sR!xd6)EA61=QRKjG8FvSY_YZL9v+D-yvWpHOM`U9m1Eu~5B3e~H%az2JonwyIX-h*-*L# z1$D{=kQWSn1nY^dXg9H8p@K;YCc(~^ih)^Y)D9AC#Nv(yuMdmFq^PTRbpDQq-Enp` zQh5PSyBv#jnb}}q*S+`l{xjIcC7k^{616LeX=O}qsQh60i}pN0=4yIA--#wGj34)Tf{&?rnFtk}&`5?^h5IRn^0{OWIR2sN0KszESbuUjm=RZ5Mn zX{|849{e#2u|SAiW#k3DSj?jzk^-~ z8BTlVyahY5BiH!^qP_g2NT4lm_Q?M$n5Za;gharq1Q8C~M2{abuWHnu2q7<2wZFv& z=Vz`tb^8oCaRn@z6Fi(F6PX(00w_myF@vmz$Wb(0lA`x+RqOI-s@K}!1&kgbrcA`3 z2c1DnKg!l|n|LI?Gr#|vvtcD&y!8E$tC0HvJ|hTzu1x8LGuPj$p7W?Sa9EZkilbq9 zQB$Lr$PVZ!fN#ul-6apgY_3kBfot|u?vZ{&oC$uRTxcC5L{ZG6(2n2N^PMC-=cXij zd7&O*WK|H5$w&`N+`ZIE6{Q(C$0sa;uh=&vb*d9)Jti;5EZMW-KWmovDrGxF%L5_J?vl!cjj65rXgiD z9kIbbie^9Y8$xC4SlI2wJv|TF;Znygm@1%M(w~xe<(}qfvY`oTS$bb5u)@T(%3qo0Yc~j6 z6lXl>84$Y70GU$=(XsgX{H*NF*-H1wAt|*P!d$vqDw5oT?LKdN^2haYe~Hwc?t+=EkT6FJftH zDqu(m?YD#pmAiQQi8ed&aHj>W8^!Lu8WH=_1}xc_7-5nI82HlE(0esP!W%51EQzVd zIzEm(8nZkg*9K%m5ERT+`+WyxwDXSYjuTOHZU^p8~BAdQ3f3$abPTU zmsR$Hr7FTjZTu2)YWU92No#lhf(}bP=6*^Lmjp|Z@SiyIkYnsA(KIC`m$_>_&d!x8 zvWt7R7huLal+bPg_Ux*GL5i%XA5Lzyb1?v%PWt##$}?bfVD9gfZISo`JZ*}JH+-lB z2iC}fr+{r{M+Qy^*c{2kNLY);ayns*oJ+VnygjR9f1xg0&xNPiPKj!@Ufa%%@f;WF zbrZ>av#0O#a`{Yy=T(i-uq9CAs*Fd6`Jz;Z|(}HWmG5qc^z_Qf{+; zH0qer3EaS}8q>c0XQNVb$-sLv9rM_r>MSH(hwg>+;}?k{ zY_VNOHBC5e>)n~gQ6#2bzhR5Q#mTcB;zs!KbpOAJDbK5lqJ~18^AxclQlv`ER-f4; zce<-?B|7bEty7y#2LrRk@6EdTPk?}UuPZqh23SJ^K^b=`6vdn|*W=Qc$C9T83P;nY z^gpKK6}h01fpfvH5HT9xKDQ`sgv3Onhn(f<2@Ahn^TxqSkuHE)*@>fVaOS-+KaJB0 zJIW~62kR&+2(r_3b|CTIVGOOXGjw0nSZG5#+EU8%tc6#3@oE~acCxFN@mVj^{^1Qk z7jUAUvQTX}&dKad1=IF-VIt3nvH?FLrHMQ?BJsIz%Y}qrjT`01FFxNros#p%8qeV) z4_p6jq1q4Zw0B3}m-Zg99bL}NT|XSQbWQ(Pye&&&-5?`qTA(!J`XXn!T-afQi;R zDKzHVB%T#OVTzC9;_1JQ+cp?M;Z>$6f9Eg-qViKjk7JkZ_=?RK_l}iNlcYQY4Ic2f zFT zY%9h~CAvLEPGbgIKeh2EJ-W)kAHM$gw2cq!Ql;`RvFXv~(v|?r#q9YArX}mA{R~DG z^x(BAX&z6DCJ%?T`>q|sZJ~7-qV~@R@zKpBO7tXZZ_M`@Rfp2-bv1{bzGJie4NAq@ z7|02`dG^b1pfLVd_3f+PQuIRhOYbvLqt_Les$Unpf z8?@e|AVGKKaRqCz6aY+lGO=k0v$dabkPL2HTGtdMTwC`jX2$f=DKZ{Md$oI7mC)3| zhj+X&iFWOTHO$DVw7-o-bZq;)cJcFHa&ttm`nDBLZ1hD*=2;p; zHU)r^C9RB-0%BR>SF>EV98V7mIdo&z23-)kt4$E@@9|X+P&f4O0)tf*-dNB(*()-T z*BBncYbjL82xh_ef@eq^O ztzUZDX`Is)u3OVlNnsiC>fb`{@xmNHoGRMhNCwRIwN8@yquk93yvNgXz18~j>C9v{ zR9=to#JnyXWO?MEuI{>h?Jhj!EKV(dp-DiG9;II#3euDME%SItSoOVSNWlHX+M*wT^-a*wpM?9ZYzsB+yCCm-4E?XKmhNdxSSYgdAm938R+WEy|PQ);o`hz zRhTaSI9_dH6LQbQhaC{;bPqY=ObVILh3ZDmu!P#}#U2|Y4r}5CpiJ(0Mw*i`YGjuD zwT-L{zrN>$P;^aQKfLZ)(qq+Vk+6e8EnlJa@v;!vNzF>(6Lx4n#L;u15}W3~;>G$p zYUUI56S_V~fI|NyEQ90i1TiejNf}R>CaTx^OZyh6WlGervw@}UA8RYRPVf7FV&9+k z{7|`vbR2--r&3OEFnTjo*WX4z=cmM)0`9{KYV?B=+%c8_FLMCgQqQyf&8173;g?eC zL0RLW>)j57zEEH(YiyG&s8&0TaC=DO8cx}@i+H5j%>j~cVb-43T=vnHZ*yQgAUzMpFX(U~UJK@B{vn;5TIH0C{z_zIu?A@d{)68~7d? zI7+6xSFfZkZ~kt6^)K^eDbEe#%b33%$qE$v zB^0pnT1VXq3+5-p1; zsJU9bc0NpAiEe1gg}{VR$$t(9jQe?AyKqTwh_}ck4V<4hi=kBGQyp#DKg1nux$d}k zFIZ5-zb!~X%xL;bF4|0G5xw*KSMl3AlNXMQ#>IuWYvO+cFmvjE~N zCpFLCYLq?X;yI}#)SmAY(3W+`2LlF(i-}krzJlxsMp)L&cR=|Vn>%EnF3R)v^>9@P zOW0O{Ed3DEga6&HXzozqaA`bT#P@r2z^s4Pslt?0;aq|`zE(n0|yK_NKu7Ui^I!<)X9L|Us56@9_%h(TDTy4amx^`XEZRKwmDA~r~GvO3qcS& z>7M-odA~i*0Teu`kjiUF)7#7D{DwKKP0HduH0m8|g%8vepQ6CMA<|~pK-j$D>nO+D zwKPte0|+rJt5*94{Lq(M2_Y<(M=ey|$JpC&v3%aimG_^DA22VMVd12dOP@vbS%-aU zgGE5Ve?m~~X@}qYMI`CLanZy-8Y@yf#2L~}OsP%#lx}Y2)no0>_WwV6?-!ZfH30UB z{V?Wzqp&fn<2{+TQl&H_#P;Nu1rbJuxvH#_)s}i~7iTa30`6n(>Y0&?UeFLho7n|p zhz{Jm2Ij*wn4GYduNvEg<@6HtQs=K9QqIG-c8wOgg+2Ygm>l`a^j4aB9qqt% z?LUo^E1kr!1T2y7N4vsnrQSSq+u_5}yYdIQL=OBXvnwYnb|@5}vUf&o<-69bSbP9K zLsk@oQ9<^U0wh;Tm>srKn@y&e|}@} zEnH#r@b}vX5O=GIBb1Hjw)x^vEPl1+t;-cRtnc@ro+z#}_SJf)q42&)wC<+qxq{oh zdC9ABN-!S1Do7W`!zILz@PF5ad_nD+CMvK#qotaSnb=PLKi7gOkEIxkVOg$xkagii z!$6&`E3(T+_!)+u``7mr5eNL%3Cikf{pRm~BTk~|mZF%rF5Fldok70@8*f_9Jo)@G zmksDv`qAWhYtE#VcRcb6SQ#Kv_*f&5&x6eBR5#&|pYPgVs>jZE5yPV_`En{MyI!5n zfb?au5l4$foYf@P9e}J$xB>!jhLo1YHsZ0o1gQzyOTNOTlw+Q4()*-5+Z352u^|A? z!*@%^M0xi|XCD2%81f*A;V$6Ks;MzBxLqeo>}!2lXOK*Z`cTA0ker6D8slp2>@Q1k zkvlt6Gp-@;>cbuJu}q4tHbtpGxMTTzyD(1SSe~lz(X;-OgDeGub&3HUg98*Ca!aX= zD8&BQ_$3h%<{l5^Is6sx zRoo;bsXz-VnC9@-XjW_^I#kYz1i?z#)rj(7CmVR($uAoty4xRMjDu}}5t5#w_{0y9 z1EZ%BWmzK@c>^T55B8!DYTX5~y9n~l4ljKq`dCfCdVDyv;(h#eKqy3D#CL!?LUFt) z!ka++)2Fl#8Iko%@W)GUMRL=<6)mIlEgD-b7%!c7J)PQm6P-V~L!_VzcHDaK_sfa4 z`G5$(H78MZZnUFUZP28;>qg!-n~g?EyiD{gVEdsE;D@a0w>u*wEPM!_(GY?rLUIm; zPT_Oc6Wv!+w{*{&nILEEE#b{m?d;WVse6yV<|+T$Nqp2I^>QqHH1p|)W!H`2F#S{{ zQ{N*^2bB6Y=^KVHT2&m}dk=rYXL{vU32u4zxF!YC7kE+~pWK_OsA4VgsAJ>$cbh1Q zE2WH!J_>iqG=~7iP2+wwpxc2r zj~O@B56j3Xw4ggIJc6l#Ie|L2s9b zGKO`$1l0c154ATY#}GCy-zp#J3oP4lh7Gg+5`{m1gsEdA`O{rF?a#?txv{l~7vm7W zGshtpR$g6{Q33715L3lO0NcJvn=)|JROymbCV7ClO17s+X|q#4`pgHlm61DVXrgi^Es2gdOzWGa;`|)($ zTZ31J3yoi-|4@+RMyuBz{dusX0ld8=E_;(GO?s&!RS_MlaQ~bUA_EzqvAC*p0t%>p z_7mR&UG~XUI%y`*H@p4P0WmJ!{dLkYlfwx%>ehf|1h!wWCa)5UQ7M0@VRmdX+0;>AFR-HXwwx% zRb=n2Q;|cK0ICqCOuPh9$otZ*V#b%d@=BzW#kpz^J+zD2U&)djvFuKkzd3kDk~^x< zJH9x3&^0B>8)SdbHGBO7;v$pFy}j!kC|39Mr5|i*#Z-(VC}&3=J$!c#XP*zD-2MMt z4>0l-4c3y#E9S;n$GWx!W`?Prc!fRy18~fY;Ts`TAacqMmXr3XsuqlL^&F1Llil=y zcRkQAbh`9DGMDT1N^1t=c0(_!377*v?Jb;h^BQPgs>GbWoG@Cc-Od}od4A7zW5EHE zMK({mv1`mk)5K*%{43hI53DoTIOT&AWs#4?Fy$f$*8QcXi9b*zt($9d8?`mhQq+MN zJ>1WCG&K#wbQD!?Qn6%Mam|FxWBAJ+GX3oG_N!k4TyKB4fqpzOI48;~Z&}{;pDnJ8 zJw^c_^z|IJI<0d**B?lS^*JR)jf`Dl=xd9&JPxsuVn0XUOL2c*gNQ6T*LphRedlQD z3G#PO!RJCT*DL4h&#EBZVf%u1a9fqmFMfRY3PG#WZ$=lO}l;2fwNd$~3at_DG#!VO!*N3JHe-+yF&Go4-S%`=)LWq48Lh_%E_4rzVtUQblkPy;Act^c+90(np) zsu-DBHZskq>8hQVEcgr=O+Ux>V7EW+*a9$a|3~xuPVOxI6lKXIYFO(Q=B-ACa2}SO z{NYC#9S86}hYkVS-3xg4zjkZnvZT;M6sp{O1T4adV&r+=9a}jSgF<#aXUU&cH58Y0 zrF=P(M$Ep2arN!GfPv4g$APDpItKA>IfKTNKjmF_aue8w*tddPSU;~B~l?c*4qYh0W=npD>*UO=FPYol z3xy3Me)Vrv>5p?|ZOP*Y5fae@o!NWAMgA#Rv`p&4UUMQ?d`-dvy-oWmASs8eWt9@5 zllp|=D+(bd8=>wGpM~p+ISFmUXAU3H|H}-Id0K2$fh*W$tJhJJb8{~pX@p9aP%AUS z##rxQP=G6ad@Cs($=2O0UVz7koi!;URi#RH7qx;MP;=b|{rQt#cC!H+B?$=|PF9zc z{U%MZ9QeqNST}!O6VE5%sHhgbgalJ^%$2@F zS$WW%A8*{au{aKB*;4s@>2*d;^`iHwaR9WZf63ibj$lS>d+Sm?!j^nUL$>8UZU6(_ z-LrgVwWe-K_HiG8iBYc}!OK_sI43-iI6L3Y5;0x_r?KJ&`bk<|CS8t{m zWA1c^cB9DGd)ebIQp%-KPS$rqUO)R!?#0MNS`H_&@XP@e^@LhEe7PB8(($0FAExF_ z2IjFTYq-v` zU91HflMEdn!7khhl{d$UGW#I?FBC!)EvCTQwCp=W@MYX*NgmR>kg2>_{u7T4j^Wy7JQ0;Y07 z;?bD+$^?S4`0a9*IqNNy6*Kz~X0ODBg=I?*-d47I$OKuxix~^u?AgIMlvT9g((tL= zzBMDma=K}Jk)@)2u&@1OhRxovv=N;Bp69LR0r+53C)GAhe<(vb5K zYrh1*Bj5*yaqTvM5tiC+v(>6^UXLL>LU94XdV9b|o|K>jNNgZ1#+J2~ zEH2AzJZtdgBdP;FYkBfUpW0LT|44ll{FC7LJJWM_Q>|(%SSItRi~2o$RMab^?{a@6 zg?s~=Y|0ys!WvE|C7uh&CHIJNvwxJI z@DoQ_bcC2JkNJYqU1gu2*^#i@kN#}t=R-S`G;w`02Qb&m8u&t}XcL*R#T?OqY}Iv` z)%k|hzie?^dIc8IE7@!JKSOd*d*X1!hTgG~%v{(fS)%F=*v|p*so|I66QqwbFm7Xn zSHo!)LoT&jRaqu3K{el*JO(uKt5^yzz52un8aB8{$Q|hq`Tx!zUkqNY2VI@0#E_Q zy=A4yz5(5>@0Pp8<7-eu=yns+mLIBDuh7Nz%lzEhG%A3sgKNr42=MXD_@dd19$yL7PX}D!*A0#_ zjT|fKiXW`Q&6#mh4P1R6&JNf*`$#;z84S0zYld#bouOO@`Z zpuW9{^bT&!J#Mr-kTjkNu~htM16+3-xtW_5J>CGPU%Da4CA6FfQP)~2SmBa;rFNwj zy5Uj=Arn3d@~r3BW5LG1wpB)zcEa%ngH0u>KRIy?kB}$Hhcc4RGP#vPTkKX^F~T?5xKmZl z+^oc0^Z`HZx}CTux7R+*_p>j~+!W~(5#3WHS%6io#~pq=1P#HJm3@7sm0D8jmh(2N z5{Hi%s_1cM4~zC`=9KGB$>A!1M7ok6nw_3qMj-EQT!Gb)l^j}_dM})B${>CT(=K@$zDDA1JhbN z%Mt#y6@8~EV_vguZhyq@=eyf~e{ua{$a}&XvRw)FV1KyePC#TaCX79707fw@UMd~k z$)hnZC})XfE1`00f+$#R3BklCYGEO@6>QlqWR!Q#S+#FYioi5)=(E%&XGb4-Cp0h6 zrAU+@(RQ{p19!;ZLvb>p+dK*GsV3NkB0mo=V-1{?8(U%-x~pHS-JBX;)o>T-_=3F= z39L~Xj)k@d0&IXzxJ}VWU*W9Mmc}|dVl9@=mT>efMsyKd!Uf{&8nvI=(E+;mN zs18Jy$P z^On>BOn&2~wI$@8fiDTqOmj;Q!DT&;?mS|Ao%ZmmEyLR7y3h!@;3dfR(@?c7kM2jjbv^np%v-1W@t^Z_;%OjM)DQj z<^jkQ$0M8lK+;Ba=ZwPS?9}ljpBO)U&R(eeCiv+UF^vu%Ic~<-7ZhRfsC9Q4>(lYn zTVSm7gr1O{1Ka`8dZ7eT@D0x3$9>VyJI3Ww&FUYpXe4-rY0SBn#icL&?Gc{8S<`%^ ztVcTS*xcHPE@DhcF|0o`bZZ^jO=gpExadCP#BM(J9f-qFnt0`j<){HRxIxZ!WMbCa z(|%K~E)pXeY8SU)6~a9|4-ILFUSklJzjpT}b&7W66}cM4VYf$_ijRe$F9T<;{HG>~ zUr*)TRRAQJVX0EbR|g}`ZXd-D1X*^Lqk^R4zL%rOXA;;-T+w?JqSc+H+Fs{ApGL-( zou>R!Y(T4djx zHF7dBL4)nDf2mm=mh5T0{9&|q_6k)pZ)+~_{>oc*s9lp1S3QgM;5Cg_HtJ(3n;yO3 zTr^`yVV|qiEFc6C<`rB;u?#G28@ilh`=sNa1RY#0OSx6Mh0-~zgThlKT8FrYtOaSs z)Osq47_xVH>=sU8w5(~%re<|4<)4Ji1embo`p*rI=>DMLXgD^*4NZe2I4vo8v4A0p_`e!cQc=6o58cN3JzSdzdC!v7 z644&2k}nogeh2@J$RqUKF}^kV?BwcVO{jCv_3U|;Rcb9VJ;%|U?Ui^J8a`vzURe)i zUKJ{UB?anOyEN{iLX`@4{5Y)OwJ`T?N+hVhuPYF{43e0M9PM&zpZebQ7Qzr2@BELY z(ACgwA*B+eG6_Rbs{2*DNp$!}GqOWWYNX>JiX5GI9Q&e{mq9~#gi*^Kgwv+Exl``s zO%d;J+ddml0Dtiao83mAWkRr;<%02yKH4I05r@nfQetS*uUbJ)hUwQ~8i**ZJ8s_wVAYk8~Kvz?gnfAT1*- z$?>=)v#G??c}qDG|4np7)C#W#F!dB%cXE=U$dCn2wuf4NlxOwQag4VR{x4G^a3w(VKWf5ylkjJzD;{-UT*E zOSQg`b9eIaedc>H)4iu?k`bHRHth@9Nl^RIbr~*xNxga!j1y>dMFm$(sH2OJAfhkq zOSq`vru{Z*td#!aIpUwz*HBhdmtK|dZ!J`_5azm(sNjf{nZo^>>DHqC06zF#hdAUM z!PApAztCx$@!IysT~L-GiqbM>M2X4{r^L&rfm+H+DVyPu&mP@-)IudEwtB-CKb zt~2&LuH{SH-YfsTVkt6HV1JTXqtv11){s{OgxH@K7p~q`r3dZk?8=Gghgg*hD@uf7 zkES9i#xtl%Uww8B_Hg)uSm!ZRBj(VTI`T*k@>_z+PaOw&7}k&Dg7;g?POlZ*O~vv1 zar@1>=8LbqTk9d*W}p`M(Hkv>Z`XE!p=T#OO-{1dUoC`Sx8B$#v zM=bf;6*!SlhH?>4mvSv8?IGuMUHA(w4p9<#ixG+_;=yxr#6GEtf+BWNdNPYktM{`J z2NvL6-;@b-T2XY@FMkN*`4I*-Ck!sVj@W==?{0o@pmOd+bdxVF}WuR~{ zt`eOPy!fTJIf(r+s;t=6k@GT~XSnz}tx;1|(f^6T`7Qn@_XgU z8E#KqK0CT(YyQxE@D!N!L!3Xq#kJtBUrbD5O zY>1YE-J?qiQd(j;6|#Tc^Ansk)(uJ^(0ok3{@24x|N34nlCiHW0gn31+=T9QQ8e_H zLR?wUH0jHYo)x=(Vb>0Q=SU^31g}Va{I^kyp;sZ3Wg=-$4v-yEh@}RO{)E zbU>m6 zsGF^ar@pR}104JHmRpL8C0%IOwxF@dy0n4dq*h~J&#?4Q&*Dd;S!s7ahlL!|(Ub0{f&POD{ju*LwR$gB0;Haj0802V{r z9R5u(JW_~_H4!de87ABzL%xHbHkzj$Wi%16akooO{STnnIFa{GipX}PEZFSaLZ=mf zDvbW=A$uw{sF==QH9GGt7@e^fW;4i0RK|=OGK*41t1O|vjA<|Ra3&>H_C+Sr zQ$SK81O7j@-UJ-V|LY$gL!k&E(L$E&ODMZhl9Vk=k~KmqDLZ4#NM$YiRv5~XJ$u$s zLe`OeA6dgNwlT(R|Jx^@@AG`0-@of}bu;(8mvhehZ1*{@TXjikew*jw83l9(kKyB2 zL=v-S?+Qjy=gh;;1X3`HwTs%wwr1phmAzdHDo) zLxo2C94%@7a&nVehe9CLa?c-RiNR^c))&Ld>|@P|;UQ!1;wk&b#-Z=smV~*ewJu7{ zx=kC=`4pW}NNEAOGvvA#D(ta&o{-_j}uB4RMteD^1@7Vi-2gKqvvU0g2p@LdllL4Kp zCs(U9)lSZmHjq{ylE%|X&pYDoG06wvB2+nZ&+?`M%`um|Mn*NCzUKyT5SZ3%*N>-E z?Ls?d-!Nhs>KxfB6jnAH1eV`S@mR|G+xu$mvOk@6NTOzJbs*M*vp#fwY+b&DVVx1B zaGTSE_ExAWnKlWHHcidqi(SeuYW(?vmfw_~D5FhkvdxIhyt_K+sDh`%ImFerlFfD&V#7u{Bki_AfUfF)MGjX8rHPB zblG~I5=Nx|oXvh(6&&J3)#mqq7%+qR6}xQH`0s-|0Aw^=i`i!V!|Kj+Mv!ICB}POM zEsef!YSg=z>H<+_X$u|q9C^QEHumL02afBMHY~rrdJKnFN}ABvg%={jc4KW!P3ujS z&t#;?M=>*N@4WD2x{}l)P+yDzzlk=43h&C%BvG!HmzugC>ea(6?q8w6HJo(Ip=QWLJ%)ZE^-GBx6vd`6;R?79v2w`HEc8(+rdPpIEM<8GV0NI@dMoQ7_~Vabg3 z7n@&XtfA3gPXbynQ73L=0TK(CWY8> zjd9M9utEc}Z-KZ?R4Jq3XR(Kr+HGtH<+-ySY{+rCxkKG|+A$-_Ar4kq$6tLGG@%0& z3>~v$?na)7^$KI4g~{$FI9j}+v10~mWoe%jXD9JV6`MgQr}9x(6|g=do8@rVc?TH; zGA(RL7<24vho{n?_80knq`I0pb%a9_?Ab9|<4fYeSvD=HJfJB&ijm=bOQx<@ozPEm z*J2OSgbGd?W4&DqKy!jWss0C=vx!{{58A*BErDX(^s8wvKlR@tsnaz*C!A&9F72*3 zhxr-sQ84p_9GB||!TWYs#}7WM!=%techASwDKET4WlF|xLb+5~I2M_N z^6-OtyFc7sC{X5=u3Zi?u@1JGS`!alRyd)GpEOh|jt$4`Qa<#5HBw(6yVAs|k~_3x z(1X!!O;vT-(v8*{0CGrYGOK%b7uu&l*tSt#Uw^sSQ(JU|88UIoXQX+&=c1iOx1Kc8 z_uK2Y8XLBI%~>IK?G2((^aorWq=!~w?jzHD2~D2LM%&g2cR&MqZes+e=B}V$d6Fu%jn@t`b^rR~=`hq#WAI}A5qz5xz+Kw&_MZF?BMd4dM zDpBg?r5X!3{}ZHVe&PVg)=cK#Jd5D{K)J49XUM;eqp4kYCU0VCU(_<6I}g5IYIY}) zsukdo0uWU(yRfHVBekc`0!9g6+S7`a-*X#~P?Sl8^@;eRoQ{e1hlKPDZa)@jmMnzgOqxBA@2@a=`~%+u=huKm4||VjDBi zj@9r+*Qjw7)DXu=>vS^>Z&cQqN8gDeypsZ>OV_`STzC=k3_38>dfe1s8feHOEwCd5$pJ!y^x7>jG$@3O7mI7@w#?mhwKQE2WmCd+jD9p?um+L_# zC~Qdn{BgVe`*Fy?Ikl{*yJt)xZk8@NcoA{By9{4-B~h~X{bjU@AEWHdAp^)2ld%=pHnEpK zp+Cdy0J}{{?pF##*7pBk69WR${j|>qZgTe9tAVpuf)aNZTfxUU1l!^LrRMtkP*v0^0SvzM&W+IaBj{^hc&?3_J$PWswsKtF%yV$Hp`&+q~Z2Tym!%%XJ_G!X2 zzC*U`Y=nZWa#hiBS$=+;tI31C$wo~qnqbZjBtl|%rWj+m-R=XOwGa#|y9OO;%5xs& zf+r@OF($9vSY7&g!|3{XG(XpBbl6QEFpNpxY>^GTMuom?{1kDTX~WT$7rPl7qxyI!Ywx#>qQhMz6^Bj1i1D~oqB~(q>f5Kg42|Wk>3B8LhH!BF zw+*hW+Xww1QO(y~r~=DObSw8nJu%) zzU;Di2i;5*O@>B3k+7`Tqk9B^KM?9$ng4bdpMJuI?3+EXR7m{yIWjxA1)=qX4HUv6 z&xlym$$266j5gst^8V@8A9@uK>+9&Gx$x&lcMI4Wr}c-wU2Qy4Q+e5mV)aygccQ6R z*?6??Wc1Y(moE}wA_I}>q`O>pV%Y0nM>LmR^E>pW`J*83-Wk%k(Wgr5^WK~VGOcN# zlr^Ap7zqj!&3Yzeq0GS%ee_&qOrh_nw7;yl`fZK5S=RPt=zj9|^(%gafi=Tp_A@Z- z65&;Zj|hnrJ6%%!&Es;p=(jFO5fuRb%_lT59mr$#FjYG27O#AOV!KcNzs<`x?oXqQ z4<7!~?>NRsd__*W2X~FpCZtFx`Suk1F*igNrA@gIC_nI(-G0%eEdwgMBMV=uX-dz~ zBveAm<4Oa&9!^K&R7Lm7&NNT3-D}>kx-12Bl@A2ocrZpF9m9ysa6ieNU=C17yTrdr z`7NGO7vNnU_|uoJkH4E=Ljiv5sQ80wZXfN0oeo9HVn)6J@Y-u~hC=K)b(2bhuEt^r2uTIM;1`5I6*8irIqE3QyUcKJj4o8S|UqQZDFI(y+*BU}wdmKf0^uw?)IgjUT9l4>mgBp*m`JF}g$6LDru zxY>e-O(Y~$R&{`-od{KRtxNwwXq4S=qIe#ZdujSQp=1Z43e$Gp^_XLSYUoVPiPVE6 ztgieh$c`iujz=DQ-8?7Q7co{-0H5qt`x*zgQ}v5@|Negxmy-uM9TwvCX1AovHk%4v zT^^u1<&Yp`>km}< z!y;24W3)@FsD+5zO~=Yh8^kuQR{rVW30xaq>v%qbYLe(kwX5soJ3o6q9MDOKr8GjL zaIxdMCGO^yF?t_v-*Ur>KLeDao`C>B<)+=~qJUC)r+TTE?U_+TtEGLQ_PJS${ZT8{ zYKZM&kzwTm?!IWRf#<(?$v_Vb6HuhC)sw0}Q4?MZ)4+mfb~T?dM|Fp8gYNN@e%aME zI}~%Hj(lkvS#O7~s$o*~F+ewp2$6PP?gp`4*N=+=r2uugs&mbQ;<|ZFHoOzMi;%I3 zCBi8m-{yxXgLPyehQ`AGr(h**XQ!^D4foKXVS?8M=Hd7hNd)>{&Lhf4A$}I4G$SmM zg6-8R%;>sW4L|4H)hts#N#D1M=NIdC+-yfR2wAFAYI=l>qbdkqv%*jak`gWLdM-2r z6EEz(`W$Up>x+MHW{V{#wL@PL=a@Ircooh!8>zE=Q_y1T4#n7Y9)KbL(az+qa5u+{ z4D1EX;#&7?UpvblDrzkzmIG2W7dNp{_UODVxUk?qPn;8Cwp44t*F*peJk^8RT@ljV zGoD566XPR8!Fl3mG=^7l(0=3b0|WG-_e#EH!FT!fAlsyir9r>l>vNb>fI82Dl1x4-A*q+;Tw4rS)Y$iB#BS z|J1Dl8cqJ8RUvBc%9f;ecd_^OmbL{=pd;n@Mh1k+pC7n+&R2L0f3&M##&$1H4^{V7 zvO^)#G2Ysetf~k43@vIhG8&?g5ss+~3E$Ji9^#F5rD#EXxq|8-BV6?#8jjkk1LPd_ z=iWc02)UGFFlth7Delt_r+zoGlL(7CB9nAqjvICDd#4Cn;?ocXa7XI1(gpiTpI2)} zdwWQf#+Z2;(Vb*e&l=;N(0IIiZX-dchdL73L;oC?Yo0$*`%ihwA0vRgNb520Cs0pwVNFd`6s`8f zS=Vbb0yjXp{K=#F-Eg2Y??u5KcLJO3(~+cJOj&i5lkk7U^Xyrs)39^lReNh*4=F$; zjUkipDb5r&6;M6yt3uC;+J~skG*YL<{kChQQA729-sZ#G;eQ6JL5#IoY z^pYog>nAxpi<2Z;ZO7KF=|al0JwX%hLtWyj8!6&8~I_gK`=ToVg%D$lUH1hXpN!;=SxY7Lmol8)t zQBPfCp7Wx+5LUK($>T^jO=Z{Lzh#N4*|XZ0cQ#oVB{%as9x{_M6Is{A`lR^r1EV-| z$Q;l;=_$jAVsxG&a85R4FP{Lt*|wrP-W$3xbp{K56!Ku_ZNBIQxnA~z!rPW8t4oxl zbM&3pBZ=*JCCa(Tqy7I2yoimC$)GFoayrxL`(AG2X}1CZgwTh{NYG6H3;J!y2 zorqM18A_SnM>Dq0f>FU1e z_RDD4v;G>&H~w+`lBTw7Xkfr5`@Q90n+uC{`Dl4It>0T;T+))IG`HIK9NT#I!N*dc8JA;OL%0roCjE*yGDZLV`*zea>i1OA8r$~L2YCI*YEfZn~)|4fPBMQ zeE{|y(pP2Rwa8{m*3eG=_cblRdvHMD>nCp~cglcR?yntvG{Ol$Sjw3aKug!s$Ry-FWSLf?K{$5pE_I8%F+rn0+oTIcQT$WqH2^GVHqPgbWA>A!oFM$Y<0 z1Wh>nmQ^QCn#ud#5aLYdD20qs&BxdeBlz~wE=E%^Y^jV zWhV!KJgM2_oX3!G%km;dRb|L-s|;n}fywIqQ}a|WV1dr@BcAm`oUQthk5!7tjHt>5 zIY$X~-`}#By>hd1tlC6e;J3nV1>?YF#%Hd$WmSxbF@6ekiSY6nDZ6!#;NQ#GjU?1} z`O*hc9$KOEXc%A90qrHUQ5>2cnWwpk6PkH&wfy#jxw?nOu$c=A!cUMe^0fLfb-FR_ znWGPBj&_*e-I(KbN>6VZ!SRZuhFE$8EWr)A!F%Qw57-gWd{E1LV*wNT%`j^q1%5_F zm7LFqjpMI52Ol{2YoA?0?PCutRX@AO=w8{Ekhiuv^?Sg*WUF>Sfkh|O=zB+ud z*0Uo{IIpzqw7e*Jp$Hx=Zjp9rj`?R4yrpeW6UvZwwS^o`5&c9D*=mBTOWT$`SyP2> zP0G9oCHP_na8 zIdwEASyW}aa!FL>Njc26Ig8K7NcfX3-1vMdWYx<^>m8*6hb*E^_6EEn0>JDO4^ce+ z4Yu1aHvPraNhlHzO8??zocm`M@#s9p3vzFmn)gz_8$(9Y+sKw9_ij_yqw(sBP5+f(GV9Uxs1r95eChT|5a2h9EJut$6rGM#eC;H!DUaxsKZL(-apj>$ z6Xt~S)Y7(bxM=2zOEG%O2J8;SkW5Hw{9_;Hv!MDi)cMl*rk&GWA8oxpv_2=OR7?cC z)FI;3$Quu9>I1IFp@Y`-^qLfZ>}}qBcz_nG0K)_>GsAoLOqZgmh|Q3C3joPhb~=ll zKv8m{)h|6jm3q=xw!N`IE2aZXG>YIhXzw{JYI5A_xL4fPJK7RnKheZF?HAWdMG>H=WWMQ*xQZhB;U3bMO9rR9 zR;w^(K}#bpMP*528|Swr z*|g~OO-{%kJcb2cmEqr>Nm{ZE4|;oPU###*?-2 zhgVrJJ=-N7Uf4X9?dT|^e?sg2vZw+~R)7R)r(R-_SAb7PyHJ2SoHPK8vmub4?9=mc zgA_E^(Xq43*+ajv?FfTFaJ)zLLqUWXoG)^r7WAY0xN^19hRp@JHHV5z6EAJ(3P*%n zgp#BT%U4KCgx`AhlXSO+JD?7f%Q&7k_}8VQ^ESt$DlkTYqtBMOzD%L);SeN~x^M$y zrzicYoC~Sl3ZT^IWq?mNY|&)H1ua9mho{iyi%FZF-JW~SgfS_hRy zp3B~CmGya|+y>rn^z|#B6kf`{n*rJvdU8&qt2?tOJBpW64M1Bo1dZX-irU@W6jEg~ znE6EmSnM}|KzUznDg-pp{z*W<@@{%ikRQnY&CUlS^7aIG z2X!f12U}1f#ZR3;@Aa7N;PQ~q%;jiMsrn{)Sb)URl~xB7N&ke(s}lWZ(~ms92_E#x zsE?;KiZcfFR(aBUR5zOLoKrc9lpbhF%el>WY?riDHl$>E8uFIZwoPX%5evVKBZB?Hgb_>{x4R(xHHsn2#NZodBa0pP*A_W*)5Kfw7L%?cAxghm>wvEpr2 zkpyl}#pUSp?BRm2E!9Cm*E1VA5;r1Sv^ZGHTnpY_3i|RssPD&(n-DFl)gIO$V^Y>t ztHIJM;`~qbpWfCDpg6HBeZl|HNKP5*BSj|X4?P3#?ZKg&_8xl~0td{fNxKM=Kl!Sf%?uE7Dh{vU74GHLs zy*%)3@1t5!+R3E4EmD7(+3#LMJtG`#d!pZE>xpIrRzD+9zG@G(4BPu;lRwKn@@rtZ z{?rZGG6g=DwDjs4m)YoE`GwM(VJ}8f-(uZj^1o0 zr7$v^mVIYv*mA+a%UXvq!L0!U$HD9f5Q6|H*!HB@Il4Yd@UV#^mmTEd6dhV70+N;1Of47M($7trv7-gxV%(Xvs zt!b~q4QB_Xnov!CKBMTa+Z=g((YL}ZLS6Fna>(wwfqyhsFYHsETLxMWtr;bnyR$~6 z=1*x{QjNQzbx{|a`lg&G0#QqJ>9iYo(P@X#6^CCoEvTnU5PjV&!D-A8khnD3Hn~U* zs<|ZQs0I4F?LO(?P7Y9Qp~h(qegUX1LgPXogu|F4_~T6k7M)W^n@liwZkKefr;$f3 zmzO=nU3Hk+#y=?OoauCd4lIU^zwKsQK)T=_BwsTv2oQg?APP}Qxt9Pj+1oPpA4@eQ z*A+HPI&Ygosk{)=OwsfjHOYY87HJ6eP8<$C6N_D*KXh+mlg=-AYY3OW;qnR7&7pGD|y6y!BOWZRxeax>YV-Zd`w1| zn8RY`*spwAttffflJ-8jcopjsos%JMl39PL8#7T-dy)8RYXls3A{GRtbrshISxLLR zp8m^vI;Ne7=IqC_gD0%pD#NVT1)+1?RzZz zd(h%=@t`Rj=sjDW5%Qs%r@YL{T3Xh zU)YWAn1dK?4J7B{9-UrR0R`;RRF-nq_{lHcOCT5Dp%T8WJtH-YyG|u0w{(V@Y?{&7 z-5V!n!bMNsb|gNaIHN~X5kkxHbfWvz$7tIb?9=9*-^iTvwK&3L2Fl7p2l2znA@*Vd z{86xYD2Sop5X?wOHoZ1x+w@kB zWLc0xR--3dF&sa)#hN`I=r2~fd*e@vAY(vNFuqHWFW8sAJ2g4Zm;1flU97Ux!tU>l zVA8fu`IF_nV4B{F_iI9qWq_&;@eGE%m`&}nuuHEI(m~2jb%#f`O%&-tQUx=b#9-z2 zyG3M2A646S5?WQ%4K9cG%oaV`nbEfC|F$q-VMr!n--pj4mJUBa*zxzt{axlI8{{#X zfO2;U>VB8)%h;XqWl7}bFEx^9C#JXp%p?R|#hg$x-R8CuUGsm8L)PrOUcKok_@%l! z>1zd?M!hlBkJkPaqWCBf25bBo;0FIx!*>(TR$cIkT;vV@ES0|hnR+bi1tCAhe z)owRpDs`l8>#MU#8T=1kb@4N47PwH2^@4)rV?tMBs2W17-@PvHRAfH6>~9W z{u?s;lr%)+GVDb2bu^@pLYt*_?by)8SM)1fG$jSSdpe1gpT;_2j^k=Fh@~D@Jf&X7 zRPc2^PC9W~O5pcoIXXemgDZoFD&uaF)o9aXilv%}OmR8*FsexXnN8pV+eXhep8#Gf6Z^^`&Q z^b^7=>ysxPiIIYIpFSpm~Tt`=(Vp^=Tbr#W1P5sVZw$^^^BbVq+yp;`*P&K(#eM| z@?=$huZZ!bkQ4V_>%?U5z&zjLC@1YOwnTt@LZxKbe5b0!$=s!De+FqCyA2U8#?)*2 z$LN?8uV=2{C~qd4rT#tZZYO`fax@Luzu8QXI+^Lqd^TX}NqiQPgv8u3(E(rFRY&M^ zyzhsQKhX@wUEQsN(Ac20U%fkP!4hbbwM$0*;_f$C&iB4oCp|E&wUCAjyNE`rr$AES z46?` zw&Lfnbnfu%K13n&@(7|!*+w@L`fHp&>2E%<#a5E`0)dovPHWL9Y$fF zrNs^7hHSTw!-a}fpZLZZvQZU#)M({3UPrciu2K(72f8uO1ST$q~+ou)j4~LD27=2V|KjIR-`NY!2aDA(PGFn zpJX}uSLVY)w4QK)3<$ECTO4aIMRn?K&s6wg(&ya)6W|UP?TB`hg(gqIVLy67H#uB< znNx;Z2zf3HiqjA3;XxzB{POfjmd{y6IXemWVW%!IrC)yTqnNRa(uJayi@WW?-x}Z9eyM%g6lFbHCszap2c|E@&(6ijl}QIV;(&|*)Mq9!&kmP z_2nSSDq17{eYGeV_G^86#IHhW?N_@=z94-BLm)ZHDlVu-J(sk@`o;20Wc+4EqarMc znkHYpYx%1At4rtjN<}>@)(a-)-V+&*_=ue7N`^n1dy(~Cxw*I$U->fR6?$oF5*Vb&Fi-VZ-vW@$V!6^CSYn!W`-8lS{=9n!whEX%~ zqF#ZECr_h>VJu>GdMl}tR$Oy&S=yx1**ljsB5i*uXb*t96qK0@l`40@kJ;AZ3AfZE z*-t0i+fr5yDPPOo7gGBzYGG_QPBC|Ip{5#R#NqW_IkrWHtAM{KA@B{eY{^CK^4R z^6o@Q;m88>2YXXAvfsuTZaZEA|Et(z*~4VO0x}T{Vx?gSLmLc*4URNB_a&^EfZW%K zL-l2Z5kh@dsGl?BL>KZK{dlXldL*;-=?ipZE}#1#+2v$S2)Bq?=OwH8AX8UMNc#)u zNn4aS4T9SEo{d5A>*3;J>`bWgbw%JIFD{O+y)1A+E{?wD-TC^lQRi|6gB)yo^r!+} zq3s1Crj z_vO(x|C~=iP6dV8-58oHj_EM0Q?V{_xrDK0JbjJ3Fp(cne(9<-H)tNB#4kHVx4l1> z`UvOL!8m1Z9~=_f`09B!2|r}#Gcb*&y2qIvyTk1nL9-qbUe=tLv-qvCdmZ($kqTD} zR9^nL#Q(FjBM!Q_^+}BN217=G#Bzbllo7g$$d{aI*tN<_%tKZ$7@yp)Lj{%G8MZIE zXdzeeqPzxjzqrn2!H|fnq+L}F0D*We=v}{R=7M*@0IwR$7(r5bOwg_&EEgznuM?G;l&LwWFmJ^^GoMHBP3qH2@csbI}zqVis=%98%m<-2`t__e|`y5=m|ljZb)%-LXD@~#O#P| z!wTLStP!oXkTodCqVU%77A*JX+p*e}K~v7-r0(8QTT16n{9D3M4N5}^3?-|aeFy~6 z=TG)wlF!$@>-u+3Qn#9q|I}IYn#M7!v7$&Xk9#x~m6nPUjbO8!dI2Lgz9P$P@w8}~ zi;)j0OXt|dQ{u)|>)OE6!sQ79u&a5kH5uiE^$v_L4W{?2E3u|#SMS#fSHo5vl19+q zl)T1aLgtelmQ)gl6N!n1rG}d8) z`$s-((Q+dNuxcW2t^WiCmG03mioH3|fmUED;hDSW%ej9SpCI~0o&&Td9a{28(`(Ax z%7i%Bu9=ijNb~h3+d&71pFE8XCSmmg9rgSQQE0A`UY5^OgN^A%P?Av{iI9j+^O_4? zOst9~ha{jT%^qs`=U9xU2A^Y7kKyWRY|%2hXU2$>FtJ}i_1iEd(Q;R+dZY8)HLh<$ zW9Bb_g3U$y2q?+ICe3cPLnX}=oEQ$03J}>o<_jSdV)ojKucBxatK@o<(tG%)L6^60 z*#$|0vwS2hg3L|O?Z{jjo0@|0NZ{oR{yZ7dXz;-%Ex?8QzPY8V!I;0h48F@$q|cDa zeg86xU=FUdA+YI9)K^T(ds|)+W|hu!0K?Rcnh-ABm~C9NlDB4gY14>q-g=gk&U?yN{R$S;7P1NZe!F zD66;41(NVzed^&1VN9<23}K)jm3({PzjpXhxE4+bB>lqSG?P~5QLxF6%PA{~%sn4& zYLzCrEu@Qpzii#^W;oF5fYsgxzT2&k#QQ&fRk20sO5t^ogB1t)fSw1oMGJ5vj>qtV!3G>L4o^CR ztb9l%$_uoDqR_=G|0=wOeVPw5JKdvXrB7G?n%j>8fXnsUX|&$gUH*Gp+l>~Xg`Ovq zf#NDmKXmMexN;YTj-2ChYY5iL0K8LmHjhJ2U1b*l_w~zv`e_B$`0_xeX>ZmReJ`SR zB!2X}f6o&b3>G=Q7b#Ou-uj`}BNP<9`J4lM9ds(|2LE66sf7ks@rMYW)nwS$*E(kD zid^#eh%3B;Z>5LPn}~JA(rLLx;OPCj>B5;i z;QDfIf3=jK;Zy=mAgQ({UKrdrk<;?xFEyKI0m+lkkLy~{EmcoK`z8#eBHq1mxyPh6 zqYUgnkoE8+(F+4SK}7Z@SVSW%sNZ;le0A@0>j?||5#Il+hF!?jFyaV|0OXnG6BC?f{Bp0kS8Tkmw9-_u%WnoJ`N@o`YF54;{!i*AT}M zSw)K5ul^36riD-di8jv&F$Cyp8SMoKGyN4&8<0P=b-ydgAGMu`Yc~i?7(MV-E!VfIv zEI_k=tj|9Z*dow;q*-n_)$(v<9t>YWKYt6*{}s>EN9klhZ_0YRPyQ9S7@_7PS|=EJ z4|yub^qfblWwoKKEH>(kFK+slkhvSbeDB^F=Jy5ah1G1Ec?W@_RuMqBA9eD3NB$1_ zCDCK&}WW;ekI&!N5TbG6LZM2K6%x zkBmf)zl-D>yko?Wc_L!;A4UPW%_v}X8PccMOHR>gym(HdQVK6$at7#e-3XBXo!hTM z4q3Vn(EBq|{M6wzo(v9Sq-4kIpzANW{t`=0037lb^kqpk(_O_Bc&rZ4UImcy#Teti zx|sbQ3>*>(dX+%)E2mWTeUPaY?sRVnrf1~aTqSR#OIx26QGZ)hExb)kcIK#umyyP} zQEKZArjI<9pSEU%@lH&m?A>V=M#cX)e+NhBo;bKz-R-lULwjkF^TgN)Z1}Nh_Rf$@ z_FjFRNs`^I4_n&1i86f5VM7pd!KtzE#N;Mq8HuMJS+=nqizw$nynV}h;hns67J0!} z6doB4VuFbOCB3~CLjd$>=1n5$a+Eo-%g81?l&fZC$kz3d5$?~!)M+SgsNH&eH__u!gRy__ z7@s_!s8?%g0L1L`WR2C8(iaVI3Bs=SLeo^a|Jx9|g`02u@@rNSE%+oXU^e+}o2$!f zg*Iazm}g@RZG@nL$qBYZl26y-<#*)wT$A2aSU(#)E^>>9Ul1gC_0S%kW)Gge4l0nK zb;+O_2Ia5hkZ-d#=?K|~yWdHa>`(M6c^({vA;~`Z_!C`1ZYd>OzWa!eN=zodn?j9J zqTcd%!UsEC;V>iEErw>!3y0D3X;ARzk{i{tQ&n4-&OE2iYZ3J;`6Q=6ziRiNZ0;68 zQ(glGwFSN?(o}8WRH_c8rF6~Wd#OuNgJR?;C2|Tqx@YtJ+mUNYw+pAyc2%%vU-%SY z6Wat+QSeN743L~YP+lwutx6ZrxCzy*_(kkT^G2@sgf7YFc6JHLC;OCj)?khMp=72+ zs9IJ7R(2Ix6K$7q^F5Ed-I?R1G5lE`kZ5DuZQEVw-Fe+Ru%D2`k%c_0_}aKEF{`p5 zu5{dXZZLhai0C!k{3|4Rn0dmgn1 z{z_ZF`77CcvI*jUARRCf#8xzP0Z=cEntp&Mb8rYAz0z9ZKvXB9FhJ)gWjeK#ZJ}`e zwWK_IdEQn5)eNsax2ITXft@hN8&Q(+rqqrMBOZL$ME?8s(#Jm{fH&qAt%}p?ZhhF- z_(+u6_l(%$`S#UR5cHyyZTiq3;k(c`W&+|f{al0fLLGTyFYb=N6 zeP1_olSyl&)9&`kIRpX+Sud3OC?7RO~wr_R*%DQ>%mIdsQQKJmxvfe8WXmfk}Bj0=Iv#Ng@cHeS*>3|>bXKBt#Z`qU%HVg<7AQEiq9$@@ISJ7$A>9Hwx1m+gfo;@K<-BZ;+Jns^JW4el`^ zJ2N_xq?dcLIuP*i15sVuM-{S$5z#AX_de%+vsk|3Ixoy7`e!>7@1atX)G zDrCf9e|oiB>d;E7fOF8G9UbD5v&Dr^k`6X1k~jm!bKx6v((l=bsLvW0quti7k>s8( z!?9iSi4N+=paS^Ni>~TqiutzD_SV@tDiJv16l+CU(tV>G3HMu@Q26DHHUhr$6IsV0 zMVtfiphT_W9}WfwbBaZQymH7@GFgp*L&*k|X{*o3k~A31d|{T9+(X**K2mDtL!L(A z@_fuGCpLG<*KXzFg4%k^p3uhc+ri*G2Ken?mrDg{AE-oiDhYaJsrmT$$jCO5x)Z0H6UO<3Arg8UzWa@V57jP)vmTpeE(~ETqPySKdr$@~|f1-MS5w-7~I z5@mWAzs)(@^vGXo)pD3EV-5A^7TYI&fFDH)6^CB-JQMb*6>;fCw7^{A@AA%8BfZ_o zlF=cfH81{(&d7czitXJO`S4hN9lXx=pz^HQ;Pgl#{AaXrZ4GB<7uA?N5ZLNy8C3qM zas?f|FK#o;-{bxZkL_eDC3C-k{mBZQ@2_5NYip~KY4n&hU z+=h7j_i}`_#k$V1`a9_VOK1l+t%c?&&~jV(?f#pZBy=tRIe4{OjSo z(fZ8`veA1t#l2+Dbm`849L1jObETE9XOX+&_-?2Pf?DpmI5Yos4SsR}oBCWONY@$v zPq?F{#6ZqKHH1+Jis;>uTdlDt|2w)4?&kpEhNu)${6`IS66VuC&RgawuTy~fibMwcJymdDy#MS)VBf*h>|!Q+PKj^}V9&Imz@f1Jb`5~|t!nni>4Q60 z7_#?7_!Nvg1uJ01=*97 zTYxX{q;cca-}{V@AB<`LgX!;>#?+zIU!OFASY^dAT;!j#i2!0vARE$S@>}fS9%ZI4 zOZ@GsQmaQe5Khef{C|h((+0j0@b%GG7J%HD$H8JWna@f}7da4%qYj6n$u14d^h<{I z-GM6=76R&oyz~A%aa<7O&DnY$82R9fjKHFI>|=p+3=k3WFc?#9jNRS!1wm_N&ccU_ zQ9OtfE4Y*oQeXlnfQgicvs`6?0N>y=>5!yMKzJ7R{LXXc{}~1M3>amq%;n+XC@#P# zUT-pj4{XDatDps7N0n>9j;g~I4%Z?82G7lDb_;IM^Zc_m0b4MdT0Db^0I~;P9FBK- z9U4O?rsqd9SwzMU9Gue^=@MwiO4a`VGh_hqexKALve~bNgIMfiQx8MiW*~ob=(x*S z1N)&X*5E+UNniOJH_|bMHPh%%L~(9%BMi@gfPZ>AhSy83*}rsklv4qLQmw;{4Ru+M z@f`y`V%58O-2?;z1D9YB(^25R9lybS5Qr|$Ra@IwPg`5S*u&k~^{EpGBo+&c>ADTR z!_@|<`h1~;g+bS#76bjIkfKvP+PdF(LsMgq-9PGfpGi94X@K;2Wl3>l z^;Ki8tCg$#f2x>Md%anTf6|9;&($xbL2-=AHGT$?J`8j^m+@v&-+Nq6eJyeM`YS~9 zmaHt_edSbr#B4n^Dq2nXUL*4t8#sF6jYTJ);LJ=|-gN_|@Z|7N3;nm7M>i3M(Sp-X zQWJq~_rBEL$LZyL{895GEoDh$R>=XCGQ!>5u}c!x5u8$StLRil-+PprXmw9KskKdQ zj7`JR`&km+^u&cX%FZzijC4+1#;?Lb=80VN;;PXpW9IR!y0^#Q+s15PU5(dyeinsjlL?v33lG{?pg})Him-7(2>#C@lb)r6T&5kMwq=> zu39p6^Kh&Rf&yuT!53Sg45(>*6O#1)1KKM{fE*S+n#8dX8!=^JgOqqM*XiJkHRG5Na3BM9nx?0Hc_#C1D zL04pcM>4Y*Z#p4?cHs`a+pOu9BOakJ%p7{+|D)~Ai|@Gng^+eNL~p*XQ&7ec%87 z{&gGA=Q-zjo$H))o$Gqs8T3*JE6)IOYs>K%>Zu zT6sC#RAGL-u&O5=#r5}Y_x@PQEZDK`eN)M2sX@9&!T9%`()DYX$^YbWYMmD536$xa zJ^{INZDUq@e{a{B|EOgF`JGNT!*9rroQK?FECd5cF%% zv(Rk_@Da#ySi@h*^6^qBO(+t$Yir02_Geb z!UV*}JoZJN(K|tQt|3a$-cyv7R z;64|Q{PNx-+jxC5GvjG7tvtJI!YBV*qX0Z*|b42|^$hmCc$eOGQ9!T;@&k;R*P0 zV%`m2_lXjcDN`hc)iE$gCsK2Owt3(4U*# zu;d|IWU_h=O~5V9^7j0Fo|dxW#0WfN8MK0pJ-hj0xh~#7*7vASz)ymH0boktfyaRd z!c9LdgG@|K^LFxv7Wk{r`Mtm>Dms2h;VMSh>i&JAFz<;_;xg!SbYlMItK}~7o=EID zFab9sy8ZnKGW!JT*+PP!O+fs0=eqxSo}z&GR-lcyXh)x{m5IC{{r&gMI7|w66qGFF zu7Yb2`IA8>f`2!#N8E8trSw!K{L!Xfr5dXHP@{EB8PlF0pkb%tbYhX{IO_zmp7ys z;H{MH5h4rV(U0HQ9c^PzcB;4L0W{*qZG6A-s#)0A$?qR;jgUNUhTd{o_*%dwDKsNd zGG!5p0eY)ebMm{@W(&=Dvoa&5Ws`73Jca>=5~Y5ffLLpD^^pjhDHZtVwfo1wKcfHR z6QYO$C!K0TK|zx)3`HfNFq+pYDKKDpsFg1?aFLwiF8N_RCF!dbAUqCSZ{7llPBx)}P97_&_HFRr0yhH}o$4jsZRw zG3G=*c=Nm5hXOWof7n>|N8BHI!5)XudnZ`eM$R8N1pxOXPmTVG)%2P|kGCdmTR)%F zX>EKj$3D)2l{YDpf33*Hvau(F=Xcjt0OR@l;ZiU>ySH`>abvh}C@ZJ#^h<38%dmVx z`5HxIw9peD20_nc_8fo^dq)c{Y>pvNWCOUH18jZ;xe3R@9$U(60YSr}HCfZqbkX`3 zkNhWjOmPCF)qEzHufVbNiIUM-htTgwH`>h!eCrS0yS9#lWsc??efE#B@~En@sH{0U-5cnjNnSk5Hyk14L zpTNk#bz{>pIj(B|jmi%E*p-j)kHlY`qrl!wK+Co*(-d_z%%}Y(6cb6Sx^sDRc%Z!T zf=WX#|D!hs5{6I)3FXJVxOP0GwL!H=q9ECsySh*ov$%4Sne z@8FH#4u^n$oGTnq^9|HyEz!h|`PB0Lht z?>^^>{%Oq5dol%fYuCR|-pO-4IS>gis`|dUoa_oxe8}Imhj>j11e83dEnlHML0<6w z4Drg{H_hJZvF&`hYI?N4($qCkhy9YL2?v~-4N|O-J zF<_bR>^Al7WUdG_Rtb%MOXx+pu}?WsB~PUwH6WJNxu$#i`3(iEknLt|CW2~PAYem* zvJgVFwc);PW;JQ^BKuv}OPrURF^-qaL()e3j%d(mOlPC$zxb$wv zTa~u^KMs{-nlc>qG-z+-bta((6gSvPtPtg$0!QnpQuL@KQ}_q@T1$jZ_@eA`*b>RW zYe3)A(!Sl-14@sBlZMrP_?dcYvVR!(|`pZ62Af(j#!1$FH1_DqpHJF!cRwrBzNk0e#+aP zhO|QNd3w7RR1|BJ9(i*CLVE2dbIZZ}Q!Eth$N%J+u1_6n1b;n!bw03@9@8Alq~4w? zJCsGP*d3>EISBGGh4uDf?lgnWNq=QDQv;f?xz}|7>t`(kvEieA6d)h-Qh*6m6EGo* z7Yjf!XW|9<+*lCiHDI&x^cG@84Pu6<6#5Rh^uOx`F=y}jv%RMSc5R3WQnI&Z-Skxz z$<%OXA2}%~xV5fLEIovp86|R>a4p_C^uBl5-8b4dC+sJ*M;ks_->-OTL=Z%6Hvva( zJi5AzB2;K#N^AWZ^34nvHjnrOsZ{V$@PrSGLypa7U9NE;Pwq4c!Y&KDsi<|;y=KR8 zzD^~nUu}E~p3Y7~UN0_utO4%??Byl-FIP|yc}<0$bFfy`_D)MfNHG?DCXh> zMA?5T28U1)lA+D?7au+P@LSmjT?fyrSK{UA&$acZwdy|&s~Ru(TyOD;f~DVBtbl|m z+BK$vWDX>(ol<=z3#a+^JrU`2%zamLk-zX(Pdw_AP}4``fTQ+^HMK5o@L@j9j0Nz_ zav?f@evU~lG9&{hP85I^j-_KjpSqe(WpuiZVvU0@#~bomxTgN&e}>GI&vgQP%Y_rs zp|6cf*x3*mc|pSPJ8C=SMmHplqgZ_EV55(|>7;kN8B zeiN`;nyrHD{y5$4lD54%H>mwD!P$cvIxC0w_+P#O8TO_Rvl4^vb-(F86tDjSMHvl} z_!CxCr;Axxj=7O*4kBaPrbL`%02&_e02A^1G_XndefrYIrXrP$kZ@du5NHA~JEMq0 zt9yu*sCHjpH7J*Bj9E$kl?S-UdBW2TZSQ`>!~#KVKNk5y|6`pxa%hpZa%9{cu`hVA zV;6tn&5+wa9q<2s=ym(;f$oLU=il^>%-De8DOyGe%gyiFWGc$q#JG!fKXZNooTiSd z8UT2bKL`V_!B}#4KiAnx(5DQY(ub>KXt5!fD9-5ac7wi^!YQw7y95cS{ zH1^=(buxpbKe6k@XKZ?uLHlO_jcvcMK2erPU5>C`lFi*Lx+qaHet4 z##rlfDcYnx9&>ScreLOdwqe{JSQ8^{sZ&FjDMN!GgRF~T>HG?c*ru>tCiBHWk+_LK zC45+IR#19o!!pPOod2Okd358_kV87?Spu(PUwJgkug@;QH~n#=B%ksG7_-*oiB5r& zcAP%l?SBB-9#x@tPcP96Zxr|9k=Eg!*#W8mu|hZRY;u_>k`(Fn0Pc2 z?~hZ_T%U5cK-vc#OK7mF(Fs1jD2BOPNCB0=TfKBiLEnP(y+5H=``o`?DqA?SuhbAl z0FjJdOs1Gnf>|c<%-3@=(Hy54fcHb)x}IG%TiO?$oiGDqs^S9H>14;mXiR{dA)yEc z75Cv+YfLL6rdP^g%@Wm!a{x%qfVX3MBnqsZk3=o#%Kz~KPI5|GR46C~-3U^}iSAaI zd1I=}CjJNolv8$3c&;{jJ?Za0oGT#sRGgMoSv}-Mj}o-;FFb!;CJ25`44E~t>7R>iKu#&b;jP&!{ z@~50XNN{Qd#s_E$do2rNbSX~z{~jJ?6aj}QCZUA`P87f%9@zBDNbG-8!tZ$9jiVLn z!YMaLoK77)tpPFw;iiFv=SS{{rMeX7{;6OS>>5JQaY=qzpbgNKg3(jn=c>$<*AxrM z$QlZINy~=4zePIiRBc6L4o1lElk0RHG;W1CNrT=a=s=kPeGZxaEirKZ?D{r+SsHvv zU|<_2+*Aa62wB{(jd@&~k+#%hvdh6z2XZ>TJXtHW;={)hxd$^YZQ42agbCX#!!?*> zAeiLSYQ&g7;FMbHx<=K@`EyK|f(V6PQzOAA#H0LPjr-;>w<2{HL(h*&-g>_0Je_IX z9@8$=d}j6-;A+9Vpa}?^Sib45BEb<#p`g9M@#r(3P@@eAkRJG2sDM4@b zqoG?F2L9*)C1mWdnr4YTc+v|0vVvp?XaNI?6!_lo7yxT{qhZB)-3l+Ypsy3wjeC!V z9(;W$TWLYZ?vnxT(wE+lS=#r+^Ld1DhK!ael)rnHk`%nPwfnU{-{PhEMDg%rpUGvr z|A-K2e`t#O83)u9`7?$79&d=eIqw8yifry|jztgwVVVq3ra8F??ego4*i8?fTE;_N z9nxL5y3k`D^I9Ha=Tt1Ajg^Rx+Gkt7E5I)hjsa$&_MNvHN$|M? zp8WiyxYo@LvRu8eSU>+WSFTp5n}GU@CP3H4zl6v>fVEprQl88@Sll0bmJ%qNqBZw; zX~CiV$=*b*d&#&1gv;)4=8U7Y7ksmlT*-i88-!4tupN9F0f=Jiljcc&PiCT!$e(C? z!F=8LtASX)*>+{tR}vbJ7=Yi7PQx%m;0mLnXnIesMFaDf6otI8%Fmi>sU_3fD|P)F zhXFuKi8gEff)Wx!8<`-0*ou)x1bwgdg)UoI>YX&;RTI9=iJIsIoBb1> zg(^feqK_(!Tq)gL1pvK}2gD2*$alkV!sel_S=YPMKc?H7ky7bN+F|5&L|W3v zSzBxX(s4gloEuichB8gAi$S{w>XG<71_NvPPG}G zJi1yOTkG4L4k>Jgf@M$!(u(m?{`@&jk}qI_>3hyE1>?DM-fEp~WTRNszl`w+6cB#P zaJ+WuZ)_0QJdci^<}tHmSlB-9;oo~b9xIVXTt@*UCMV@+%O@MS?ntprP2l+vCsw`x zE_e}>xT?my=2_uWPL}2BU&%iM+n85(#JQO|Kf9)F+1*rkBI1c#+Ejk>at;D=tk2;7 zm=5KeJs9`))iH+fSJ*~Pz=Tx(*brB}C3cwmO~vpoT-OHey%r$Y2&vQjvR)lFtg9Wi zTSqe`s4EENBtkM#X&x2rdt^4t7k-&i!%I)VJb7*!meyMMp)5`61}c=qw)_zS)Ckkyn2JvR1&U z2L!AFn5a#m+X#^;A_fL>l9IjT@yN>ziC$m_AG!U^{`H(*nH=SzlHRqQr{c#;MvS{d z2{07P-s1~(7V%bK&Azbf@T(^qfjtElFjwU3rnjMK9f51B_9b%;Ebp+jwib?f5B@&3 z;gz>>?R*lt81buS5VplJkd=%_-nk=GH;Fu+g1+W(rA4+G8Kglx90IL$UlI7^;I~I6 zV;(Be%{__dZZrO(mMDcyam{L9DRO0Q354%RhbiFvP-L;@O8e;Fw)S-=Mz?4UTC}r+ zKQ8&3hf`%p*}=1s&yRr<>^;7Hecc$;QJt~`B^qc`4VTilWfsb6jhDJ0?2X1wXTOIUjE(p+cuyX9eT8<$P=F@)U)!JqDznYEZ4XeVgZF4+6V4$TK~@Z4aX zDz-QG<$tD&puj3K@6Guq|5+=6I|m=-A76wNYoFoZJGCV5Cu^Zi`0NL$rt3~Ge>M9U zc0wab)Vd(8lC5fdA#v=yeoog4Mb=|Sfgg?&tk=XNpQWhL(Fvxt%Iko;PL9b!GU zgzLId?Xb+wC%PPGunE-h0u)ZLMP?;OwI>YA51lyGE|-FP$ter zy3bC`M^KL~4#rwkw~bS-I@onz8t3`Yh$s*jx>fw2%@Z#~$fxwnbO5 zdP3Eobh2;1KX+e@!4e5=Q2s)e>)VLB-7?0Rlz%-or(dUJ#R+*8EN04G9Jkuf=GBTLs^N9*FA-2v5x+0Pio2yriW6q zN8=1o8hH*iBd%*nK2=H!vA$*^8@7(c_PeGs_l>OQUDXq7Fqy56->8n)ATI-IKbcg? z3=lig!LZikG@COvuyv?l+W)c8J_bM=iu~l=@%GX(!=G%mEVV3vdB*c5U@*sCtl{G3 z5-c1MDI4(;iuu`)to{5)#@!DMSrF=!cTPl6t2&H3>PUE^aO@^z2_yGv= zG6(R3cL!&Jhilx00d|ro!p#BIx&^u2q3)f6c{!&Ta{Z%1m);ry$u}Hc-s<_BMN+4u7h^?@n@T=U8hJ}V#)=z zmR^M#pb&4gTMww=-DvB-z7HpgqBW~370^nR(s9$$;rRfCE4igO_!Qa9d-%PRdV@02 z3%owb2AOOL{r31K$V>BNw(|=BGCz2I%1}5JEdkRh!rlLC7r<47*k(W(xQh7900~Sy zFX0|AKfUNuK1(NrOM}#wg7e{eBl6^xCL&H;EHQ;Umwq|?^#TQ7fe5@)bmzmlPms9{ zh@f_`o(e;Z<^|l%Z`<}#cd6pxM9XS+B3eDECrEO1LTYtPreV>J>(e$RyPqapPvdvu zSkZp71yD9@m|r^RQ-bn&JOUs4WTZOAf%=tPk%iBSxb*jcF{J>UzSf&gz2Dq{h~E)7 z3j-OlMv~z-wHsQW?~)R_%qW~3pj5ss{^4ayVVF{B`n$0A&|Nt6ciGuPHS{?lW4ccU9{^mU7FGNi08m>(_evY}R3p@&U{R?2tY z$~Vcl0NIB%+U5e_V@hB3q~2SW^AkCwKN>tzeK2W(Wv|X%3ng2ue-FKfp~#Qe!(h2# z{r#mDR~R?ikHfUWP53H>+99J1Vg+9GJkB*exzd>Et0L`0-n~a?qP&ORaxUcOYU+pc zOyg~wF$COdoV;>FI#DMAJt`Sf4i0KxO~Gi!$=iU`geDTfFmnuz&(8}JDtwT`nZlzC zL>8r_NXohq@Q}#s>t;AqpJI_hut4jx8Is@sb9)lu2f^rGi1D^#z!B_8J0sne3MQbC z9?JK?-s3H_O^t!aB{tPMbIRI}o+k9;xZ8lM1Et4nlh@F8ad?qpv-@t)ln08g##CpH zdpc-j-;dI^c4`eJoSR^T`n_f0?DDP}`eN^{bWGkzE=EX^-0rV@C-Ak}J5On|3%&M2 zK@JAq5%!=|XYNt>h3AB=8U(M0+jb5+LeUT4qavV3Wh{Bf8l|>i8`{Py9Ymf180;&t zO&EK=elA2O0UK@RM#UnGQ!09EO!y*?`L6T>!K9FDcU3l*2l+^|asbT!q}?)Cm5~Yq zxBKLndraVG=LqK0DD>_ShLJY8wj|H+_dr(qxWh;1Kfsipv9GGdf4KTYXx>?<((gj)NBwUqQ(i1 zH*@1mQ7aV9o$kC>55TBlQ}a)_IMvM!8z@QH13&Ojj%*)lhm`PZ04;( z{Lsjlh@ueDl`{q!V^DXEnnc`uBLn~f%-klv@4B*G);RqbwfuxY)#aM5Ce&@s|8|RK zb`C;3QuFKSHP=*k56&ftJ>uznc`XmJYI3vF67pJ2z*^4znIpf;W`=5jh~S<6NgJxd z)~D|xdz}wO7uo1Nx=CE@xQ(rcPN2v2KTZrLoWrTCYcUjQhN(BIt+wf-7YLgk_KS1Sf{@1zpL%A1NcZ}@(E4cdQL zMFA2qC6coiidjo8{a(bGTJoJxaOK9?cH>*scJXN~UilC&R<)Cs4ew8SYP$_TuruBE zWN1s#DIh>w)Zm!888DHN0s@JkB>^H5v4s}Zr(as9JnBcDDQ$UI?VE{Pw(4;0vtn_W z3s%U$b&=r2@T;IAbUVY_sE-`7K!}rYk(V_t3i}tuQwW@(du^d}KMGd}TiB!x+l}sT zwwfh0{(_u7J1#2^Il=LbmmcXtGFINnT053$Sj-C&`7wx$kg>r_WDCp~$Sr)n@{(iC zWV%YWhF$7d`q6Gpf==~J5!X1JiyqMr!B~C=u-*brQ)2>MY=6f9vMdzLpeF~!%Fne? zfoz8L6Qk>wKdh^p`jkH2c>lNv)q49RY&?iB$MK7&EH*(t4#X|EzqsS*(M_8MLW`2O zfFKeQj&uQ9GCO;vui=6Z^WKA9Pyzu@uaPz0{>1iQuTy!Cxuvmm<=_`nw6MQKr z%x9I38C9B9WoEtWY-Udv*57Q95{oEKG0`H9cB~QhwB?#NuIF?@7#IG?p4Tut>EU@F zxLp$re0p#*LTD*@ivc2@47*MU!}|?ylgK&;$SIo@h!eoeb}LYSuh#YGKZ!~6+NgCx zohvs;5as&BDtx3pJS8Qr{)mn*qY&L!vI5(MFZqqrU%pwhO=7~4mI9}l^pMxH;VK3{ zYUYjrxaixf zs*zSRN;f|^bSVVwPwFvT!-jL?6ky;Nx|%LaK>{u?0ck;O72Yx?_*nRSkB|o!-LAdp zN3D$P43j3>Xb=u1g-xAv*ndr$MV z(w^QCfUNg|B58J219T?tBLEHeTE`TP0x%B9_6g9 z3&sW`8WrY~Ylg__HTU{=yly>^t-7Xmm95w^64GS6yn_|)Gz`S+MxSr!g?K8FU}0DH znuE4l7J&LVV|=S~sBj_4Ya`kW_obq-5gosn4EIrK^+SDhAjUL#n0@gB_f|sqK zoM(IwFT=MH4aIE%idR|iS`&=L?UwDl2TnJ>pjX(mHwOXCDj<7iX@MUaajpH%UW&Q7 z3onf!3jNE-KjGD8-W6C$tCFX)dt{E!M-_*gc=_@6X}gg-%pY|sy0jXW*XwfKUkA>G zB&3tUJ`;|1x3oQUHJ*std@5OjGd^&wPwBHtQRI*bsqX@hAX41329bCf^iTLO2XTN>p6ARVUP9!5Z~S{i&?EU2`#f*+rSuSWjoakBD=#-_LFcK zUjjc-V=J}It$_@lGUa@AyXX%gzUHi0S#YV7@MIO5Gs=A<7f4|PvS1W-)|*#4aM~dx zhFZ5~Bjh6GTr0m;^>DJsX2z7$H3`6>5T~4gQxGXwCS1~W^61@;(%Z3C`s zOb6!y+2kVubJx{>N0~AORy0z)$2n3HcF)r0i@2>Ogm7_6u8oN*Y#s^h(m{8I3ue?N zs{SMuo<%CG|B+4%Yda;quYA!;ZJ%A(FE5cJ<3#cS6cS#xYULk(ol?#89AWSe5~65- zw3}Dy-hrjMXb;-}2vPb;Xs2bn>F}b-5bLfHSCJ$=VdLB5VWK@h?PPjJ%$}jmJ(}xw zhx}G0uyE*^Tf;#3mpi)E(>7ehK`sdqAa2HY93Dk9Faz-tZ&HouFQjPZSTThOo2s!@ zUiRn`z52+F&ED2MFiRB5z(yp8=?fcz3};iPgBXU)pXL)-S?GgTx}@pqg)nk|K#SY* zal*ERR!#JQY3~h818F3Tg5DSYeL~ivAa!Mr#V)s@$&J;K;^iTz6@KgFmp@=`)bFx8 z*Ia~X*=sLc&V~%$keDlbmAznU3cKX-Dt-if`+YcEeg1i_5fHe+s6F!Lbd;Qc7{i1> zu#v~3Tl%n)-Sk6bSo7S9B9P(Qv{wQb-bEV`aXi+g+}R|Bq4qw!>w=9nYpGer4xIj9 zO5_IS87=(hzoe%D+v+<;1iry%`TqUiOq^HORLuN98O7-v@Szg&>y#YC2RyBE@_hlE z4IrK^#EJab*Tsp|X@rYw?+Q7!Sw8#9*lU5W-{_!c1DfIF%2E4V?B(hOG+vjBUhd_- zYhfHj2DR57Qh4rtE7e8IpMK|qGgF{krdl-PfDi^}vwTyy=i453;Kwg=n03>(+?>^d zNAt;jYeL*oqKQtjBWJp+uA~Z2RdSN!U4u1>f!o>GK)wuH1+^G+#YT2fyc_PY|4vY+&MF?6P7-`B;Xg%%XI)ms%+EG7YPj zUfXRuksRQ6_~xVuCd+?!Gbhl)@v9oBvhU#qISI>SN3)Q*dF&p-?{d%ZkSSx0tm$OXlEh?db!thZ*b+^@1~2!|UyVs^zUE zBTP+p)jPNkJHP_EUb?U^n2s=gr4lFiD19r09Wy@FRi-|j%y_OG@dPZYo0Z-g8yjAR zrEioOC!A?W5pfc!r#i2^FmJRmObF?>)i5;WU2TO`s(t@A?fcW-A2L2D%N}_3Si;G5 ztl9+C?vK{b=`p@~&-;k1a&_-$2P}`54MG~KIkmjKbO{%DDWMAbdf0!Z!=mPwKe&K7 zv_%wJp`286r%&NJLE5gJc(lRZ0-kB0*OJsw_|bI3#AnNcrWx?NLCUeGcGd?-k82;J z5@Bs4gzz}6F-~=FdMl&m2l8i)d!L~N{N=T(vR-D&ORVW1aE^`FAbI4)#=^pf>VQ}} zQ3Lag|I=*2(JKq09z%)YBQ=+IHSDQo{94JOq9va1;Nv$RwL&#ncv|F}zJ!!jd-fH7 zsgT>B=-q>Q=fYL~<$c4c)VWL0ls$bfv+TG2b0McyfRMPk)iHub0HlD`SA5)if$sI3 zzAeORl=ap_vxth3T{5$TFW1G=ghPjHa*P{loC}Rs^e-l&9hbZlZGm^|5DJq@MHBdf_8w)rpp-Yd`ocOj!+|S^&^>3kVsJ?o24a%7PFmxLgJ2l7R8GZ#cJZtGj<9P~!k;=xZBu4f2s*)MfVl3j&2JJ({2RQVvAc6ZENn&r*xF3aXv0;I`sD~$h6ZKS zSiE#-3x2(;MlEsr#$oA<>ZbO=Z2N#G-)El(ztr`K8oB(5zG&Ct*1xSxEw~#0#)c5l z$flss>&K7}X*-A|Bz`jh>zS0NRL@Ecd7B1Wee(hR%o0+*P_3fuwF0Q&N13sN+o$$BUDwsF@OCc2J^$wHiiz?a_6N!Ao8Vjgt~ALP<++g}3M9hFpgIdc zf{Xc#R(9ro?Q(bjgco)9Klo3+_wxfU3dj{B?;S+vWUE=AdNl$+zcu(42pK%`{m#MA zdu7Cdk=1z9Onw`D^-|-zt5@vtZr{B-Ls+)>mn&_W-1|V#x?@4j4%Xtre!dhbg<#W4 zy;TuxLUh!?#-9qmFX-LlL%k>3ago-Js?x9~xpZsme58Td9ln*P2 z+qtp^Tn*#G$^eENoHdlWVHU8SJ(MBKee|^ZR4)^vu`;4T!xBJQhwT$8g0k^HR(}Hv z^}5oq_SZ3A-e!+@ES7jXozgYWSLj%J5Z7%8{xbBac$QbFGZoX5VX+y!m$4TRq=F5o zumy{ET9bUMVg6!9BsgBktQ^P(J5|f>c>ba;sH5cpR@>JE93U&`U~6LPsSu~VKON@fe0#R=j{iZBL`ITfkQ#ptpMv> zZNV&=U`UlWv|LQKY7LUuILsty$6-Hk-s`e=yMhD^Tx*=d;5CY&f>UTr!Uk(4)?q1e zTgSAX4r;>O5ZN%+vbNMAn@cB}mX>WL_Zx?_?GH1S>B zH*C#d=?C8~pX!sYnCKo8!F)>|L|(<|!@>Nzk-uv(E#OZ>`iwI26VV8O8y1nIv;uD1+$r*>_p3N_sNH8C zDz8$8LQSrID|w{OF>E1d)=qi|WdHmTAcqg$7;jH&i6<+iM^uD98-}}|JpsQMWu~_G zd?WjDpYCMJcdXjW5EWz>a6FNxv`T^YrtKU5e`*8-=fE;6)R-y?*i3K&Dyu10<~i8> z?#8tH#tUsEwQc6c(`528dG@Ha2#rh^+p!okYmPM-Pn1!AIx^SG9l2aefaF1EIqS(a zFHR3mQEKl$w?t%Y&$1!p748wCc*waW7ZN5I#@!!n>`680XC2}}g!zO`0p3d&Pqc1h)=4XEtt&+1N_dDnEQ zQ+gbA?F&~v25hFVr;G}V_3@i&5F?WvUNvtYkqKn1sNBkCd4YW9)4a=8-}oPQ`iA4A z)1k5&j2D?rDTbCNJ**QR{itH75fZren(J;tP8E%iR?>n!V37L5TdqjRqPlLM4(>Aq zQMm|d;w3mF<4cE(-iFwfmq45>(oVVWp;`EW5~kpQVaIdvTfJumS%Z+S;n~SUb_pRa zQ1e4}sVjM*7a1(po!!>Z2-P!}eyj;gBw{V0X*)A$f%0kV`(0~_9R6#0fR-Duu;vF} z(bvXXRyNNtQgqe$i`79`kR^@>+mwNeNn03F%w=T_=tXjA>pG9+X`b&pZNAWG!u!cA zmh(%c39S81wUByn8uE+_cgo(mr(v!Hd**WVV2N@Id-&G*y*IQu2T2C0Y~i~0Ast1X ztE>E9F}A;8D!p}Mt^^<#`FJ=(EU3n~yFfSg2b!dGYgufyqWo!s95|(u_4%%%qGo`K zgv>1}o{acVJ}MG}e9=j!otxjmL%iL|yNQVz?VSR0mAB3B{Uv> z0LueRL;SLe3mF)?L|0elZ;bIX5n7AK_#`;Qmxl)DS~s0Z$!QxbI7$BQ#QB`fXLrTA z>YNP90kPkEC#y;7{Orf~FGCk9)muc-++P+b&T?B~)Z+0^w!b43KFXj2uQh$r4p#-y z%n@&==32GLgJNV5z0?Pv$-lj4Cyb9}FoKESV7{H-Xj2AhC1gGZ*{#Qk*qURvpSB79 ztofma@#^lyL?B&V|IGSxpsc2qlQy4kcSmn?x;oN`POVO8YqW)qcg2UOwF?S8cGMAsRmD9#e9oDp&EU$T6#`L9 zu`Tx>>EB9TD|2CMQAjDyR54-&5w}iS8S?22dEHkFo$;f%Nxb>yI7O7(<5^_A^l3XvF{X8xI7+N-j6~W0pwzh@dKOr zc)tICYHP$^3t{?3sAAJWh#;#GEvNGi_>!@3G^#zGDSl2?lV8wo(!?G6t~;Oie4+>qI>M`{=8&J;p`*>lH=r?WwouHjyd!Rh$PPJ(zU#2zw89 zJ=-<<7+{Oe+!|eS_}y;RHaLvSR>2$HyPjZUxUr(L_D%m}3fkkV%;JNN%qZ=;)!AWC z^qvkt~<8;ZCy^=O0i%6?+e7b zAFZa{ou)4{m1QCFgRQN~;=opgJN2-sUww#?h8o2ZP0CM)B>R(1`LKecajCBjY(>Y&;UFXE%T{Af8*`lA-c;9f=y_+WB@JEa&L`Jf2 zl9Yr}f+?TyV&ID!%_*^m)-X%xghD{SQm%P2)snaAAu-?DZ63g6E(kmt;$IvM9hv=h z`L#atoeeX5@*%=piiHSB74E$wZT64>HGUsHOxB z`vao~h)}FqciBKN7-whf8V!Wp-JI9mXYU+@s4a~%+HX>fnwQmZ)wxjYg9R@q6Y4=0 zkmwhfx82BK65cPl!fq{&w4j^$qso3oSW&ov#lf7 zJE1*8U4v#4^CpzPyTNG5Eu&Kt86+_i%6xawM4S{Y1&Xb$nT;rH%AcJVS$$gTvJqP5 z`B}+{J@~|&y75NnBj-)DXko1`RQ0%JS0Zr+O@Kc68Tz%0k88@ThM4O;zl=7-#% z$#$agXLm-+yVIUd{CsGJ7ACGx(m+#P%$_eb#m&Ga?1yz=foxK>m{j?OQon3)M|cqt z)Fs$u_CJecukz@TpjEZw`M7k%CsCs8PQ=e1*y;Wk{G+6g69`sakaO)B8BG?oLsnWO zGFmp%mOKR3axb0>EV%aAB64ur@~P+gEptP}TBkug)*9H5oFCOGfM1dhr7 z(b3~!H*ZEqF;(iXRX=@&uI<7F7W95 zxfbc%K<=}#aV`ygtsIz!#}t9!rkqrTA`+6RsooU7ehUlr=GO82^ey(?E<69u|9zu* zT=CtVGWb?)u8~!$Qqc%Lg&Rko{r;dgd!Qr#Zl>;$lySGV;w)$u)}e7R*Sr?fp>ChP z&GD;ut^W=k-NqlX*RIg`4v74etfyS~Xve>z0q3u7T(1hoAu<%Zt;L|B*d^VN72ynX z2%o`dNAv7H)p>(U8*&d9f;EWhs36!0TvYDlMaQo-WlwspB5!CMXJ}cL&?NGV1N9k^ zLbWV)*Y%x0-)!hKj_ z;$YG+4sIy%(FD9=KX5BODQvhFNxO8DlU~z!(oarlF>8@U?h@Lam~Br;=!G*bbHi)e z1Gf;ToacK1*Y15)L*acdI(u^ai{Fbfa%;9LDQ`PMfosy0Pu*uWP0mO#;@BjJ=woNW z-YwVtee2G>UHbd=UmaN4R=AwwC zxT--B)CJFy8(?+w5IvOB%1)-%ugU(&g5ulqC-&JnIxS=tzhCmdNYOi$A_t8eRl-b9 zrh=IQW5*W1p0`GS(|y@vexl5nTZK+MJ0=2>X+cUfqtSz351q!UIc1P)wq*^pA92@h z6<%Bz*$?^f`+siAi%#v5_gWlD&d;qB^N$~x;@u!lij1Qm#+^D;HTYp zV)v$ZnFqLib|dKPqFjT*I&%fH@Um5eBQbq8euTopuP>Dn^9$_L-n}j%R0s7HciOJ? z403iBpd0A^H@&B*m||AEvF!y9_85q&uWI#0gH)qKW)`u6h3Yx3HSX!#yZ6B4AL5;^ zF;nC8H}GgH`{7j*LZy5zO3E`Pq_D+daxh2&I*eFP$eIy`G%n1|=wql(tQ;%Q<5V|1 zPQU3mOdUD_aUCuVdHR3Idh-js3`HSCq>WILWUK6EN|M5eB*~IBNwP14Ar)D& z@5`tx*|TRIWy?Au`!cdk7zSfzjM=`o&%5{Md4A9DzhumPU*|g4*{<_?9Ugm({p#9D zVPVWm>y|%#c(s8)KW*vjI;Y}_NNVC4dfs2Vf}Pt_S44mOk@B5?f4Y0V)~r^R_KrNE zx#?j=DY|cof@cut%LdQsW#L;xo)( z!KoNGY4nef^R|1%KQPpw{4%ls#_Ds{+Bxf|KqPwG{q6N2=ds$bXvOR@8E;Oj>w;J1 z&GBy@Y7*5<&6#pRt4|o2_9DWX6#+Ig7_WR0)K*FMjITFUe;}aS9baZ1Y1vZnCIO>- zAtp17U;SWq8mcSk$+oN-M){kI>EpNuw8LYN#XYM`%BzFw!h*{@3)n@iDBD2$maKEI zBL}>1Z-Pa7Y`LhZGqniR+I6*`<>W6~2~HYF<2gwtC5z=4gRC;Kwbj}Sb z6?d)q6&c^>U8xvo(7Co=OBe99o+mHSgE*~H@HhT!Po0O)@bh|&rg`u+1zQ|CAnya5 z=SJ|;aJ#Y47)(2@BC-M)x2Ex(%WP^6Yh$f*Ap3k!4B*s^xRE?Q*48o;X8|?_W<|QC zU0*MNk>{m~6nj0JCh>+d&(x0HdGKGIZ2h`F&=VAO4T)pd+8X!0D=^(M=BmKkXgfdkR0jD~Iv!s>ZL7kW60mAqxGamI7*vVoqg+udJZ3;!1`>ZXxMEN9UC)Ow ziN*%9P?vZorWY%LXu+{{O;Baj7)iyrW*nl`{oKZkQzOrGc{}%kj#Eg?hp@CTM`nrn z(5_X$sOw|^-O*uSku7%NH?e)bI4IIuvn#}sw6`ZoJ(OJEjF{h@t2i^6^kemg8Zy|e zN*KVq4Loj{u+Q3_hVtCVxeAV}kTtI@@%q&Du$>fBIJBS)4TiuLtc%h={!jAsn1lDm z^9c;=e`-uoh28vv=i64qsOr8)tV^~^030g69THOE-14oJh8l5}cUp+n-dd~oFdjC~ zTp_C_Gz6t&=_yg3M7qFymalbJHN!{`nLHW?8K;oYBd!G#r}a@2obn=rsQGPZ%1iicZy;VN{QON!aqi?X(1(Z~JGTuH*f@9#o<_yRS z!z~Jff~vJfehx73hR5Hkml}|v`_yG4C#D!mUrlsE3(*KH`|v}T|8ZGc?}CS`x4RSQ zkZ5yyX1%9NquSLT`9MdKz5kiBa>zbCEfrFGiJ~!gMNrE(;E0?oc=((o$zvwC7Y7S+ zU){^JI{C@px^7(yVd3`hVwhQW5Th~mhWYknuVyUng_@s1JVedUE#3z$cWWXrW<3(M zgoU{N;aQH6ocoAj1{O=c-T1mQprMeIpms0IW#Nh^=`&dI+%5b;-@`u+TyPgeog5r6 z@n*e$s%}A}ks&hR?^Zc?D!4G{Oskz^tq)*uljh~xsyO!V99trq>oHpi>&Yc_r`0+# zTm_X2EL<-t?u2wD~1Nn-cY0@{cht+ z9I6qeG*rBx?S8@E2kUT&6hgcVtb%)QAlhPNYMangSwY{z zjt@!b9&tq4@0qsPZ)c`7FkBKE>7$KO*9KOKALMNhqn;5FtMq`~PTAb;V;ZnKl_aAz z?1L^My9nj>#V&qpVX(G*zp!5xFy+B(j$Kbfj+VcDRE^Zg@0;G~@;Wo;HfkdT^!_`V z#Wxbew;89@EZ_fme(jI@Ey#rM_AGqe4w|puhmhs+jabiCUeJLUoHwPfn(F$qwJ1+v zfEEv$z8>;jjXw;20yCUeTvjJVfnQwp9{47NBH#-H27Wt0i0`lJGP@*Ybhn#gL!V@+ zFBf3qAI=29E|x6KoW~*Mr}Ft(M20&)#pwI6_y)Fo3N}ANpMHID7a8bXN&7Z6yDX!Z zxWwkUm3^`#Z$G&f*dJK!82x{MYM`56JiB@PNf331xA+*z&O>do1kj+ocl%9(88Jb< zbM>tpV)8djjztO<;2xnhW)l&Oj#PdE%5AOoSBER5)W5vgOm8pIhbFt0p428P%y0asY0hJhU;{g=c4_8LKWm-Q-m~?pHRwj^KWGh(0IfyMEg0JWMkNa8;;I|ZPi%ND z=qJJuL>oyiqc9q5Z;+ohx0nr5HM{er%&bMXSq8DAWXH4T03*Ap>3AOb{{8ivAxyd! z;kKU2l9|)NauxcOjBfttbnX5s?PcnVkp7b;XB+|(yKqXSb?#)*D@))xKKWu=)pI3i zg-gOjUkw4=fU-SPL~oI{?I6Hl#7xLp9_ZWqJnUz|S(Tjoe143(^5Q>k7p14GUhRo`C#~zcQT}=4|k@G8CI;yu9;Rj}{G%Xd< zyqMON+cybpr{LkpM90!?bO07y_j@V5Gpvu6^^JV_ibJ{vOZ2j~{rmNcsT+OjaLXU3 zTQ%pJyM)&g5L?LZ`7z0?REaY{2dIUnm9_MFeO+(lS0{^jQxyUe`eRiDVA$V7a+rKh*`_z(L9rM|JmuC+yVP>)p&Ww8vFdQMu zT%BQ)9%Jb{_b0xb?ZyiTY6TW{)lT5iO370iBt$VXoD^qaY}{z9d@?&#A?nZ}tsOTH zj%&$nqK%~(@Y@&zxCBX#DUEWvif!q$(`^hieRPeE(6HC3gs+RxTPD=1Y@5|mF6%E1 zo0c2IKMpQJ`hbS(I@ynK?O1@!umK=cTgW!xYp1yl@x%nebPiALt>BOBAT^0bO-%y9 z+!!V_{enuzSoIm~5iY-cKe>W0oKnAg($z9$nT|w$IS$`K1g5Yzo^N%_UPq(99tEtB zTA5!R$UpHnS^R-xR^y>jie!fdz^Cwdw_!}u*qil-cx>EoDDTsgA-^3Mi)^P-p^Su; z1Sgu-6p4%7@drva)VcJ3NBcK(;_@L5hpsw`ssUZuE194_*V0zt&%bU`=R}6JnKA8e z>8e#0KC?-%{!@|O9@;3hk zbTD5yhX8azN9cD@=B>gE;f)IA-=+^3Z`fso=9;u*go4Y%l0&ToCiv&5IPqcGXdrKs zRLXApQR;q4?JlmH{?b7=aKv`DwOie1);2rJCO)vbL8SH+Xi6Js7&>fqs1JE0&NG~i z87@mov^9Op?_BeRKR-dJZ7W4XKXG9BQwLX5}3nZyFHZt zbh#D!QXA?P)Prr31793wHou|_pW=aDDgZ#?QS5AI+H!O}8^nLmdYAi=MhtNB1oz!~ zfSMEhN%g%>5Z zff~}uoZ5cUQr8R!*Eufi<0lsB=B|zP*Xo*tFbj{Sa!^ z)g%c=XW$zk{me2G@5`<7XxdCJ+Ok2S8y+BZ7b7;aaD9VQg(YJ&<4_|zjr`Wzz7D)C zUt)`wNXfyn+mqF_C z6xsprkj3?*G3zzLF9xI@Hn=z{WO}?>^2XJ7d$TN#MweF+FvDFq4KH+^nm|zy2FFM_N5oKoa*_@%&=TX`?CUr;N_qZ_*VYjVS>CPxT1Ac?-F zq=B2(n~i~p0PD@^Gp2K9qMc0k@-KWp=N6DFji53VF0^ow(`xTgJThQG zZRR^0SAx@0;9~o$lO{YK6;?Xp?He9Ppch;n7@fb&*JGAzAvS1?MWZVBW3RV}3?xk_io)Y_I(ZfS zb*^8=GR63;4MEP=E^<_*N52e2^1ZovC02T_?#EIls1q<2;}F@L`IFnsjUTqd9NA8W zt+crHAY1Weq|bqNIghi^Xs5hO`^wQ!7*z}Nh4A^hAeKYZ+J`D?}9CmVM7lqk%7t~SZ8xy-6Q z2`rnkV#X@(ciO};C=MZ1&r0uNly6ypepzl-iR8O!zO0pZ3>T00+t_Yo$@d#o@?rfY zX$DK942%AlT-GnlRq(rG%dOmLaX>icmd7kl|7VRw;bc0~aqZfppTov53j|G>R*E=F+!M57?S3owA5()J=(ygm0SyAMWnsL84l3Ix0&;bf;!&R0a&S8`T=M{jox5$GZLq?wlWwN&V`hpLmS#mNTgLV*^{-*xw zG2jcwCrF8o@2+3=1sL}VD*%J7AHITp%!2!o?OIuNq`bEewWT)RfmW6mo?iS4+^V&G z-#lS{`uI#5WZ0#LCC4W99GB;mEK{2JcM8T&v{+YMmFi}hi(+18(vBpq zT zZ~tLc0dc>HNnUvO@*t^*r+HRy^xO6319jC`?dj&v)k#w=1ImWugGXbor#gPQ7=CUz zGK=~^!0H0-=GQUJ6{o^(-C2<+$ouyO%wuT5^2UOfGT^(EOGcMyNE2Vx{V_}}VYX!cS@_pl)FL`*~;IQ>vAP!4@9pQbBN{yQ>tNrGF zwNmn1uk<+;fd0)pEGY}9WA$@X+mK3EGvK(sqyK;K@~ua+Xv6)>U)CMlgov-mY1fe6 z3Fg!#DoUX%)q27uxQ5=TTnw}y_{b96TC^^MD(=Z5uyrk2*_z~PNM(F^K(F0w3|>`o zx8h{$6wkxfP4lal095&Kz^x|}Wa?qexw&J``BR7d6*J{U*66>bQXBleDg%D_unday ziD)Py4j+_yQhUr>D{&`OC-iZ+7Grw0SITvd+$p#~)1Ywkc354m*fw zcA20V=th=#6;Sk_V}3#)`WyfIRF@lo6T6Xfn(dK1^#O4`>Zk5CfQxx(YVh&DC8emN z;Jnvwwg~Tn&-GnHx@}Zo`)KtC2CEorK2#OZmULKGI@N~eAlI$I;->_P>Jt9-6QFW1 zZu-NOfT6W?OVdw*aA7?(7Mt*RMW!hwjVXt)VcK12n){5+jdM_$ZSAP%kYj31^Yhxa z=?`aeIo70C(wRvS{i0awmq(y=ZdBEJfJi=o)pCxIw-a%4U82=gi052rnyl(DR~H4Y z>eP_cPHvXnYoUAWw|i;&*rQ~B!4+q%yc#iw|J1PXDq4y{Pk|`CPXoz8be(GmO)#onbP5-q$1^LhDuf#=+Uj8qTknQZ+W@UMikoAlr9^ z!}uB2?TVbX^9hePxGR{E1GLgBg{QMwq3`|dJi|)N9TR-c>*A29kO`*z8fq!xZp-1y z@}>)$*Q@_@3k9r?u6Ms2L$zG&PP1z0IdNwG%sap)1!FVG%@U=y8)o?1+lJ^pgmv33 zbCGONs(N-XKq@!u$`S>%%G)0tmg$~g-2jNC0smyWLh9Zm=Oa#a^ve@W>Sv{(pF=`2Ggs<321Z=Y5>l>P=X0K?=G z`BSu-xwF$y)`_>%Z<-Qz40N}Bj-&v%moveY;}BodaV89hq~ivl#o4{rYZ0d%dRs3y zPO}cK5k)Ta*=}{An#9f2>2>|$hEY{y&v^+r1WAvPaXKBAjY*JjU3-Z(tM?(M-?zk( zmAc@sC<})+Gldn;w8GT6z9~X^`ob_)J^N(Hf3$LrRk@mA#)fx;=J6f7mTw$n{~Bs2 z2iLwRT1#7a=({XlrUE$dA7_We*lpE1@Qrf-2cGJF@9sJ3gOeU5u2Yj^BOwJ+CpAV_ z^U%JN3B$vzVGql`eL#>zbRh)l`SPIOu8nzzQh`PTtr63`35G#%WLgUv^<EpBq7G0qa zUVXdygmKC0|AZ?X>P>!2JeK}WV#kI@%j@pgpyVR6ye??a(SoYbTy$ z-3QA9cek}nnWEjPoSWGYhDc$+)@dJ!3F5)tq05%L1-ht)uhQL$k+uns&1kB+pwIA< z78q=VP7Ah8TT1+%dBKhdBVA$!oyZqc2f^^Qf0%eihc-}i)LTfmql-IMVlZl#qUo-) zHiEyKd8y=O?Q_#CUpQgCdtRv$X2i_kB7`mDMfsBTwD;?E*zPV8r7>ZWNpYpZ8o6U# z6Pr2v7B&;b`x#@A{j4wX`6h)kCF_yTn}mRdc-a7tq4LW(dI#CAGlsFqO-$Nh{$j!> z7aC>r6PpU?EmOadoN9IRxe3Uu2Goji?cD_ggkG6jH9!rgC?2Y0J|QInnuiYb>I(do z%7v1x@oGUsXxaB`ANkFAC>$n(JgFP8=~JlZ`GGAh3}9Ni+bO3TbE3CE`64Ofg?$JB zndeq?&y~z$`Ft#S08>#LWiRnx^*nWo<9OidcQw1~o_2Jglg5BULXba|M+MY~|Ek!( zs+JM8l}YU}z1jz)=}Jgu^8KI~#h+4lk%>DLWEFvB_pOJ+mVm44y;c7wTwB%iN=6h| zWR0$-(edG>5{9OOYa>^>7eF*FlF#g%|M3eC*^_Zcmz)^JP+tk|Yx!IF%xSlAHUT0GUgji)`rSb}oJP1Qu@sSpd+J9+%ls><%+z{^_RN zl_Q|H1alV7fw0Y)lQ{6x&?h_5g_39G26*=yZ`-2G<>?0(SbJ_pQo4vr^wW_ChyE9N z5ik-}zc=Y>7RT{No-UJ_cl-f{P`eZ)=r%wG0IF>1z;VWW5CRG%1G)K^EK~PX$SQ(x znaqjDyXj-O+cB1I+VM2y1+mCH5%2Np`_)UwZKHG;Bl5b)ofdq3VIbD81q*I!*>$_f zT=>4-z^wTSS#iCze7?IS&^18R{W(_^44HWb04CLZVpwHSkjjAu7gg6vUGHrF2wT78 zx6r&fvs}Uq*cLfmEA@_UY8`JuN3EvPF#^=`^}FJ;wS%)=SJ8nlhU)0wL?-phS~_## z0sdRO4_87g&MvbQq7`_czqh|QW~N-yBy^feQht4R*D+98$Q#{0(R;wR1^(j4#O8|( zZ!^6^_&l>Z@=f>)nb(xD8P=EI2~jJk-!sYUJOpfpf;)Bf>ZpkWW0sIlB+d1qUY=e? zuOoarH`#!az#cZ+ec9Zfy|tO-*H7BG=R0adogN124X5+~+IPrcjlSnHk0nh*D+LHa z{?5EO4+7sjdN-x#GKlNZ`oX7T`~ZceoG}^1+jiDLp9ERxvH&F}T#Xq}$|wtq{W9@?CbZ@b+A(ddFu(gSoDE9PZ^ID8 zE7Ybq*5JTI7v!e!$vZ+|+u+vyUgld%n6PgKABIyACskBwg(qe2{3g4b#3E+QCL3G(N>(tlU?Z_il zmhp=%ZAYrS+xKFsk3-G`_k2H4*m7-bwp>_b_gynwaQPB|n5=E=nj5yF>nb$w)SAcB z29eAs@sfTI7!nvH=9mqgs_u=9qEf!WOTMxP)9GO}2UsOzJTFC3g;0%^RB^5hv~2xw z!W$;>Ne5wgCJnOY34^|;SK*N*%;^FD*A#%5eaa3cj1SoSK+=x1I zE76B#w=5X^cA4t{3`E!NP9xS&3mXeb&iFw@8kSe>+*>e5lxMI6!*`N7tB$4UZ40m~ z978pts)w=( zIhb@Y0%-STVASl?$a^{U&2fRCAgzi)b;XXiHKV^YSf|EPH63+f7nM-D_xk)R{p=X? z1dQHNM;p(13PK5Sxf?r8fyP7j`idlCroX6luf#~)3;0l}q2YnDYv)?XnDlIYFIs%NE~l1L08kV-A5tovEw!I8Pmr6Q*m?{ zoT=etV=y5e@}c|Abo1at8GR05?2DE?P0zAVL}D+6*1U##@L#4f04MeiDzTdvX{Q9L zz^_bm56;XCzO?|=%l+!|U=j1^UkA6HV-IdT_)O=~dywR!22S$l(!&Oyn^9RoGT-lB z_9ej<&1b|!l~UwBFR+G2H1g)N=cCoPY2Z)26&B}D*cta>*2IJU_%RVm(zOS-a0qqr zV=-ok#;F$mS>N~$28s+vrJR`EjISzT9qp%1IA-&!LpvleOHhsYR28ho=JjoNcW{7N zhox&56*|P#_~8!eRqHONJ;OFT1IK`*|mC;BcPe&?pX@qMA46A zNPE@llaGsFyUz8}GnNfkH0*C+m;T84wRmeduTR=t=fd<8%G^D11uBG?D5PIv$KHyh zVxX)j71G6!=TcBa%*HsO_3S9$d8GjH<%G0>)op1-{IntPv0-hq^=)dyfa}nw%rG%N&r@=M`X|Zdsyf*1PKp zh-3gwdgRu=jPL?DO5?Z`;ivk)X){O2J?MUCk;jTxXLVzNXd zzr2rs_}sD_(zD~kCcy);P2<#yivU02^Q1ugsmJPpLKcO7{Vb#Z}l<|Tz zb^Fb~p8qv4dk+v;>l3^mY+izlA~!Qp%~jDgB^U9#Dvk$V=8hJHZ>#!- zHzlIPxXl*7382V#>4|%OeM{@55zor+HzlI8cMHIGy$(X*%%jN-+ti_o`@aVabYXZV zVQR>6+gURLrW_Jz{40 zeo9T?6(g;Z45Rgu80#-ynR$1L)>IEKmsefH(b*3fSA1t{+IGYvDmq3nAszn1od1kb z1%+51y>Oak5Emd}y>a+^Vzd~`Y5|p8Rrh`6O4Zd=V}@DR{WL%}4|}YZdWto3oAL&= z3bssS50v}}o|IO|2@t&ZMT1$fE?jKMNHkdQ3tnC#Go+;vRVnNAUOp+)Ud(QhC!U#R zJS=(ojwsr*$fA(c!jlJ^J2^qeR#i9+g{`;jR=MD<;0z;%(T^8&oehfv&(8Z)-H%Y0 z{=5=O+R*ol!Rdy7Dsah0>!LNIB=dLH8H~ai4SCi0ThQ}5xU{#GLJ`6B6vrN`VYePD zjE)rIs&P>xOQPhP){FdxZ2n2u@y_XGMo^vn1zRZS@AO!ikRCozeX+)I4G~eePO!$= zK?t8AU&zPX!8mkY19Ljj#Gy;tp^-@&H(Ob8mvYkP=$y<@(mvVa2p?V!pN#I~SwcGE zpQPL{F7lUpx+DovNqv|IG1}cW_M1pErZp6|N;?pY;S6DjagJnGotm^isZ9pLxEGH? z8!+(*G~AuIt=4$sJ{uH11r$+su`5-3j|=*BJLv+^RbJmi}TzdqO$ zxsB-iMN1!WU9#0ah|>*IoH=d1vKX5ke!*rrXX0levtE+6V#Z95DP6-k#^hy78Ray} z_hF{W>d#YNZ;yfFkHmrC%-+(5AafbVH?zFK|I9(&iD>=K7mP*hw!L$pbP~rT(^q_Q z4fVF{U^vACMd47vLxU^c#DpRF0HclGJGUPE1ZuE5ofZtO3xEX${#s7@OUW zx|VZNsy5`UyWw{@ikq{il>#mOZ&`06Pn_BL_n6A@2Cq=4bhMMqyE&KG$XXs`j-7aV|!1WFh_ zfE*jpcjf$*7W_^s+rnQgJ2A!h#)M@{v>er}D3zwhN;7BUJiX1GyBOeip`3Kcq8?vNL_}B0Hx_bRlVC*)10WE3HW-G+S>~%PuNfRni3^NA$>*JlK=nx#bsK z?7uW}IdRYXglQZLahSa0=bit%!c#WLeLNB6>KN4bKG%o6FZ&Dj-0h!gRF57^X%(15 z9KMD*qGn7uW-htz_Y9A$+jF{p+g9vLZEf<`Dg={pYi0r&tcWR@TW;d!TA=F*xytZ73j66cRDf^{W>~dO7ij9fd-DXUc&iYQ>WQIF20%-O{B|TIwaa^8K zq&V{ANB9>sTevQZu_#&k*$?4+MfMD5`3vq7k|Ya33)*a;vnNxR-8{E0Vjbn1`4P3E+&Jx&6D?=xkPnHi$GqXQ&dHV@PUddVZlX zBie#5A|cO%k0mP~4X;Z}aEGMc0!9n6_PEwwBI{1eWU24@4!QbIawd4rCw(o6ND(tn zM~kma9VK4t+|pVu*sI^VpE-j^>^V8bMZ@FQ=_2&+LcbCPzyKSBu$)SdFeq+Z)xydO z(_m9oU4ik=a#tbiX?)4t4;Cy`X=oLV7uA&dL?1V2j+8DH-8Yd{BV_h6}qo%}oxSMnjT zWe*+wNh2sL!iSDcWX9-G*ac9u9>JmAKe`C!Gx$)$klM(GE21ZxHHT7YN%`ox2W@aH zBTukT-90;H!J>Ln&TrbF*Su>bau|Em&QXD;D&iS2i48sS@QrqC?oOabG@gFc3S&tD z#3x=(3ta3`y?8Vqd*jb9W;dxR!qJd%L+>yP$CaBot9bg`>DEjCo^_X_KVI7!hwj~O zC0{z4<8$bg|BQ3O2P74VxnraaK2K5)*5gYbg3vxO4JMsj9|xgvLF+#UcGg2KqK($& zVM9``x46y>q^nb(7}uN1AS4_mBh^zOX^6?6^7a=x5CMzTs3egF`uoggy?2l7wAOtt zzOp6^(-{!CH;85J^4qwktxyrYA)l-O_jpUGGuL`{gh+NMWI+L05}OOVoj6qI@JVmW z`7x14o2?`(v4+Grc4%;~$a0}CFGAvBF7!^2LA|v59IY33K%ia(F#zi)eA{^!pQdrr z@dX+pH_$h5A_`X$f-9L)6CQ<7bdSaDkB)zu2;vLAwPkbapR>&?8PX{ZO0N}T0m!9e z@~4pA5&ky#JP{P>s_yU@U`&6m6i8AgKCP@gld_j$wy_V@O+??C)Ym_@Q$_%Q&V+Tk z`M84iM&hFfmk&5axRY-CBNz^^MNMdv1kC+EAsnwK(ju*Qx7J$%-G7EO(rmMX*}xK#P)V%>NfK#d=!Oykr_XVAF(8GBE(BooqggBco$u!r&e{?=P6za?e(kIJmZu70blGJXvJ6Gj{ z$y#&;T!1S=vOC5_7M?PL2y7n!-R5)jIg~omMlNt=oVQs};M3y+1a@qy4#M^?s87GCelFCLs;YXNGjCU=DbD{wWVN~`q; z_4EcQNg!A^0P5 zsy7AkV){8K5Lx+(#@=tbR-B>ikiSE`2_^3BHO?jl1S|`iLrh}#)&5U-Fk`^;ihA4r z5Bo9D;DL|gXD!8iGEb6&T|(L<8_tz_h$c06h@JDeQmy~_BUEho8D*z7A@yWKDSL65aa z`|{P(8PdJ>kIC;$V>g6pYTn4SwKD475_;MaCB=lGHoxa$P$Ihc_*g3=hC)LLc*IkH z@9O{;LQH^fu$8pfI5F-}si>ca>xvmyB%b@`l??UEl8R-mEcUl5+k>uxbUkzd;u zT|+sMl4j7mCQKj>g1MxxZ}TB$S;E&B|Z?uLz``M zboA&7{RX^o#^U@8;=;M-6gYkynHswduh)38Ig8!6)8l0t(ivAdI>U-`cH|V0GE~d+ z*9pnK|9KlRvHNWMp6MfFV;Z?>x5FtRcpgF2URenu!utdef_`5plmj~vCP7!SE{bg` zNoFN-dF}l9DM4o?2T}VVr7?+h9&%IjW0p;;#K&Nb80gZ6Ut(N}(YAL2^KVB_)UW6>{Op$?AEkf5X zD<^JrV|gq_kKUW2swi}R4vfh^T4L&2<3E5F;B`E}jl2lx7pt&)bbnDR( zbBQ*cgS3F48o1B18xdA;oT}EGK%lp(6)XGDSjILpKT;H@b}stypP-=fUDo9bZ})AW zIha9y;VSuR;op}}l>DN=2U?d2D|@QxIpbw+METXFnVeY6^zouu!GDc9KaUHc;&cOS zb$yFbXo0c;uFo^SnzLYVDy)G@PC{pTE`%*7)x^+36H(Lm?Vx^nrsHWLr+L(41^S!Y zps&_VdI!4X ze~xh22SP5!>~@x3M=|NIW&_cw zI*|Z8)@6^y8Yro zF72e>MCfuv0R>k7%%q=AOE-F651Zz`!vD#Ec#;sQ`?*+}n4u?1% z%ArxtwBH8yEvonx?5}v=?r+j@xnO9-PW+ zbNfe{t@D89T^e|w4P=Sh;0AOP&VuDwzs}fWLiB+AsaLITfb4fq{FUZG;8Cq0p)9HL z%OTDvMofJ-eZ3IhyQEXDo{aWM98L><|JLy#2XsyuSbqTb-;=~D0qjX|jUvk9a|M?fxIu`f_F87JFEC2ZoR~E<-^p?SG&1gO^=YvEc`^6=xM^hjG z>JE^|2SE4a5|bQ&Pl5MKZD<(bf6MUZ6coH(1m z4ivUC97wm9e0dJew7>WB2)OtTAdRB3ON3YdeE7K*@bk5opI<>;ITEAUa%k|XT;;3(L?Q;FC8|HEYt z-xqfgAbZ0%f-ZjrA$3hKl$l-fp<@l*Ge=N;MM!c(&- zYgeWztn@#@-~Q2gCGs=v>hv7gIzuOQ*{3l5x6kzXoap>uTH{ z^FPYMd&uaomIZU{Tm}y&ZjT-NJj$4b<43w4Pm+?{pEeo#4NRO+I3elTQSJ}9|9QI3 z{93tN6XGJ7q_xyCQ|T8SYPEFxt#4u7YLe-Ri>84Vg`Hb#E9=D;6YiK76HT4uprYw1 zo+PSw@AB36v~+=KuNs`M1rZ;)EhHia61)D_A0FoonY{@ry2$LkjB5I&a4nB^m%Bw< z+(OFrUXt`sl4se=kSGjQ*7@TPbQ!I!oM!g^BQYu|h4y|1HBOI;7U@C!>UKf|!UFHG zwep|+n>`-~g?ui%RXaaZvyJH~u*a3lF{@hsY^Ch*0V6N-UT1hTOtccq4Mq$`3$v^&F_6vL46j$}AS3qzW=(d* z_E3t9H`9i!crA!ZTIa8nC@oqnu0?Y{uyrs=M8)#{e{|rc$3bi0f0-M%f2NpBw?O>% zwIlFc@OBJ*2{13sn!Z3JvwsMlzJ_A?f@_md7y$W6pG_<0St{OmBdx$&S+HHixKGqt z*u7G1ikmVa!ssbPV@7v2Oo-S!RhZsY{;WL$n3!9#CdF*Hld-4qk#cFzBVt?V+gD>T zkXt#=?B96g#M!|K3s42{sXwa`6VifNEEnJ%EhUicwy8surKD6>?E0@Ha?qYzM?bY- zD-fQflqE>X+nOTrpl-H2dX$_|a;>J!9&u)J{}IVV&LvqJ`t5iBkG(gKhjI-chsRRd zBvd3dN-8Oo#AF#AMI}oq`_`!_ifma1GjdAGl9N4AIhL|zUuP*Xr>B+>Roi&mR>}Y`%rn0nA>=Q1v zQy$tbMUVbALZMIO$l1%TuqDO7r*ij3C*!sS^z}zxe;g4l9gx~Ef?i)@-FRT1wq(iG za-+ym3O!gwWC~A7HjcvEz6colzkmQ?o-yaaxsFYK8R&MonTJoFyD>gT|IkM{@9=Cr`JA;X^@cxGeawZX#$o#D z#lFrd8D#IUDCJ5v(krg^~1qanin(zd=D`yRfqLd++Vsp zPO0gg-UXeS@u$iC$5O5^+gQRfKhl2m&S-{aVfck;zxLT3_?QFm@+mRoQfts94a?h$ zell+DaUhl7V?|}glN|PY_4};7FBKB-HRe&V^J0v%=SfA$d2?h$f9#%rM;ZdC#pBl4 z!Y^d)nH|-=?MJ^&9_Lu>A|UaU-mP?Rg%ioQF%SI!JinAgil+ zju-n&se}69WhCYyHm%_-M_)9&N>do4+QFl+7(iug1%^q)Xv;>Iov;V4 zDPrGU%u^!&KGKT!g;PRfGp7D4y}pE42M8J5*ZhyrZL;qQm%tnKjX6S1EuRp@!^!Y; z3iaZb5|>EZfbBcfE;O)P?!a{e-sJ>9du>g>u_ta}ZF|Vn)q>K7{C47$#{G+48o`^| z0-HX;AlsYnNRj*78X-s3KfEnuV(>tM5Cfl~K{A}JZXm`sH5hcxUg&c*-R{~@ z9Lv5yGo(#PmU9?D#o1Pe6_^%=sry_`PomJuNj3DD`V`iQzvEp1;NF!&B35U0|=DoMruWI*l4o z)12o7by?W@qs8=RXsyb*JE6xMhB}9d(i8JT7|wNze5@A};W1;#*xz0ZMSOT)gUW0@ zx-Z)Pbfw!&N`~ftSKBrJ3%y`_q}}^Uw^&i8-sg>BqA!VaHe2Rr9mx%u`=m(t>o$YI ztn=8CV6?38=}2TB)hs~1e3oyRir-SzD9R%~Qm*8*V7SFq1NZa3FP!r?j)b3>IYDbv9XQ|CN6bXmMHrQph}Ji7j94H2sxO%byw+1q zIo#+}LqSWof2l`H(%8!va#BYBu~JW7wl}{ct#&$dU(WlvJZ1=5WtX0fN$1@TbJF7+ zV}F-n-Cj<8fUrUlg$viS3qG8?X@^E6h*?FiO>9{VJU8&(5ys$T(bf#T&tLCbnU0@W zQ<3Qz(Vm;*ttihgWt0T+BU5Y73m<%rJc&8>iTcg6x--&{Xh&Gmv>QP*P-CTh32SkIu2P^-q4tB1@rr^U5zbw$&s$*Dr^0(T zk?mF;Jj<1%NRju~p#1S?tcHIjbkugjs>~ehSAP!;>V(0fGKzNc)IVBCceGUaSxNZH zdu;mQmRaKI>PV5L*>&ItVHmZY!)88uuA$B(r7Q$*PdD>=_4qg(xK-ZA)MXI!LyNZV z;5AY^w{9_m8rbvdCcl=k@h&Z&?-6W9Fb2;&jbiOH#U-_VE4e+Dn|$rb<`7uhDN)Ns zkx1HLc9i%1BcFlYVBLXz8}^=?yAq8y1#5-^{Mzp=4Glp4Ry6QdoICRy|9^As1zB%Q znP%sr(EH`iHVf^94Xd`U`7Q{r&VhU?tIh2YNZ6hl^8d$TzMQL;7*-Hrp9Zmj6LwF-6++;9LuYLyoZ=Y~@Ef?)N? zaLB@;cw0Ex{iOS#dhqJ+we=p0&hW~rn=7BL zlj-6HIO4l`qM$XoYJaYf0pfiY(P9YMjfKG0*+s@LrnUr7KUxgj6|KN}c(OHwF+2y3 ze9s$sR^1~&eCtC+CpTdXw!*-Fr%o6g&-u&l_O(lj$}pI~y<_Ke|M~~^2)YZ4hW>%Y zKtZtBpFe@HcnAYafOufA$IE|l$CuwvgkZ4mKMPO%n8Ka5^d}Dd``6EH0P>#&@Bk6a zT^I}#N#KDncfiHJ5Dy0P4~z!`{YzN5;>AFO2N)iRfPr`k+*{m%`><8uH$WAP+=kr- z`2Q2b9ml}9a{^)ifRUgW@RHlymtbHR2xG(p0hqUc8{~x`quUTKEG8y!$@nTT4)qv; z-EU|@GJys+%cq! zYT-m)H}CGrG7WAb|Wcfl%eV_-&H83WgZ+eZH@ zVZ1;n|7ei@SHk{R!Z5Hu+puew4l2T6Q(Hrf40Hw8NUVXuV1lPk9zO?z@qlIl%(` zhBhsJzJozoo13(CUvCMHk6dH1@`lB#1HRXN4|EmgWIrfAX0-8GAqD=WXmxzE=eq1V zzF^v51vwE#6;Lhl)|b1*&vQa~=KTIQO%9t&a~w)rgEUVoC`eeS#-G6qRB%Eg)Ktx| zt6y28Te|O>)=TW{@4uIRTwf(5HYC{eOxWbgNsK|n&b}-AyZvg+UX@u;Po+P9Tkv!B$wSUMj zz;k7z(LW)u3(*_-WRFI~bzXQRsH@kNVDpf+TWoi5zLnLcT9(ybaS4Gq65jv1W2&~@ z)V7-!5)xkVSzYH164Gz-f=&NxN{*GtrFnu68*d!O#2V)#_@-_7#!pDA2*_6w!lFUGQcFj4-Cfpl=sI7KkO;ruWRnj ziA{BTV2j^t;LS7Ii>gfZvWCw)jA;;I!~b^gdUR?xkHwCzB;&I4fd~KT=n7Kdw~WY5 z!ddvwnDG~FnlL-yy6$+S1m%EPw=wf*?#Ce9zI(ULny=ltD01Mmf04=G`(iI2Qi|8x zy*g0qPzjdU+4^CK>2ru#LL9}~=N1vW(T#M5brOlj(Qs;NteOu^=dosc34($ zxx2`(G4OQY+Wq}Jgg;K7lIzg!MW|#EEJ^bn|I(1+Z4qWQTQ|SCBP^xp%8NtqcGlZ} zj|<*J>gjI6nuj`H2E<^}c3)2~;D4ZdBYTWV{(>Ysby!e z!twT0q0JpnQL{aPjf|Enmz!_YblRQ)sJgD6<7|n|@>va*Wv9%m((7ToB>*I?v8sH^ zJm)SKeo}zx&^|o=PLUt0Jd=tMfEkzF*sQ-4EgjJbnB8FoEca!se!SZmR zr^wY|7CHZJ)kTEIV3S48g9dk%q@J!Mth=7Cr;ZLh>&~H_$@Oi|oH7a- zW{IumS>Q8xfDpAdG=Y{JivlYrKMQq=%)UNWehhjjZ7VXd7Nc-#4q8T0zO~-4SAicXiq~~J9%a~(iIMWc))hmn2xoi#pO8n_SYZ;Ov#td?m;{)i z$n;vwo{Mva%jE3r3U%103^hvm@6rd*e#Ea1^A@=a?fQ+}0P@xgT7sCc@`4BBtjj{8LKCD?ZE%}X&_wOrynd`g!(Bk{zv56z9W}(POBL*&Q}Ey zNQeyVlB*z_a`C?7jZm1LNI%~N7g%+j!(b{8cUbNZ?6T`wB^%~ zIqo&icxsD+**kFOO(o&@3#KB^A+so|-+1&3agc<_6O?D>4FC9J; z3S?fiVAEzdO~9lU-6ruL4+WZUdPqZNszDCKF)>&H7RpIl@~HiB@WL&fS7T58BsBM; z;6OhQ;W`zcx#xG%1#S^G;j$dYg->%BwQ9NjwcTj968GUIyGjrz;2>}#NgeFT9W?J}Jyo4t|h8LmPYjFkb z)8*J-8ohv_I_##<5)%&#+_C{k*~%k~zigf-LTg`)S^cEUM|r^eF0Y&A9aJ&c$0A!3 zy&tRm4y{=a0HOV@wBYuBt>;WE;Qb$`13Lhwf6?O|Y-ZS6S+PF6V4=D4WOj#Or)XAv zReQmgW%C1Ji2l!~S(l&yYyM5U7Des~SL8bHn#(VhEmb&B;y+Gz$v`!@A0U}QicJ;Fdlei zg-#O#YK5~~uaH0f#sEUu3TGT+#9hU4$E(vkc$k^Y)6YMNy>MYC!Bx<^*7-V1)eKA* zf|;zos=9Q^aVvp3rCp4b@0S>6*=k)+|0x}DKESdnq1Rd&!SJxsr#%KgHQ_t!I&=Z+ zW?a3Nsq@Waz+L@uI$+(5YjRvcu^UGq=$JXB4~x><|C?yr4RigKb1J!O?c54N*W-j` z{{2iM5DL)}na#(S%20<5K%_`TS$f&ZRJn%2S+B$ESUe5i)jrx?;!sRm#||M6~`Ml`Ts!&oTpoZ*nGeIZbSU5Ttogvl4$t3`AXK1U}3rko-yla1BA$OUBV!%AHYMPg>hQGrafcW3( z|0BwLI?ORv<@=qnCc72mGNG-*H(gz?@XhShdMay#v~C(dy3`=^@P6D2gy-;hg7Pxq z5eCXBE_}voscldU;{^t8Fvt8?P!lM)Ptma%pTM(qTIZ(uC1JqpyjKZPOU33)3`PL< zs0ePNy;LJ>xDvfgUcf4L>j80k*Cmu0e=zX1-K)_}=pkvic`;Twp!2oFf)OM{t?2>% zJqCDJz@D`-}q}PRk)xi+Ja2u@9@4Ril@#4@AE@K+FUS zqUD#xVTqPt+`aqiG9}xp15n~lzbwITfnd6E(l3f-FW8;k)>7`Hd$79+|Dg=J=MRyQ zMC82$SXFiP=+51*F0Nql+EqDcua#aZ<%YndPyBNS`e{VJ>&8|SE>aamOYH&wD)k+} zUWjhyJRl^jz1$4lRNYUW`=X1q7#PKaroj*Li<(tFp7z*TBIIJ1BX3VY?KWv^QkEB| zE*PmU5|{`@mU{Hr@dog`dVQpAc&Qi!ri)C#`d^%vT!!V=GhB3vpUH#b_V0qA9u0ht zVd{W*pt49END~U(IF^5PEigulIE?BO!`AwzIX?i2l*5|ZYLTm}=2mF&o%|&;3orY$ z3i!I~|5$qn{<4c)$M^PI#Yv5?XB?o@4@!Qc1Yi&v{dzj_mkCU9%*5_)2|J8{BCTyDE{BtXu!;`y=rnx z0)HM}xy>LZt3H49x9WtVGgu;=&HzcMqi&ExV22ojR=_Vt+onaB=1ZV4HEdYs~Uu1~+foc)))__`g45X7V&Tg;dXQ zDN;bWh4HW2F9+z?Fm-i#`mGJ<6qXl}^F6ZosgYnh4hA&Ty6L?2z_Mjk0gLnMV)2JNKLIUV1iFJ7#UH1G z;9==>alDq?9%Q%s33E{?rb8mzT@y&Z9M`!=TYg=dWb&tR4cUv{qidH78`tL#oA~}F zY(N|WUu*)4b1Z3o^NWmGSV9JZ?lwyd5NbSWXT@cfyg6;zbE|>fvb%kx>fA4-;jW5M z%FS>V>s7ymmcYLnWH`qjUzGhtn+{7U_jyZ-IVFK7B?(`oImR`%fM0*qP*7f3s-X+O zM1gFoU;K<;hQnR%nyQ?~>gBJO<~x&n<;d_*RpaoM&neBZgVl=|1e%N1C9+ML{by~n zO`UKiOve@%^+5B@fT-qu{=^>!?mN$wq=95KUN2hvn+gHqf!Q#-7%x)M5*J5kT!1 zd3Z&40dK~CqsC(YaHOTP>@{lqpr&M-v{&^hTk)~h9{ZUU=JE|pNo0pgu zsaF?)9DP!>{JK1YE(6igAE&p$;$DHX5a5W~NAHF;xe;_iOik)jobnON*mDDe@7GEo z-nL@JM*OhrUHj*27#vl%*@`dlkDdygUebYJH`YvQ5j@mFTgsu1LLJ7CVUuPnYM!K^ zPvvM*iPzy?lH?X9_1`C^F`HO*?;goGuP|5I#UxdFI&Bx>GM^x^YTW=86+f7q{;9;p z77>M@r%uY=ZtO(gmmhv#%8Y%q8YIBR+;q^`;L)<8J=FPF)2!Wv*W(h_$s ziwz#h0wx}%HjrJ)QvZu|Sno2@U+l(Ga=@Lz-FCV$>oPQ?QmfK2@g@$BupQEhu(;GO z6DGl{5IWPhiHsT=R#4Dz!g%P4JNL{refJ+GGj;Fdz2iIgN+FJM;g^#C2)1K zaLrpY?K0boukp)P9lk_9;N#yKh(v$6w$|_QmB4N@AXUnzd0;FE4TJ$-}*1f zV^|4Z`Zn1?g>Z&*UwP5O;uYn1gUW^>l?sz^|IC$IPJTxnphRGqE8}2+Googk?#t|s z;l`!Q2g1Q+b`|}GoNXD*4-QPyh&6ht68}xD3K9lry_@@z`i-vhkdO*4T0lhy6fr~7RtOf z;)4|=cCXtmCveuhHXy4IKNlR3@%H299*=Kr`FglrZf`7^a4&kkJ9O<*4+(*mOUDrd zW^&w`MFj?F=PgX(Lk#yC6V$9rb?lKG1t*aqdXp5r!1K+QwM4}-gCGQ zP%+uY^lxsAmv+I9g!4Bp@<2ewMb?|u2DxrzPzBSl#4QDOZUCZxWVZ9d68Ay~1+MXr zv&9kBw~m-K`$q#!(@;wH+kki%Pdn-sj!se>RJ9$^0@_fZL3XK*9PC!J4R@JonH8=@ z7H5v!Os8ikubkq0#Ec&+>oH+kyJF!^ZTzM04JZ00;wu_thEZK8q8Ra`lR|;UiHCG| zk1bvX0g2;pf_>PZeLjnwZ;4apcch#v?3$^WV+Ax(V_E7ih2M7z3#__s7D!Z(5BIpi zq*LK9APcX)0tdr*H|O!cpb#4ar2A`MqL~?$X2`tD4JC_W6{l=ZnWEmDlAw0m|9h*- zVwuv%aUG~=*0o>$c)``};+7~+Ra{&iT%6&3TyvP(W}xO6j;8)4?cmk@ItVL2tTnB0 zBSIj1whyEFUV`Kp@zvrpD{nBh;mszs(>-e~$Sy_Xe_GMZXWlNTVz{Q2!@b18By=&c z6`M#l2@5=<<$ElPdIwFc;ovQP+EisEKask(GgSr)`C8-S76B=vP! zOq<3nK3pRmqbw1Sh3PQ66(`HNRQMT_!2+*|#W5sc(qxtc_)r@jMiS%dc=PG1D%9YVc7 z6EF%iqR=7Sqb8LGTyV(v@Lam#+svlbEi++~wZ1yrlleM)aUHBYd~Y7}+da9Qm##Vp z&2A-UYuil!Hd-~qlCD>vqm_vF#5?E*U$g?9-EI8$1Vu%pUfJ{Z@!{>GcJI`(I}Yss zA5(i!>RgiAFT@7oX8}coUwbSg$j7~k?#i$P1QaI8whu=SMTI9QC8?a1b3igx2F+}n zk>BPTUpzqupr7n)Hr-m`%=t9wyLY~%BUYI=AF%k*OiMD`l9pYpK`fYg|IBT#6Yn}b zC*;*(Er)RT=7)mlj>&p`)CaD) zB{^yED}uLUT$(o^m<)DguO+>^PMLRrWj^@)f~XWRT}SKwz3);Sc#0dVo+9m_EOTW} zQosUANG+E5ezN#XIR+FhaM~R|3+~@}-=Sq!MTCL8*Jl093Q%0W(d@0@py_5&QJQ1} z)tz!4mdw57=fr96tID29^-9W(r6nt`{#(ll_oYvnF1=EHb`m-tew}^SGUP&6`g1DXQ9Kc2eFo)OF{?=IPD(u#Qh&Gg`J!;wT2VfN93b*BLUm7JTt_&13 z<+B?_K#`a5BPbEXOKc+TYKtVT&o>{PTQwzccaK5T`k)4RIoFj{OsYb#1wc4`jY%1& zFX|wPHCf(g({%d_>9NB4LPwG55%3|Two?OcLwQ1euinyRzLhIP%=qu^LMih+heEW2 z8}8|OwM+1&y2>1DOh$Ax$xhKWAxPFEaSjGPNm5R{Z|4sQ;Nw%^gD7BR^ODL0ke1=o z&BTly?=ufRBsZw4KOU^AD8X5w+a&jjm28~$E6~nSp{p>-0kyugfCdSkrUaNPE^GC} z$-n3NJieWeKc1cWV(8V7u)^_k+%~--!^)EgHG5eY|W#_Y8LfTJ+WGnBR>C zc(CSx;*2uv5E(D98IjN}w0+c5R^ZSc<-reS@XO5sI0sGl*#dMiy;*U<*UfL_ivvn7 z9pS`VSVNz8Xm&pH>RSTOL0hVCz6SB*gg)NNh3b0=_c}E;W|R6X6Rt2>OvyRmN)$Y; zK6+QCIdO=@`I;<0CKOO@8dWN01q~0s52>O@d$%9+;~dhhXpm$#PBzb48I6S2GAs~u zhED^hGbz1Al78JbRFcv7x`j65HV*eKJ%jk>=L6A4S`zq%ud^jN({&VZrua$j1#Kx! z1%z$E%H!d-R{Kq(lzC1Mo_n7qyn!UQm#)+)x}6sQ-x*Tlmre70uy)ulK1Hq6Pxl(U&z2}AJF3ULK)Oz9c&1P= z6ZH8_r`yd9M3ry8A6%SkH(lX4o4Mb28XP=Zs2fKlwlH#)I@Z9fOOze?6DyfoTPFOw zlT8LnSVP$|Nod;R(>?wJ5ss|kumm0-y!>1CLj==w{3WfHGsOP54RN07aM+d_TP7+L zv;9G=jnx24^Xd$BxR5*p40m#DpP#2EmYQh;O?)d-8KJnbJCR*t3O)v357G(RGUG)K zf`M}!O8d!s%=8j?to6BOq8e1)A`jw2kx90xn!*XSTOHc1NGJZoPP}cMN0oVak1tl~ z!G4G>>`YIL*@h)TyTJ?vN*x`2ZK2Ebe1NOxr3dn)ei!i#Qm1BjS*h0g~&3oMkl*kY+ z$n$tWz@hcY@*~L=NNVoXSbW<-!e~EdfWQpygDRA z9|Su!JuJ)oMnC1mam%j_GDA~+O}qQlE^54*OLU0l!_sQmz1{dqWIhy>e1N8)$&8n2 zZZXca*Ba~16n?18laB)4x39%V1Mw_wQJNL)1LsS~2a_A8ml7F6nCBK`G{>8lmG9&; zfZU5kb-!B{kR!N<3dxdlemyq&!Pcrbi z8XIZtHK`>vy3IZ#g$}52>Ih}?tlNaZ4EC$_P$=0i{t<4hj2JDSJ^O*-cYFFir9svb zF&8A?XAEaP!RbSH3OrYr^>uYc=#0UY)>Z5uFjA}Zr56noCXQp_(3_Nq=-CML^AQ$) zu3;+z(sc?)d7Wr-rRHN3Z^*8KY{Gqq<`imBpDUV*R%%l<=#d|j(p{<_(6{fi9?9vv zFi@>ck1iE^%RsRQnZWU1ZuZU9AV(zdVrTZtcWAqE%Ce5VFXbHVG(Mh(vuTF@VynyB zOeG#Vm5Kh!@_tC9b+*iut24AZc75rMsQnx5HR?At(Z_xaB8%MwE5E*ASBS(l+|Wq2 z<*$9itRkQUSw$I)Wpw2SS&?GkfW!zV{ZV{1~S$nfLqsV`9L zqjm(TqMbNvZM2_e-IBdGV^6co8`NPi0OT zJ&Ad}Ig!)HaMQ{viLOenLb>|ct{bl?@%VbdYviFQQQ+v-tL_-HxwXm!y5gd3F0o9W~mnZ+~_>xOa5-Hj>=ULCik7QEY&+=Cx~|GAv-sYL}laVM3X&Y6qQ>scEP ze-V60K;6C2iJJ3361whO9sdYfl8H;#aPK1LfG>3|E@>t<a9OEx)TyBsS2W_7rT1L~Te z`aQ`G8Rx9bT+zW3QATo|P2Kw3`6@OcN6q~U?$8iJsDqw`uHA~OD1<&B8IdAFIpz6p zQ%2?#wuAY3eMcGRHX^7X@)UnK7GHp@oJu&f)BTH5F#2Ytuc!NGwKxTuXYyRG%yt`J z*ASYoJ@OQhzx4F5xS!%6FExX(VOhUCgtST|kG(eqb#Y>FMT9MI@U zry`7YH%ahVrl95a;2I={4l&Pd(9D+P92*(ZS&v3T1JZ}h>Nf4)T9TvCP2-5mx6xA3 zeL@cegra8}Pc+@lt+4mH2DOQ4+77I{8ypd(jZJ{17Eyc=eYMY5YJuRDPOZaUsj*)V zZK^m8$FzO&WS%Mw^)?#A~<=LDG_#_PLZ2;??V zieEUh&@1#S*;l;78%d~~HJzwCP|~)aR`*U)r*cH@Y7-ps#JW;I)15`WWtCShqZ95r z;sK~nC*`pi5~r9|+R9|q`_ev>^^BNauJ?WGu(K9oGiRe`&>tx_rURe(grZ7gKf-N_ zXy@7-BY4V^TYH8%_Fyk3_pVmQUU64!8Lp2#8DHTPYa`-$V|>izhRx}-IVx>*b#_bp zcI0%BOh7{fHs$Suv!YL9X_9o?#2iZa{^Y@A1gkgC7cF#&GcF1hW#!WSAKB2(@;z<0 zv8R?Fpm)q9U%n*aA)Fxde zTBLLAhV@HXx3AU1@1-1hr)Rx%+dS@V&G3SvJ7aP3Ipv4KkBifqP8bAG0>V4X%YtKb zpSAkWx?edtZt6v9{kcQED$4|90VZ-+m-WxY@p7$}-J|`>T6w^9K1}->iDk-=re!y( z4EyjjI;g85FLd!^qJKy4bz!KJYU z+o-PaU03x#kC$JCucJJE;m$#O^(W;IC5{^oV85)5{HO^hBGIRsCjB8)pYaHEz7Poo zCMdD?h#}Lbp|wJq=LcLu6L|5$H1uGSX%r{E3aRc|SqS!MuUQ>aEUoN|z%t(Kp`+Up zR%R!_%J5aC=&672ni3@`JrMa0R0~%>o8~=P9UG(SKJSi871H`jYWR$_AxV?!WvN&q zt`WEKuqG)UxN0$JUG;9IV3hk1tG3ovb~SF#zs51DWXrwTdT=^OWD1IET*4&;T<6En zw5fj?(`^&4V>c$iu(Q=08kyw#nQo_Knk9HrI{5cK%HDN#RM+5O6fJodw~HF+g)5!ieuTpkU&@I!kRwIYujC7IYfTBa=THki>QU=clTdioz4CF|~$ z=!Rcc*mGpQ#EkKdN%d`u?bSfv;1k=Ts`W45!^x_Ycy!-|Zz zGb3h>_Y?cGRvRf-$ah0ubv3O9ok&IZru>TD)P8ZOV>fLX*}A7rf~O4kF-(G|O29EJLLHr(rsW|nsdhf% z?Fzx%3}yMvN@Pt<1z=}qt~XtsG|Il#%B0D1Dk+>f(JRd=tQ7S5fo@JGQZDaDJ@LIr z9on{N-f5Yg;!iUIDj?f)SZ~?BMGBWCFXK4N;?^}QIx1IcH2`Cf%y&rOP`7k*B9tYp zh-Pub4_bVx|GfRMTOkU;45Kt8b{?xFA9d#-3%!f2-tVDiAyOFskaL_I*N>)U?6^sG zfXmaKu&+10W6yOaq-fIngHj=QR0d`9_6&jXP|0!q?&9e6L?pRW#^!2e3A^F>?$_35 z-TONXS!d&2#1XibZZzr|x`}J%Y&Hxk1*=eFB}tC(?MRcm>spdzC+$9th&a6BCL-D? z9Zvy09|$-Z%s_5U>mBxelx7jz{o8#0oZ%iaQw9AfXkpw#XUJ5Ig(C!~4 z-D~a1d2;1=?#kDb7SeXKXY&l^S30gFRP2Yu>ujn+!^4l-Eb{RxYG zu07fk>pIf!?87jPm4|;S$*qYDdSd8NoamP|4F#cuVpPxF((5)}fg0%N+$+#Xs3=%l zbXSXBt@x4(t;eiVKphJ~`Z!?OF?~ZeT~PNd*mV=bPd+})G-TK3g7VL0;Gg!E zbfH8$_Ou6wDn95Pv3B=;+_Sn5E**p}dRH6fz|y2zPP zyK}6+*?#u=nEyuGSJkbbWG6K-7~)n|PNCCX5gm!l#9W5|7P@$<)@m z+>hjBYdMe%9Gds4Me|dv#X;q1{3W!M@>+J^xGX6@P++(8h9b9eoAP+eu^+niJ;X{g zuxnR_>EH%Tnn&)5Hp4Ti`Yu-(_Tio*b`I)wiBvP&T&$~qywc;z;LT3q^gUG8al~M< zm9cxiimm}2E{QldkN0?HpN-2Zyk)InNo2cN57p^FvG}h7gLPeZOGxwKM?aIDN{319 zlD#dQnTFHB$z_E&2UP7qbt=1}585ij=~Tg&y@jUtp!467pc^EU0Y=tAVNUNo1R4pGR5WsG<{s<-<;?N%1XmT)F>v7>0!d9^f$*>(wcfTsD&MAxU|K0hv7wDj6K> zp&p@p?5wk{53b|hAiaJ2B)MrMNI(yjsiX7tXREFH9gs4sueh(h%*3RCU7%O3x7ucY zsLUdl(!n-bzpRnuvJJ+q`gWk&DS?RSmJZIN+YHsrZTHRu2@*9T@$1E=5cu`39<^#W z0fX^es)lV2HM#hNfx`&Pg{ud$nm%NB^qir5m(9S9bc2|=@JloEHZ~UUmaq6iNrb35 z)Rf3M^D>|*v%#-7mu(-0AEr35oZwlmb6!F7>%MLB>ak(s6>5ni-RPGc>%5r-POTU< z=kjOk=Bk_x!In!RyODwPX}^#PeGKnN5apJz#E1WZ{SE!b zUr%^9eH|Z(-Lqx1>q46N_LtODg)qHi)YW>xtnZN~qYt`eC9~_q>Z72~&w@`|DZQ*1 zryg&H^hoDP?zStDAp1t&s_Si@Q;wvOoFWo<5a=4|aP)~wtaos4hp(oRY%xSF$c9zX=A%CR=J^*Xp2R3~j!sCq z^T!+uQIG)lZqkSmLXT^>v0}v%#ybE}_a7I$UpcQY-LXp5UmuIMM9_oul8gTiobPR@0?>frB+LsfgaRNB0sh> zYseT-X5y8ets6ie%mXWuO8}SrbIxIiP zFbuYD6RrHU(zh_BqU?`D6;18o_D)WrM)r>dKy(oc5GMp|I_Miwf>F2LAd%KjR zlf7Eet8!!rv?97q)dp41Kc`hQo%HXOZ8MG9@xWXZ1VtbEJV6qcAQt3Jos%L}ZKp71 z>KGu7a%`T>hWDB_6ItrSzUN!S>Jnh@CjDLUGdP=pfTRb^5_8dhP`of+uhYm-2#UR( zwc{aryK^`a2|{shXCQ`923lrj$r38EwU!i9X}fc`>W`+KeafNOOXLy~mJ%Blmjkuo?WQGQO|mK4LuYiIVyPO`cK&;k&63HJitZfL zAVn$S5tCXctMh>D6o&C@aW^$Ct!Ro2nt!3-_bicm1?=)cMVZw2@R5MHQ?Ir-g!?zY zcLaSCli7)EdL_PjuG}TdRR{DPc5fx4PIy-iqz7a-PM~i<$3tvy&MU;IDk!8;aHS}( zugR}J`qD2=-(#k9pGQ8=PK2&=15N`)u-_9>BKQqdiFwM+s2yO7Y!Htapp#Mc3T36! z@b%xwxuCQbx_3g!6@Nt^)8{csZvC2>D{q~k%(LAW%&?kD6cK`ZXS~Hq&3hfR&Bb%g ziPW=)Df)o{jr z5ii=oV>iZ57^>ZTy8S`oeAg$>g?*oVof=S*)kBT26o5tP5^%)}UGh^AW18yFgC2R2 zjMqD(-#yS{g-zPbTGIXhD+I@XHU8caSR{J2o!>09MSFx5QU346kqH%${?hP_{?~5x z7qb*{(>*{PNAV+XJRja76tn?2x^vw9eQ;-U9dai9D_lr8^;FRF1aX_aomVWOu9PAl zw`Z8JyJA_q-p_;i?Kt3fl4Gqe3;L-!1O{hyvWsP0$#meEI( z@4Iv~4umWjXD6N&q&N5_`_~v{9u>7872-_rd z8-rUJBb;90j2{e-zQz6+5Klvf;)TeUJ3&X8-z-2K!MVHDxlS7t51NgoAgo)`NAYDx zyjGpb2SU5#6y*1iyMx;qs(kyf;1Utv5O+DyUJ$buJ9kIUF?@=ZH{VB__07M0tO?QQ z+dF=!`h~~=Y$_|*wRqsiX91jSde{61xbkM_)E!%DW5lWkz)a4K}EI22b7!Xm7qt?#YsKL*9G(quzfT-lLmty z*Nvx=14$=;nRO(W1Rs7dc z=&e6=Uct(SN=}}SwhfW1-;!c}(k_%2G!9JqypuTmc>Oku_HUp$u?%$#(av$)3!fwK8lb-7l~Q?v-hwT__s2C2)>NY_uv_+TaULr_1#7 z5YF5vd9b9B790QuQHY6GpXZXQ4B^b`LMPZ|gUb`@phI!EZdTZR7q_54Sg=xSp_tEV zY?ZXK;O>-=_s~`Pf)Y-#;-#@0sM!%K0=|7nkbXj8(=6o}@wzQ<*9jM&OS42w26@-e zl7!ks8>?54XVScCa@q4oZGo!aHEo8vOo@|axKLU^BTbNZe~W2L#~6NQo9lmfO(AmC zFo6&K6)ivMEAXH;T)yI;*TY3=I=L$eZ#oZgh600R`aqg<+HZ=E1o6Fsk86k$899zi z#ku06TX}iKOr+e$@d}O>p(te^j%#uYi+@#PIAP4I4NtW<@E_@SNIaLhEtz&D5iy@z zIa%}J3bha0P?LHV$a6j~8=tJuZN2PVn-n;~^gnBJG7|mJGPs5tJ?LHuzXdE`Qz9hU z8i)3V*q+BLRs6e?Vq<5G!RGY9#SX=LiO}ozNt-!7dekJNgYlts<2oe$B;xRBlJ&s2 za-^uOW$f-czA#nn-Mlv-3i~)bcjj}mBr6dez@RsJAv9ZvnTQEN&pW_CNbE6c7Q@mj zzX~)&M)dkRg`fvap-UlnnnE>0k8($7 zky2e{=hESfn}}&PY4(PUrf2&F8BU)UHuJ5I8hPx((Y32W&9w|T3%d-2`zvNgI|~MI z5nerbG<1@!l#Ue0E#9rwOgw5k3)KZvND5%TZ?;8(r!$~RP$f#+-2Ex=mDg{AKC=I> zXIKd@onX_ewjzi$u#4>00lQiZ&qZ*61u7lQ&;O5G9iMB{5IC)_?os*{D+vV!pGK`r zt{fV0`(jw^a=?{7Wg0a{#W9glbGd#HJ=S|j3JVPH(Gx&6tWe3i8_j#N6L{l4!mBEX z0shuiD5TjS-S24)jj_&&v44tPf=daHxawr;J_Io)GEYZD#Aew3dy!F4+n;*#m6_9_ zbt(2Is5D_ZTA>y>9(>k)+@R0@sr;dl?pwV@sccjVWC($}%4|i_t+OE&W&6&jbX_?9 zz2=Y=p+%tznM*%yN9I0{9!wtFLiPg&)I|Ov>YM}S|rRNKI^ZX`A^@c52ZUv{SZQi>`X z{L)VsMu83#D9Cz7W26;}qQ#<5Af}Dc)3$nk4wbPSIcSP@8f9bXK`pm^kVq%ipuQ-P z14@m^wv@f@a}{+1oETH0631d_f;{)BMc$obyOoBet58^x+R037HLu8YUIR*Y4ob=55wE4&ETke0#3)k@9JItgg_?SgUg@ zZERz;YphT!k_G!~>}EtvT;b4Lyg&lUm^88L}nWCI;wY^3HsJ(9@gR0FHaP zcAABwKMQXV&jf{v&}ib&()`%&5Vt%O>i=rZvdF*$1YR}uPHxMFx9}=Io0IK`LX^iF zSF-z1l#Ir&&RDO2yrhd9T#6^I57p=7t^>Bagw&176Is&^rxOu_@l}V#h)U}2X`xV< zKU{Va$r`81PkL!i+l8PnQ5^JG)bi}N z44?Y$6mC?t;GoGe57F>CJjotaL)o&tfb%yqnqo4F(DNB_)L-sAh~lCHtofg3F-=a7Qkg#K^Vps>=cqGIa)4bSi-SaI6*Q?|uW{f40fh#o=8oZ$XU~m9zDL6RSj; zjPx9NzLKEeDHOc|J2LN!#vSSq+ay;1sWzysZhbs0d5or;zgq_j`6jm{nKqjZ1~fw& zsa3_jpj&e&P+MmETSmaeoHghHIE$JJRRnytmN7_fy;X8X<~u=^ z$Yp&xY4mOHw3Yid>Lq59U4~i2cQMcFzJl((kq0>y#p@8B{e2=Xo#1E;)xRY-W)2ll ziF4poKoj_=SyZ@s_FJY3#1Qe~x*Ys0#VK)Y&*1-I?aRZV?!Uj0qK%?bQgREGtt@G5 zqg7E<%FZasGFity%#cbdBwI9QltkHg8D@x(ZDbq!WF7lpm@#I1KJMlF`{w@r@jTb{ z{8L?hX1ek|=Y7uWobx)bPwUEni;(Y;Al?s+F_6_m`Y2_9pun=i=1jCtE3tr`9Cmsv zF;O}!BQZY_m^99p_<_YQMZWq9G+e}aEkvbZoIrKn^$Z35qwKB>fJ*UU@^UG#%5|8z z8Xqo1-uKTGDxME0?@Zwoif94a6yP|50WOe42EbN6eI;}~Z~6?nvFrB>4UncbT8{`? z+drF2e@|$Y-U1FO_NqT((*dq;zx0?rBep!XFy!#&_a9iqoc)v9I~YCr!X@D4Z9 zozBM3Wvi>WVdu$)%$Go+0jz`kRQhX`u;@fS@cvk@J~(aeq~|sO&lVx;Eu=R#9{L>m zfC(eeuS`gJv^5e=U$8l!Cs*+*P{;Vy3WWbGT93nY7_)gVzo}EpAIRMzEAo3()U(^N z16Xj~Hh3rT@6`5p=-|JdDy!`{dz+PAh6CPMh~Okx8JGr7?y~V-v`dj8?Hq2rhXw~0 zM-dc88s7s$sF4DDAJ#FnXN$fy+%HKq1=Kn8txxlh9_pk!m)60-7`t#@9!8ebORjrFAekA6%DSX25b=y-Yx7o#c(kxS{Oh5_T*|afYbZ&=vxn#E z8wx8%BjKXsD947gFkSIor9yI-h9WoS9oV~E$R)_O;-288HUv-|GnwNVV3RftF*i-02jFpv*gkc4d_6T z#YBN^UcFh8s__bNs+(Nz|G8P!EO#8!;Gk0q_d8U=t_~H^2>agXjFy)XOs)mE&ru|j z1a*8PK!G|lbb|@8SU;=0&lDZ*4?jG%7)cOj=|xb?Gu>Z+v9s<8G=dHHrwEuzY9|S2ih{>9+(FWRjO69|NtXSjDXYNJl2X(LA4x z99eE|dW}I|%t>0T$8f*?XYg;Tyy2@VKY&8W098Z0#MHMB>Je;|U~j}0fb8suqL$P< za&L{9-Uz!z?!;7I+0fLAEPj{!^!MC@+E|-~RiE1w0nWYwBEVs14V#_6SDNR-tCNX5 z&v$WPDBqy)@P?@F9|CDQV*qJ!1waG7)&&U_vl3b5c{GeE0(b_mA>@^s>BdS@p#C%tMv>%L#5_m4P^ zOjFu&Z01z5u(wd|4A`O2|Dpp-I)&!#}}Xsrjp9;IWYCch8;LsvJpG^@r_HW9|G z^+G2gUYvb98POUf>yE-aU?HJJs!d}0r4T^cb^8KZDJhtply=k{z_vI?3Dx>X2dXKj z*cCe-OEL-mSpp1i1hjG$JaHQAuDh!`6u<9qqI-1mRxL@!og|8t``Uoa(V!s!-`5T~ z8U)$XAB#{Z9IFWGwu8Q_S0gKOA0d*at^`t*8d<-w=j|Wd`umPAzwCunS-ZTNH!AP{P>Cb{+U4_Nq+s24wI=FF$;BSQgJ<-! zje2~Q?4r;8cDiQO7R zOoRf*%*TgAniYy$g3K8ut~uLOJw~)~COhy$wi~#Cd*4h4pM@<(QMf2%YMmoQ{T@K> zjY?Qmocp3KHJSGC`)CZ)fLoI=0}%(h%eP|YVee)+y9ixhwuRj&VYj$*Op`_(B^lNc zkd^j}05cltyzlQ^VZXN#wcOpqZyqKwTVPF2lx>}5cX$H&ccG;Kaxact`8(YH6GKgu zfwSpyf4^BW#uf13{wsn1WT3x39{O2qW2|Kch!S3-2CuogTb*s?ItvIN_}JhJKyjKA z1rY4`Io!-pE>hmQ({VQDASopW)NV7bN31dYdB62DWm#tqbj&Neh|xS+MTG$%RIENk z3xl`;@|uD|g%~4bHnRg!%Y_xz<;~!->qtL?v+IypxM>9U2Hhh9IJ3$+tBPb*Ti{r3 z4KP8R#ECc=PP+UI97*P695!GchAa^cSdSN#fT`Nx?!G}CARxdSu4v}pq+l4C+uOf$ z=##o8P+9MH(B02pqPdmBujM5D=Tzz1pjR*U*p#jI2O?8&WW8xFNvYp-RIFQsC;cBj zAy8<_>my3k`Rar3=B!3DS(9@4F&nBQ(v)22rbQ<%u-(Q}_J66a2b`(io1y)nMWTMV zNemUDTAHZY0H*+r(r<0@&94B^dD4@X7YW_t5E)V*#~7x4mG?{7OAQxF^oK`OEEHq` ztLAEcM8~ML%hdE{vhA9N0Sl{v#MOy$M<{V?iNnk{B1nBYQ>N`#V#Qd1(_PQW!9+e$ zLsjlO#~u`2Ixol*MCu+uTaBugQIwZ<(t=zgR2!*|aAh*sMR1pfGGvPsd3IurjHnMe z-;?dsmFd4?f{8lha!zcl3{3Cu7#SY|>LOh!Rw8L7xq~a_j?Jm774flIa8%p*7oraJ z+2b_P8;!l9H_MvU8;#?Cc;y%u0ag`T*j$DyY%D$+V&^S?gW`4%0f7FtFURlqiPULB zJ}CMFb8%qUv?GM95)K-*t}caBayT*4L)pB0r~p7W5R&+sC($Iq-k{OK{b-LOHM$G8 z*Qz!<#*kS<)5)E;atmQHs zUO3U;|5Olw%3ED?Y$1b7*&Sn}P~U{LUKr4InwR80h#)OK+mO)|yA*{eC1$nu*A!oEHgj-OaI&YgE{(~*uS|`Am0b5qQ!wbyXJoo0PV-T%K#%;(w zz38vz#;a?;RxM1vc%s=%x<;Ur>}g$I^*yGJSU`)W`$juguFHk|?#mKT>f9Z0DEJ*1 z{bB(%`8lvg+CNwQugBGQHV*iI{kY3x8l&~r6~GfGiHSYwsKw`E(hK*4&ME^7o)S&K ztdR+gTD5D4>cAgTP>53slb>N2jE&X&l%BXrBcK+(HqQo53LjA#0}4r1A&C?7(R0H# zqq{8K)49uyF~EzHHSYtWbH~?kly#2wX=d;o$PtUdrI+OEJnz zbmR~Tz(zKoW_NrPZi)Q zT7Br(^Q{bu!P6+W=`qvq&w%E^!ysxI5+1>2xR%BLsi1o4f6$Db7ymM8EVf8Rev_C2 zf6s;*k9wNgKeT|q$t`cKfuJbs=brtWh8Q3NlT_Vn;wy<57%=GZ#QABHU^qpuVQgbf zn>?k;OlNq@z?bdqEj4YTSG4^cf}?}g%4$0^66a$9lEbaEUop_!lVemJTC}yFjdS#? z#f1-zp-8p$#2UkzUiY`!BhNi2S>#2ahVee=)+eHGDn?r%yj7y$S=!m9+w@SmTB}L$ znfJZzn1FFux(<|w^)i$9rtYAjw0(t2;@@6m_-l2Ej_(PeQAnhj4=L5X{IvN2jnc1< z_eKFp-CUZA<9c2;FbVD-X!w0{cI@=ljV^ADti>ipQ1cuh*JkZk`+amKcs;cG(>1HH zA4AyYHq)Iw0DS-Ag9{1LV zKTDEEssLLzQnIj07;fhg@;a3zrrp2=b_Sj>G7I;34l4um;V*+BO_6Z&*Zt6?^;dIqq2Oa`{A9!a8g0piG`KFiTt zVH^2NWxN2J_OLGB^zK1xT-pk9eZDNw{Ga9#9+>#EtS;pFGny0UKV11!>n7Xa7-zNk z%hz3-esX@Zb% zC>3&WJZRJ+?HH_FwE?TJuw?gs(%KOPbem(*)Yc;)OQDH1w>@|Hme<46k6$Ea9lH5Y z5_!5Md3V9^BS};aC5J$>_6+=FR^JCE&z3%#J`%VbS}AEsH!SsYGy(@yo zEe7BL7h$)kBSdfoz8F6VG^|F;;RXW={9snEeKX`?5F&x1&B*yms$JtWt~HdpzGJ;C z+;EJR)apR;T3$lsU1_@wdP-t9n&8h@w4uLLR6LLy|63*WaDy71G!!WIJAec}&0DQ7 zUkd$wR+O~A{FgcpdbOu4L9H{KL@Rys1Z{j=g^Yua51s}3E<&8iR%us`UBmu#)j(@$Kzj=WnGNbgdj>j0AxonxAgye| z*2^e*^Ws!YzkOXY&&D{S9vnyy6>)6iew#>)r#TBFrn)|RZ4b-buJW7`yX>&C*65@h z>sp=a!=7HPjn=i?x6C{Z-L@<3Q$w`tkY)W}N*^qKK;se*+>`{JpQkyMEp1hJjAQt7 z7)}BZ|A?NhsI&z{sIOiJl#dvcc^JLxUo4)Ds9=Ki`Hx=M-?zwgLpZT1XXUSM%75~d ziM&S*l*iiRb0cWJaGPFzB#L1g6CG^X{#; zffmQ`nx+*Ih^qbENA5$$L!Z{33nd^Q(x)D*v@9-hym=4}@T~g^5@oo-6 zVyNNhLn9>GLy4v}*5c`ILkbF#RH$bO55w~nMmhkR!cqj5a?(?|aqEhvn$Y;x%XDjF zH9tpSF&K1+JZcRj(!(gUB^2z~pzZ=F3$;wUr+iY^g^Cor z@U={kDE7QS_3~00a5miWd=_37*VWAZ7vb0vaIDY6x-U09kl)bl2KL%Em5-kfJm(+V ziBu#6&RQ8JPyeY06aO&k=f?c{vaL681KaFIUK|O?tfT5j$CqmbSJYdT#+Ap{+Gr|o z1!l}vpot{Wjc^+Xnh$p|^($>yR3Z>(@I7Myr-s%O2nVrasDn_7O?%MMlb-V7_-q!wC=>kpR1(sOe;v0hmq|1K8zKQjba&%3gV^MO8lF z2XOAI)yA}#F^Cn`4MCmMzB6iU>*X1NS*i|`SqL6Bn4PL|0d`qb9D_QSA@`DMhpjwq z?dq#|J&)mp1L>XCU9TG%&>cb7aog@8km{f2x_3Qa)%E{1ta;I%ooMUlIxl&v=%L;m z{a7wJToRt$@)nfgPSUj89SQIdfZ!#1Jl~OkF36R|gU#TD+1uNbm6_x~+{3zA{K&Jz zO(*H|1AuPJ|1bF~1&kh6XqVsRHu7r0vs)PR2W`mf#2^ZrwZw!qUiFk0(3Wckn6L-w zJ+YwqGxvZ+)t|_5+FQI>eIR_6AiV+Fs!YLP&S8J#G%%t76%< ze3^i>O*#YRQ&8$k7S8~)lRCJq$k_n{*2}UX)6wfoQE`hM^d-9z5a*pZQ^ym;J_&Ss z`p~I;xE{~iBEO2p0!py%0kOb~O`+xIEt%b4_Ik*=e5+fj53@Z;wfd}IfZ zu*>cHvYJur4qD*L_JA5dVh<}V3Yg1+t&Iu*#O*NFaRL}EScKl<>Qv1=*rXfB6Z-$G z>vY;vod-Ab>779`dE+uaXjQsmGzHvdu|A;la{?IUCyk|mMu5Pd1!xrHmc?(;c7c!g z(!8F)cyky<+$Z0^N`9?8Kep}_v|tA0Mnad#qkikL=RhkAL0x7e<#i=7oC%1Ms&39D z8#CQkKWYBw06|B=+h`TigZ?01Y%JKl2u%hFqH4MdOf3NgHs&mpP}i_(aXN9Mc$WYm}}gyDsJIdQ#Ac^eGPra1Z8~Bus<)xmfCN!O>`VBtFPGWrPPuV;CxcBj|k@g zRY0|zr6d>z1OSCLU{=cjbnddPQ#r2A6JwjxEdQqsZqUho1;gKv3NIgdqcQg1I_G}@ z$4^)7I``$Qo=mh?(2R?i{-$L^7 z!Oh|Qr@#B)UWtR4HtUmXD{ZS2tV0b!azcYvQPvgAWDzo*^6C2w>?{ts%mlgt-%bK| z{W1RrS}6T?c|V61CzjBa5&)i}O^3!$5`5>M##Mp_D_H5vTo z$RX7M8%%>??`@ly2Ge`ru8H$Nd^&H)e5O&$25-MH7n9CVg+=wiSxSXlLv-YUZ!O1S@@DGiDc*!0&!&2o1n#D$)s;E zR&dbNTpUO0m4UTw#nsVooG_8_?BkyINQj6qHZCEtkF$+_mAm{wRYu5{6O%!UO6yuZ z+)Z5txMNQO>!91>SV4-PWJA{XN`>fA1=mRWY>M*mg5%`8?l5dwhYapsm<^a4t4cY@ z%P*^x%Jn_HSo21QQ_nhoieo0R?hCBdMRL8kBExP8|091>z1%zr?}wq7B_h*9bjMZ8(Bo*~D77jN!-TCEgs~ z(`sKp<25XY#fWOO0O5=byl|o)#E_%TD)~*|I z@fxg4#}V%_l}{@}(F(f-7n6A=o+iU6Adao-vHm5^$`^$B_Um=s z#O0mGqg?p?TLtjLwxX%69Kpj=oeZ<=j$W_zs)r#&{>)Xno|xPP;G91hrw$`YOQ;|M z!#L%0G@bL=7m|m?4rCm=!V_vD*h|Va{`s=@pELi@Nw;_LRq{B^G&fA{{cmdl#(Vpg z2hhfuyrlfQ9eMeaEvrRNyj!>C1XF8gdwyJN=_|c4+TvvmYnD>X=|TM*Rbso9T|ax} z7ibzCcJ!IIE(KFEtCf^F+jfQ#gUU91#reYxH!E#=-J(?)g*4ypA`wG@zZh2Ep%* zVQY}D4^vv`3(ZQgYr;5gaKuZ~+7HFeF1Po&Zh?`T);yj~glMe^4MEI@)5jF$Na7by z%uq!QWbHs4bm!5DM&bExncHJJj^KEEcRaY}K4IFpbk^Tp2tH*YKGGcr>CCe1=bu6&}KNWq`%k&6V>qc!{uwQY&lXEh=cW*Xqiv+J>Zwg0L%X>CwS&CX1Y*y*CG&gM9 zw_-Beb8Rk^%!0!Ukl3SzCy^a+t1OsO;M6BBg@K zFu(Emgn&-b;X(g5pyhM93;8+IeAt_RO_kVGMQ`B$LmJ2v*! zZ4FSqk1m4ywv}uP$Jho;i-13Rx~U&!Ay%2!^c#LQb$dM`h4hr0_mMna0QJm)NE78XDKp&TBa3%Ayv(A~@B;a%4lu#SaryQC32J&Lxv| z2mCCezDx`z`0Z{wdK)x`mR;Ek33J~ z&9W`zcH-t#k@8DsNUD!WxOS1bf&UXbg4IL_O|na3Hv56`+R|7D7^7}D`t5wy$@cej z$AA&Od1SSVNUz@5m2#v+OmkxnHF1}ZMAUxq z5lIyAHJGD^LGa%!TVsed@r^Eg$Dx0CM{${^y=7p_`;}WJzV9sQbE$W-PrqMpn}U~^ zLnt{_0?RGa`^2nIELm}wkgKc+E*X3cXh!o1UXRy%h(`u|kZmGrxW(lJMB&s-AKyW` z)0aLos@ThycJpH}KoT-i1d@>745IkIv&`QaW#=MaYJ~DptACmE!^RcM+{gYcX#tjX zy3c#V1NB%G1YD#y{0cP@tBT>?Q4=fR61S8&FEE;PFI14z3iI@ z55*iIi5iG-N6YXhJ@@$=1$WgbmFu`CMG~UEINqtXE1i5T_AGkl#aYNHeSANP)8e(V z>X!59J5*_E;X-ebanu7tv1@ZDr#a{J=Sz9I9FSzQ*TXN=oZe z0fL=@kMk6*Sp>AiAu~1Rf^_srumux2%9sfo>PlHy$aQ&vMx(#18~c#2kVtpncd)i4 z^xA_|CM2SMN(Cmo1mS5Jgf=Hh{TEi)u;QW#uPqNN?lE#x!qT&w+_;jHwpMNbx{{b3 zuQ2VbPPbL20AYldWU~Fx#`PoaT4dbzbiSMDeR82)!icNn8$e85p`+$AW%c4g<0=6% zixTecbd5H@#~{NsW?rBBrM|WD(-VqZ2@;a~2tXE`7k8oK?aiD?cNxwM6nSyfPJQd+ zZV$n)9KHt)C6ju#9W=Z7k=}bY?sU(H=7!>jdZjRIu|8#=mFInZhk>Gs;iUiIT+MMVi$B_>j>gn}QcUte}uhbQiS)X7k2!mcnHeWSSW+iqpz z$I-E~>f5r1po0EJcFlS5}LR7Xl3-b^x~a*ul%C<4wHBPX7nX{evsiiU9DC%$O^@Jl!U7=0!yCX7U9g!jqQ}7!ln+)Cz_V7k3zKy5y|x!G zXh!c}L%bLRf3ppfy4xvL>@4KxMre4)ouoW4qk}1bMEKcwgw{zZJ6m^P!hWd>3JDu> zS&Jqj;c|*(&X0>7=p#gNp08lz$#|cT=L7DcCcDP|6>3HzDDTY8 z*>xQq9edRN@I88V3V`|Y3f4U~-xdJkS%--6+(7X5>29{H=w2YVU5c9u`^VCM$5_4C zoeyHGxLW|MehvQ_6~uLe?IQ-%em|n+bEVm073E4;io(^pg6h#!3TRTl^ilV!qP#BU zFj&8b^vl1ktZd-^h*9%TI<0H1;Q+L4DRZLHx7Y7SSg=6lBTy?2amuKB-#I^uZPMt^ zr#oeI{qU1>!;6M^g?Yw;jR<`Ai$ND2z@tfEO^XTD3Hep*-0*@Y4i*mJ8}jRN?zfQ0 zGUgDhg1zntBR8%iX)PIsEDYESTX*yUS{gA|?)^i^DGJ%=^5{twycmBezM9Zr&rshX zMbi1Gs$lh{fDDi>_LaDnkoy)WZ{{BV!h}!49`N5S0s(z zNGvM%@bzKRH+CT>&1|y?W#knmbv7e*o%%`J4r#l_A7%=xr$`Qv8c5u5-P(`!h_7-! zXJqy5-fSJdPfeVsS0|_C4}(^I@^uE;)jr$ZSsC`j2GW!hJf6h?c4!3NILP zW2TUJI8BW9kI1u>&*!&rY`bLLAG0JD-21ZHBPrMnETf#i=(BkDxV$z1Dtu4a*=Tw ze3I_&24dCVVeaa@JD{cvk+B9}L`@qwiApINph9}H)OA<{%n2GpL5V&~MM+TT8Eo`^ zxoaWtFB^Wk z1K7}{srCM57vO z^iu0fb4}YLTzikwyG4Nf+8S+$CGuRIU^!MLQ?2q*LzNJ`YOq;5${Cqf6tHx^FIs@! z+5w2MdYL1Go=tjC4!5IvN5+zC=c$Awbwgo`-OmzRN`0-kBLOg<%FCZ6s_nDX^et3N zT?;jzJauSpNRhF^-5>NNFz9Unda)Hf=7U^k)huYZD@#hoT8fudlHAGiY?lZKhVf%Hr?(=X3xr6y8AR$ zCD0==yWHL1{C<}C{ry50%w34&maUex_TD44DkQKr_p1mzb^pFoIWG@5CEmj7_KP=d zS%+Ir6*9HX=t`6^v^2e+I#t@bV_9-99#5@_r+u4IN~$54i5v4LP$}y6+MFXyofgHY zN%BUxyD1lXCyM=S_u-l1j^56XJ(BQ!`g`?KkMgau2X5>5)=6wO)Ulg>095HpiQB%} zQh?T!Esxr;`aS*4-|4cc24A$M@(H+OZ*&;QWVWCIK_Rk4+i10rPR6BHUP3{erkcL3 z+|C*pr%DG(Oy=bb`5?E9fw&MQ=cuZ-1K*^Z6MnoAwlYHg@Vbo;7=OD$IhPGAc-Vu= z=4m#IVm@CQ%I38e6C3B^P=S-j~5?~nmmA_p?eTVsW)7>s@OA=Yw7d$f@oZq>B`Sg?o`HVvL4f6A0z&_lgeIL~2mU(qZc0^Ke zZIWYSu5O`kNgYX(8x%poPJu)um0b?Kk=tpR{@!~nWJP%EyyS$n zg%ZpUY+KfdXmsPNFzzRk5BGiXGrL0zw^;XQxi?-y?ib8FX+K(gMPF))3X;zx{w(R| z8r!m87Jl>5T3ttuRKh;$C|IQz=paV|2tB^hbBN_xvtHy){a%V=J}Kh_nFM5Ja_4|g z$%#{R=TcupC-eoLHeIHwdF;xhDQF<}byS>4Q2WIJ(35qN5Xc z=q^zuK>R)Y7T7o!zntvcmr!?%)cI@}+3Vu%9*XU=_%Gdmr4h#b&ORS879?}PjN~hTzF(M0fJtp$i zRqf_cq2|8fU_I!aCtCxN&n~qg-%YThAFS6^v9e_fF-35^oaZ!}DWkjRz_slC>KEEy z2uQJ>=@T+JEEF#P_s+onSX;HW@y)lYv53*_=wu`i71 zLKC|M_vob_;Pv7_f7&bXMatX^M{(;l-#ZUSvV9&T`_(RQw$icFCpRp+&s6sErcOX= z0lzyw=cY3wsB{ZHtusMQ>(av?gtg(8dgjia!KpCh_ax% z9_(nn@HOs<_W7qCL+bq#R7lU-I#iv*GE>w20{Zpdgg}1b9&ES{S=xGpJ5Y)N0ZO+X0wdBBp20Ln|Z1@I6p_54h=b8S^_Y1hcnf}!O0|-W4#lCBd;gt@T=||Bcr8ScSLMml1=o7i77vGA;wa$fJ3FgkpwDo z5LT___~W%ao@x_8K`fq+DEW42f>uU$tn*^Ug4jZ)vsCX#Eb{ah_h6GYxnAnN<+Kit zuph!`H2tMF$KqX?0TY7uE3I=c7T?=(E+#cw@9BFTl`ob41$9z!iaq(2{_iDD%t>-N zF>Udwl{b)ti=(VU-e81R)|tIPpH5~60@!&;DMrrEyC?RB4c5c44d3ek=q-2UPYc>< z@;5Rt);^q_AwO0fd^Z;=;unDQyW8_nFaKr?94il$F#r2ks!bke4R^gCaEtwTgV2c5 zI-Lr$Z2Lf7G_%^GCnsD(rc#Q@T7FZnX-lwj9Wq29Jabz}p4nVC>L%ecF3a2cQ&0uUZD=bP%&= zT9**@phN>^H+2O&MV9j#G*r=i5>QnYShql_w1G-Ek(=24cpG7hC^zSH#M`QJ`wUu{ z1QL(eZVUHq2Iv}PS5bWk7zvX@cHgrz0mfZ=>e$FC!?SZl$iBGC&XMl;6d+DUpKWGH zmWcD+OPFMFr=yR)S>i6n3LHm#x+GO8QT8BZ`dv8(A5 zXMMm@`aQJ+*cgK5mR}$BcxKDJd9<6hKT8epIl3?MNqklbR}WL4kOn!}pEd7`T&I-y zMx_-JJ(d_jjY>?ayG7!P6Bg*fzOr4BaHf1^?TBc0V2dV*^Lzv3*!cw2BK3@ojXURj zPMy`<3gUjo^WOOGe6~fLL#IFMJ9v0==aeUOeLH}J5eY3%HkUHBKpP?Tp7QR)7dPK@ z1fT2byBRLV*$p%Cz;Y-t%=I5FfT)k;DYJJ}%2*nEAdrzdnSX^XDlm!i%UwCR(0ANZ zC7lQ}ckmYEY@6f=RUM~OI#68W$>dmTCCS)B%BvKFAyj5@H++t*L*t-t#k$ZLx5v1X zlHPSts zBH7(LxL?Zw7p+@-V-%}M=59F;eR!2@&^|*j$tO>1kd{QG*0Z8HU+W<7kpK}$RkaIG zwzd4cln>IP4c?neR5fpnI{ig`Ta%$!bKtETJkB}%zW6{`iD!aU8z+q3ye|#fo#uh> zF&8x5a;%8DYA!4HSN|sU{8pf;z&-qKg+x@sx47(6&uqTq+RSCczVtX8*?cSayuASA z(d$xY4L7%iPTOq6XQhCi&GFf8$5yowmfC@yT@7bs^C=(TZQO&><2OC+!s|*VogT`Y zHU%-zIwEi(?}wna?>@;zC&T2=_hf;-K$MOoDxo`Bb#G)kIE}#64B}+|DPbb(GtqY z&^MAV6TcAe%Q)N#AmmSL$~=Wt&ceWNpV%V#|Eg_dAwY1Ab#K|RIn7?jZqzpa`&aZt zo#gU|-&?uIOYGQg^okBNiQdyt_aUA2i3!TFN70=Mk@j0@Db%2hiC3k5jVB19x`hr| z#pHxBOu!AE<|U;lr?xM6&wz3h*f)qZT5)#BqrAy*T&!;FPQBq58(*{SmH39wC^i9c z-Z7}vM;ty5Y8ghGQ^@mt3UgKZ57)}V!jJ1BYm!9ZtvjRBsS&Adps(KnRlCusl!~oz z^bUFK$04ZQRePDnp6vLGjF5>tR*_*h+YeW};|CGK50|2D;+jYsFIn|`~4jb7v&m0O^k{!Zx3i;r$R6y%=OV|`G9m0KKsHz6%AM=EZ2 zkUoZHUS%|P=K&~WBK@VqrF%|!b?;xVRh2L*w>>j5jhOTPzyW3~l(4CH;p3xdeJ! z`qbX|QM|MT5?|-Ht#umT<5fsGbtIAVY41_1!b|=ZIT672Gk<)d0 z*>glce|F$B*s=LQglcn=@~(w9w2qm(fG0nKe7*4OIP_uMm2@O96pT;2Qatow&G#^O zn?X0vBJgjM>9Hhk#N1SU!_n7k_-(<%2-=nA54Z*KX~~I4%x(4HsvbDHzxd$~nxwlZ zK@xEXZ!gK=5I^d~tgw{MOCUCF zXz^w{B`{j6?~*thJ93^BAQ8aYp5#FLO1`T7NS(*F#I35B4D=07McVTVw{}qCAl_4{ zE80Z|DcnXP&6mHZ%&JXfLD+gkLLW?)4wX0HJ_i0L@W9$^zI)CxGjaWy-lzh4X79) zL*%K-vsnF6Zoe~qY;mu1G#}hHjpib3zB^>O9V~TGc+|X?Bb$0&u5M<8W=SJMT9P&{dg+Tanw0EeLIYk6~Bys zvktMyO38b_ZpI{XpY?0M`#1K80I-MMeWR6)$^CyDEA{hMpqA)LjBb_QH1#-rhWAEh zN;U8b__v+Jj5KY>POm41HuC96Yf-)AFtXibSXhUY6)tG-9H~gZ-=t=7vLW5jGiCBY zU>i3v4AD@bli5BglWf1<&fCi1PAxGChtoB1`lBbVI(+oUl2-zws>mzrkBjXP8m!N6qI;hrsLI;p2^82|=NCHMhM=3cRrEywUTF zMuiMrI@w|M6z2SBN7H^0_%C(7jp@V5>@L(pr0oV8x(?FLzc~6sNXT+`6lti+Dq(Ku z{nBjhZD(%ZVWjcsiAC~dNs@s`N#w79+pnhrI>-SHq5>beqNH_<2!>h-dF}sWy+~%b z$RVrF(@y=U3Y-sHeC5W$d~ja2>{D*Q*lc{+>g@Z{I?4CG+;P*3a^|}qmr4$1P~AJJ zCsFT_woZz`|5Os6Sx@2a+>j$bJ$$i~r@?W+ z-eu7vFaqrKR4|1}l4dIT=Zo{$zdA_239tZ4{WAUHs6cb`!Y!morRSrDkc|NPi zxUe$Py-xXZb4cn6+`0Yx<_KkXko|v#H%pULEEay-xUvVuwrnt-`JrAj-pwBH6GiQ@ z`ZveO97s+D+x7qZMr~ZMx1Jku(K9hlbhGh}9cX_-D%a5znP9n>q3oOcR#B6;i3UkU zK*BOq0zwmNS+#y-%IGLEX@RU)8po}s0m@5F;J1i(%6KK2pO#!oH9{o zNHO>Y$^#PAL?#@TSvquHTY#GxaNO%zngk-x!lPx9Spw-YDIaSVmn@<@CX|W`_G?-D zjKL=wHQc$Wbr?>AvH{D{z2X|si3#uf`gnpr1E;k>HTIiRKT~+Y`xpAvW;(618}V22Nb19x*&lOTE+a<Wq@pw%BJK(hFS zO7qE83Yyf7yH>!yVM!H#piQ0#!&~`uz1BsKI+q%{{TTzzWO9rAu~+$}W;qu@})) zh;4=cpf50@du7?Wmq}HC6j+99`{U~!`!Hht$**>l^c=jJt0(Yh7)m8{e-Zcg5jRi?;~3i3{rbrk%$ODylf*Hlx&pT4a~k zL&rYFDG*nqH^?u@f(%yqu=J=E)KkAFw_>Tv%PFm!fAOaVXSOVzE0EiXf*FHo=G)93 zOV1LU-}hBji8x9J>IPsJPBbwRe@>@X+UsdL97z$;4<$v@v>VvLdR-TV)($szO)dj|dYwmbfpbhX1bGu+KHX~y52}3uU1tqx} zjxT?I(!RkPar(KF;Jhhe7bk?s*kS5_z>WO>kSjcwe^Kn(it!{%*s={-Qz)w%+~7IB zBDAK;`)$8dnG7Ab7 z1YAELuS7P40PZdz>rpBw`h`zha4yonHn2B^*L6Hs`>tdC5y8+4wKda z8{Kr6ImdyXrfEe#O8)m+P_G$a&YTAGCS>$v$JoM{OqpEGe2Nkos~)cQWqUp}S|LWU z8}%zFy3~+-=J9go({}HacI!82+(B(Qrx|f@d zX=Ssgo&&%I{gywrFOU|(KdI9sCbOGRUZhH*)8d!yRHPXu(U8OfVJ_ICe((0kD5^hqFPYpks8%17zDT;2)LS_EnATl;XV>CX3+ccA_+l4QT44JvG((_z`8WPoLj0`O@#7|@X=Uok)8Er9V0DPhVK$e1`>@o5 zq#ff`3ANV6rvzM+OE8I5r$X{xJ83{D>^`Ps>~_czbe#XNeD0fbi`t*{<8S2r`lUsX(K~kH zpBIY%K4r_lPr3MPYij3#MI;h5A93*c@8K43{Q7OnDuYpAqm9^>vG*>+;Pgwc!ubGjq+;V9Y&Aqu;?1NqlHM#r zU^ZZ7gs7|QOWMwnuL8lw2&OexKQC^!U@qD3TF@sp!=rtHn+Xt1$C+%6b~$Re5}OM2 z06(S3-#QPqyflxfMmxIao+XnS{)rxk{*E3hZ4n?jrC&(MyS1xqISN>LLN0lmI!*vn$LH7`MM))_78*Um{6i}OXG z2z_L98r4FrlHm#Ra!o`KHLdQe3q(mKa@?`gvJs^9rT@d-n}%6w}+Rp2MDgo>&(3f{&gSW)hE0%#!4%$dN_Ou}W1&!T5 zJv1So-C;Sb7A)M<1yeYBK34u9jI(1jxQb*-mYmkoNL0?(j_1T{q|9E1;zARlpa^U8 zX(6tSv49B-FrADd679;vL~^>;Oom^Dac&&1oFBh_2Z1Z``8@c%6)YA3N38{hCS|_N8aKX_vZo_--s##bH#z zo}CJbfv*mDecBIC=$vL-K{hS6wp+gZ&xpZ0F5oeYu@BH+5JinsSn z`Y4q2NF8>xtl|Th{rwu0b_GLM9QQz%W3mMl;Q+V)%=*RJXXbw6WrU2o9RY?oRQK}~#3>dn z-`&7&A)X(zIov$Z>3n@s9Pc;HC%KCLMPpMvpL`U(G;9(}h`tOeH`aO3s4uc2O3S;` z2L~-0Uzes^IK7&CG<$G@EdP?ZDgbC4)&b0k!HZpfG4KE~VJou7e4h!kBLQ`MkcORx zn^Xi*++$*~RIQkgjYx+<#K*N#F6(j0A=V*>&te7UGK}}UTx=MP5jHsFF}c$I=HT1& zUBTDmV>J9448Yxq&`bVVWbF!4pOp5aY`doOo)YheLeB_Qzl*NOe8-Xwp8UEU+=Sp@ z6j}#D1Uo01DJ>n6@ge51RhRmY3?4$1*Cw3{vKf0@1b+vTt*E7P@}2#K=^Q6G^KKDi zQ^U#Rj{PCEb_Y1h-WaVRnnbu6I34A^brn1~u~wTQA48T{VrHRLWtilsezGs3*!U#^ z9p6RyYBx;TBU`lMqsP^b2O-~Loj0q_G}j@I4q}nGDJcfE7Ym~G#s||#qYjfo726_N z{h)&fZH=rdJAAv(1cAL5*b;Xnyg2$g0yzTBCFU6Hn?aIx1A70qHO(DJo~N3HKxh! zN;w1*M^KeBICnC4%^Fre1G9X0*zIcazKMIFSXsHBXrZcM_mq{p%&>rze~~dYJ>4-2 z>R7?HZ?07E*Tb6R~ySRZrtbdMo?pj8lw@^afLA@VCespB0T;r$tjUHR2LC_w_3o4a%XM zEDzXR#R9>LC21sT5h|vdq%eUY`8BDtQ!@R&IL>|GIxo`Eh3dJ~)eT97=+JoImT6MW zhB@a(P>e1plC#FDK<;~agYugXnK@K?=i;EW86(ey5g7Baa+7X}tYX&TrpSwB9g&}< zy(A)CXRpTgt4&1AnS+k3A9kwEX4yEa`*yyy8*I!SseLwcs|dk88P}f@f^MB!(x)@u zdqsxeP?vQfT8nl~V<1S#DL6g`<*<)-4L#Nb!TWSde$!tWmaA=nlLFGCe;vaF=gSP~ z3N-Z0<8!WpX2z&K$0McQxpECbbDzUGm2~fD z^m*Tq7f5OLdF^)x!!*+LkQVc=G##Fz*4f5K^p9*g@B|!dTy1*_*nvPHi{~rd4KtX7 zA>690WD`R|%<^meaeCm6PP92UybjsT(4zNEg~3^i9?n~>d*|+QYzFV@Xd0tP7M}Q3 zUKRoU@Xb@-4(0y!I1Ze?5f#SE&;;beP!(kJ{Cf(Urh8Rp+p({7g+9Q?De_khEQzA_ zIvJAlV&l(G)jyv?Em8E&f+KR2{G8}3H65I6=`kvOk@F68ml^qcy%eKu0Bh-s!>-JK zp!Rx=LYhrymH9R`x$u*Nce=ul#1;qdo=b(CkPt{y+9U@j!HGGvQi;`<&ghUMF2~=J$O@fm&9v$;d&hzi%os#={Us@E=~E(|9nhTKR(fOkQ>fZTiqV9;*0~N}OY&@dgfqP=``e=JzG46dqWQX9~9z z%K7JuNdj-hJo5R`$l(kiP+imTu8S(459}f715Vj=<*AMT^9Wdb{udu8Cpf9t>*Gf} z*7nTe2i^P!A#U#lV~j2bSKE1jLj{n}XFv@@Xo>+ANZkzm632{?cUQ^i%(;Ofmqlq$ z>{Ls%3cH!iepjQt(*D|G*yvh^B8CHq)!n`Ga_O7$o(0mbLRkprHLD3VeIR8(xisR? zU}&tcY30W2>)37a9FC1FX#S06k?adO_UQ`JL^V?UQ}lzBB3c3$TeQbN@wg zZyU4dxkz@XQk?45d(M`e2vM^Q^>;wNM%A}#VP7Bg=^H55Y|FSIqF+bc{tOhttc#y_7T8Eqmb zZtwSNGnc~e!l>qeN?o%MvOTKUx;7iIeim36oH699WAyXLGmZ=Fm)Ob)gVLbS) zv4%(R%+<116lY6Q6wJO^u3x%h@kT4ByKD%h>ZFrrbjyzo%XV>J{a63Ol;2ibdbnrY zHMMMF`C>Q{>wp3t1w)&drK@={WMe<`tz1L5ZnU0dJES0Wd1esInB;XjI#b$NZ2~s4 zB3EE@oT^}&c4ye|r!Z7VT-?qKX!l=Kd#5K@n{zobJBv>DB%>=Wmb^d3NNzB2@^-5r zVIxeIqCZA&Wi#Y4_ZIKftu|#ovP7B<7A_^2>XWvMeatRYf;R89^mhINMWhrdBFH%^ zY{ldXyFn54qNDYPJaZit%Hb>t5PDdBsU=nRJrZ@5#r{O_c{E*}k14t7inj(83kx$; z{f_=(W1*ga_^)A%RToeRllc2?xEF9s1I(usm`}&?AHM&U6;WfjS=yz$6!Mmuc5wQf z{8Glug`d8X7o@lrT>Xu+X@6L7TYzq`pWnzAxQ#TtFM8oai2UA&(UP9;MntJoBN&ia z%_%DOym%s=;v+9LL^;@$vXBaSk?!q~JNL)~e}JHnm6&?Yq4&i^GTwfNkRL;9;oIq) zr?4fh%A%VC#Mh-Gqw3$0u=$*JrNvE;ze>yv?eMq4Bz`_fWi8Ubn0%ivH~yadxh1Zu zXKK^28c-zFXt(g~1q0usLqw&GEHaqJB^ToT`m26)&ZDSl^ zVKBfl8pNkv%*J8JUBPn!@9U&C6r6_Us^sr)ck=}rA%YSrfKWHz$z5E=r{BR( zHo^rsdpa~6a2HzqE@o~wo@(q#I%hX-zuibbyWjs5tGo?O(Y|kf(8~UGc<<@mdK|h# zsTYcZ@SC#tOz`W?(!Kr>*h+WRj@a0%69q~;cZX{l>0c+&78-7SE5s*t3So#nu*dEt z!^~_yW}mX<_W{O|f-#iU@wmv|d+%a!LoQxVkR{*Q)AwrN@ zukb^k+t6ARco4X$XOT@OnIQ@o(9WgqGAX*m?DzZK=f7=FS$~XagkwKN?98oWNW^!yeJt2P7Zq-z4 zr{Wb#>}An>nL)f!fDm2qT?L7$>d&0QXI^woGrur+B5qZLb06M+aRQ{*(o}xrIxlc* zoYRI)bx8(OKH5#8Qj@ZL*cA}2l?D`9G$`WpW zHcw5v__3D23Aa?cB%^6!jMgfzRi3%J0&cUWR<>Qk(X|Pga;K)8FX7&zg8RW8$0hw0 zQ$2wP@zCP*uF&ZTphi$HYa>Ympe9eQu}iT;Rv6tz)?G2u72@Jk6|qlm>2mlEV>{}- zyP(pYN`2cc3qf*1B_Md21qnQq><9%}WM?#$Q` z!&+KoS$ASx7>fGOXD`CwSeK72%H60gzc`ywmRyNX+k#dj9TcI{HnrbT>ycN-Iwxky zeLdG_zOnmVd;D?#jZ*}Ro$B4oa*uv&`Rh{YxA)AstGMJixwhE_hTX=JpyfUUdcYg8 z!$3(`d}n$H1)nYVwvkyFeH5Dm83{Wj;Xo;*NiYM6n*N)20mr#@TpGH zO395JA8nlhVW`L-8_g}w>VwDsppomc6*J(ta&>IOcK+1(fM8(0z<~HuaQ2;OXp4JB z5T2p_t+$-oJo>!$(h$aPH_63A9BniS9qR7`*&}QzW6{gM9~NyuZkF@G5YH)+p##o3 z)g)S~P`^UETIVxpX-b4gZyf_Up&+eG>ddz}7Ge>G!%k_JlD`^nC!+l?xne@5{f9r# zmienJ(EV}_e$(B46-A3!eEvmxWQ-Z=Zr6J44CP$AtUT5$7vx8aruNS=qX!qUtI_xJ zViVSc#xplM$&TM)^)G7-UF}aA3rgswrt2Da7hWBnF9q$O{ko8t1W$=uA9i`uSawa4 zcHyr!`vPMRg;56EG&Uhz-qDaQ~WcuN@6s2IDTG^ zthNNqJY&6rEx@OrqEfg4{}jX}s183dkUQ=i3t@R;-?6TtmKR=xJ~Hmey@T<0q???6$as+yuM6KshEe zNd8fLIMx7*xAL~Y8sL<^9>9>b*E8s0pqT-yi=4vnaMsCi@{a$0rcK$_aic+=-WMAPh4GBmFRyqGd&c)tAvG!4?Sh% zT4&L7_vR;orYOyP$L;d^b(IySG>lhrz3k>=(*(bnO4NfPA6BL{x6FTl(B^lmvYfQY zRrh1}&QD22*Ql3Q1g9;Oj^6zgJN#MNW!5hyp$Vh?TK`qzhEUrq5=UY(R1=R;uUrwm z%4`yE_7_>eQ(N0*hi~U=ry)O+q4tSAAQIKtQ>?p48EL8yQXIgSm+BRORt*f+*n|xN zm0)YZu8Me*`6Vy7fI2s1oQ2xIcZ=_P6iTQ3J?o}=Lc`)*1`Dl<#1=-)ViMfqR-vk< znBr&JuBW5Q9RH~(*xU>eTqw<5*15)kzfA!o>K!*^KmGKlf%{vZM;Z=sGgz~EVtV{_ zN*U9FRGeXM=rwMj;*CKg`kW^eU07;okv*KTY=XQ=V_I(BND5?S>-IQY))jpktYREy zMKYt7ek+b1InB7f_Zr?O*s9)p)yl~Nu|2oF_JDRPRQ=^P*|C{B7z}Fcw&T5)Cs2A< zKuyBrts7M?v4xi+c2^Sz`Vzh4i%L<0S=x!S9AuJgn7RxY~fcL9ujFlc= zf!1+urL1Q6E#|c!KpMh~2(p)GpYf{gmkHW0l?Fi5l44&k1Gr0hRSQtD2RJLI-gqR` z+)z%UfMyrfBpp1nbC=9ra*wv}gG@{(YBvc!tKX=2R5j?0vG?Y6jCpn$0jb6qThi(Jz_uEm$<^G$YRl~x@&@6PD zC-fPbf@wGi8XCF9za`0SvM_jS7Vp-WY%)nMV%ZIu=RNTZ#@5RYInZ&?@1$DQd11E<2k(O_ zuQ_2wPXAs*P3WKr1+l~#tG!m2_n(M^xDfpZ0!t)MPJxrQ2AH}kMIXyg2K_jAH_8jE zUb*cMcDlMlecng0v{FAfzDW9J?l!|Nzy>Vj;&ypr@yWqAEaVcsK~X{VXg534)?HD# zGuZX^HC6dHB$dQA6CB4Rh^Y*4vNJxC#7t;Q1o80aCnGt68Kyh`$&&x(vD&FJZYHW=T{hppsveBfwK{p zN5PLWWMl4GW}emhS+g!oQyKed&JO`qA;VmrKga z%R8L*^PLN+@FDHhWkk1@GE|ELlPK-qCYhKZ={1yI@Z;@?``62 z)h?sE*O!6*Vt=_Ewix`d5EO%Y8EH@k{ z>C(INh$knZ?CJ9#jS3i~%Z+pnap6$_cFCVMb)N-0uPgZUwbWvWPrj~}PaFA*bVqma zXpU2LxPBeBfRpjXwzC`@Ic+d2zIl~l{MvG7Gs$?5MX@(|Tsi09Am||=#$sAKBRS7T zXbXN@NN`}FO@&7w6LJL)ihg<$)Rl=htE-MIQdA|m=!4UoKcmHT;cW~uqe=BcJU{O} zi~?NwFiJYnnqRqA1IuGzOAUYE;EQ3D+VI;h+^*AW2M&Tt2|FBZ=9BgvYc$1&nB3_t zxK5wc?{^0lyYx9JcQ*#L&skReU{#%8M~{Ya`|^-U;x6q`m3Z%!E08RyHB%(74zEPSqlP~Yzk5nmWY_L1?o%$uUTwcPL+`1;I$_KGa_wdchG+6C zX1d;7lg18fN@3q+8Vx3QF~K4221|twqvaaW$iUHuxW5WkJ@;7ccd^fLRwno;i3&DaQCMpprfUw=w& zv<4D>?#-2-wO_w^Ix2PJ8{=Mtq({2eT$!;)Jfxe#< z!6z@$iJYjKZ?6is;-YVET}b!C)8TWA8^&Dfmr8B@n>{e)&fV4&M11+mJmC}Z;aiON zkNZH&(MFHRt+LB}B?Ovg@ym0cMdDqazgc#5__(U~&Zjt(17@w4-0&l!N008crG?BUm3+qqa`%gVV~S*8W>`uHyt$tLrnDzi_L6qwpv0{{~9o ztpvYDxFEnyc2yr4S@#FqgU-3kdsP!GGT~|1#7v*V<-1R(EMYT|^NTfrn?rD`k!rr~ z#PgU(V}5ld7ZceaB;-zZ4G7skcRhhH7O$TNEh@yfr%$;xK^|$zhg#&q*r`+v_B5`S~KW9 z)QOjUqdL|-oYjS#Os3vT^GSL-OJFtRAKNhgQKe~?{XH0~X^lqAKdd2F&U8ry=fNEY z&!OA2bE2(E(t8Jpai!^9y;atz8kaHK`02ZR#y%uX6ta$80*+NWfI#?JmZ3 zck$BH0!mt?h4*HVZ!0&?Wc@#9*WgXzb8vdf|Gn-;&Xj+E2mGEU&KjvqK9^ zlb;SWHvrKbCdel1N7@OyX7f?SIrD)!5E{uooWIAofS#RY`z4Ks$pQAb_&7m|Uh z9UWgbbI4=`9<^{%X0Fx48^_tiVcu^=PF1gp$?v&xqei(BGz#4QJ&}CRjAr#F9d$`U zNwG68dQxw`+qQln-f!?yg~Y}ZO8psc(6VkmY*m%H^bG@->4_tZsr%5IeRY0G6r>*Z zs^jI9iNjVq;pK8l4wa_0y_cYDplV+>(NQcPPKl)wNJ=ErgIltK4}h(e97=BtY=+T} zg_n{pn0XH)9p4;F_}q4?jI)eU+~?)!rZ-71m<8?o0!tc1=GC9cKLLG$u;W3Gs%A64 z(wAgxfq6n?AmXv@*KheTrM17xfWqsu`F3|3Ky2SZTKV5S%Dt+35v7NwlkhV9xNDZ; zVl}4miwWO1Men#(o~%^^Onxpt6e$adX=LWnurBv%;C`T`-3{i{VH`DiN{^hNzZm%{ zff&lA)I#Uu->a85idhaDMkAZRwJgxtH)W=GR*#1GtS-iR4Egu?gdxiu zXBQ5gi2vkMQ>6CMNrjac^4^cF=v-ktg1C4lyM{izX)BU_L)vumeQn&P;X5RzO9Uua zm_AtPkFMNSjVcj=+j_@A@ViP=AxPa!SwWRbu;-K1&rHMzceBzi;3w$~m#_!u-;L*n zPTAoiPU_9f_QO;0Nb=kh1Gs^~$}zITOsb?o^^){tC~*-N+;A(5NZbwm5!T^y41O11uv&`k3<7lBm0ND5y&zzbqrHBfVYWGg=cod5z)_k&(G)zOH!NLS)}P zeWe74xX5U9*vW3~&&Ddq_IJfnz=`zh^1Da56wwM_@e0K}s@5PF|7;^U^1NFDA#k#! zX70wRRddgm=vzJ&tApNh!4C0QMtDme2JB;K3a3L{>yDNSH0bzQ+FUwnEc`5zq4loR zGH5cn&Re*mZtu)vFK^+_#e!4b8sAf#?(U5P-Aj9PGjzhFm>HnXJ}AfJ4m1*{a5ce_ zN}D}hoAd-D_h|K0o59GY;Tc4^_9!j0)Fx#pKP`>T=%X3^d!S%XS|s~YSyvDq$+vJ2 z#yP~bpCs2l`a@@42FTh&qn@MjTTmb+FAGxgsUg__SpAt7@Z|b^Smv-4oE@hSqllal zh+*lG@Ec|C1))9;K}Q~M?fa;G@$I2ix92b4?=)R?-BmoKNx(aAJ|X@yvnBZpEV?r+ z+AW?VtEe>lC}~JLE^*-Qr&ND-=PQe`K`0xKojK%58!$7D|E!eXHE`g@)8ylXnS<@R zf*@XtdolA-(ZtdD9Dy*M96oz!OfiVuviM3xR&|TzSb`sO?NH7%=Am{erG7HJ;(H_+ z4y=eJXaC1dthEfpRIKw>7?N@i9IbJE=WV};y!8t^Q7PL7I90paa2KVGvLO)duO^2N zo=TwnS-$sw-L^B9Rj(roIV%s0fNf<@-;qbD=a3kcKKMBFTL-&y-@ba8P#ihbm|9Lr zXiCv!DbC6YwaQ*4y;|rvQAZ^7oP)AYGzpa>Uo7AGvMZw;<9nANx_E6N2wHdd?wXkVrBP#*h0Sw1 zoKZcRLDZ+Y0`vukm%3YCAw&@iV~%FsnB6(Ch zEMDO?@PDZU@A4zx7dMG=(?vgAmYtu#R-tWOq2I_KE{&`{1u7j~cRaA;?`jt1xdG%U z_P9Wj_@vd)b%*fD?Vqh*FYnlI;!51r)Z)S@%6{}!mU9l&f5|ZmS4SKhWK5S^4jQYx z6uuNDuI~k9iR5e__~_sG0(lm2QWUwWAFZ{LLAf+OrI4@fUujCeF z(2sVhIyizt4=*AlZh%Vx&d-@vZ`vm<17Ao-kt4`@{Yug9_>R;K#;>*+y>vGmU%H*= zq&{&3%1-iE+@SrH4NhzfK$i}@8y`Kgmq^nf5mhS+t-ZBE;;x^H$Ks9umA=iO0Q3cx zytm_Wm&7kj{p;bSCjq5y5gT`qU&{6*gD+Ai!d^S@nkJwu!pv}OwWarpW$o70SO@2+ zO{t|=672LP65e1&V2nIL^Z`BQf~U?0sF3=-mR&@*Z-?!+{E*xsxfisgEucnJ&6#Nx z%IvB5?6*X7h!cUk_z=2w+-=vNS@6nFPEgG=ul8q0?9G=Mm{M?IwInn=2949CJd)07 zgM>btJ!*A&dBw9x2?eLZ+V~5LFhw7{HSqYB-5JuB`)!NeUOPavaqm?bzRs^#ZUMJU zGVO{mpLq}^qY69;nP3yB690P73V1N$X!7fzy$RM$e3_5C8tAgrbi(Y_rhAK@iw1-XTpIxQbYWo=DG9E7LO`H6kigbM` zvPesLvB3kzKkKuDz%*=&#NFd3%<*DCm}mCsRQ{DcTm}F=E_A@m;!z}NKD$38t2_HL z>D8&#QEyPR{%usbFmH>SFJ{sA$*f9PSw`UVzzTEYTZU$06?2LC7hg~wd8#5vkAiVU z)`Q{T-BH`u3=o5#T~9gk$3)IRH6PE1=kOb3J5{*KT*`d|zov2x6L~JMvy%PT>S2HI z&bCTqF0-kM^Oc^B!}~W_Q;O{w0gR^|mc^yr)WPsI508WFqN+8>5-m)am`A?AE_(%H z#!cIIR&o})(%t{aHAX$-9${;9+P(KT&;Mj_Ln;91dH?M-{7BsM2%-x~oxb<_uYd4< zOe`cmD z@T>#VE(wUtZISf#{AGU5mpu$PU&2qRa~VI?}B#G&MGMH{_WJvPx%)xnB`1&-JA+xFUSVServ#egY{2)Bo!B z4@(@tFre^%Agc7gME%#N7cGheoNPa^rL=YXJ!PV)O`89aj4~1D#ShYZX<~cm)3CaV zdP|R5A7Z{ua4_vQoOJZSd-c4ElO;n0BXEO`Va8)F*U2u;6+rn3G0x@jrTx3b`RO3R zEsVQarGIf1zZP8*wGzrOi2w4dWX^o+0Q9@UzLpn7HD}5UG<{Q`Cg9+-AeZ#p4c*1~ zXME|ah%Iq$#;vm6Wv?x(M z#-~e*ZUSzzA3ETl#5bR&7Qp=mtib*VUgSk}NM*LjuDULv`)N4Ysl$rlIp6fP-2G57-Z+y{)XiRu zkH~TI#YuykH+EE`1a_X-zQk`(HP--*bYU>IuH%={`io)@p99FZ?KlGGg%5O(wFQVW z51;J}6Kx;SCwO(VwJBR4r!Kt-QF%B{g`)B}^|XOgM3icN(~qJARq;C%)SG1-u2N68 z2cfHhuY3P!zP|Gux0>XfmWt{xmivXTYHrhuD_)!I`6c|}F2S#mhr5#Rt^KLJG6F@k zu#>x?biXo?^dDqBGtIDS<|GVlO51DR-ug;ML=YK~?P`+5)d}v` zBiUp7l`UfK^J@r*04S}AjFtQYAR(~gokH3>viZ-dMT%PqRUi4szqkO2N~@ym8=4+W zAXOoI7iQ917pF8k!szFdi#uif-~B{jjUe-%t_K60qF`D>pq!0hq<~CuebqAYG56bU zsV4^v6EeUR2zQOv55>)|3lo$cGPBhlSa+lIG($LkgJW0JX9GxfODSS{9#0aD@OVc` zC$B_)MeF?c62j^L!M%`Y>MySIU6N}punA&m9)2j2=OV~wYiCwPj+yRI;$8!~@x*2V z#U;Is$hl)NYZ3YNe}0P|?h z!w|mPlVrd!&QRwD?>la915o{cfAv0(FT4JE^YitK`5ZHwMTTOl??elR(-n4P;-3o{ zuW{E=a8-u?1CFH?Vbg>M~D!G3`&@u|=s2+t@soCp>irTaK3{hTD~ zn~1)^&Tuil8@q((z{}>2;`qq?QM?nfvFbYSg;D~7p#o&c=S|RSKTzf9yt!)afQc|C zd@g47FAyCB(U8toU%m^Ck8c6Uym!d-=MR6}fXn5zi(;Mszj^qIj)_96?Wuu)11c%l z2*zHSQiaJ%q-Vt(T*VDR@E}v~yE*T)tz>I&_FM5w&Z?yWwiX3HCiBXO>lq+Ag=fw< z^9~P)gJBof#e2Mr`eny}Ja{^&rQ)pRyw}P(cov=HVRbbCuu|Gj z9pxP!h>4VlRNZR8$88j`-Y?1bZvWsR!^-NRp>wP)XMQ~suodXP_`j9b{a4X}t38v! zt18`c&3M5)0J`WkpV)PsPth(&0TuY`X(KV_e4C}wCw1GOuiUIX!)7s#4W6jg^zl8QDkqq%*iD7y1oqWT}KMh*f>*&OL34(%MtAF1gtnVV`C%DC}bIubS5rSp2l&VnXO8 zMonhLlg|qe2_=@(YS?tEE?+bNyS31tEPR2rDza_t!7|rVTbnaTaA%(voNWujh8kGj zU0m{^6@caXkwhsTSR`)&^gX%t$Fl?OAJX4hyeJ{Tlhe_h^yY=xP9xjyAqA3;%hdSG zd1i0eY=|e5++P`Mwsi=DVncyydJy&i?IP<#MrP5I(fEnS4>Cr>X*O#Jr^(K{(pt%- zt&}0E-%tzltU;DR7O8GxxV93JG~yD5#HlKf`z9=X`nM{fD$31jm({HRo6H1REV2X* zO0#){(P>2|Wb}>3RX%3E1el|US|rQ6xY3i*YJ6Tp^U{ zG+Cdu>>jC?-oH5AS1#^2Oi}TI*#LCY`$Ow(Dx9Cp)8(8onmGF3M5vbw<|AcdFJAr| zHNAm^pJ$>I%uEvYmx32)dH-?q-A$G}uCpT?}vloX(X8Tt=cPH3{8GoPN=Uj0z z>dlF1_TM>W#FKYVVgnZ1*W*uZCDnWPOe`$yg(>MAcw~{HGro#kiF67`27Qt_b0aR! zEo&hzUW=)`l7D=MtB`B!2UEVA;KR2Av&T%rg%8;#BA2%{fo|{a6Lg})c*YHHM9~nl z^IEc*Izb4N=7P{)5UvgPBH)`62-;LN7+l(NY<4531zENjnpkOlRXV?y_BFX~2!E}W zkv-4U&hHzX0AIuLUNA2bA$4ISrO_iWKONr>qa*S$jrpZRVQj|BTdI(ym(dsgt3M1Q ztF?e62K`mchv-qW>Scy5R7nY5{C6H12unV#Y9COH<}etHrt#bk>mK299wy%wM zDfsjWEiF+eLSo#~W20Th>(t94&?^U7wG(0|<^=MuE9>2I_Pxr`{QK!px=R=r+iLgX zGgb4ys>U0HFG|8qYZ0{X0NMAxK!jkN2R)@AQ8aK8!b0@ z!Y8=q!k1HD?QYo;#%?>i(2@D*XmH?q#JmITZQX>-zeJH!&meJZIU#{C&WWew*8op> z38TDtGF%H7(tM*P-)6kD0qoJi5r>U=w1sf0s0L?MWETRo=_lu0e$b26b0}Waxlcoq z48uLDb(Gdc6qVxp6^_)igZ##@X6X(nA8ZIK6PD?6TYFzsk&PC*GJ&#V?MR?qeuyp+ zbD}21%(Vz>d{!%&9r2O`KQqwz8qGP!^3IhoE@Js##u`SFeJN6i?mP>+aTe_9-G0IPzt?pd3+qNk@FQzjUUe-xr3&~hs)&v#Rt@`O7b#E zbw3zh*id4?2eF~+yI{yDomfiZw9+n4zE=mQone7lvtQAQFh5vK*-#}_tz+o{4j($g zbjBhdIquF&mJ4^^*~5~tzKv{AN8`2Ee*>!QXa#_Nwv~(rn(8!&8YUxEPt2>y;}Z$vx6Z3n{-+ex_Lp(SR3`NUtp&L9;Heyc8=h%=S&l^M-jGAxF-1>k8TC!r z5)n7VIw9+n?y|&s8*It$pGXdqkElX(GS!<2RG2`s4eYQHugnJl@1a0E=LjFCxB&eA zPqo{J6*9!5>}f7Yx(aLHLuTjNjfiS3Ib8d=!fS7+^N#1FVsA6f%ztiAA>T*yhY*S#Q2_6DU!g=Hq;uPbP3`Hs+ok5qgr9qYZv4Lz~R;%wAw#V@u+lxfG=-`VEL^B(h zUX=@M)`_Ghwg(|>O7XG!yha89Ykc$vSjJqi)YXu@V9f{ua%vm?cE^7jCmWprjz-t7 zgY)4is+uZ}dvW0W{EuDy2~$x);cuKajNYDObHv(@v+D9>i}q9$rZW3YvGFV8O9>+v z*!rkuhX=^4C}M48&fnqd^Ww|M=x3>6KoUe$j4LT(v)V4Z!5hYfkzHlwoId_slFEZtB!8TQ&3oL2iZR5p4PrFuvUYo@48#Ri0z zO?+A$VkM>#mqKo5QyA z+e0Dj3otg6_|WAGd>>qaKv6srFF!$tcc6-M5Q477e>d{RxsuiaCE(VjV$P!*asYeS z<_^yBut$`N$V;L?0Whd5%$zI3*2513q%(qj%z$ipl+h71$B{e$tQM#9nsnVRbT3vM zUGD7Y<3ny`=mm2U7u@EKbDZe5oJv?72zU6)2DG=Ie*V@(2bcErKEiB!JKGWC%A`?f%wJ-7Tl`XIW ztL>>tnmqiY!8LVTKA5HPSil`pYRKi)qcBck;y!}^qsDzW?WyhY6UhsZT6%8XE^NmH zA&=m&+T)Tz7Udkf4E?Ql$+xl>tTXb*I=^7Q>frF7>a^Dn(#{FKp|O%3CrjT?Vo|*= zW32TPm`z}l8)pN(K?jz(3~5;y+yBs|gbCoUc@`f48tyASg%{_-Hzf-Mb{Z(2s;xREom}RN7Ks$aoD2&mG4xLM&8VT~eMTeJB zL|1a-h<6T&-RHrg=vT1y{jY~-zJtgZjai4~yi4C^0nasiiXd z>{6CO7I1~P!xV-{Hrqh;$Zc)+;CYtxP|Q#zic>T3X|~1SH8Ppac5G4x;z;zRCZL$g zQm5lAv#r~iUE3z;nA|7c!$3_Ik83*cvhyjx&QES6@8x0VSKPQ)ZdfC4+-t-7x1Nt^ z!9)}>pdMZs+7!*Bu-nWiz@`8Ip(+czaU_^PuB5&8y8i`f`t_i-gsA(S3@?X`0j`S2|z z4mBSYr>HBRFw(P!?g4DCk(4J%VRJ*tE562=lCdGhEz@<~L^w3RMgJ@;u2I+&!RE{* zV;?we_Afzm)*Zv6#{b$=8mS5y$;+SQVamvAEbtuOuHhRL1bE$`_GTTgfmTiRfoWsB zHdZm%j3;BSN!SZ-?*D#b<+hooeLWmZ53sD7ZX2AgQZ~b*8gfW*>P~wzS4MV={f0L@ zT3tY}jf=ICA}Kx}2LnI~FPT}-OTLF^2A=IL?7ScFXw3IzC7S-5=0`Uyev4KNl5qKV zK8NbH5O0FZ!tZCm0t;>dgXG8xO>Mv>t$D-BP|CJ_pL~Bq*(b`JBDj>t47)_7TV&@AmIdq#V{2Ve=!r%dPEf2ZGUn6Vs$vw5E0e|+=8Vx6HqZKjSIXARc%B6>|!5>V(DUU+Kq z0Kd8U1z;Qtab*p@;gdkR&CI>|7G)s<;(%=*ME?zMxhh6=Qu6CiilpScmn2TsNu08k zHn1VWjMV?TKSV;JrUByzxNH&NO~6Hk0d+>b`EP3EpC9#!hb%XwsYq@9g=#}HunJAx zMnWsa<+A&-s59KfsCdfrLH!ymCO%eq58tpUSd6;K1Rq54+{FwHivAAXSC0yYv5oUH z7Coc@S&p|q5dSs*PbOUa8@xZidhsDIPksT(2iIp_4Sf05@FUfFkSf8U|L~nKI1<22 zPD?omv^yH|_CXOpOhN!l|Chah4B0P9%=)dUZfj+bQ1dJPMyY^J<<+T6WjyGvegkx0 zl4fPi?;il1xT*jesGoMo<6*0USCPRG4TrFp-x@+qy7?#eorU!Un$1*d4)Tgf5ZCHe z&ifBIT#OrPgGs|)T;KnTxqnVm9S@SbyiflE9#icBp#NW55=dH6R^moJs%W?h4HVwU z=X-wm5zo+`gJMTR5rw98UtgpYEQhiZvZs=P0H4opR>D32YyqZ^NaS^w9=Apf>P z-}*Nye}mr$64Nt&>K;7EheZ7ah`Z9^K-6!Ha^*WJ8Ax?VS)$JGH*wKcT_8xn9$|ZS zj*9$8sa3ZKa+Z8naFh*QApl1!t+p!hO=1s-S$uVbZw>)&wEurR9F^8B^5s9u$8|f9 zGqXg8H#*$>{r}|YWz{yW;m3I??+$X5JFRtx`NE=ATR@T3l&|9(-3nOfe?A-xxj44}H-%kc0Q`w|$J$s?0RG)WX1r!~2iPSF zf>`G*d7zKw7Jxi$Zsjq1qKZY>ie7@UW6xHOMnS-TCPyp|=N)pr>UnP0E(k=pHO9)q zSYn0j3hF|pUi?>Hft_AYYeeEWo>!%BQrcKDj4=L z?(+PJFyWTwLotWt))A>5;l1zQkH=xAmJt1W!=AoU5?qB2G5s2FKO`k28?NVdCMNK=-rT9KOznA#I z^tHy`{(9tS{Y(GCR~SFh6E!=p35U2@9Thn8aK`$y$*wz3DFrD`x?NYEKFuAwQE_oj z$xp4Z?v(GBy5&OeeIx0tp1Nme4hU}}3V39_I3E-lYwkMp_(kaINawk6=E=1IkF}uN z%N$pQKvmM(3^}?3&U^gU9%LA!cY?#pcKOPY-kYAE)|jAte&bcQhbemMbWeG$R(h|{ zi@?oDk;y5c%+PoKV~Ppy#uaqKFZ8s{%!*4Z2fyB&qRs(C+JD~G#NFH+vIBe;g$P7@ zLWIF50q`da{vZ&+48ea#HfIR^{>=R{!NRZ}Jd)2n_F*gb$p&`v+^&@+GM7JysNEOe z`Jyu!eN)-6@Vr;5)d`=%i2k5E;!m3dKHF6+U2L>08KxC})If_Nli*|bReE;UhWi)F zVtdGswrQVVpocaGU$(F77Ep{kfAw&9*#pO=#gW?1?ChQUjH73&#EkR0-l%#g_foze zBRjjqRbuzKN5vm3da~9g<NSl*K z@LN|ErH6?dL!_OwdVDL~LG0Q9r0(fj$-cG>L;cFcb`NQ3@!=>Ypz|>=M6J+?ypGhb$SR3c0zMs`F z+0y=)yz9M)Bw?co)${A0059IzIOTsz_r~I1HmrL#zUX+kLUH}PfT&4Ng8rp$brAY+ zSGTj`>4cB3?Cn(-{XP3_OB91{$o3L#Cxw#+dQwVPnroQCSIkV)J#j*NZPbPtF@+|% zb6oTsMUu95W?M{6W+*(iH7v&NlimsQg&}=Erz-vX_bDo1ZQO+AuV>ucDW(wg<@5W- zt6CxEhjz^G@A5@>d@XiC}D(~InvKRAJ^hs`2_?)U} zS1*`4?ce!?TZ~tjKDE|Q&eJ{8zbs+*zrc^7TOAbMoYw!ZC$Q+^ALixO8;V5!nL9oARLH{CaTovQlX65&gQh4TXL6y@x`dHL1b#b2Z{z zGKCk-`<*W8WVO6;kMj2D>+92;4=&>{uybu6{Fh00Q8UgD}D5CjgFZ Bi#q@S diff --git a/src/mac/icons/release/86Box.icns b/src/mac/icons/release/86Box.icns index 4f15661ed03c6ffbe15ed4bcc8359d9d64417f8a..8d375d4bf37aab6411ea9002df8dd000b682aae3 100644 GIT binary patch literal 314012 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 z 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 Do9(lM literal 196323 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

{_+Lg{Pk1snq`62q$sKV;CNR*R(%L3>% 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 hANM-1q_nKOvfU{{xu1b@%`P From d50b072cf8f45f354d412b6eea69ccb70c4625a0 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 15 Dec 2022 15:49:00 +0100 Subject: [PATCH 008/112] Bumped up maximum sectors for IDE, ATAPI, and SCSI to 255 for VHD compliance. --- src/config.c | 4 ++-- src/qt/qt_harddiskdialog.cpp | 4 ++-- src/win/win_settings.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/config.c b/src/config.c index 39826b3b5..8e2b5c292 100644 --- a/src/config.c +++ b/src/config.c @@ -998,13 +998,13 @@ load_hard_disks(void) break; case HDD_BUS_IDE: - max_spt = 63; + max_spt = 255; max_hpc = 255; max_tracks = 266305; break; case HDD_BUS_SCSI: - max_spt = 99; + max_spt = 255; max_hpc = 255; max_tracks = 266305; break; diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 89de664d8..eb8b3fd1a 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -703,13 +703,13 @@ HarddiskDialog::on_comboBoxBus_currentIndexChanged(int index) max_cylinders = 266305; break; case HDD_BUS_IDE: - max_sectors = 63; + max_sectors = 255; max_heads = 255; max_cylinders = 266305; break; case HDD_BUS_ATAPI: case HDD_BUS_SCSI: - max_sectors = 99; + max_sectors = 255; max_heads = 255; max_cylinders = 266305; break; diff --git a/src/win/win_settings.c b/src/win/win_settings.c index afb283adc..34667ec39 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -3315,13 +3315,13 @@ hdd_add_file_open_error: max_tracks = 266305; break; case HDD_BUS_IDE: - max_spt = 63; + max_spt = 255; max_hpc = 255; max_tracks = 266305; break; case HDD_BUS_ATAPI: case HDD_BUS_SCSI: - max_spt = 99; + max_spt = 255; max_hpc = 255; max_tracks = 266305; break; From 5f332ccb53c837a2f5a95b63219b9a982b762162 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 15 Dec 2022 15:54:08 +0100 Subject: [PATCH 009/112] Forgotten bug fix. --- src/win/win_settings.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/win_settings.c b/src/win/win_settings.c index 34667ec39..d6e0c0693 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -2793,7 +2793,7 @@ win_settings_hard_disks_add_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM add_locations(hdlg); hdd_ptr->bus = HDD_BUS_IDE; - max_spt = 63; + max_spt = 255; max_hpc = 255; settings_set_cur_sel(hdlg, IDC_COMBO_HD_BUS, hdd_ptr->bus - 1); max_tracks = 266305; From 368462f23f6b3b884451fa0b96e9d1823a0fe180 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 15 Dec 2022 16:00:12 +0100 Subject: [PATCH 010/112] Fixed IBM PS/2 Model 55SX Planar ID. --- src/machine/m_ps2_mca.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index e59fb1a19..cfe6ba6bd 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -1405,7 +1405,7 @@ machine_ps2_model_55sx_init(const machine_t *model) machine_ps2_common_init(model); - ps2.planar_id = 0xfffb; + ps2.planar_id = 0xfbff; ps2_mca_board_model_55sx_init(0, 4); return ret; From dc1dff8211982d91d1abd60ae53b3f33d11b2293 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 15 Dec 2022 22:23:43 +0100 Subject: [PATCH 011/112] GDB stub fixes so it compiles again. --- src/gdbstub.c | 17 +++++++++++------ src/include/86box/gdbstub.h | 10 +++++----- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/gdbstub.c b/src/gdbstub.c index efca53f74..dc638cd07 100644 --- a/src/gdbstub.c +++ b/src/gdbstub.c @@ -334,7 +334,7 @@ int gdbstub_step = 0, gdbstub_next_asap = 0; uint64_t gdbstub_watch_pages[(((uint32_t) -1) >> (MEM_GRANULARITY_BITS + 6)) + 1]; static void -gdbstub_break() +gdbstub_break(void) { /* Pause CPU execution as soon as possible. */ if (gdbstub_step <= GDBSTUB_EXEC) @@ -988,8 +988,13 @@ e14: /* Add our supported features to the end. */ if (client->response_pos < (sizeof(client->response) - 1)) +#if (defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64) client->response_pos += snprintf(&client->response[client->response_pos], sizeof(client->response) - client->response_pos, "PacketSize=%lX;swbreak+;hwbreak+;qXfer:features:read+", sizeof(client->packet) - 1); +#else + client->response_pos += snprintf(&client->response[client->response_pos], sizeof(client->response) - client->response_pos, + "PacketSize=%X;swbreak+;hwbreak+;qXfer:features:read+", sizeof(client->packet) - 1); +#endif break; } else if (!strcmp(client->response, "Xfer")) { /* Read the transfer object. */ @@ -1627,7 +1632,7 @@ gdbstub_server_thread(void *priv) } void -gdbstub_cpu_init() +gdbstub_cpu_init(void) { /* Replace cpu_exec with our own function if the GDB stub is active. */ if ((gdbstub_socket != -1) && (cpu_exec != gdbstub_cpu_exec)) { @@ -1637,7 +1642,7 @@ gdbstub_cpu_init() } int -gdbstub_instruction() +gdbstub_instruction(void) { /* Check hardware breakpoints if any are present. */ gdbstub_breakpoint_t *breakpoint = first_hwbreak; @@ -1667,7 +1672,7 @@ gdbstub_instruction() } int -gdbstub_int3() +gdbstub_int3(void) { /* Check software breakpoints if any are present. */ gdbstub_breakpoint_t *breakpoint = first_swbreak; @@ -1744,7 +1749,7 @@ gdbstub_mem_access(uint32_t *addrs, int access) } void -gdbstub_init() +gdbstub_init(void) { #ifdef _WIN32 WSAStartup(MAKEWORD(2, 2), &wsa); @@ -1790,7 +1795,7 @@ gdbstub_init() } void -gdbstub_close() +gdbstub_close(void) { /* Stop if the GDB server hasn't initialized. */ if (gdbstub_socket < 0) diff --git a/src/include/86box/gdbstub.h b/src/include/86box/gdbstub.h index 4b2f8630a..8ac83f625 100644 --- a/src/include/86box/gdbstub.h +++ b/src/include/86box/gdbstub.h @@ -53,12 +53,12 @@ enum { extern int gdbstub_step, gdbstub_next_asap; extern uint64_t gdbstub_watch_pages[(((uint32_t) -1) >> (MEM_GRANULARITY_BITS + 6)) + 1]; -extern void gdbstub_cpu_init(); -extern int gdbstub_instruction(); -extern int gdbstub_int3(); +extern void gdbstub_cpu_init(void); +extern int gdbstub_instruction(void); +extern int gdbstub_int3(void); extern void gdbstub_mem_access(uint32_t *addrs, int access); -extern void gdbstub_init(); -extern void gdbstub_close(); +extern void gdbstub_init(void); +extern void gdbstub_close(void); #else From 3c46b6becda1c6ec3d95c453e567f75a179511ad Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 18 Dec 2022 22:40:00 -0500 Subject: [PATCH 012/112] Minitrace default was missing from the win32 makefile --- src/win/Makefile.mingw | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index 61ed25f9b..a800dd957 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -200,6 +200,9 @@ endif ifndef RTMIDI RTMIDI := y endif +ifndef MINITRACE + MINITRACE := n +endif ifeq ($(DYNAREC), y) ifeq ($(ARM), y) ifeq ($(NEW_DYNAREC), n) From 137b327471d68880b5cd41f61c8e92f1a8cc2365 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 18 Dec 2022 23:05:43 -0500 Subject: [PATCH 013/112] Minitrace fixes so it compiles again --- src/minitrace/minitrace.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/minitrace/minitrace.c b/src/minitrace/minitrace.c index d8f0e97a9..df68e7d79 100644 --- a/src/minitrace/minitrace.c +++ b/src/minitrace/minitrace.c @@ -95,16 +95,16 @@ void mtr_flush_with_state(int); // pthread basics #ifdef _WIN32 -static int get_cur_thread_id() { +static int get_cur_thread_id(void) { return (int)GetCurrentThreadId(); } -static int get_cur_process_id() { +static int get_cur_process_id(void) { return (int)GetCurrentProcessId(); } static uint64_t _frequency = 0; static uint64_t _starttime = 0; -double mtr_time_s() { +double mtr_time_s(void) { if (_frequency == 0) { QueryPerformanceFrequency((LARGE_INTEGER*)&_frequency); QueryPerformanceCounter((LARGE_INTEGER*)&_starttime); @@ -124,7 +124,7 @@ static BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) { ExitProcess(1); } -void mtr_register_sigint_handler() { +void mtr_register_sigint_handler(void) { // For console apps: SetConsoleCtrlHandler(&CtrlHandler, TRUE); } @@ -154,10 +154,10 @@ static void join_flushing_thread(void) { #else -static inline int get_cur_thread_id() { +static inline int get_cur_thread_id(void) { return (int)(intptr_t)pthread_self(); } -static inline int get_cur_process_id() { +static inline int get_cur_process_id(void) { return (int)getpid(); } @@ -193,7 +193,7 @@ double mtr_time_s() { return time.tv_sec + time.tv_nsec / 1.0e9; } #else -double mtr_time_s() { +double mtr_time_s(void) { static time_t start; struct timeval tv; gettimeofday(&tv, NULL); @@ -217,7 +217,7 @@ static void termination_handler(int signum) { exit(1); } -void mtr_register_sigint_handler() { +void mtr_register_sigint_handler(void) { #ifndef MTR_ENABLED return; #endif @@ -251,7 +251,7 @@ void mtr_init(const char *json_file) { mtr_init_from_stream(fopen(json_file, "wb")); } -void mtr_shutdown() { +void mtr_shutdown(void) { int i; #ifndef MTR_ENABLED return; @@ -289,7 +289,7 @@ const char *mtr_pool_string(const char *str) { return "string pool full"; } -void mtr_start() { +void mtr_start(void) { #ifndef MTR_ENABLED return; #endif @@ -304,7 +304,7 @@ void mtr_start() { init_flushing_thread(); } -void mtr_stop() { +void mtr_stop(void) { #ifndef MTR_ENABLED return; #endif @@ -435,7 +435,7 @@ void mtr_flush_with_state(int is_last) { pthread_mutex_unlock(&mutex); } -void mtr_flush() { +void mtr_flush(void) { mtr_flush_with_state(FALSE); } From 5c0d5fc2d381cbe0e3a8a31a4af8927c085f0e44 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 19 Dec 2022 00:42:10 -0500 Subject: [PATCH 014/112] MSYS2 QT build support --- .github/workflows/c-cpp.yml | 4 +- .github/workflows/cmake.yml | 75 ++++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index ead4d5dcc..7eafa3d12 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -15,8 +15,8 @@ on: - "!**/CMakeLists.txt" jobs: - build: - name: MSYS2 Makefile build ${{ matrix.build.name }} ${{ matrix.dynarec.name }} build (${{ matrix.environment.msystem }}) + msys2: + name: MSYS2 Makefile (Win32 GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) runs-on: windows-latest diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index ed4bf39ed..af35910a6 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,7 +25,7 @@ on: jobs: msys2: - name: MSYS2 ${{ matrix.build.name }} ${{ matrix.dynarec.name }} build (${{ matrix.environment.msystem }}) + name: MSYS2 (Win32 GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) runs-on: windows-2022 @@ -95,6 +95,79 @@ jobs: name: '86Box${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' path: build/artifacts/** + msys2-qt: + name: MSYS2 (Qt GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) + + runs-on: windows-2022 + + defaults: + run: + shell: msys2 {0} + + strategy: + fail-fast: true + matrix: + build: + - name: Debug + preset: debug + slug: -Debug + - name: Dev + preset: experimental + slug: -Dev + dynarec: + - name: ODR + new: off + slug: -ODR + - name: NDR + new: on + slug: -NDR + environment: + - msystem: MINGW32 + prefix: mingw-w64-i686 + toolchain: ./cmake/flags-gcc-i686.cmake + - msystem: MINGW64 + prefix: mingw-w64-x86_64 + toolchain: ./cmake/flags-gcc-x86_64.cmake + - msystem: UCRT64 + prefix: mingw-w64-ucrt-x86_64 + toolchain: ./cmake/flags-gcc-x86_64.cmake + + steps: + - uses: msys2/setup-msys2@v2 + with: + path-type: inherit + update: true + msystem: ${{ matrix.environment.msystem }} + install: >- + ${{ matrix.environment.prefix }}-ninja + ${{ matrix.environment.prefix }}-cc + ${{ matrix.environment.prefix }}-pkg-config + ${{ matrix.environment.prefix }}-freetype + ${{ matrix.environment.prefix }}-SDL2 + ${{ matrix.environment.prefix }}-zlib + ${{ matrix.environment.prefix }}-libpng + ${{ matrix.environment.prefix }}-libvncserver + ${{ matrix.environment.prefix }}-openal + ${{ matrix.environment.prefix }}-rtmidi + ${{ matrix.environment.prefix }}-qt5-base + ${{ matrix.environment.prefix }}-qt5-tools + - uses: actions/checkout@v3 + - name: Configure CMake + run: >- + cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} + --toolchain ${{ matrix.environment.toolchain }} + -D NEW_DYNAREC=${{ matrix.dynarec.new }} + -D CMAKE_INSTALL_PREFIX=./build/artifacts + -D QT=ON + - name: Build + run: cmake --build build + - name: Generate package + run: cmake --install build + - uses: actions/upload-artifact@v3 + with: + name: '86Box-Qt${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' + path: build/artifacts/** + llvm-windows: name: "Windows vcpkg/LLVM (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.target.name }})" From efa07a152a5d8fa875ef8fe3890654b861c0afe8 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 19 Dec 2022 00:36:25 -0500 Subject: [PATCH 015/112] Temporarily disable QT build on github till it's fixed --- .github/workflows/cmake.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index af35910a6..534d268b7 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -196,8 +196,8 @@ jobs: ui: - name: Win32 GUI qt: off - - name: Qt GUI - qt: on +# - name: Qt GUI +# qt: on slug: -Qt target: - name: x86 From ca8e9b70a85cc3311de0233b582b2a3e2d2eddc7 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 19 Dec 2022 13:30:51 +0600 Subject: [PATCH 016/112] Reset size of screen on 4:3 option toggling --- src/qt/qt_mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 102363414..3078ccde7 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1835,6 +1835,7 @@ video_toggle_option(QAction *action, int *val) action->setChecked(*val > 0 ? true : false); endblit(); config_save(); + reset_screen_size(); device_force_redraw(); for (int i = 0; i < MONITORS_NUM; i++) { if (monitors[i].target_buffer) From b85ca5091b43148b4c91df191fc8626342bf7d44 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 19 Dec 2022 03:30:49 -0500 Subject: [PATCH 017/112] Try and work out what is causing packaging to fail --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 534d268b7..c00b683fd 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -105,7 +105,7 @@ jobs: shell: msys2 {0} strategy: - fail-fast: true + fail-fast: false matrix: build: - name: Debug From 6ce4f2de03290e39bb742301c93227a678e30fea Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 19 Dec 2022 22:52:17 +0600 Subject: [PATCH 018/112] qt: Don't resize renderer screen beyond window size --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 3078ccde7..d707fc7ea 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -261,7 +261,7 @@ MainWindow::MainWindow(QWidget *parent) + (statusBar()->height() * !hide_status_bar) + (ui->toolBar->height() * !hide_tool_bar); - ui->stackedWidget->resize(w, h); + ui->stackedWidget->resize(w, (h / (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.))); setFixedSize(w, modifiedHeight); } }); From 10b52114208fd0ecec699c0c4514936ea1c49a43 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 19 Dec 2022 14:59:45 -0500 Subject: [PATCH 019/112] Disable Qt MINGW32 packaging for now --- .github/workflows/cmake.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c00b683fd..eceb3f2d6 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -105,7 +105,7 @@ jobs: shell: msys2 {0} strategy: - fail-fast: false + fail-fast: true matrix: build: - name: Debug @@ -162,6 +162,7 @@ jobs: - name: Build run: cmake --build build - name: Generate package + if: matrix.environment.msystem != 'MINGW32' run: cmake --install build - uses: actions/upload-artifact@v3 with: From 561b6b1b0620a7269c128bbb05c843ab8c95f595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Mon, 19 Dec 2022 14:37:01 +0100 Subject: [PATCH 020/112] vcpkg: fix Qt build --- .github/workflows/cmake.yml | 4 ++-- vcpkg.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index eceb3f2d6..c303f4631 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -197,8 +197,8 @@ jobs: ui: - name: Win32 GUI qt: off -# - name: Qt GUI -# qt: on + - name: Qt GUI + qt: on slug: -Qt target: - name: x86 diff --git a/vcpkg.json b/vcpkg.json index f3f420b33..46ab6bff3 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -21,6 +21,7 @@ "concurrent", "default-features", "gui", + "opengl", "harfbuzz", "network", "vulkan", From 82bdd54b203a960e2dfec236396e54fa799e998d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Mon, 19 Dec 2022 14:42:52 +0100 Subject: [PATCH 021/112] actions: combine the two MSYS2 jobs into one --- .github/workflows/cmake.yml | 114 ++++++++---------------------------- 1 file changed, 26 insertions(+), 88 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c303f4631..ec488eea5 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,7 +25,7 @@ on: jobs: msys2: - name: MSYS2 (Win32 GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) + name: MSYS2 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) runs-on: windows-2022 @@ -50,6 +50,17 @@ jobs: - name: NDR new: on slug: -NDR + ui: + - name: Win32 GUI + qt: off + static: on + - name: Qt GUI + qt: on + static: off + slug: -Qt + packages: >- + qt5-base:p + qt5-tools:p environment: - msystem: MINGW32 prefix: mingw-w64-i686 @@ -64,20 +75,20 @@ jobs: steps: - uses: msys2/setup-msys2@v2 with: - path-type: inherit update: true msystem: ${{ matrix.environment.msystem }} - install: >- - ${{ matrix.environment.prefix }}-ninja - ${{ matrix.environment.prefix }}-cc - ${{ matrix.environment.prefix }}-pkg-config - ${{ matrix.environment.prefix }}-freetype - ${{ matrix.environment.prefix }}-SDL2 - ${{ matrix.environment.prefix }}-zlib - ${{ matrix.environment.prefix }}-libpng - ${{ matrix.environment.prefix }}-libvncserver - ${{ matrix.environment.prefix }}-openal - ${{ matrix.environment.prefix }}-rtmidi + pacboy: >- + ninja:p + cmake:p + cc:p + pkg-config:p + freetype:p + SDL2:p + zlib:p + libpng:p + openal:p + rtmidi:p + ${{ matrix.ui.packages }} - uses: actions/checkout@v3 - name: Configure CMake run: >- @@ -85,7 +96,8 @@ jobs: --toolchain ${{ matrix.environment.toolchain }} -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D CMAKE_INSTALL_PREFIX=./build/artifacts - -D QT=OFF + -D QT=${{ matrix.ui.qt }} + -D STATIC_BUILD=${{ matrix.ui.static }} - name: Build run: cmake --build build - name: Generate package @@ -95,80 +107,6 @@ jobs: name: '86Box${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' path: build/artifacts/** - msys2-qt: - name: MSYS2 (Qt GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) - - runs-on: windows-2022 - - defaults: - run: - shell: msys2 {0} - - strategy: - fail-fast: true - matrix: - build: - - name: Debug - preset: debug - slug: -Debug - - name: Dev - preset: experimental - slug: -Dev - dynarec: - - name: ODR - new: off - slug: -ODR - - name: NDR - new: on - slug: -NDR - environment: - - msystem: MINGW32 - prefix: mingw-w64-i686 - toolchain: ./cmake/flags-gcc-i686.cmake - - msystem: MINGW64 - prefix: mingw-w64-x86_64 - toolchain: ./cmake/flags-gcc-x86_64.cmake - - msystem: UCRT64 - prefix: mingw-w64-ucrt-x86_64 - toolchain: ./cmake/flags-gcc-x86_64.cmake - - steps: - - uses: msys2/setup-msys2@v2 - with: - path-type: inherit - update: true - msystem: ${{ matrix.environment.msystem }} - install: >- - ${{ matrix.environment.prefix }}-ninja - ${{ matrix.environment.prefix }}-cc - ${{ matrix.environment.prefix }}-pkg-config - ${{ matrix.environment.prefix }}-freetype - ${{ matrix.environment.prefix }}-SDL2 - ${{ matrix.environment.prefix }}-zlib - ${{ matrix.environment.prefix }}-libpng - ${{ matrix.environment.prefix }}-libvncserver - ${{ matrix.environment.prefix }}-openal - ${{ matrix.environment.prefix }}-rtmidi - ${{ matrix.environment.prefix }}-qt5-base - ${{ matrix.environment.prefix }}-qt5-tools - - uses: actions/checkout@v3 - - name: Configure CMake - run: >- - cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} - --toolchain ${{ matrix.environment.toolchain }} - -D NEW_DYNAREC=${{ matrix.dynarec.new }} - -D CMAKE_INSTALL_PREFIX=./build/artifacts - -D QT=ON - - name: Build - run: cmake --build build - - name: Generate package - if: matrix.environment.msystem != 'MINGW32' - run: cmake --install build - - uses: actions/upload-artifact@v3 - with: - name: '86Box-Qt${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' - path: build/artifacts/** - llvm-windows: name: "Windows vcpkg/LLVM (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.target.name }})" From f480e6b5cdcb480115dc86f6edcbeb81a7ec38da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Mon, 19 Dec 2022 21:10:47 +0100 Subject: [PATCH 022/112] actions: add frontend slug to MSYS2 --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index ec488eea5..e6da49cef 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -104,7 +104,7 @@ jobs: run: cmake --install build - uses: actions/upload-artifact@v3 with: - name: '86Box${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' + name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' path: build/artifacts/** llvm-windows: From 1ed1a5da3d50eafab45124b03c16489c5091a037 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 19 Dec 2022 18:41:09 -0500 Subject: [PATCH 023/112] Create llvm-win32-arm.cmake --- cmake/llvm-win32-arm.cmake | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 cmake/llvm-win32-arm.cmake diff --git a/cmake/llvm-win32-arm.cmake b/cmake/llvm-win32-arm.cmake new file mode 100644 index 000000000..9d3488124 --- /dev/null +++ b/cmake/llvm-win32-arm.cmake @@ -0,0 +1,30 @@ +# +# 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. +# +# CMake toolchain file for Clang on Windows builds (ARM64 target). +# +# Authors: David Hrdlička, +# +# Copyright 2021 David Hrdlička. +# + +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-armv7.cmake) + +# Use the GCC-compatible Clang executables in order to use our flags +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) + +# `llvm-rc` is barely usable as of LLVM 13, using MS' rc.exe for now +set(CMAKE_RC_COMPILER rc) + +set(CMAKE_C_COMPILER_TARGET arm-pc-windows-msvc) +set(CMAKE_CXX_COMPILER_TARGET arm-pc-windows-msvc) + +set(CMAKE_SYSTEM_PROCESSOR ARM) + +# TODO: set the vcpkg target triplet perhaps? From cfe3fec2baa2160fe6417dc4b4bdd077f8067f09 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 19 Dec 2022 19:45:39 -0500 Subject: [PATCH 024/112] Fix issues on non QT unix builds --- src/include/86box/unix_sdl.h | 6 +++--- src/unix/macOSXGlue.h | 2 +- src/unix/unix.c | 16 ++++++++-------- src/unix/unix_sdl.c | 16 ++++++++-------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/include/86box/unix_sdl.h b/src/include/86box/unix_sdl.h index 0054ed938..27d7ec0aa 100644 --- a/src/include/86box/unix_sdl.h +++ b/src/include/86box/unix_sdl.h @@ -2,9 +2,9 @@ #define _UNIX_SDL_H extern void sdl_close(void); -extern int sdl_inits(); -extern int sdl_inith(); -extern int sdl_initho(); +extern int sdl_inits(void); +extern int sdl_inith(void); +extern int sdl_initho(void); extern int sdl_pause(void); extern void sdl_resize(int x, int y); extern void sdl_enable(int enable); diff --git a/src/unix/macOSXGlue.h b/src/unix/macOSXGlue.h index f49402805..44bf9e7f6 100644 --- a/src/unix/macOSXGlue.h +++ b/src/unix/macOSXGlue.h @@ -14,7 +14,7 @@ CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN void getDefaultROMPath(char *); -int toto(); +int toto(void); CF_EXTERN_C_END CF_IMPLICIT_BRIDGING_DISABLED diff --git a/src/unix/unix.c b/src/unix/unix.c index 4410118f3..296da5e14 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -468,12 +468,12 @@ ui_sb_update_tip(int arg) } void -ui_sb_update_panes() +ui_sb_update_panes(void) { } void -ui_sb_update_text() +ui_sb_update_text(void) { } @@ -699,7 +699,7 @@ typedef struct mouseinputdata { SDL_mutex *mousemutex; static mouseinputdata mousedata; void -mouse_poll() +mouse_poll(void) { SDL_LockMutex(mousemutex); mouse_x = mousedata.deltax; @@ -754,7 +754,7 @@ plat_pause(int p) } void -plat_init_rom_paths() +plat_init_rom_paths(void) { #ifndef __APPLE__ if (getenv("XDG_DATA_HOME")) { @@ -1202,7 +1202,7 @@ main(int argc, char **argv) case SDL_RENDER_DEVICE_RESET: case SDL_RENDER_TARGETS_RESET: { - extern void sdl_reinit_texture(); + extern void sdl_reinit_texture(void); sdl_reinit_texture(); break; } @@ -1238,7 +1238,7 @@ main(int argc, char **argv) sdl_blit(params.x, params.y, params.w, params.h); } if (title_set) { - extern void ui_window_title_real(); + extern void ui_window_title_real(void); ui_window_title_real(); } if (video_fullscreen && keyboard_isfsexit()) { @@ -1303,13 +1303,13 @@ joystick_process(void) { } void -startblit() +startblit(void) { SDL_LockMutex(blitmtx); } void -endblit() +endblit(void) { SDL_UnlockMutex(blitmtx); } diff --git a/src/unix/unix_sdl.c b/src/unix/unix_sdl.c index bd2f3937b..bc89c9290 100644 --- a/src/unix/unix_sdl.c +++ b/src/unix/unix_sdl.c @@ -46,7 +46,7 @@ double mouse_sensitivity = 1.0; /* Unused. */ double mouse_x_error = 0.0, mouse_y_error = 0.0; /* Unused. */ static uint8_t interpixels[17842176]; -extern void RenderImGui(); +extern void RenderImGui(void); static void sdl_integer_scale(double *d, double *g) { @@ -61,7 +61,7 @@ sdl_integer_scale(double *d, double *g) } } -void sdl_reinit_texture(); +void sdl_reinit_texture(void); static void sdl_stretch(int *w, int *h, int *x, int *y) @@ -141,7 +141,7 @@ sdl_blit_shim(int x, int y, int w, int h, int monitor_index) video_blit_complete_monitor(monitor_index); } -void ui_window_title_real(); +void ui_window_title_real(void); void sdl_real_blit(SDL_Rect *r_src) @@ -286,7 +286,7 @@ sdl_select_best_hw_driver(void) } void -sdl_reinit_texture() +sdl_reinit_texture(void) { sdl_destroy_texture(); @@ -416,19 +416,19 @@ sdl_init_common(int flags) } int -sdl_inits() +sdl_inits(void) { return sdl_init_common(0); } int -sdl_inith() +sdl_inith(void) { return sdl_init_common(RENDERER_HARDWARE); } int -sdl_initho() +sdl_initho(void) { return sdl_init_common(RENDERER_HARDWARE | RENDERER_OPENGL); } @@ -462,7 +462,7 @@ wchar_t sdl_win_title[512] = { L'8', L'6', L'B', L'o', L'x', 0 }; SDL_mutex *titlemtx = NULL; void -ui_window_title_real() +ui_window_title_real(void) { char *res; if (sizeof(wchar_t) == 1) { From 5ef744ab2d2aefe01900e367302c8b0ec00dbb7b Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 19 Dec 2022 19:07:03 -0500 Subject: [PATCH 025/112] Fix many inconsistencies in GHA cmake script --- .github/workflows/c-cpp.yml | 60 +++++++++++++++++++++---------------- .github/workflows/cmake.yml | 60 +++++++++++++++++++++++-------------- 2 files changed, 72 insertions(+), 48 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 7eafa3d12..0c4ecd6b7 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -16,9 +16,9 @@ on: jobs: msys2: - name: MSYS2 Makefile (Win32 GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) + name: "Windows MSYS2 Makefile (Win32 GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }})" - runs-on: windows-latest + runs-on: windows-2022 defaults: run: @@ -50,28 +50,38 @@ jobs: - msystem: MINGW64 prefix: mingw-w64-x86_64 x64: y + - msystem: UCRT64 + prefix: mingw-w64-ucrt-x86_64 + x64: y steps: - - uses: msys2/setup-msys2@v2 - with: - update: true - msystem: ${{ matrix.environment.msystem }} - install: >- - make - ${{ matrix.environment.prefix }}-gcc - ${{ matrix.environment.prefix }}-pkg-config - ${{ matrix.environment.prefix }}-openal - ${{ matrix.environment.prefix }}-freetype - ${{ matrix.environment.prefix }}-SDL2 - ${{ matrix.environment.prefix }}-zlib - ${{ matrix.environment.prefix }}-libpng - ${{ matrix.environment.prefix }}-libvncserver - ${{ matrix.environment.prefix }}-rtmidi - - uses: actions/checkout@v3 - - name: make - run: make -fwin/makefile.mingw -j DEV_BUILD=${{ matrix.build.dev }} DEBUG=${{ matrix.build.debug }} NEW_DYNAREC=${{ matrix.dynarec.new }} X64=${{ matrix.environment.x64 }} VNC=n - working-directory: ./src - - uses: actions/upload-artifact@v3 - with: - name: '86Box${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' - path: src/86Box.exe + - name: Prepare MSYS2 environment + uses: msys2/setup-msys2@v2 + with: + update: true + msystem: ${{ matrix.environment.msystem }} + install: >- + make + ${{ matrix.environment.prefix }}-gcc + ${{ matrix.environment.prefix }}-pkg-config + ${{ matrix.environment.prefix }}-freetype + ${{ matrix.environment.prefix }}-SDL2 + ${{ matrix.environment.prefix }}-zlib + ${{ matrix.environment.prefix }}-libpng + ${{ matrix.environment.prefix }}-openal + ${{ matrix.environment.prefix }}-rtmidi + ${{ matrix.environment.prefix }}-libvncserver + - uses: actions/checkout@v3 + - name: make + run: >- + make -fwin/makefile.mingw -j + DEV_BUILD=${{ matrix.build.dev }} + DEBUG=${{ matrix.build.debug }} + NEW_DYNAREC=${{ matrix.dynarec.new }} + X64=${{ matrix.environment.x64 }} + VNC=n + working-directory: ./src + - uses: actions/upload-artifact@v3 + with: + name: '86Box${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' + path: src/86Box.exe diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index e6da49cef..6876e83bc 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,7 +25,7 @@ on: jobs: msys2: - name: MSYS2 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}) + name: "Windows MSYS2 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }})" runs-on: windows-2022 @@ -73,14 +73,15 @@ jobs: toolchain: ./cmake/flags-gcc-x86_64.cmake steps: - - uses: msys2/setup-msys2@v2 + - name: Prepare MSYS2 environment + uses: msys2/setup-msys2@v2 with: update: true msystem: ${{ matrix.environment.msystem }} pacboy: >- ninja:p cmake:p - cc:p + gcc:p pkg-config:p freetype:p SDL2:p @@ -88,6 +89,7 @@ jobs: libpng:p openal:p rtmidi:p + libvncserver:p ${{ matrix.ui.packages }} - uses: actions/checkout@v3 - name: Configure CMake @@ -98,6 +100,7 @@ jobs: -D CMAKE_INSTALL_PREFIX=./build/artifacts -D QT=${{ matrix.ui.qt }} -D STATIC_BUILD=${{ matrix.ui.static }} + -D VNC=n - name: Build run: cmake --build build - name: Generate package @@ -141,15 +144,15 @@ jobs: target: - name: x86 triplet: x86-windows-static - toolchain: cmake/llvm-win32-i686.cmake + toolchain: ./cmake/llvm-win32-i686.cmake vcvars: x64_x86 - name: x64 triplet: x64-windows-static - toolchain: cmake/llvm-win32-x86_64.cmake + toolchain: ./cmake/llvm-win32-x86_64.cmake vcvars: x64 - name: ARM64 triplet: arm64-windows-static - toolchain: cmake/llvm-win32-aarch64.cmake + toolchain: ./cmake/llvm-win32-aarch64.cmake vcvars: x64_arm64 exclude: - dynarec: @@ -158,7 +161,6 @@ jobs: name: ARM64 steps: - - uses: actions/checkout@v3 - name: Prepare VS environment uses: ilammy/msvc-dev-cmd@v1 with: @@ -180,11 +182,13 @@ jobs: -password "${{ secrets.GITHUB_TOKEN }}" - name: Fix MSVC atomic headers run: dir "C:/Program Files/Microsoft Visual Studio/2022/*/VC/Tools/MSVC/*/include" -include stdatomic.h -recurse | del + - uses: actions/checkout@v3 - name: Configure CMake run: > cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} --toolchain C:/vcpkg/scripts/buildsystems/vcpkg.cmake -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D QT=${{ matrix.ui.qt }} + -D CMAKE_INSTALL_PREFIX=./build/artifacts -D VCPKG_CHAINLOAD_TOOLCHAIN_FILE=${{ github.workspace }}/${{ matrix.target.toolchain }} -D VCPKG_TARGET_TRIPLET=${{ matrix.target.triplet }} -D VCPKG_HOST_TRIPLET=x64-windows @@ -200,14 +204,14 @@ jobs: - name: Build run: cmake --build build - name: Generate package - run: cmake --install build --prefix ./build/artifacts + run: cmake --install build - uses: actions/upload-artifact@v3 with: name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-LLVM-${{ matrix.target.name }}-gha${{ github.run_number }}' path: build/artifacts/** linux: - name: "Linux GCC 11 (${{ matrix.build.name }} ${{ matrix.dynarec.name }} x86_64)" + name: "Linux GCC 11 (Qt GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" runs-on: ubuntu-22.04 @@ -230,7 +234,6 @@ jobs: slug: -NDR steps: - - uses: actions/checkout@v3 - name: Install dependencies run: >- sudo apt update && sudo apt install @@ -244,22 +247,24 @@ jobs: qtbase5-dev qttools5-dev libopenal-dev + - uses: actions/checkout@v3 - name: Configure CMake run: >- cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} --toolchain ./cmake/flags-gcc-x86_64.cmake -D NEW_DYNAREC=${{ matrix.dynarec.new }} + -D CMAKE_INSTALL_PREFIX=./build/artifacts - name: Build run: cmake --build build -# - name: Generate package -# run: cmake --install build --prefix ./build/artifacts -# - uses: actions/upload-artifact@v3 -# with: -# name: '86Box${{ matrix.build.slug }}-UbuntuJammy-x86_64-gha${{ github.run_number }}' -# path: build/artifacts/** + - name: Generate package + run: cmake --install build + - uses: actions/upload-artifact@v3 + with: + name: '86Box-Qt${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-UbuntuJammy-x86_64-gha${{ github.run_number }}' + path: build/artifacts/** macos11: - name: "macOS 11 (${{ matrix.build.name }} x86_64)" + name: "macOS 11 (Qt GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" runs-on: macos-11 @@ -282,22 +287,31 @@ jobs: slug: -NDR steps: - - uses: actions/checkout@v3 - name: Install dependencies - run: brew install freetype sdl2 libpng rtmidi qt@5 openal-soft ninja + run: >- + brew install + ninja + freetype + sdl2 + libpng + rtmidi + qt@5 + openal-soft + - uses: actions/checkout@v3 - name: Configure CMake run: >- cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} - --toolchain cmake/flags-gcc-x86_64.cmake - -D NEW_DYNAREC=${{ matrix.build.new-dynarec }} + --toolchain ./cmake/flags-gcc-x86_64.cmake + -D NEW_DYNAREC=${{ matrix.dynarec.new }} + -D CMAKE_INSTALL_PREFIX=./build/artifacts -D Qt5_ROOT=$(brew --prefix qt@5) -D Qt5LinguistTools_ROOT=$(brew --prefix qt@5) -D OpenAL_ROOT=$(brew --prefix openal-soft) - name: Build run: cmake --build build - name: Generate package - run: cmake --install build --prefix ./build/artifacts + run: cmake --install build - uses: actions/upload-artifact@v3 with: - name: '86Box${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}' + name: '86Box-Qt${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}' path: build/artifacts/** From 6794e527c1c6aca24c9678cc7ea21a823f5db8cf Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 20 Dec 2022 22:40:40 +0600 Subject: [PATCH 026/112] Add Vendex HeadStart Turbo 888-XT RTC --- src/device/isartc.c | 38 +++++++++++++++++++++++++++++++++----- src/machine/m_xt.c | 3 +++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/device/isartc.c b/src/device/isartc.c index ad2b39f2f..2b723fc81 100644 --- a/src/device/isartc.c +++ b/src/device/isartc.c @@ -82,10 +82,11 @@ #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_EV170 0 +#define ISARTC_DTK 1 +#define ISARTC_P5PAK 2 +#define ISARTC_A6PAK 3 +#define ISARTC_VENDEX 4 #define ISARTC_DEBUG 0 @@ -544,6 +545,18 @@ isartc_init(const device_t *info) dev->year = MM67_AL_DOM; /* year, NON STANDARD */ break; + case ISARTC_VENDEX: /* Vendex HeadStart Turbo 888-XT RTC */ + dev->flags |= FLAG_YEAR80; + dev->base_addr = 0x0300; + dev->base_addrsz = 32; + dev->f_rd = mm67_read; + dev->f_wr = mm67_write; + dev->nvr.reset = mm67_reset; + dev->nvr.start = mm67_start; + dev->nvr.tick = mm67_tick; + dev->year = MM67_AL_DOM; /* year, NON STANDARD */ + break; + default: break; } @@ -559,7 +572,7 @@ isartc_init(const device_t *info) dev->f_rd, NULL, NULL, dev->f_wr, NULL, NULL, dev); /* Hook into the NVR backend. */ - dev->nvr.fn = isartc_get_internal_name(isartc_type); + dev->nvr.fn = (char *)info->internal_name; dev->nvr.irq = dev->irq; if (!is_at) nvr_init(&dev->nvr); @@ -709,6 +722,21 @@ static const device_t a6pak_device = { .config = a6pak_config }; +/* Onboard RTC devices */ +const device_t vendex_xt_rtc_onboard_device = { + .name = "National Semiconductor MM58167 (Vendex)", + .internal_name = "vendex_xt_rtc", + .flags = DEVICE_ISA, + .local = ISARTC_VENDEX, + .init = isartc_init, + .close = isartc_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + static const device_t isartc_none_device = { .name = "None", .internal_name = "none", diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 8f2bec8bd..b8d318438 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -20,6 +20,8 @@ #include <86box/chipset.h> #include <86box/port_6x.h> +extern const device_t vendex_xt_rtc_onboard_device; + static void machine_xt_common_init(const machine_t *model) { @@ -483,6 +485,7 @@ machine_xt_vendex_init(const machine_t *model) return ret; machine_xt_clone_init(model); + device_add(&vendex_xt_rtc_onboard_device); return ret; } From b0cdb2d64341e89944e4bace1cfed0de991925a3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 21 Dec 2022 00:09:17 +0600 Subject: [PATCH 027/112] Time sync now works correctly with Vendex RTC --- src/device/isartc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/isartc.c b/src/device/isartc.c index 2b723fc81..bb0f928eb 100644 --- a/src/device/isartc.c +++ b/src/device/isartc.c @@ -546,7 +546,7 @@ isartc_init(const device_t *info) break; case ISARTC_VENDEX: /* Vendex HeadStart Turbo 888-XT RTC */ - dev->flags |= FLAG_YEAR80; + dev->flags |= FLAG_YEAR80 | FLAG_YEARBCD; dev->base_addr = 0x0300; dev->base_addrsz = 32; dev->f_rd = mm67_read; From 537fbad564312636c3361c76493ca1064f313008 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:25:51 -0500 Subject: [PATCH 028/112] More bits of missed formatting --- src/86box.c | 4 +- src/codegen/codegen_ops_fpu.h | 8 +- src/codegen/codegen_x86-64.c | 67 +++++------ src/codegen/codegen_x86.c | 67 +++++------ src/codegen_new/codegen.c | 67 +++++------ src/codegen_new/codegen_ops_3dnow.c | 18 +-- src/codegen_new/codegen_ops_fpu_arith.c | 4 +- src/cpu/cpu.c | 2 +- src/cpu/x87_ops_arith.h | 16 +-- src/include/86box/config.h | 142 ++++++++++++------------ src/network/CMakeLists.txt | 2 +- src/qt/qt_newfloppydialog.cpp | 6 +- src/unix/CMakeLists.txt | 4 +- src/win/CMakeLists.txt | 2 +- 14 files changed, 213 insertions(+), 196 deletions(-) diff --git a/src/86box.c b/src/86box.c index 235a1fd5d..147233b21 100644 --- a/src/86box.c +++ b/src/86box.c @@ -17,8 +17,8 @@ * Copyright 2008-2020 Sarah Walker. * Copyright 2016-2020 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2021 Laci bá' - * Copyright 2021 dob205 + * Copyright 2021 Laci bá' + * Copyright 2021 dob205 */ #include #include diff --git a/src/codegen/codegen_ops_fpu.h b/src/codegen/codegen_ops_fpu.h index 58a5adf7d..4ffbb45a0 100644 --- a/src/codegen/codegen_ops_fpu.h +++ b/src/codegen/codegen_ops_fpu.h @@ -667,14 +667,16 @@ ropFCHS(uint8_t opcode, uint32_t fetchdat, uint32_t op_32, uint32_t op_pc, codeb return op_pc; \ } +// clang-format off opFLDimm(1, 1.0) - opFLDimm(L2T, 3.3219280948873623) - opFLDimm(L2E, 1.4426950408889634); +opFLDimm(L2T, 3.3219280948873623) +opFLDimm(L2E, 1.4426950408889634); opFLDimm(PI, 3.141592653589793); opFLDimm(EG2, 0.3010299956639812); opFLDimm(Z, 0.0) +// clang-format on - static uint32_t ropFLDLN2(uint8_t opcode, uint32_t fetchdat, uint32_t op_32, uint32_t op_pc, codeblock_t *block) +static uint32_t ropFLDLN2(uint8_t opcode, uint32_t fetchdat, uint32_t op_32, uint32_t op_pc, codeblock_t *block) { FP_ENTER(); FP_LOAD_IMM_Q(0x3fe62e42fefa39f0ull); diff --git a/src/codegen/codegen_x86-64.c b/src/codegen/codegen_x86-64.c index 6939819d4..4a184b981 100644 --- a/src/codegen/codegen_x86-64.c +++ b/src/codegen/codegen_x86-64.c @@ -485,48 +485,51 @@ codegen_flush(void) return; } +// clang-format off static int opcode_modrm[256] = { - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*00*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*10*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*20*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*30*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*00*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*10*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*20*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*30*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*40*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ - 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, /*60*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*70*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*40*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ + 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, /*60*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*70*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*80*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*90*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*a0*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*b0*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*80*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*90*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*a0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*b0*/ - 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*d0*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*e0*/ - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, /*f0*/ + 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*d0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*e0*/ + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, /*f0*/ }; + int opcode_0f_modrm[256] = { - 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, /*00*/ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ - 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*20*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /*30*/ + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, /*00*/ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*20*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /*30*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*40*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, /*60*/ - 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, /*70*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*40*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, /*60*/ + 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, /*70*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*80*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*90*/ - 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, /*a0*/ - 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, /*b0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*80*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*90*/ + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, /*a0*/ + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, /*b0*/ - 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ - 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*d0*/ - 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*e0*/ - 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0 /*f0*/ + 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ + 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*d0*/ + 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*e0*/ + 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0 /*f0*/ }; +// clang-format off void codegen_debug(void) diff --git a/src/codegen/codegen_x86.c b/src/codegen/codegen_x86.c index 61b473fe7..bd9793732 100644 --- a/src/codegen/codegen_x86.c +++ b/src/codegen/codegen_x86.c @@ -1627,48 +1627,51 @@ codegen_flush(void) return; } +// clang-format off static int opcode_modrm[256] = { - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*00*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*10*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*20*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*30*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*00*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*10*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*20*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*30*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*40*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ - 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, /*60*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*70*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*40*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ + 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, /*60*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*70*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*80*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*90*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*a0*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*b0*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*80*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*90*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*a0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*b0*/ - 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*d0*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*e0*/ - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, /*f0*/ + 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*d0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*e0*/ + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, /*f0*/ }; + int opcode_0f_modrm[256] = { - 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, /*00*/ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ - 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*20*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /*30*/ + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, /*00*/ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*20*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /*30*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*40*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, /*60*/ - 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, /*70*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*40*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, /*60*/ + 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, /*70*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*80*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*90*/ - 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, /*a0*/ - 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, /*b0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*80*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*90*/ + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, /*a0*/ + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, /*b0*/ - 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ - 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*d0*/ - 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*e0*/ - 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0 /*f0*/ + 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ + 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*d0*/ + 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*e0*/ + 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0 /*f0*/ }; +// clang-format on void codegen_debug(void) diff --git a/src/codegen_new/codegen.c b/src/codegen_new/codegen.c index 2f178bc74..bf6ad123c 100644 --- a/src/codegen_new/codegen.c +++ b/src/codegen_new/codegen.c @@ -322,48 +322,51 @@ codegen_generate_ea(ir_data_t *ir, x86seg *op_ea_seg, uint32_t fetchdat, int op_ return codegen_generate_ea_16_long(ir, op_ea_seg, fetchdat, op_ssegs, op_pc); } +// clang-format off static uint8_t opcode_modrm[256] = { - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*00*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*10*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*20*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*30*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*00*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*10*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*20*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*30*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*40*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ - 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, /*60*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*70*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*40*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ + 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, /*60*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*70*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*80*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*90*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*a0*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*b0*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*80*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*90*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*a0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*b0*/ - 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*d0*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*e0*/ - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, /*f0*/ + 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*d0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*e0*/ + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, /*f0*/ }; + static uint8_t opcode_0f_modrm[256] = { - 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, /*00*/ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ - 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*20*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /*30*/ + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, /*00*/ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*20*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /*30*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*40*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, /*60*/ - 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, /*70*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*40*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*50*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, /*60*/ + 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, /*70*/ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*80*/ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*90*/ - 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, /*a0*/ - 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, /*b0*/ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*80*/ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*90*/ + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, /*a0*/ + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, /*b0*/ - 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ - 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*d0*/ - 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*e0*/ - 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0 /*f0*/ + 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, /*c0*/ + 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*d0*/ + 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, /*e0*/ + 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0 /*f0*/ }; +// clang-format on void codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_pc, uint32_t old_pc) diff --git a/src/codegen_new/codegen_ops_3dnow.c b/src/codegen_new/codegen_ops_3dnow.c index ff0c136e2..c2b04584c 100644 --- a/src/codegen_new/codegen_ops_3dnow.c +++ b/src/codegen_new/codegen_ops_3dnow.c @@ -37,16 +37,18 @@ return op_pc + 2; \ } +// clang-format off ropParith(PFADD) - ropParith(PFCMPEQ) - ropParith(PFCMPGE) - ropParith(PFCMPGT) - ropParith(PFMAX) - ropParith(PFMIN) - ropParith(PFMUL) - ropParith(PFSUB) +ropParith(PFCMPEQ) +ropParith(PFCMPGE) +ropParith(PFCMPGT) +ropParith(PFMAX) +ropParith(PFMIN) +ropParith(PFMUL) +ropParith(PFSUB) +// clang-format on - uint32_t ropPF2ID(codeblock_t *block, ir_data_t *ir, uint8_t opcode, uint32_t fetchdat, uint32_t op_32, uint32_t op_pc) +uint32_t ropPF2ID(codeblock_t *block, ir_data_t *ir, uint8_t opcode, uint32_t fetchdat, uint32_t op_32, uint32_t op_pc) { int dest_reg = (fetchdat >> 3) & 7; diff --git a/src/codegen_new/codegen_ops_fpu_arith.c b/src/codegen_new/codegen_ops_fpu_arith.c index e9739f830..98d77250c 100644 --- a/src/codegen_new/codegen_ops_fpu_arith.c +++ b/src/codegen_new/codegen_ops_fpu_arith.c @@ -423,8 +423,10 @@ ropFUCOMPP(codeblock_t *block, ir_data_t *ir, uint8_t opcode, uint32_t fetchdat, return op_pc + 1; \ } +// clang-format off ropF_arith_mem(s, uop_MEM_LOAD_SINGLE) - ropF_arith_mem(d, uop_MEM_LOAD_DOUBLE) +ropF_arith_mem(d, uop_MEM_LOAD_DOUBLE) +// clang-format on #define ropFI_arith_mem(name, temp_reg) \ uint32_t ropFIADD##name(codeblock_t *block, ir_data_t *ir, uint8_t opcode, uint32_t fetchdat, uint32_t op_32, uint32_t op_pc) \ diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 5030d9ff7..1ab06205f 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -1170,7 +1170,7 @@ cpu_set(void) #endif if ((cpu_s->cpu_type == CPU_K6_2P) || (cpu_s->cpu_type == CPU_K6_3P)) { - x86_opcodes_3DNOW = ops_3DNOWE; + x86_opcodes_3DNOW = ops_3DNOWE; #ifdef USE_DYNAREC x86_dynarec_opcodes_3DNOW = dynarec_ops_3DNOWE; #endif diff --git a/src/cpu/x87_ops_arith.h b/src/cpu/x87_ops_arith.h index f5e5d7696..e2dbbdb8f 100644 --- a/src/cpu/x87_ops_arith.h +++ b/src/cpu/x87_ops_arith.h @@ -125,25 +125,27 @@ return 0; \ } +// clang-format off opFPU(s, x87_ts, 16, t.i, geteal, t.s, _32) #ifndef FPU_8087 opFPU(s, x87_ts, 32, t.i, geteal, t.s, _32) #endif - opFPU(d, x87_td, 16, t.i, geteaq, t.d, _64) + opFPU(d, x87_td, 16, t.i, geteaq, t.d, _64) #ifndef FPU_8087 - opFPU(d, x87_td, 32, t.i, geteaq, t.d, _64) + opFPU(d, x87_td, 32, t.i, geteaq, t.d, _64) #endif - opFPU(iw, uint16_t, 16, t, geteaw, (double) (int16_t) t, _i16) +opFPU(iw, uint16_t, 16, t, geteaw, (double) (int16_t) t, _i16) #ifndef FPU_8087 - opFPU(iw, uint16_t, 32, t, geteaw, (double) (int16_t) t, _i16) + opFPU(iw, uint16_t, 32, t, geteaw, (double) (int16_t) t, _i16) #endif - opFPU(il, uint32_t, 16, t, geteal, (double) (int32_t) t, _i32) + opFPU(il, uint32_t, 16, t, geteal, (double) (int32_t) t, _i32) #ifndef FPU_8087 - opFPU(il, uint32_t, 32, t, geteal, (double) (int32_t) t, _i32) + opFPU(il, uint32_t, 32, t, geteal, (double) (int32_t) t, _i32) #endif +// clang-format on - static int opFADD(uint32_t fetchdat) +static int opFADD(uint32_t fetchdat) { FP_ENTER(); cpu_state.pc++; diff --git a/src/include/86box/config.h b/src/include/86box/config.h index 9946a0da3..dd873d168 100644 --- a/src/include/86box/config.h +++ b/src/include/86box/config.h @@ -28,109 +28,109 @@ extern "C" { #if 0 typedef struct { - uint8_t id, - uint8_t bus_type, /* Bus type: IDE, SCSI, etc. */ - bus, :4, /* ID of the bus (for example, for IDE, - 0 = primary, 1 = secondary, etc. */ - bus_id, :4, /* ID of the device on the bus */ - uint8_t type, /* Type flags, interpretation depends - on the device */ - uint8_t is_image; /* This is only used for CD-ROM: - 0 = Image; - 1 = Host drive */ + uint8_t id, + uint8_t bus_type, /* Bus type: IDE, SCSI, etc. */ + bus, : 4, /* ID of the bus (for example, for IDE, + 0 = primary, 1 = secondary, etc. */ + bus_id, : 4, /* ID of the device on the bus */ + uint8_t type, /* Type flags, interpretation depends + on the device */ + uint8_t is_image; /* This is only used for CD-ROM: + 0 = Image; + 1 = Host drive */ - wchar_t path[1024]; /* Name of current image file or - host drive */ + wchar_t path[1024]; /* Name of current image file or + host drive */ - uint32_t spt, /* Physical geometry parameters */ - hpc, - tracks; + uint32_t spt, /* Physical geometry parameters */ + hpc, + tracks; } storage_cfg_t; typedef struct { /* General configuration */ - int vid_resize, /* Window is resizable or not */ - vid_renderer, /* Renderer */ - vid_fullscreen_scale, /* Full screen scale type */ - vid_fullscreen_start, /* Start emulator in full screen */ - vid_force_43, /* Force 4:3 display ratio in windowed mode */ - vid_scale, /* Windowed mode scale */ - vid_overscan, /* EGA/(S)VGA overscan enabled */ - vid_cga_contrast, /* CGA alternate contrast enabled */ - vid_grayscale, /* Video is grayscale */ - vid_grayscale_type, /* Video grayscale type */ - vid_invert_display, /* Invert display */ - rctrl_is_lalt, /* Right CTRL is left ALT */ - update_icons, /* Update status bar icons */ - window_remember, /* Remember window position and size */ - window_w, /* Window coordinates */ - window_h, - window_x, - window_y, - sound_gain; /* Sound gain */ + int vid_resize, /* Window is resizable or not */ + vid_renderer, /* Renderer */ + vid_fullscreen_scale, /* Full screen scale type */ + vid_fullscreen_start, /* Start emulator in full screen */ + vid_force_43, /* Force 4:3 display ratio in windowed mode */ + vid_scale, /* Windowed mode scale */ + vid_overscan, /* EGA/(S)VGA overscan enabled */ + vid_cga_contrast, /* CGA alternate contrast enabled */ + vid_grayscale, /* Video is grayscale */ + vid_grayscale_type, /* Video grayscale type */ + vid_invert_display, /* Invert display */ + rctrl_is_lalt, /* Right CTRL is left ALT */ + update_icons, /* Update status bar icons */ + window_remember, /* Remember window position and size */ + window_w, /* Window coordinates */ + window_h, + window_x, + window_y, + sound_gain; /* Sound gain */ # ifdef USE_LANGUAGE - uint16_t language_id; /* Language ID (0x0409 = English (US)) */ + uint16_t language_id; /* Language ID (0x0409 = English (US)) */ # endif /* Machine cateogory */ - int machine, /* Machine */ - cpu, /* CPU */ + int machine, /* Machine */ + cpu, /* CPU */ # ifdef USE_DYNAREC - cpu_use_dynarec, /* CPU recompiler enabled */ + cpu_use_dynarec, /* CPU recompiler enabled */ # endif - wait_states, /* CPU wait states */ - enable_external_fpu, /* FPU enabled */ - time_sync; /* Time sync enabled */ - uint32_t mem_size; /* Memory size */ + wait_states, /* CPU wait states */ + enable_external_fpu, /* FPU enabled */ + time_sync; /* Time sync enabled */ + uint32_t mem_size; /* Memory size */ /* Video category */ - int video_card, /* Video card */ - voodoo_enabled; /* Voodoo enabled */ + int video_card, /* Video card */ + voodoo_enabled; /* Voodoo enabled */ /* Input devices category */ - int mouse_type, /* Mouse type */ - joystick_type; /* Joystick type */ + int mouse_type, /* Mouse type */ + joystick_type; /* Joystick type */ /* Sound category */ - int sound_card, /* Sound card */ - midi_device, /* Midi device */ - mpu_401, /* Standalone MPU-401 enabled */ - ssi_2001_enabled, /* SSI-2001 enabled */ - game_blaster_enabled, /* Game blaster enabled */ - gus_enabled, /* Gravis Ultrasound enabled */ - opl_type, /* OPL emulation type */ - sound_is_float; /* Sound is 32-bit float or 16-bit integer */ + int sound_card, /* Sound card */ + midi_device, /* Midi device */ + mpu_401, /* Standalone MPU-401 enabled */ + ssi_2001_enabled, /* SSI-2001 enabled */ + game_blaster_enabled, /* Game blaster enabled */ + gus_enabled, /* Gravis Ultrasound enabled */ + opl_type, /* OPL emulation type */ + sound_is_float; /* Sound is 32-bit float or 16-bit integer */ /* Network category */ - int network_type, /* Network type (SLiRP or PCap) */ - network_card; /* Network card */ - char network_host[520]; /* PCap device */ + int network_type, /* Network type (SLiRP or PCap) */ + network_card; /* Network card */ + char network_host[520]; /* PCap device */ /* Ports category */ - char parallel_devices[PARALLEL_MAX][32]; /* LPT device names */ + char parallel_devices[PARALLEL_MAX][32]; /* LPT device names */ # ifdef USE_SERIAL_DEVICES - char serial_devices[SERIAL_MAX][32]; /* Serial device names */ + char serial_devices[SERIAL_MAX][32]; /* Serial device names */ # endif /* Other peripherals category */ - int fdc_type, /* Floppy disk controller type */ - hdc, /* Hard disk controller */ - scsi_card, /* SCSI controller */ - ide_ter_enabled, /* Tertiary IDE controller enabled */ - ide_qua_enabled, /* Quaternary IDE controller enabled */ - bugger_enabled, /* ISA bugger device enabled */ - isa_rtc_type, /* ISA RTC card */ - isa_mem_type[ISAMEM_MAX]; /* ISA memory boards */ + int fdc_type, /* Floppy disk controller type */ + hdc, /* Hard disk controller */ + scsi_card, /* SCSI controller */ + ide_ter_enabled, /* Tertiary IDE controller enabled */ + ide_qua_enabled, /* Quaternary IDE controller enabled */ + bugger_enabled, /* ISA bugger device enabled */ + isa_rtc_type, /* ISA RTC card */ + isa_mem_type[ISAMEM_MAX]; /* ISA memory boards */ /* Hard disks category */ - storage_cfg_t hdd[HDD_NUM]; /* Hard disk drives */ + storage_cfg_t hdd[HDD_NUM]; /* Hard disk drives */ /* Floppy drives category */ - storage_cfg_t fdd[FDD_NUM]; /* Floppy drives */ + storage_cfg_t fdd[FDD_NUM]; /* Floppy drives */ /* Other removable devices category */ - storage_cfg_t cdrom[CDROM_NUM], /* CD-ROM drives */ - storage_cfg_t rdisk[ZIP_NUM]; /* Removable disk drives */ + storage_cfg_t cdrom[CDROM_NUM], /* CD-ROM drives */ + storage_cfg_t rdisk[ZIP_NUM]; /* Removable disk drives */ } config_t; #endif diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 98252d49e..dc03cb417 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -13,7 +13,7 @@ # Copyright 2020,2021 David Hrdlička. # -add_library(net OBJECT network.c net_pcap.c net_slirp.c net_dp8390.c net_3c501.c +add_library(net OBJECT network.c net_pcap.c net_slirp.c net_dp8390.c net_3c501.c net_3c503.c net_ne2000.c net_pcnet.c net_wd8003.c net_plip.c net_event.c) option(SLIRP_EXTERNAL "Link against the system-provided libslirp library" OFF) diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index a445c47d3..bad4fbf9e 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -548,7 +548,7 @@ NewFloppyDialog::createZipSectorImage(const QString &filename, const disk_size_t empty[0x5003] = empty[0x1D003] = 0xFF; /* Root directory = 0x35000 - Data = 0x39000 */ + Data = 0x39000 */ } else { /* ZIP 250 */ /* MBR */ @@ -570,7 +570,7 @@ NewFloppyDialog::createZipSectorImage(const QString &filename, const disk_size_t memset(&(empty[0x0200]), 0x48, 0x3E00); /* The second sector begins with some strange data - in my reference image. */ + in my reference image. */ *(uint64_t *) &(empty[0x0200]) = 0x3831393230334409LL; *(uint64_t *) &(empty[0x0208]) = 0x6A57766964483130LL; *(uint64_t *) &(empty[0x0210]) = 0x3C3A34676063653FLL; @@ -619,7 +619,7 @@ NewFloppyDialog::createZipSectorImage(const QString &filename, const disk_size_t empty[0x4203] = empty[0x22003] = 0xFF; /* Root directory = 0x3FE00 - Data = 0x38200 */ + Data = 0x38200 */ } pbar.setMaximum(pbar_max); diff --git a/src/unix/CMakeLists.txt b/src/unix/CMakeLists.txt index 5301c9268..5fbcf0329 100644 --- a/src/unix/CMakeLists.txt +++ b/src/unix/CMakeLists.txt @@ -11,8 +11,8 @@ # Authors: Cacodemon345 # David Hrdlička, # -# Copyright 2021 Cacodemon345. -# Copyright 2021 David Hrdlička. +# Copyright 2021 Cacodemon345. +# Copyright 2021 David Hrdlička. # add_library(plat OBJECT unix.c) diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt index 34e6dde9b..a0a4c8e14 100644 --- a/src/win/CMakeLists.txt +++ b/src/win/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # enable_language(RC) From f04f0f24cc32b5bad0096d607fac14fe3aa3805a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:26:10 -0500 Subject: [PATCH 029/112] Tidy up src/cpu/cpu.h --- src/cpu/cpu.h | 68 +++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index a28618fe1..307865629 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -172,36 +172,42 @@ typedef struct { const cpu_legacy_table_t **tables; } cpu_legacy_machine_t; -#define C_FLAG 0x0001 -#define P_FLAG 0x0004 -#define A_FLAG 0x0010 -#define Z_FLAG 0x0040 -#define N_FLAG 0x0080 -#define T_FLAG 0x0100 -#define I_FLAG 0x0200 -#define D_FLAG 0x0400 -#define V_FLAG 0x0800 -#define NT_FLAG 0x4000 -#define MD_FLAG 0x8000 +#define C_FLAG 0x0001 +#define P_FLAG 0x0004 +#define A_FLAG 0x0010 +#define Z_FLAG 0x0040 +#define N_FLAG 0x0080 +#define T_FLAG 0x0100 +#define I_FLAG 0x0200 +#define D_FLAG 0x0400 +#define V_FLAG 0x0800 +#define NT_FLAG 0x4000 +#define MD_FLAG 0x8000 -#define RF_FLAG 0x0001 /* in EFLAGS */ -#define VM_FLAG 0x0002 /* in EFLAGS */ -#define VIF_FLAG 0x0008 /* in EFLAGS */ -#define VIP_FLAG 0x0010 /* in EFLAGS */ -#define VID_FLAG 0x0020 /* in EFLAGS */ +#define RF_FLAG 0x0001 /* in EFLAGS */ +#define VM_FLAG 0x0002 /* in EFLAGS */ +#define VIF_FLAG 0x0008 /* in EFLAGS */ +#define VIP_FLAG 0x0010 /* in EFLAGS */ +#define VID_FLAG 0x0020 /* in EFLAGS */ -#define WP_FLAG 0x10000 /* in CR0 */ -#define CR4_VME (1 << 0) -#define CR4_PVI (1 << 1) -#define CR4_PSE (1 << 4) -#define CR4_PAE (1 << 5) -#define CR4_PGE (1 << 7) +#define WP_FLAG 0x10000 /* in CR0 */ -#define CPL ((cpu_state.seg_cs.access >> 5) & 3) +#define CR4_VME (1 << 0) /* Virtual 8086 Mode Extensions */ +#define CR4_PVI (1 << 1) /* Protected-mode Virtual Interrupts */ +#define CR4_TSD (1 << 2) /* Time Stamp Disable */ +#define CR4_DE (1 << 3) /* Debugging Extensions */ +#define CR4_PSE (1 << 4) /* Page Size Extension */ +#define CR4_PAE (1 << 5) /* Physical Address Extension */ +#define CR4_MCE (1 << 6) /* Machine Check Exception */ +#define CR4_PGE (1 << 7) /* Page Global Enabled */ +#define CR4_PCE (1 << 8) /* Performance-Monitoring Counter enable */ +#define CR4_OSFXSR (1 << 9) /* Operating system support for FXSAVE and FXRSTOR instructions */ -#define IOPL ((cpu_state.flags >> 12) & 3) +#define CPL ((cpu_state.seg_cs.access >> 5) & 3) -#define IOPLp ((!(msw & 1)) || (CPL <= IOPL)) +#define IOPL ((cpu_state.flags >> 12) & 3) + +#define IOPLp ((!(msw & 1)) || (CPL <= IOPL)) typedef union { uint32_t l; @@ -468,15 +474,9 @@ COMPILE_TIME_ASSERT(sizeof(cpu_state_t) <= 128) # define fpu_cycles cpu_state._fpu_cycles #endif -#define cpu_rm cpu_state.rm_data.rm_mod_reg.rm -#define cpu_mod cpu_state.rm_data.rm_mod_reg.mod -#define cpu_reg cpu_state.rm_data.rm_mod_reg.reg - -#define CR4_TSD (1 << 2) -#define CR4_DE (1 << 3) -#define CR4_MCE (1 << 6) -#define CR4_PCE (1 << 8) -#define CR4_OSFXSR (1 << 9) +#define cpu_rm cpu_state.rm_data.rm_mod_reg.rm +#define cpu_mod cpu_state.rm_data.rm_mod_reg.mod +#define cpu_reg cpu_state.rm_data.rm_mod_reg.reg /* Global variables. */ extern cpu_state_t cpu_state; From dd3959587b8ddf7a1ee9413e929563c7b7a0f0ad Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:26:31 -0500 Subject: [PATCH 030/112] Improve a couple of comments --- src/include/86box/hdc.h | 1 + src/video/vid_voodoo_banshee.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/include/86box/hdc.h b/src/include/86box/hdc.h index 68b75b97b..8eb5134b8 100644 --- a/src/include/86box/hdc.h +++ b/src/include/86box/hdc.h @@ -28,6 +28,7 @@ * least 7 devices, with each device being \ * able to support 8 units, but hey... */ +/* Controller types. */ #define HDC_NONE 0 #define HDC_INTERNAL 1 diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 4170dd345..386ac8575 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -1567,7 +1567,7 @@ banshee_reg_writel(uint32_t addr, uint32_t val, void *p) break; case 0x0600000: - case 0x0700000: /*Texture download*/ + case 0x0700000: /*TMU0 Texture download*/ voodoo->tex_count++; voodoo_queue_command(voodoo, (addr & 0x1ffffc) | FIFO_WRITEL_TEX, val); break; From 1615065007c657e9cba9a9e77521a3d8058e9a6b Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:27:17 -0500 Subject: [PATCH 031/112] Fix issues from initial named initializers work --- src/machine/machine_table.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index df740ee2a..2807c1060 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -832,14 +832,14 @@ const machine_t machines[] = { .min_voltage = 0, .max_voltage = 0, .min_multi = 0, - .max_multi = 0, + .max_multi = 0 }, .bus_flags = MACHINE_PC, .flags = MACHINE_FLAGS_NONE, .ram = { .min = 128, .max = 640, - .step = 64, + .step = 64 }, .nvrmask = 0, .kbc = KBC_IBM_PC_XT, @@ -1231,7 +1231,7 @@ const machine_t machines[] = { .max_multi = 0 }, .bus_flags = MACHINE_PC, - MACHINE_FLAGS_NONE, + .flags = MACHINE_FLAGS_NONE, .ram = { .min = 256, .max = 640, @@ -9585,7 +9585,7 @@ const machine_t machines[] = { .min_voltage = 2800, .max_voltage = 3520, .min_multi = 1.5, - .max_multi = 5.5, + .max_multi = 5.5 }, .bus_flags = MACHINE_PS2_PCI, .flags = MACHINE_IDE_DUAL, @@ -11831,7 +11831,7 @@ const machine_t machines[] = { .min_voltage = 1300, .max_voltage = 3500, .min_multi = MACHINE_MULTIPLIER_FIXED, - .max_multi = MACHINE_MULTIPLIER_FIXED, + .max_multi = MACHINE_MULTIPLIER_FIXED }, .bus_flags = MACHINE_PS2_A97, .flags = MACHINE_IDE_DUAL | MACHINE_AG, From 3d825ec6e322c26ade8c7de653a4917654dc623a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:29:16 -0500 Subject: [PATCH 032/112] Clean up disk sizes tables --- src/include/86box/disksizes.h | 70 +++++++++++++++++++++++++++++++++++ src/qt/qt_newfloppydialog.cpp | 38 +++++++++++-------- src/win/win_new_floppy.c | 38 +------------------ 3 files changed, 94 insertions(+), 52 deletions(-) create mode 100644 src/include/86box/disksizes.h diff --git a/src/include/86box/disksizes.h b/src/include/86box/disksizes.h new file mode 100644 index 000000000..e47b82943 --- /dev/null +++ b/src/include/86box/disksizes.h @@ -0,0 +1,70 @@ +/* + * 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 of the emulation of the PC speaker. + * + * + * + * Authors: Jasmine Iwanek + * + * Copyright 2022 Jasmine Iwanek + */ + +#ifndef DISK_SIZES_H +#define DISK_SIZES_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + int hole; + int sides; + int data_rate; + int encoding; + int rpm; + int tracks; + int sectors; /* For IMG and Japanese FDI only. */ + int sector_len; /* For IMG and Japanese FDI only. */ + int media_desc; + int spc; + int num_fats; + int spfat; + int root_dir_entries; +} disk_size_t; + +static const disk_size_t disk_sizes[14] = { +// clang-format off +// { 1, 1, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 250k 8" */ +// { 1, 2, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 500k 8" */ +// { 1, 1, 2, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 616k 8" */ +// { 1, 2, 0, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 1232k 8" */ + { 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 2, 2, 1, 64 }, /* 160k */ + { 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 2, 2, 1, 64 }, /* 180k */ + { 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112 }, /* 320k */ + { 0, 2, 2, 1, 0, 40, 9, 2, 0xfd, 2, 2, 2, 112 }, /* 360k */ + { 0, 2, 2, 1, 0, 80, 8, 2, 0xfb, 2, 2, 2, 112 }, /* 640k */ + { 0, 2, 2, 1, 0, 80, 9, 2, 0xf9, 2, 2, 3, 112 }, /* 720k */ + { 1, 2, 0, 1, 1, 80, 15, 2, 0xf9, 1, 2, 7, 224 }, /* 1.2M */ + { 1, 2, 0, 1, 1, 77, 8, 3, 0xfe, 1, 2, 2, 192 }, /* 1.25M */ + { 1, 2, 0, 1, 0, 80, 18, 2, 0xf0, 1, 2, 9, 224 }, /* 1.44M */ + { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 2, 2, 5, 16 }, /* DMF cluster 1024 */ + { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 4, 2, 3, 16 }, /* DMF cluster 2048 */ + { 2, 2, 3, 1, 0, 80, 36, 2, 0xf0, 2, 2, 9, 240 }, /* 2.88M */ + { 0, 64, 0, 0, 0, 96, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 100 */ + { 0, 64, 0, 0, 0, 239, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 250 */ +// { 0, 8, 0, 0, 0, 963, 32, 2, 0, 0, 0, 0, 0 }, /* LS-120 */ +// { 0, 32, 0, 0, 0, 262, 56, 2, 0, 0, 0, 0, 0 } /* LS-240 */ +// clang-format on +}; + +#ifdef __cplusplus +} +#endif + +#endif /*DISK_SIZES_H*/ diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index bad4fbf9e..cbb021963 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -60,21 +60,29 @@ struct disk_size_t { }; static const disk_size_t disk_sizes[14] = { - {0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 2, 2, 1, 64 }, /* 160k */ - { 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 2, 2, 1, 64 }, /* 180k */ - { 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112}, /* 320k */ - { 0, 2, 2, 1, 0, 40, 9, 2, 0xfd, 2, 2, 2, 112}, /* 360k */ - { 0, 2, 2, 1, 0, 80, 8, 2, 0xfb, 2, 2, 2, 112}, /* 640k */ - { 0, 2, 2, 1, 0, 80, 9, 2, 0xf9, 2, 2, 3, 112}, /* 720k */ - { 1, 2, 0, 1, 1, 80, 15, 2, 0xf9, 1, 2, 7, 224}, /* 1.2M */ - { 1, 2, 0, 1, 1, 77, 8, 3, 0xfe, 1, 2, 2, 192}, /* 1.25M */ - { 1, 2, 0, 1, 0, 80, 18, 2, 0xf0, 1, 2, 9, 224}, /* 1.44M */ - { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 2, 2, 5, 16 }, /* DMF cluster 1024 */ - { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 4, 2, 3, 16 }, /* DMF cluster 2048 */ - { 2, 2, 3, 1, 0, 80, 36, 2, 0xf0, 2, 2, 9, 240}, /* 2.88M */ - { 0, 64, 0, 0, 0, 96, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 100 */ - { 0, 64, 0, 0, 0, 239, 32, 2, 0, 0, 0, 0, 0 } -}; /* ZIP 250 */ +// clang-format off +// { 1, 1, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 250k 8" */ +// { 1, 2, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 500k 8" */ +// { 1, 1, 2, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 616k 8" */ +// { 1, 2, 0, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 1232k 8" */ + { 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 2, 2, 1, 64 }, /* 160k */ + { 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 2, 2, 1, 64 }, /* 180k */ + { 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112 }, /* 320k */ + { 0, 2, 2, 1, 0, 40, 9, 2, 0xfd, 2, 2, 2, 112 }, /* 360k */ + { 0, 2, 2, 1, 0, 80, 8, 2, 0xfb, 2, 2, 2, 112 }, /* 640k */ + { 0, 2, 2, 1, 0, 80, 9, 2, 0xf9, 2, 2, 3, 112 }, /* 720k */ + { 1, 2, 0, 1, 1, 80, 15, 2, 0xf9, 1, 2, 7, 224 }, /* 1.2M */ + { 1, 2, 0, 1, 1, 77, 8, 3, 0xfe, 1, 2, 2, 192 }, /* 1.25M */ + { 1, 2, 0, 1, 0, 80, 18, 2, 0xf0, 1, 2, 9, 224 }, /* 1.44M */ + { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 2, 2, 5, 16 }, /* DMF cluster 1024 */ + { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 4, 2, 3, 16 }, /* DMF cluster 2048 */ + { 2, 2, 3, 1, 0, 80, 36, 2, 0xf0, 2, 2, 9, 240 }, /* 2.88M */ + { 0, 64, 0, 0, 0, 96, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 100 */ + { 0, 64, 0, 0, 0, 239, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 250 */ +// { 0, 8, 0, 0, 0, 963, 32, 2, 0, 0, 0, 0, 0 }, /* LS-120 */ +// { 0, 32, 0, 0, 0, 262, 56, 2, 0, 0, 0, 0, 0 } /* LS-240 */ +// clang-format on +}; static const QStringList rpmModes = { "Perfect RPM", diff --git a/src/win/win_new_floppy.c b/src/win/win_new_floppy.c index 33807a78e..6e3f765f0 100644 --- a/src/win/win_new_floppy.c +++ b/src/win/win_new_floppy.c @@ -26,6 +26,7 @@ #include #include #include <86box/86box.h> +#include <86box/disksizes.h> #include <86box/plat.h> #include <86box/random.h> #include <86box/ui.h> @@ -34,43 +35,6 @@ #include <86box/zip.h> #include <86box/win.h> -typedef struct { - int hole; - int sides; - int data_rate; - int encoding; - int rpm; - int tracks; - int sectors; /* For IMG and Japanese FDI only. */ - int sector_len; /* For IMG and Japanese FDI only. */ - int media_desc; - int spc; - int num_fats; - int spfat; - int root_dir_entries; -} disk_size_t; - -static const disk_size_t disk_sizes[14] = { - // { 1, 1, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 250k 8" */ - // { 1, 2, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 500k 8" */ - // { 1, 1, 2, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 616k 8" */ - // { 1, 2, 0, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 1232k 8" */ - {0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 1, 2, 1, 64 }, /* 160k */ - { 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 1, 2, 2, 64 }, /* 180k */ - { 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112}, /* 320k */ - { 0, 2, 2, 1, 0, 40, 9, 2, 0xfd, 2, 2, 2, 112}, /* 360k */ - { 0, 2, 2, 1, 0, 80, 8, 2, 0xfb, 2, 2, 2, 112}, /* 640k */ - { 0, 2, 2, 1, 0, 80, 9, 2, 0xf9, 2, 2, 3, 112}, /* 720k */ - { 1, 2, 0, 1, 1, 80, 15, 2, 0xf9, 1, 2, 7, 224}, /* 1.2M */ - { 1, 2, 0, 1, 1, 77, 8, 3, 0xfe, 1, 2, 2, 192}, /* 1.25M */ - { 1, 2, 0, 1, 0, 80, 18, 2, 0xf0, 1, 2, 9, 224}, /* 1.44M */ - { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 2, 2, 5, 16 }, /* DMF cluster 1024 */ - { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 4, 2, 3, 16 }, /* DMF cluster 2048 */ - { 2, 2, 3, 1, 0, 80, 36, 2, 0xf0, 2, 2, 9, 240}, /* 2.88M */ - { 0, 64, 0, 0, 0, 96, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 100 */ - { 0, 64, 0, 0, 0, 239, 32, 2, 0, 0, 0, 0, 0 } -}; /* ZIP 250 */ - static unsigned char *empty; static int From 0bf0520bd527f424f10988ef18ce7b3db87b17cc Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:29:54 -0500 Subject: [PATCH 033/112] slirp makefile & cmake tidying --- src/network/slirp/CMakeLists.txt | 9 ++++++--- src/win/Makefile.mingw | 11 ++++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/network/slirp/CMakeLists.txt b/src/network/slirp/CMakeLists.txt index f3fa9348b..a2c82e642 100644 --- a/src/network/slirp/CMakeLists.txt +++ b/src/network/slirp/CMakeLists.txt @@ -13,9 +13,12 @@ # Copyright 2020,2021 David Hrdlička. # -add_library(slirp STATIC arp_table.c bootp.c cksum.c dnssearch.c if.c ip_icmp.c - ip_input.c ip_output.c mbuf.c misc.c sbuf.c slirp.c socket.c tcp_input.c - tcp_output.c tcp_subr.c tcp_timer.c udp.c util.c version.c) +add_library(slirp STATIC arp_table.c bootp.c cksum.c dnssearch.c if.c + ip_icmp.c ip_input.c ip_output.c + mbuf.c misc.c sbuf.c slirp.c socket.c + tcp_input.c tcp_output.c tcp_subr.c tcp_timer.c + udp.c + util.c version.c) if(WIN32) target_link_libraries(slirp wsock32 iphlpapi) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index a800dd957..4ac33d40f 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -644,12 +644,17 @@ SCSIOBJ := scsi.o scsi_device.o \ scsi_ncr5380.o scsi_ncr53c8xx.o \ scsi_pcscsi.o scsi_spock.o +SLIRPOBJ := arp_table.o bootp.o cksum.o dnssearch.o if.o \ + ip_icmp.o ip_input.o ip_output.o \ + mbuf.o misc.o sbuf.o slirp.o socket.o \ + tcp_input.o tcp_output.o tcp_subr.o tcp_timer.o \ + udp.o \ + util.o version.o \ + NETOBJ := network.o \ net_pcap.o \ net_slirp.o tinyglib.o \ - arp_table.o bootp.o cksum.o dnssearch.o if.o ip_icmp.o ip_input.o \ - ip_output.o mbuf.o misc.o sbuf.o slirp.o socket.o tcp_input.o \ - tcp_output.o tcp_subr.o tcp_timer.o udp.o util.o version.o \ + ${SLIRPOBJ} \ net_dp8390.o net_3c501.o \ net_3c503.o net_ne2000.o \ net_pcnet.o net_wd8003.o \ From 9acb39a02e87def48f0d0fd60b1c155f3e8d6ded Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:30:18 -0500 Subject: [PATCH 034/112] Remove obsolete hook --- src/scsi/scsi.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/scsi/scsi.c b/src/scsi/scsi.c index 5f9abe8d6..4e82f67fa 100644 --- a/src/scsi/scsi.c +++ b/src/scsi/scsi.c @@ -41,9 +41,6 @@ #include <86box/scsi_ncr53c8xx.h> #include <86box/scsi_pcscsi.h> #include <86box/scsi_spock.h> -#ifdef WALTJE -# include "scsi_wd33c93.h" -#endif int scsi_card_current[SCSI_BUS_MAX] = { 0, 0 }; @@ -85,9 +82,6 @@ static SCSI_CARD scsi_cards[] = { { &scsi_rt1000mc_device, }, { &scsi_t128_device, }, { &scsi_t130b_device, }, -#ifdef WALTJE - { &scsi_wd33c93_device, }, -#endif { &aha1640_device, }, { &buslogic_640a_device, }, { &ncr53c90_mca_device, }, From 4cf7472ce2ea99961bb43d163c7b35966832a4b8 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 19:33:23 -0500 Subject: [PATCH 035/112] Fix PCNet logging --- src/network/net_pcnet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/net_pcnet.c b/src/network/net_pcnet.c index e1f62c874..7b48b063f 100644 --- a/src/network/net_pcnet.c +++ b/src/network/net_pcnet.c @@ -1486,7 +1486,7 @@ pcnetAsyncTransmit(nic_t *dev) */ if (tmd.tmd1.stp && tmd.tmd1.enp) { const int cb = 4096 - tmd.tmd1.bcnt; - pcnet_log("%s: pcnetAsyncTransmit: stp&enp: cb=%d xmtrc=%#x\n", dev->name, cb, CSR_XMTRC(dev)); + pcnet_log(3, "%s: pcnetAsyncTransmit: stp&enp: cb=%d xmtrc=%#x\n", dev->name, cb, CSR_XMTRC(dev)); if ((pcnetIsLinkUp(dev) || fLoopback)) { From aae9e1e408e01dacb2a594dacf6e47d5903b2037 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 21:23:55 -0500 Subject: [PATCH 036/112] Initial Monster FDC support --- src/floppy/CMakeLists.txt | 5 +- src/floppy/fdc.c | 3 + src/floppy/fdc_monster.c | 193 ++++++++++++++++++++++++++++++++++++++ src/win/Makefile.mingw | 2 +- 4 files changed, 200 insertions(+), 3 deletions(-) create mode 100644 src/floppy/fdc_monster.c diff --git a/src/floppy/CMakeLists.txt b/src/floppy/CMakeLists.txt index 005e5bc57..70bae154e 100644 --- a/src/floppy/CMakeLists.txt +++ b/src/floppy/CMakeLists.txt @@ -13,5 +13,6 @@ # Copyright 2020,2021 David Hrdlička. # -add_library(fdd OBJECT fdd.c fdc.c fdc_magitronic.c fdc_pii15xb.c fdi2raw.c fdd_common.c - fdd_86f.c fdd_fdi.c fdd_imd.c fdd_img.c fdd_json.c fdd_mfm.c fdd_td0.c) +add_library(fdd OBJECT fdd.c fdc.c fdc_magitronic.c fdc_monster.c fdc_pii15xb.c + fdi2raw.c fdd_common.c fdd_86f.c fdd_fdi.c fdd_imd.c fdd_img.c fdd_json.c + fdd_mfm.c fdd_td0.c) diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index fbc95be8a..cb4f34cf2 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -2276,6 +2276,9 @@ fdc_reset(void *priv) if (fdc->flags & FDC_FLAG_PCJR) { fdc->dma = 0; fdc->specify[1] = 1; + } else if (fdc->flags & FDC_FLAG_SEC) { + fdc->dma = 1; + fdc->specify[1] = 0; } else { fdc->dma = 1; fdc->specify[1] = 0; diff --git a/src/floppy/fdc_monster.c b/src/floppy/fdc_monster.c new file mode 100644 index 000000000..b98934f3e --- /dev/null +++ b/src/floppy/fdc_monster.c @@ -0,0 +1,193 @@ +/* + * 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. + * + * Emulation of Sergey Kiselev's Monster Floppy Disk Controller. + * + * + * + * Authors: Jasmine Iwanek, + * + * Copyright 2022 Jasmine Iwanek. + */ + +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/io.h> +#include <86box/mem.h> +#include <86box/rom.h> +#include <86box/machine.h> +#include <86box/timer.h> +#include <86box/fdd.h> +#include <86box/fdc.h> +#include <86box/fdc_ext.h> + +#define BIOS_ADDR (uint32_t)(device_get_config_hex20("bios_addr") & 0x000fffff) +#define ROM_MONSTER_FDC "roms/floppy/monster-fdc/floppy_bios.rom" + +typedef struct +{ + rom_t bios_rom; +} monster_fdc_t; + +static void +monster_fdc_close(void *priv) +{ + monster_fdc_t *dev = (monster_fdc_t *)priv; + + free(dev); +} + +static void * +monster_fdc_init(const device_t *info) +{ + monster_fdc_t *dev; + + dev = (monster_fdc_t *)malloc(sizeof(monster_fdc_t)); + memset(dev, 0, sizeof(monster_fdc_t)); + + if (BIOS_ADDR != 0) + rom_init(&dev->bios_rom, ROM_MONSTER_FDC, BIOS_ADDR, 0x2000, 0x1ffff, 0, MEM_MAPPING_EXTERNAL); + + // Primary FDC + device_add(&fdc_at_device); + + // Secondary FDC + // device_add(&fdc_at_sec_device); + + return dev; +} + +static int monster_fdc_available(void) +{ + return rom_present(ROM_MONSTER_FDC); +} + +static const device_config_t monster_fdc_config[] = { +// clang-format off +/* + { + .name = "sec_irq", + .description = "Secondary Controller IRQ", + .type = CONFIG_SELECTION, + .default_string = "", + .default_int = 6, + .file_filter = "", + .spinner = { 0 }, + .selection = { + { + .description = "IRQ 2", + .value = 2 + }, + { + .description = "IRQ 3", + .value = 3 + }, + { + .description = "IRQ 4", + .value = 4 + }, + { + .description = "IRQ 5", + .value = 5 + }, + { + .description = "IRQ 6", + .value = 6 + }, + { + .description = "IRQ 7", + .value = 7 + }, + { .description = "" } + } + }, + { + .name = "sec_dma", + .description = "Secondary Controller DMA", + .type = CONFIG_SELECTION, + .default_string = "", + .default_int = 2, + .file_filter = "", + .spinner = { 0 }, + .selection = { + { + .description = "DMA 1", + .value = 1 + }, + { + .description = "DMA 2", + .value = 2 + }, + { + .description = "DMA 3", + .value = 3 + }, + { .description = "" } + } + }, +*/ + { + .name = "bios_addr", + .description = "BIOS Address:", + .type = CONFIG_HEX20, + .default_string = "", + .default_int = 0xc8000, + .file_filter = "", + .spinner = { 0 }, + .selection = { + { .description = "Disabled", .value = 0 }, + { .description = "C000H", .value = 0xc0000 }, + { .description = "C800H", .value = 0xc8000 }, + { .description = "D000H", .value = 0xd0000 }, + { .description = "D800H", .value = 0xd8000 }, + { .description = "E000H", .value = 0xe0000 }, + { .description = "E800H", .value = 0xe8000 }, + { .description = "" } + } + }, +/* + { + .name = "bios_size", + .description = "BIOS Size:", + .type = CONFIG_HEX20, + .default_string = "32", + .default_int = 0xc8000, + .file_filter = "", + .spinner = { 0 }, + .selection = { + { .description = "8K", .value = 8 }, + { .description = "32K", .value = 32 }, + { .description = "" } + } + }, +*/ + // BIOS extension ROM writes: Enabled/Disabled + { .name = "", .description = "", .type = CONFIG_END } +// clang-format on +}; + +const device_t fdc_monster_device = { + .name = "Monster FDC Floppy Drive Controller", + .internal_name = "monster_fdc", + .flags = DEVICE_ISA, + .local = 0, + .init = monster_fdc_init, + .close = monster_fdc_close, + .reset = NULL, + { .available = monster_fdc_available }, + .speed_changed = NULL, + .force_redraw = NULL, + .config =monster_fdc_config +}; diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index a800dd957..0a361c822 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -605,7 +605,7 @@ SIOOBJ := sio_acc3221.o sio_ali5123.o \ sio_um8669f.o \ sio_vt82c686.o -FDDOBJ := fdd.o fdc.o fdc_magitronic.o fdc_pii15xb.o \ +FDDOBJ := fdd.o fdc.o fdc_magitronic.o fdc_monster.o fdc_pii15xb.o \ fdi2raw.o \ fdd_common.o fdd_86f.o \ fdd_fdi.o fdd_imd.o fdd_img.o fdd_json.o \ From a93efb68e134b169cd525739840f8d72717bb60a Mon Sep 17 00:00:00 2001 From: Alexander Babikov <2708460+lemondrops@users.noreply.github.com> Date: Sun, 4 Dec 2022 22:45:51 +0500 Subject: [PATCH 037/112] Add a version of the XTIDE Universal BIOS for V20/V30 CPUs --- src/disk/hdc.c | 1 + src/disk/hdc_xtide.c | 30 ++++++++++++++++++++++++++++-- src/include/86box/hdc.h | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/disk/hdc.c b/src/disk/hdc.c index 2a20d8987..8b75ac320 100644 --- a/src/disk/hdc.c +++ b/src/disk/hdc.c @@ -103,6 +103,7 @@ static const struct { { &xta_wdxt150_device }, { &xtide_acculogic_device }, { &xtide_device }, + { &xtide_plus_device }, { &esdi_ps2_device }, { &ide_pci_device }, { &ide_pci_2ch_device }, diff --git a/src/disk/hdc_xtide.c b/src/disk/hdc_xtide.c index 339547699..45b8dde54 100644 --- a/src/disk/hdc_xtide.c +++ b/src/disk/hdc_xtide.c @@ -45,6 +45,7 @@ #include <86box/hdc_ide.h> #define ROM_PATH_XT "roms/hdd/xtide/ide_xt.bin" +#define ROM_PATH_XTP "roms/hdd/xtide/ide_xtp.bin" #define ROM_PATH_AT "roms/hdd/xtide/ide_at.bin" #define ROM_PATH_PS2 "roms/hdd/xtide/SIDE1V12.BIN" #define ROM_PATH_PS2AT "roms/hdd/xtide/ide_at_1_1_5.bin" @@ -130,8 +131,13 @@ xtide_init(const device_t *info) memset(xtide, 0x00, sizeof(xtide_t)); - rom_init(&xtide->bios_rom, ROM_PATH_XT, - 0xc8000, 0x2000, 0x1fff, 0, MEM_MAPPING_EXTERNAL); + if (info->local == 1) { + rom_init(&xtide->bios_rom, ROM_PATH_XTP, + 0xc8000, 0x2000, 0x1fff, 0, MEM_MAPPING_EXTERNAL); + } else { + rom_init(&xtide->bios_rom, ROM_PATH_XT, + 0xc8000, 0x2000, 0x1fff, 0, MEM_MAPPING_EXTERNAL); + } xtide->ide_board = ide_xtide_init(); @@ -148,6 +154,12 @@ xtide_available(void) return (rom_present(ROM_PATH_XT)); } +static int +xtide_plus_available(void) +{ + return (rom_present(ROM_PATH_XTP)); +} + static void * xtide_at_init(const device_t *info) { @@ -258,6 +270,20 @@ const device_t xtide_device = { .config = NULL }; +const device_t xtide_plus_device = { + .name = "PC/XT XTIDE (V20/V30/8018x)", + .internal_name = "xtide_plus", + .flags = DEVICE_ISA, + .local = 1, + .init = xtide_init, + .close = xtide_close, + .reset = NULL, + { .available = xtide_plus_available }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t xtide_at_device = { .name = "PC/AT XTIDE", .internal_name = "xtide_at", diff --git a/src/include/86box/hdc.h b/src/include/86box/hdc.h index 8eb5134b8..6b54e15e8 100644 --- a/src/include/86box/hdc.h +++ b/src/include/86box/hdc.h @@ -79,6 +79,7 @@ extern const device_t xta_wdxt150_device; /* xta_wdxt150 */ extern const device_t xta_hd20_device; /* EuroPC internal */ extern const device_t xtide_device; /* xtide_xt */ +extern const device_t xtide_plus_device; /* xtide_xt_plus */ extern const device_t xtide_at_device; /* xtide_at */ extern const device_t xtide_at_386_device; /* xtide_at_386 */ extern const device_t xtide_acculogic_device; /* xtide_ps2 */ From b60d119ad8011b47769e3ef6f861fa75aaf52741 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 20 Dec 2022 23:12:41 -0500 Subject: [PATCH 038/112] Add Western Digital WDXT-GEN --- src/disk/hdc.c | 1 + src/disk/hdc_st506_xt.c | 31 ++++++++++++++++++++++++++++++- src/include/86box/hdc.h | 1 + 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/disk/hdc.c b/src/disk/hdc.c index 8b75ac320..0e58b6473 100644 --- a/src/disk/hdc.c +++ b/src/disk/hdc.c @@ -84,6 +84,7 @@ static const struct { { &hdc_none_device }, { &hdc_internal_device }, { &st506_xt_xebec_device }, + { &st506_xt_wdxt_gen_device }, { &st506_xt_dtc5150x_device }, { &st506_xt_st11_m_device }, { &st506_xt_wd1002a_wx1_device }, diff --git a/src/disk/hdc_st506_xt.c b/src/disk/hdc_st506_xt.c index f130a58d5..343e42853 100644 --- a/src/disk/hdc_st506_xt.c +++ b/src/disk/hdc_st506_xt.c @@ -88,7 +88,8 @@ #include <86box/hdd.h> #define ST506_XT_TYPE_XEBEC 0 -#define ST506_XT_TYPE_DTC_5150X 1 +#define ST506_XT_TYPE_WDXT_GEN 1 +#define ST506_XT_TYPE_DTC_5150X 2 #define ST506_XT_TYPE_ST11M 11 #define ST506_XT_TYPE_ST11R 12 #define ST506_XT_TYPE_WD1002A_WX1 21 @@ -101,6 +102,7 @@ #define ST506_XT_TYPE_TOSHIBA_T1200 28 #define XEBEC_BIOS_FILE "roms/hdd/st506/ibm_xebec_62x0822_1985.bin" +#define WDXT_GEN_BIOS_FILE "roms/hdd/st506/wdxt-gen/62-000128-000.bin" #define DTC_BIOS_FILE "roms/hdd/st506/dtc_cxd21a.bin" #define ST11_BIOS_FILE_OLD "roms/hdd/st506/st11_bios_vers_1.7.bin" #define ST11_BIOS_FILE_NEW "roms/hdd/st506/st11_bios_vers_2.0.bin" @@ -1335,6 +1337,15 @@ mem_read(uint32_t addr, void *priv) } break; + case ST506_XT_TYPE_WDXT_GEN /* WDXT-GEN */ + if (addr >= 0x002000) { +#ifdef ENABLE_ST506_XT_LOG + st506_xt_log("ST506: WDXT-GEN ROM access(0x%06lx)\n", addr); +#endif + return 0xff; + } + break; + case ST506_XT_TYPE_DTC_5150X: /* DTC */ default: if (addr >= 0x002000) { @@ -1519,6 +1530,10 @@ st506_init(const device_t *info) fn = XEBEC_BIOS_FILE; break; + case ST506_XT_TYPE_WDXT_GEN: /* WDXT-GEN (MFM) */ + fn = WDXT_GEN_BIOS_FILE; + break; + case ST506_XT_TYPE_DTC_5150X: /* DTC5150 (MFM) */ fn = DTC_BIOS_FILE; dev->switches = 0xff; @@ -2124,6 +2139,20 @@ const device_t st506_xt_xebec_device = { .config = NULL }; +const device_t st506_xt_wdxt_gen_device = { + .name = "Western Digital WDXT-GEN (MFM)", + .internal_name = "st506_xt", + .flags = DEVICE_ISA, + .local = (HDD_BUS_MFM << 8) | ST506_XT_TYPE_WDXT_GEN, + .init = st506_init, + .close = st506_close, + .reset = NULL, + { .available = xebec_available }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t st506_xt_dtc5150x_device = { .name = "DTC 5150X MFM Fixed Disk Adapter", .internal_name = "st506_xt_dtc5150x", diff --git a/src/include/86box/hdc.h b/src/include/86box/hdc.h index 6b54e15e8..4320d86e2 100644 --- a/src/include/86box/hdc.h +++ b/src/include/86box/hdc.h @@ -35,6 +35,7 @@ extern int hdc_current; extern const device_t st506_xt_xebec_device; /* st506_xt_xebec */ +extern const device_t st506_xt_wdxt_gen_device; /* st506_xt_wdxt_gen */ extern const device_t st506_xt_dtc5150x_device; /* st506_xt_dtc */ extern const device_t st506_xt_st11_m_device; /* st506_xt_st11_m */ extern const device_t st506_xt_st11_r_device; /* st506_xt_st11_m */ From e6a87f3c3f2e521ad718d82a743945a998c8778a Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 21 Dec 2022 01:39:34 +0600 Subject: [PATCH 039/112] cl54xx: clear only FLAG_EXT_WRITE and FLAG_ADDR_BY16 --- src/video/vid_cl54xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index a1effc16a..f079bff9f 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -895,7 +895,7 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p) else { svga->gdcreg[5] &= ~0x04; svga->writemode = svga->gdcreg[5] & 3; - svga->adv_flags = 0; + svga->adv_flags &= (FLAG_EXTRA_BANKS | FLAG_ADDR_BY8 | FLAG_LATCH8); svga->gdcreg[0] &= 0x0f; gd543x_mmio_write(0xb8000, svga->gdcreg[0], gd54xx); svga->gdcreg[1] &= 0x0f; From 261e20ba736b8c83de2bc97afe059a53f7d35dd0 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 21 Dec 2022 14:35:56 +0600 Subject: [PATCH 040/112] cl54xx: clear GR1 and GR0 when disabling enabled extensions --- src/video/vid_cl54xx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index f079bff9f..6b7223761 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -876,8 +876,6 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p) svga_recalctimings(svga); } else { switch (svga->gdcaddr) { - case 0x09: - case 0x0a: case 0x0b: svga->adv_flags = 0; if (svga->gdcreg[0xb] & 0x01) @@ -888,11 +886,11 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p) svga->adv_flags |= FLAG_EXT_WRITE; if (svga->gdcreg[0xb] & 0x08) svga->adv_flags |= FLAG_LATCH8; - if (svga->gdcreg[0xb] & 0x10) + if ((svga->gdcreg[0xb] & 0x10) && (svga->adv_flags & FLAG_EXT_WRITE)) svga->adv_flags |= FLAG_ADDR_BY16; if (svga->gdcreg[0xb] & 0x04) svga->writemode = svga->gdcreg[5] & 7; - else { + else if (o & 0x4) { svga->gdcreg[5] &= ~0x04; svga->writemode = svga->gdcreg[5] & 3; svga->adv_flags &= (FLAG_EXTRA_BANKS | FLAG_ADDR_BY8 | FLAG_LATCH8); @@ -902,6 +900,8 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p) gd543x_mmio_write(0xb8004, svga->gdcreg[1], gd54xx); svga->seqregs[2] &= 0x0f; } + case 0x09: + case 0x0a: gd54xx_recalc_banking(gd54xx); break; From 611dc36f59375e938ca93355fcc27e79a5efb778 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Wed, 21 Dec 2022 03:55:00 -0500 Subject: [PATCH 041/112] FIx a silly mistake --- src/disk/hdc_st506_xt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/disk/hdc_st506_xt.c b/src/disk/hdc_st506_xt.c index 343e42853..88bf8c2c9 100644 --- a/src/disk/hdc_st506_xt.c +++ b/src/disk/hdc_st506_xt.c @@ -1337,7 +1337,7 @@ mem_read(uint32_t addr, void *priv) } break; - case ST506_XT_TYPE_WDXT_GEN /* WDXT-GEN */ + case ST506_XT_TYPE_WDXT_GEN: /* WDXT-GEN */ if (addr >= 0x002000) { #ifdef ENABLE_ST506_XT_LOG st506_xt_log("ST506: WDXT-GEN ROM access(0x%06lx)\n", addr); From 82c9ce1d210abe4e04c9fa44c2fe270d687c97b4 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 21 Dec 2022 15:10:19 +0600 Subject: [PATCH 042/112] CL-GD5436 leaves GR0 and GR1 untouched --- src/video/vid_cl54xx.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index 6b7223761..8f145fc56 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -894,10 +894,12 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p) svga->gdcreg[5] &= ~0x04; svga->writemode = svga->gdcreg[5] & 3; svga->adv_flags &= (FLAG_EXTRA_BANKS | FLAG_ADDR_BY8 | FLAG_LATCH8); - svga->gdcreg[0] &= 0x0f; - gd543x_mmio_write(0xb8000, svga->gdcreg[0], gd54xx); - svga->gdcreg[1] &= 0x0f; - gd543x_mmio_write(0xb8004, svga->gdcreg[1], gd54xx); + if (svga->crtc[0x27] != CIRRUS_ID_CLGD5436) { + svga->gdcreg[0] &= 0x0f; + gd543x_mmio_write(0xb8000, svga->gdcreg[0], gd54xx); + svga->gdcreg[1] &= 0x0f; + gd543x_mmio_write(0xb8004, svga->gdcreg[1], gd54xx); + } svga->seqregs[2] &= 0x0f; } case 0x09: From d4ed4a57dfbd0c079f5b7aee9f6442b4c9f6184f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 21 Dec 2022 15:41:11 +0600 Subject: [PATCH 043/112] cl54xx: Device ID remains constant and read only --- src/video/vid_cl54xx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index 8f145fc56..c3fd19e58 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -1031,6 +1031,8 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p) case 0x3d5: if (((svga->crtcreg == 0x19) || (svga->crtcreg == 0x1a) || (svga->crtcreg == 0x1b) || (svga->crtcreg == 0x1d) || (svga->crtcreg == 0x25) || (svga->crtcreg == 0x27)) && !gd54xx->unlocked) return; + if ((svga->crtcreg == 0x25) || (svga->crtcreg == 0x27)) + return; if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) return; if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) From 533004490a2d9e27e7e0710868562f83e1aa196f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 21 Dec 2022 23:31:06 +0600 Subject: [PATCH 044/112] Backport commit e1e3475bd482e3350a2ec442a0a9fda8ba5cff06 from PCem --- src/sound/snd_audiopci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sound/snd_audiopci.c b/src/sound/snd_audiopci.c index b02243855..ecac7f05a 100644 --- a/src/sound/snd_audiopci.c +++ b/src/sound/snd_audiopci.c @@ -1958,7 +1958,7 @@ generate_es1371_filter(void) for (n = 0; n < ES1371_NCoef; n++) gain += low_fir_es1371_coef[n] / (float) N; - gain /= 0.95; + gain /= 0.65; /* Normalise filter, to produce unity gain */ for (n = 0; n < ES1371_NCoef; n++) From 28baa5168f6ee8991779077b262717348faa5d11 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Wed, 21 Dec 2022 16:14:59 -0500 Subject: [PATCH 045/112] Correct mistakes --- src/floppy/fdc.c | 1 + src/floppy/fdc_monster.c | 2 +- src/include/86box/fdc_ext.h | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index cb4f34cf2..2abc4a8f5 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -135,6 +135,7 @@ static fdc_cards_t fdc_cards[] = { { &fdc_b215_device }, { &fdc_pii151b_device }, { &fdc_pii158b_device }, + { &fdc_monster_device }, { NULL } // clang-format on }; diff --git a/src/floppy/fdc_monster.c b/src/floppy/fdc_monster.c index b98934f3e..2cd1d9b05 100644 --- a/src/floppy/fdc_monster.c +++ b/src/floppy/fdc_monster.c @@ -34,7 +34,7 @@ #include <86box/fdc_ext.h> #define BIOS_ADDR (uint32_t)(device_get_config_hex20("bios_addr") & 0x000fffff) -#define ROM_MONSTER_FDC "roms/floppy/monster-fdc/floppy_bios.rom" +#define ROM_MONSTER_FDC "roms/floppy/monster-fdc/floppy_bios.bin" typedef struct { diff --git a/src/include/86box/fdc_ext.h b/src/include/86box/fdc_ext.h index 60d93efc6..2287978c1 100644 --- a/src/include/86box/fdc_ext.h +++ b/src/include/86box/fdc_ext.h @@ -31,6 +31,8 @@ extern const device_t fdc_b215_device; extern const device_t fdc_pii151b_device; extern const device_t fdc_pii158b_device; +extern const device_t fdc_monster_device; + extern void fdc_card_init(void); extern char *fdc_card_get_internal_name(int card); From e0c797a20fab5529f292d6aedfc76df01fd3f78e Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 22 Dec 2022 02:30:25 +0100 Subject: [PATCH 046/112] Added WD XTA BIOS revision selection using the new CONFIG_BIOS infrastructure and some related fixes in the Win32 code. --- src/device.c | 33 +++++++++++++++++++++++++++++++++ src/disk/hdc_xta.c | 31 ++++++++++++++++++++++--------- src/include/86box/device.h | 5 +++-- src/win/win_devconf.c | 7 +++++-- 4 files changed, 63 insertions(+), 13 deletions(-) diff --git a/src/device.c b/src/device.c index ef0b59b2b..a13825307 100644 --- a/src/device.c +++ b/src/device.c @@ -347,6 +347,39 @@ device_available(const device_t *d) return (0); } +const char * +device_get_bios_file(const device_t *d, const char *internal_name, int file_no) +{ + device_config_t *config = NULL; + device_config_bios_t *bios = NULL; + + if (d != NULL) { + config = (device_config_t *) d->config; + if (config != NULL) { + while (config->type != -1) { + if (config->type == CONFIG_BIOS) { + bios = (device_config_bios_t *) config->bios; + + /* Go through the ROM's in the device configuration. */ + while (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); +} + int device_has_config(const device_t *d) { diff --git a/src/disk/hdc_xta.c b/src/disk/hdc_xta.c index c6abf9adf..589ec2789 100644 --- a/src/disk/hdc_xta.c +++ b/src/disk/hdc_xta.c @@ -104,7 +104,8 @@ #define HDC_TIME (50 * TIMER_USEC) -#define WD_BIOS_FILE "roms/hdd/xta/idexywd2.bin" +#define WD_REV_1_BIOS_FILE "roms/hdd/xta/idexywd2.bin" +#define WD_REV_2_BIOS_FILE "roms/hdd/xta/infowdbios.rom" enum { STATE_IDLE = 0, @@ -962,16 +963,11 @@ hdc_write(uint16_t port, uint8_t val, void *priv) } } -static int -xta_available(void) -{ - return (rom_present(WD_BIOS_FILE)); -} - static void * xta_init(const device_t *info) { drive_t *drive; + char *bios_rev = NULL; char *fn = NULL; hdc_t *dev; int c, i; @@ -990,7 +986,8 @@ xta_init(const device_t *info) dev->irq = device_get_config_int("irq"); dev->rom_addr = device_get_config_hex20("bios_addr"); dev->dma = 3; - fn = WD_BIOS_FILE; + bios_rev = (char *) device_get_config_bios("bios_rev"); + fn = (char *) device_get_bios_file(info, (const char *) bios_rev, 0); max = 1; break; @@ -1123,6 +1120,22 @@ static const device_config_t wdxt150_config[] = { { .description = "" } }, }, + { + .name = "bios_rev", + .description = "BIOS Revision", + .type = CONFIG_BIOS, + .default_string = "rev_1", + .default_int = 0, + .file_filter = "", + .spinner = { 0 }, /*W1*/ + .bios = { + { .name = "Revision 1.0", .internal_name = "rev_1", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 8192, .files = { WD_REV_1_BIOS_FILE, "" } }, + { .name = "Revision 2.0", .internal_name = "rev_2", .bios_type = BIOS_NORMAL, + .files_no = 1, .local = 0, .size = 8192, .files = { WD_REV_2_BIOS_FILE, "" } }, + { .files_no = 0 } + }, + }, { .name = "", .description = "", .type = CONFIG_END } // clang-format off }; @@ -1135,7 +1148,7 @@ const device_t xta_wdxt150_device = { .init = xta_init, .close = xta_close, .reset = NULL, - { .available = xta_available }, + { .available = NULL /*xta_available*/ }, .speed_changed = NULL, .force_redraw = NULL, .config = wdxt150_config diff --git a/src/include/86box/device.h b/src/include/86box/device.h index a8d100acc..ca4e6bdf2 100644 --- a/src/include/86box/device.h +++ b/src/include/86box/device.h @@ -90,7 +90,7 @@ typedef struct { int files_no; uint32_t local, size; void *dev1, *dev2; - const char **files; + const char *files[9]; } device_config_bios_t; typedef struct { @@ -108,7 +108,7 @@ typedef struct { const char *file_filter; const device_config_spinner_t spinner; const device_config_selection_t selection[16]; - const device_config_bios_t *bios; + const device_config_bios_t bios[32]; } device_config_t; typedef struct _device_ { @@ -164,6 +164,7 @@ extern void device_speed_changed(void); extern void device_force_redraw(void); extern void device_get_name(const device_t *d, int bus, char *name); extern int device_has_config(const device_t *d); +extern const char *device_get_bios_file(const device_t *d, const char *internal_name, int file_no); extern int device_is_valid(const device_t *, int m); diff --git a/src/win/win_devconf.c b/src/win/win_devconf.c index fee446310..c867dab9f 100644 --- a/src/win/win_devconf.c +++ b/src/win/win_devconf.c @@ -108,7 +108,7 @@ deviceconfig_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) c = 0; q = 0; - while (bios && bios->name && bios->name[0]) { + while (bios && (bios->files_no > 0)) { mbstowcs(lptsTemp, bios->name, strlen(bios->name) + 1); p = 0; for (d = 0; d < bios->files_no; d++) @@ -218,7 +218,6 @@ deviceconfig_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) if (cid == IDOK) { id = IDC_CONFIG_BASE; config = config_device.dev->config; - bios = config->bios; changed = 0; char s[512]; @@ -251,6 +250,8 @@ deviceconfig_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) id += 2; break; case CONFIG_BIOS: + bios = config->bios; + val_str = config_get_string((char *) config_device.name, (char *) config->name, (char *) config->default_string); @@ -375,6 +376,7 @@ deviceconfig_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) id += 2; break; case CONFIG_BIOS: + bios = config->bios; c = combo_to_struct[SendMessage(h, CB_GETCURSEL, 0, 0)]; for (; c > 0; c--) bios++; @@ -551,6 +553,7 @@ deviceconfig_inst_open(HWND hwnd, const device_t *device, int inst) case CONFIG_MIDI_IN: case CONFIG_HEX16: case CONFIG_HEX20: + case CONFIG_BIOS: /*Combo box*/ item = (DLGITEMTEMPLATE *) data; item->x = 70; From cc4fa2418992698c815447b866ed2877210f59b2 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 22 Dec 2022 06:17:07 +0100 Subject: [PATCH 047/112] Minor SiS 50x initialization/reset fixes. --- src/chipset/sis_85c50x.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chipset/sis_85c50x.c b/src/chipset/sis_85c50x.c index 1aa5daead..24fdd7788 100644 --- a/src/chipset/sis_85c50x.c +++ b/src/chipset/sis_85c50x.c @@ -359,10 +359,10 @@ sis_85c50x_reset(void *priv) dev->pci_conf_sb[0x09] = 0x00; dev->pci_conf_sb[0x0a] = 0x01; dev->pci_conf_sb[0x0b] = 0x06; - sis_85c50x_write(0, 0x41, 0x80, dev); - sis_85c50x_write(0, 0x42, 0x80, dev); - sis_85c50x_write(0, 0x43, 0x80, dev); - sis_85c50x_write(0, 0x44, 0x80, dev); + sis_85c50x_sb_write(0, 0x41, 0x80, dev); + sis_85c50x_sb_write(0, 0x42, 0x80, dev); + sis_85c50x_sb_write(0, 0x43, 0x80, dev); + sis_85c50x_sb_write(0, 0x44, 0x80, dev); } static void From e4ff9d87a58d0169612af7872d0a8d2f319aa877 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 22 Dec 2022 06:33:15 +0100 Subject: [PATCH 048/112] Win32 UI builds now correctly build with RTMIDI enabled. --- src/win/Makefile.mingw | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index 869ccefd4..b20dd86db 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -765,6 +765,11 @@ else SNDOBJ += xaudio2.o endif +ifeq ($(RTMIDI), y) + SNDOBJ += midi_rtmidi.o + OPTS += -DUSE_RTMIDI +endif + OBJ := $(MAINOBJ) $(CPUOBJ) $(CHIPSETOBJ) $(MCHOBJ) $(DEVOBJ) $(MEMOBJ) \ $(FDDOBJ) $(GAMEOBJ) $(CDROMOBJ) $(ZIPOBJ) $(MOOBJ) $(HDDOBJ) $(MINIVHDOBJ) \ $(NETOBJ) $(PRINTOBJ) $(SCSIOBJ) $(SIOOBJ) $(SNDOBJ) $(VIDOBJ) $(VOODOOOBJ) \ @@ -784,9 +789,7 @@ else endif ifeq ($(RTMIDI), y) - SNDOBJ += midi_rtmidi.o - OPTS += -DUSE_RTMIDI - LIBS += -lrtmidi + LIBS += -lrtmidi -lwinmm endif ifeq ($(VNC), y) From fc74cd9656ce40654fdcdb176eacedf5ad7c9331 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 22 Dec 2022 06:46:52 +0100 Subject: [PATCH 049/112] And another fix for Win32 UI + RTMIDI. --- src/win/Makefile.mingw | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index b20dd86db..040b14aee 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -511,6 +511,10 @@ ifeq ($(DEV_BRANCH), y) endif endif +ifeq ($(RTMIDI), y) + OPTS += -DUSE_RTMIDI +endif + # Final versions of the toolchain flags. CFLAGS := $(OPTS) $(DFLAGS) $(COPTIM) $(AOPTIM) \ @@ -767,7 +771,6 @@ endif ifeq ($(RTMIDI), y) SNDOBJ += midi_rtmidi.o - OPTS += -DUSE_RTMIDI endif OBJ := $(MAINOBJ) $(CPUOBJ) $(CHIPSETOBJ) $(MCHOBJ) $(DEVOBJ) $(MEMOBJ) \ From 522b06bd0885ee13143684daf2f30ad5f7e0f090 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 22 Dec 2022 13:21:28 +0600 Subject: [PATCH 050/112] qt_mcadevicelist: device IDs are always 4 hex digits long --- src/qt/qt_mcadevicelist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mcadevicelist.cpp b/src/qt/qt_mcadevicelist.cpp index 95ae17f45..b8c3ed3c9 100644 --- a/src/qt/qt_mcadevicelist.cpp +++ b/src/qt/qt_mcadevicelist.cpp @@ -22,7 +22,7 @@ MCADeviceList::MCADeviceList(QWidget *parent) for (int i = 0; i < mca_get_nr_cards(); i++) { uint32_t deviceId = (mca_read_index(0x00, i) | (mca_read_index(0x01, i) << 8)); if (deviceId != 0xFFFF) { - QString hexRepresentation = QString::number(deviceId, 16).toUpper(); + QString hexRepresentation = QString::asprintf("%04X", deviceId); ui->listWidget->addItem(QString("Slot %1: 0x%2 (@%3.ADF)").arg(i + 1).arg(hexRepresentation, hexRepresentation)); } } From a2dcf9e12fd93473c7cc5621daada0d82183f2c8 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 23 Dec 2022 20:49:13 +0600 Subject: [PATCH 051/112] qt_settingsdisplay: Changes are not lost on machine switch anymore --- src/qt/qt_settingsdisplay.cpp | 16 ++++++++++------ src/qt/qt_settingsdisplay.hpp | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp index 6ed9e7094..f01d7fc4d 100644 --- a/src/qt/qt_settingsdisplay.cpp +++ b/src/qt/qt_settingsdisplay.cpp @@ -36,6 +36,8 @@ SettingsDisplay::SettingsDisplay(QWidget *parent) { ui->setupUi(this); + videoCard = gfxcard; + videoCard_2 = gfxcard_2; onCurrentMachineChanged(machine); } @@ -59,6 +61,7 @@ SettingsDisplay::onCurrentMachineChanged(int machineId) { // win_settings_video_proc, WM_INITDIALOG this->machineId = machineId; + auto curVideoCard = videoCard; auto *model = ui->comboBoxVideo->model(); auto removeRows = model->rowCount(); @@ -80,7 +83,7 @@ SettingsDisplay::onCurrentMachineChanged(int machineId) if (video_card_available(c) && device_is_valid(video_dev, machineId)) { int row = Models::AddEntry(model, name, c); - if (c == gfxcard) { + if (c == curVideoCard) { selectedRow = row - removeRows; } } @@ -133,7 +136,8 @@ SettingsDisplay::on_comboBoxVideo_currentIndexChanged(int index) if (index < 0) { return; } - int videoCard = ui->comboBoxVideo->currentData().toInt(); + auto curVideoCard_2 = videoCard_2; + videoCard = ui->comboBoxVideo->currentData().toInt(); ui->pushButtonConfigure->setEnabled(video_card_has_config(videoCard) > 0); bool machineHasPci = machine_has_bus(machineId, MACHINE_BUS_PCI) > 0; @@ -176,14 +180,14 @@ SettingsDisplay::on_comboBoxVideo_currentIndexChanged(int index) if (video_card_available(c) && device_is_valid(video_dev, machineId) && !(video_card_get_flags(c) == video_card_get_flags(videoCard))) { ui->comboBoxVideoSecondary->addItem(name, c); - if (c == gfxcard_2) + if (c == curVideoCard_2) ui->comboBoxVideoSecondary->setCurrentIndex(ui->comboBoxVideoSecondary->count() - 1); } c++; } - if (gfxcard_2 == 0 || (machine_has_flags(machineId, MACHINE_VIDEO_ONLY) > 0)) { + if (videoCard_2 == 0 || (machine_has_flags(machineId, MACHINE_VIDEO_ONLY) > 0)) { ui->comboBoxVideoSecondary->setCurrentIndex(0); ui->pushButtonConfigureSecondary->setEnabled(false); } @@ -208,8 +212,8 @@ SettingsDisplay::on_comboBoxVideoSecondary_currentIndexChanged(int index) ui->pushButtonConfigureSecondary->setEnabled(false); return; } - int videoCard = ui->comboBoxVideoSecondary->currentData().toInt(); - ui->pushButtonConfigureSecondary->setEnabled(index != 0 && video_card_has_config(videoCard) > 0); + videoCard_2 = ui->comboBoxVideoSecondary->currentData().toInt(); + ui->pushButtonConfigureSecondary->setEnabled(index != 0 && video_card_has_config(videoCard_2) > 0); } void diff --git a/src/qt/qt_settingsdisplay.hpp b/src/qt/qt_settingsdisplay.hpp index 0aab5c161..c02e55ce0 100644 --- a/src/qt/qt_settingsdisplay.hpp +++ b/src/qt/qt_settingsdisplay.hpp @@ -35,7 +35,9 @@ private slots: private: Ui::SettingsDisplay *ui; - int machineId = 0; + int machineId = 0; + int videoCard = 0; + int videoCard_2 = 0; }; #endif // QT_SETTINGSDISPLAY_HPP From c2af20302936d264802c8b06eb441ca3aff6028b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 23 Dec 2022 21:53:22 +0600 Subject: [PATCH 052/112] gdbstub: explicitly define FS_BASE and GS_BASE in features description --- src/gdbstub.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gdbstub.c b/src/gdbstub.c index dc638cd07..92aa93cf1 100644 --- a/src/gdbstub.c +++ b/src/gdbstub.c @@ -213,6 +213,9 @@ static char target_xml[] = /* QEMU gdb-xml/i386-32bit.xml with modificati "" "" "" + "" + "" + "" "" "" "" From 231cadb0a7ee74fc95191e746d899cea82e9a036 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 23 Dec 2022 14:22:17 -0500 Subject: [PATCH 053/112] Fix Multiplication result converted to larger type from CodeQL --- src/floppy/fdd_img.c | 4 ++-- src/printer/prt_escp.c | 12 ++++++------ src/video/vid_pgc.c | 4 ++-- src/video/vid_svga_render.c | 2 +- src/video/video.c | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/floppy/fdd_img.c b/src/floppy/fdd_img.c index 3ebfeefd9..e0847c010 100644 --- a/src/floppy/fdd_img.c +++ b/src/floppy/fdd_img.c @@ -486,9 +486,9 @@ img_seek(int drive, int track) for (side = 0; side < dev->sides; side++) { if (dev->disk_at_once) { cur_pos = (track * dev->sectors * ssize * dev->sides) + (side * dev->sectors * ssize); - memcpy(dev->track_data[side], dev->disk_data + cur_pos, dev->sectors * ssize); + memcpy(dev->track_data[side], dev->disk_data + cur_pos, (size_t) dev->sectors * ssize); } else { - read_bytes = fread(dev->track_data[side], 1, dev->sectors * ssize, dev->f); + read_bytes = fread(dev->track_data[side], 1, (size_t) dev->sectors * ssize, dev->f); if (read_bytes < (dev->sectors * ssize)) memset(dev->track_data[side] + read_bytes, 0xf6, (dev->sectors * ssize) - read_bytes); } diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c index e0a83da31..b2827e3f9 100644 --- a/src/printer/prt_escp.c +++ b/src/printer/prt_escp.c @@ -407,7 +407,7 @@ new_page(escp_t *dev, int8_t save, int8_t resetx) dev->curr_y = dev->top_margin; if (dev->page) { dev->page->dirty = 0; - memset(dev->page->pixels, 0x00, dev->page->pitch * dev->page->h); + memset(dev->page->pixels, 0x00, (size_t) dev->page->pitch * dev->page->h); } /* Make the page's file name. */ @@ -451,9 +451,9 @@ fill_palette(uint8_t redmax, uint8_t greenmax, uint8_t bluemax, uint8_t colorID, colormask = colorID <<= 5; for (i = 0; i < 32; i++) { - dev->palcol[i + colormask].r = 255 - (uint8_t) floor(red * (float) i); - dev->palcol[i + colormask].g = 255 - (uint8_t) floor(green * (float) i); - dev->palcol[i + colormask].b = 255 - (uint8_t) floor(blue * (float) i); + dev->palcol[i + colormask].r = 255 - (uint8_t) floor((double) red * (float) i); + dev->palcol[i + colormask].g = 255 - (uint8_t) floor((double) green * (float) i); + dev->palcol[i + colormask].b = 255 - (uint8_t) floor((double) blue * (float) i); } } @@ -2043,8 +2043,8 @@ escp_init(void *lpt) dev->page->w = (int) (dev->dpi * dev->page_width); dev->page->h = (int) (dev->dpi * dev->page_height); dev->page->pitch = dev->page->w; - dev->page->pixels = (uint8_t *) malloc(dev->page->pitch * dev->page->h); - memset(dev->page->pixels, 0x00, dev->page->pitch * dev->page->h); + dev->page->pixels = (uint8_t *) malloc((size_t) dev->page->pitch * dev->page->h); + memset(dev->page->pixels, 0x00, (size_t) dev->page->pitch * dev->page->h); /* Initialize parameters. */ for (i = 0; i < 32; i++) { diff --git a/src/video/vid_pgc.c b/src/video/vid_pgc.c index 89d1505bb..eb28540fc 100644 --- a/src/video/vid_pgc.c +++ b/src/video/vid_pgc.c @@ -2663,8 +2663,8 @@ pgc_init(pgc_t *dev, int maxw, int maxh, int visw, int vish, dev->visw = visw; dev->vish = vish; - dev->vram = (uint8_t *) malloc(maxw * maxh); - memset(dev->vram, 0x00, maxw * maxh); + dev->vram = (uint8_t *) malloc((size_t) maxw * maxh); + memset(dev->vram, 0x00, (size_t) maxw * maxh); dev->cga_vram = (uint8_t *) malloc(16384); memset(dev->cga_vram, 0x00, 16384); diff --git a/src/video/vid_svga_render.c b/src/video/vid_svga_render.c index 30d2c93b0..c67a46e0d 100644 --- a/src/video/vid_svga_render.c +++ b/src/video/vid_svga_render.c @@ -68,7 +68,7 @@ svga_render_blank(svga_t *svga) } uint32_t *line_ptr = &buffer32->line[svga->displine + svga->y_add][svga->x_add]; - uint32_t line_width = (svga->hdisp + svga->scrollcache) * char_width * sizeof(uint32_t); + uint32_t line_width = (uint32_t) (svga->hdisp + svga->scrollcache) * char_width * sizeof(uint32_t); memset(line_ptr, 0, line_width); } diff --git a/src/video/video.c b/src/video/video.c index 18f2e1427..096ea89e1 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -804,7 +804,7 @@ create_bitmap(int x, int y) bitmap_t *b = malloc(sizeof(bitmap_t) + (y * sizeof(uint32_t *))); int c; - b->dat = malloc(x * y * 4); + b->dat = malloc((size_t) x * y * 4); for (c = 0; c < y; c++) b->line[c] = &(b->dat[c * x]); b->w = x; From b2cf2a604975a6ac08ca644d099e1e5a598fd68f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 25 Dec 2022 11:25:15 +0600 Subject: [PATCH 054/112] RTMidi support is now available on Haiku --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3f74da8f..74b2ad4b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,6 @@ cmake_policy(SET CMP0079 NEW) if(HAIKU) set(OPENAL ON) - set(RTMIDI OFF) endif() if(NOT DEFINED QT OR QT) From fd82e523a0cecdc841664b60412e561c8c365563 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 27 Dec 2022 05:27:13 +0100 Subject: [PATCH 055/112] Fixed hercules video_process_8() width, fixes #2997. --- src/video/vid_hercules.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/vid_hercules.c b/src/video/vid_hercules.c index 401166f54..550f05338 100644 --- a/src/video/vid_hercules.c +++ b/src/video/vid_hercules.c @@ -367,7 +367,7 @@ hercules_poll(void *priv) else x = dev->crtc[1] * 9; - video_process_8(x, dev->displine + 14); + video_process_8(x + 16, dev->displine + 14); } dev->sc = oldsc; From cfa6f64716dd54f87aa25874021c3bf5cc8d3002 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 27 Dec 2022 13:49:10 -0500 Subject: [PATCH 056/112] Initial P2 Covington support --- src/cpu/cpu_table.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index 6fc922b1e..6f4d06399 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -1066,6 +1066,16 @@ const cpu_family_t cpu_families[] = { {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, {"", 0} } + }, { + .package = CPU_PKG_SLOT1, + .manufacturer = "Intel", + .name = "Celeron (Covington)", + .internal_name = "celeron_covington", + .cpus = (const CPU[]) { + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, + {"", 0} + } }, { .package = CPU_PKG_SLOT2, .manufacturer = "Intel", From bde453160606469de5a9313b544b8edb7c1e79d8 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 27 Dec 2022 14:03:16 -0500 Subject: [PATCH 057/112] Fix timings, as the Covington doesn't have L2 cache --- src/cpu/cpu_table.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index 6f4d06399..01576decb 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -1072,8 +1072,8 @@ const cpu_family_t cpu_families[] = { .name = "Celeron (Covington)", .internal_name = "celeron_covington", .cpus = (const CPU[]) { - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,24,24, 32}, + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,25,25, 36}, {"", 0} } }, { From 239294b6e39d2750b7ea4a6984de8469bfc9be12 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 27 Dec 2022 15:27:06 -0500 Subject: [PATCH 058/112] Add out of spec underclocked models Matches how we handle the Deschutes --- src/cpu/cpu_table.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index 01576decb..f9e86541c 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -1072,6 +1072,12 @@ const cpu_family_t cpu_families[] = { .name = "Celeron (Covington)", .internal_name = "celeron_covington", .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 6, 6, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 9, 9, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,12,12, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,15,15, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,18,18, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,21,21, 28}, /* out of spec */ {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,24,24, 32}, {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,25,25, 36}, {"", 0} From 676569dfb29348bf285ae3f921ede3b8fd1c8b3e Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 29 Dec 2022 00:50:50 +0600 Subject: [PATCH 059/112] qt: Display architecture information in About box --- 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 d707fc7ea..6b9c75ba4 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -75,6 +75,7 @@ extern int qt_nvr_save(void); #include #include #include +#include #if QT_CONFIG(vulkan) # include # include @@ -2098,6 +2099,7 @@ MainWindow::on_actionAbout_86Box_triggered() #ifdef EMU_GIT_HASH githash = QString(" [%1]").arg(EMU_GIT_HASH); #endif + githash.append(QString(" [%1]").arg(QSysInfo::buildCpuArchitecture()); msgBox.setText(QString("%3%1%2").arg(EMU_VERSION_FULL, githash, tr("86Box v"))); msgBox.setInformativeText(tr("An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information.")); msgBox.setWindowTitle("About 86Box"); From ecd7694006d0ca392c46a44e90dcb1ff28310407 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 23 Dec 2022 15:14:30 -0500 Subject: [PATCH 060/112] Fix more warnings --- src/sound/midi_rtmidi.cpp | 8 ++++++++ src/sound/snd_opl_ymfm.cpp | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/sound/midi_rtmidi.cpp b/src/sound/midi_rtmidi.cpp index 743b828ad..354c7f61b 100644 --- a/src/sound/midi_rtmidi.cpp +++ b/src/sound/midi_rtmidi.cpp @@ -39,6 +39,7 @@ extern "C" { // Disable c99-designator to avoid the warnings in rtmidi_*_device #ifdef __clang__ # if __has_warning("-Wc99-designator") +# pragma clang diagnostic push # pragma clang diagnostic ignored "-Wc99-designator" # endif #endif @@ -302,4 +303,11 @@ const device_t rtmidi_input_device = { .force_redraw = NULL, .config = midi_input_config }; + +#ifdef __clang__ +# if __has_warning("-Wc99-designator") +# pragma clang diagnostic pop +# endif +#endif + } diff --git a/src/sound/snd_opl_ymfm.cpp b/src/sound/snd_opl_ymfm.cpp index bb52f3c55..012e77bdb 100644 --- a/src/sound/snd_opl_ymfm.cpp +++ b/src/sound/snd_opl_ymfm.cpp @@ -29,6 +29,15 @@ extern "C" { #include <86box/snd_opl.h> #include <86box/mem.h> #include <86box/rom.h> + +// Disable c99-designator to avoid the warnings in *_ymfm_device +#ifdef __clang__ +# if __has_warning("-Wc99-designator") +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wc99-designator" +# endif +#endif + } #define RSM_FRAC 10 @@ -432,4 +441,11 @@ const fm_drv_t ymfm_drv { &ymfm_drv_set_do_cycles, NULL, }; + +#ifdef __clang__ +# if __has_warning("-Wc99-designator") +# pragma clang diagnostic pop +# endif +#endif + } From 5984270f0def98a5ceaa3dc8379eab8295e16226 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Wed, 28 Dec 2022 19:07:51 -0500 Subject: [PATCH 061/112] Minor formatting in cpu.c --- src/cpu/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 1ab06205f..4d1abcd05 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -2848,7 +2848,7 @@ amd_k_invalid_wrmsr: break; case 0x1b: cpu_log("APIC_BASE write: %08X%08X\n", EDX, EAX); - // msr.apic_base = EAX | ((uint64_t)EDX << 32); + // msr.apic_base = EAX | ((uint64_t) EDX << 32); break; case 0x2a: break; From 74eaf6af255a3b463c669f4d98b88ad99aca8754 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 29 Dec 2022 11:54:29 +0600 Subject: [PATCH 062/112] Fix typo --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 6b9c75ba4..1c2ae6097 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -2099,7 +2099,7 @@ MainWindow::on_actionAbout_86Box_triggered() #ifdef EMU_GIT_HASH githash = QString(" [%1]").arg(EMU_GIT_HASH); #endif - githash.append(QString(" [%1]").arg(QSysInfo::buildCpuArchitecture()); + githash.append(QString(" [%1]").arg(QSysInfo::buildCpuArchitecture())); msgBox.setText(QString("%3%1%2").arg(EMU_VERSION_FULL, githash, tr("86Box v"))); msgBox.setInformativeText(tr("An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information.")); msgBox.setWindowTitle("About 86Box"); From 7ec2a1c1488196b095606f70da24a096d0a2625b Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 29 Dec 2022 21:59:00 -0500 Subject: [PATCH 063/112] Use doubles as requested --- src/printer/prt_escp.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c index b2827e3f9..e7c9e0442 100644 --- a/src/printer/prt_escp.c +++ b/src/printer/prt_escp.c @@ -444,16 +444,16 @@ fill_palette(uint8_t redmax, uint8_t greenmax, uint8_t bluemax, uint8_t colorID, uint8_t colormask; int i; - float red = (float) redmax / (float) 30.9; - float green = (float) greenmax / (float) 30.9; - float blue = (float) bluemax / (float) 30.9; + double red = (double) redmax / (double) 30.9; + double green = (double) greenmax / (double) 30.9; + double blue = (double) bluemax / (double) 30.9; colormask = colorID <<= 5; for (i = 0; i < 32; i++) { - dev->palcol[i + colormask].r = 255 - (uint8_t) floor((double) red * (float) i); - dev->palcol[i + colormask].g = 255 - (uint8_t) floor((double) green * (float) i); - dev->palcol[i + colormask].b = 255 - (uint8_t) floor((double) blue * (float) i); + dev->palcol[i + colormask].r = 255 - (uint8_t) floor(red * (double) i); + dev->palcol[i + colormask].g = 255 - (uint8_t) floor(green * (double) i); + dev->palcol[i + colormask].b = 255 - (uint8_t) floor(blue * (double) i); } } From a2568a6fea1b26c44fb74d1594e15d45514e14fd Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 29 Dec 2022 21:59:21 -0500 Subject: [PATCH 064/112] Fix building with libvncserver --- mingw32-cmake.log | 492 +++++++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 13 +- src/win/Makefile.mingw | 2 +- 3 files changed, 501 insertions(+), 6 deletions(-) create mode 100644 mingw32-cmake.log diff --git a/mingw32-cmake.log b/mingw32-cmake.log new file mode 100644 index 000000000..112fd3327 --- /dev/null +++ b/mingw32-cmake.log @@ -0,0 +1,492 @@ +[1/492] Building C object src/CMakeFiles/86Box.dir/random.c.obj +[2/492] Building C object src/CMakeFiles/86Box.dir/nmi.c.obj +[3/492] Building C object src/CMakeFiles/86Box.dir/log.c.obj +[4/492] Building C object src/CMakeFiles/86Box.dir/apm.c.obj +[5/492] Building C object src/CMakeFiles/86Box.dir/ppi.c.obj +[6/492] Building C object src/CMakeFiles/86Box.dir/ddma.c.obj +[7/492] Building C object src/CMakeFiles/86Box.dir/timer.c.obj +[8/492] Building C object src/CMakeFiles/86Box.dir/mca.c.obj +[9/492] Building C object src/CMakeFiles/86Box.dir/port_6x.c.obj +[10/492] Building C object src/CMakeFiles/86Box.dir/fifo8.c.obj +[11/492] Building C object src/CMakeFiles/86Box.dir/port_92.c.obj +[12/492] Building C object src/CMakeFiles/86Box.dir/io.c.obj +[13/492] Building C object src/CMakeFiles/86Box.dir/usb.c.obj +[14/492] Building C object src/CMakeFiles/86Box.dir/nvr_ps2.c.obj +[15/492] Building C object src/CMakeFiles/86Box.dir/machine_status.c.obj +[16/492] Building C object src/CMakeFiles/vnc.dir/vnc_keymap.c.obj +[17/492] Building C object src/CMakeFiles/86Box.dir/pit_fast.c.obj +[18/492] Building C object src/CMakeFiles/86Box.dir/nvr.c.obj +[19/492] Building C object src/CMakeFiles/86Box.dir/pic.c.obj +[20/492] Building C object src/CMakeFiles/86Box.dir/86box.c.obj +[21/492] Building C object src/CMakeFiles/86Box.dir/pit.c.obj +[22/492] Building C object src/CMakeFiles/86Box.dir/pci.c.obj +[23/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_image.c.obj +[24/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_mitsumi.c.obj +[25/492] Building C object src/CMakeFiles/86Box.dir/device.c.obj +[26/492] Building C object src/chipset/CMakeFiles/chipset.dir/82c100.c.obj +[27/492] Building C object src/chipset/CMakeFiles/chipset.dir/acc2168.c.obj +[28/492] Building C object src/CMakeFiles/86Box.dir/ini.c.obj +[29/492] Building C object src/CMakeFiles/86Box.dir/nvr_at.c.obj +[30/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1429.c.obj +[31/492] Building C object src/chipset/CMakeFiles/chipset.dir/cs8230.c.obj +[32/492] Building C object src/CMakeFiles/86Box.dir/dma.c.obj +[33/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1531.c.obj +[34/492] Building C object src/CMakeFiles/86Box.dir/acpi.c.obj +[35/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1489.c.obj +[36/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_82335.c.obj +[37/492] Building C object src/chipset/CMakeFiles/chipset.dir/cs4031.c.obj +[38/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1541.c.obj +[39/492] Building C object src/chipset/CMakeFiles/chipset.dir/contaq_82c59x.c.obj +[40/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali6117.c.obj +[41/492] Building C object src/CMakeFiles/86Box.dir/discord.c.obj +[42/492] Building C object src/chipset/CMakeFiles/chipset.dir/__/ioapic.c.obj +[43/492] Building C object src/chipset/CMakeFiles/chipset.dir/ims8848.c.obj +[44/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1621.c.obj +[45/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_image_backend.c.obj +[46/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_420ex.c.obj +[47/492] Building C object src/chipset/CMakeFiles/chipset.dir/headland.c.obj +[48/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_sio.c.obj +[49/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom.c.obj +[50/492] Building CXX object src/CMakeFiles/86Box.dir/thread.cpp.obj +[51/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti291.c.obj +[52/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti391.c.obj +[53/492] Building C object src/chipset/CMakeFiles/chipset.dir/neat.c.obj +[54/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti495.c.obj +[55/492] Building C object src/CMakeFiles/vnc.dir/vnc.c.obj +[56/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti283.c.obj +[57/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1543.c.obj +[58/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti5x7.c.obj +[59/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti895.c.obj +[60/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c310.c.obj +[61/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_i450kx.c.obj +[62/492] Building C object src/CMakeFiles/86Box.dir/config.c.obj +[63/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti822.c.obj +[64/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_image_viso.c.obj +[65/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c50x.c.obj +[66/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c4xx.c.obj +[67/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_vt82c505.c.obj +[68/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_4x0.c.obj +[69/492] Building C object src/chipset/CMakeFiles/chipset.dir/gc100.c.obj +[70/492] Building C object src/chipset/CMakeFiles/chipset.dir/olivetti_eva.c.obj +[71/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_vt82c49x.c.obj +[72/492] Building C object src/chipset/CMakeFiles/chipset.dir/vl82c480.c.obj +[73/492] Building C object src/chipset/CMakeFiles/chipset.dir/umc_8886.c.obj +[74/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_5571.c.obj +[75/492] Building C object src/cpu/CMakeFiles/cpu.dir/cpu_table.c.obj +[76/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c496.c.obj +[77/492] Building C object src/chipset/CMakeFiles/chipset.dir/umc_hb4.c.obj +[78/492] Building C object src/chipset/CMakeFiles/chipset.dir/scamp.c.obj +[79/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_5511.c.obj +[80/492] Building C object src/cpu/CMakeFiles/cpu.dir/fpu.c.obj +[81/492] Building C object src/chipset/CMakeFiles/chipset.dir/wd76c10.c.obj +[82/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_piix.c.obj +[83/492] Building C object src/cpu/CMakeFiles/cpu.dir/x87_timings.c.obj +[84/492] Building C object src/cpu/CMakeFiles/cpu.dir/x86.c.obj +[85/492] Building C object src/cpu/CMakeFiles/cpu.dir/x87.c.obj +[86/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_apollo.c.obj +[87/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_common.c.obj +[88/492] Building C object src/cpu/CMakeFiles/cpu.dir/8080.c.obj +[89/492] Building C object src/chipset/CMakeFiles/chipset.dir/stpc.c.obj +[90/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_486.c.obj +[91/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen.c.obj +[92/492] Building C object src/cpu/CMakeFiles/cpu.dir/386.c.obj +[93/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_686.c.obj +[94/492] Building C object src/chipset/CMakeFiles/chipset.dir/scat.c.obj +[95/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_winchip.c.obj +[96/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen_accumulate_x86.c.obj +[97/492] Building C object src/device/CMakeFiles/dev.dir/bugger.c.obj +[98/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_k6.c.obj +[99/492] Building C object src/device/CMakeFiles/dev.dir/cartridge.c.obj +[100/492] Building C object src/device/CMakeFiles/dev.dir/hwm.c.obj +[101/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_winchip2.c.obj +[102/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_p6.c.obj +[103/492] Building C object src/device/CMakeFiles/dev.dir/hasp.c.obj +[104/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_pentium.c.obj +[105/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_pipc.c.obj +[106/492] Building C object src/device/CMakeFiles/dev.dir/hwm_lm75.c.obj +[107/492] Building C object src/device/CMakeFiles/dev.dir/hwm_vt82c686.c.obj +[108/492] Building C object src/device/CMakeFiles/dev.dir/hwm_gl518sm.c.obj +[109/492] Building C object src/device/CMakeFiles/dev.dir/ibm_5161.c.obj +[110/492] Building C object src/device/CMakeFiles/dev.dir/cassette.c.obj +[111/492] Building C object src/device/CMakeFiles/dev.dir/postcard.c.obj +[112/492] Building C object src/device/CMakeFiles/dev.dir/__/lpt.c.obj +[113/492] Building C object src/device/CMakeFiles/dev.dir/pci_bridge.c.obj +[114/492] Building C object src/device/CMakeFiles/dev.dir/isamem.c.obj +[115/492] Building C object src/device/CMakeFiles/dev.dir/hwm_lm78.c.obj +[116/492] Building C object src/device/CMakeFiles/dev.dir/clock_ics9xxx.c.obj +[117/492] Building C object src/device/CMakeFiles/dev.dir/i2c.c.obj +[118/492] Building C object src/device/CMakeFiles/dev.dir/i2c_gpio.c.obj +[119/492] Building C object src/device/CMakeFiles/dev.dir/isartc.c.obj +[120/492] Building C object src/cpu/CMakeFiles/cpu.dir/386_common.c.obj +[121/492] Building C object src/device/CMakeFiles/dev.dir/smbus_ali7101.c.obj +[122/492] Building C object src/device/CMakeFiles/dev.dir/smbus_piix4.c.obj +[123/492] Building C object src/device/CMakeFiles/dev.dir/keyboard.c.obj +[124/492] Building C object src/device/CMakeFiles/dev.dir/serial.c.obj +[125/492] Building C object src/cpu/CMakeFiles/cpu.dir/cpu.c.obj +[126/492] Building C object src/disk/CMakeFiles/hdd.dir/hdd_table.c.obj +[127/492] Building C object src/device/CMakeFiles/dev.dir/mouse.c.obj +[128/492] Building C object src/device/CMakeFiles/dev.dir/phoenix_486_jumper.c.obj +[129/492] Building C object src/device/CMakeFiles/dev.dir/isapnp.c.obj +[130/492] Building C object src/device/CMakeFiles/dev.dir/keyboard_xt.c.obj +[131/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc.c.obj +[132/492] Building C object src/device/CMakeFiles/dev.dir/mouse_ps2.c.obj +[133/492] Building C object src/device/CMakeFiles/dev.dir/mouse_bus.c.obj +[134/492] Building C object src/disk/CMakeFiles/hdd.dir/hdd.c.obj +[135/492] Building C object src/cpu/CMakeFiles/cpu.dir/x86seg.c.obj +[136/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_xtide.c.obj +[137/492] Building C object src/device/CMakeFiles/dev.dir/mouse_serial.c.obj +[138/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_st506_at.c.obj +[139/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_opti611.c.obj +[140/492] Building C object src/disk/CMakeFiles/hdd.dir/hdd_image.c.obj +[141/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_cmd646.c.obj +[142/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_esdi_at.c.obj +[143/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_cmd640.c.obj +[144/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_sff8038i.c.obj +[145/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_xta.c.obj +[146/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_esdi_mca.c.obj +[147/492] Building C object src/device/CMakeFiles/dev.dir/keyboard_at.c.obj +[148/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_convert.c.obj +[149/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_st506_xt.c.obj +[150/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/libxml2_encoding.c.obj +[151/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_io.c.obj +[152/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc_magitronic.c.obj +[153/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_struct_rw.c.obj +[154/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc_monster.c.obj +[155/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc_pii15xb.c.obj +[156/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_create.c.obj +[157/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_manage.c.obj +[158/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_util.c.obj +[159/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_common.c.obj +[160/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/cwalk.c.obj +[161/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd.c.obj +[162/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen_x86.c.obj +[163/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_fdi.c.obj +[164/492] Building C object src/game/CMakeFiles/game.dir/joystick_ch_flightstick_pro.c.obj +[165/492] Building C object src/game/CMakeFiles/game.dir/joystick_standard.c.obj +[166/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_mfm.c.obj +[167/492] Building C object src/game/CMakeFiles/game.dir/joystick_tm_fcs.c.obj +[168/492] Building C object src/game/CMakeFiles/game.dir/gameport.c.obj +[169/492] Building C object src/disk/CMakeFiles/zip.dir/zip.c.obj +[170/492] Linking C static library src\disk\minivhd\libminivhd.a +[171/492] Building C object src/game/CMakeFiles/game.dir/joystick_sw_pad.c.obj +[172/492] Building C object src/machine/CMakeFiles/mch.dir/machine.c.obj +[173/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_json.c.obj +[174/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_compaq.c.obj +[175/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_imd.c.obj +[176/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_philips.c.obj +[177/492] Building C object src/machine/CMakeFiles/mch.dir/machine_table.c.obj +[178/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_img.c.obj +[179/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_xi8088.c.obj +[180/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_zenith.c.obj +[181/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt.c.obj +[182/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_td0.c.obj +[183/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide.c.obj +[184/492] Building C object src/machine/CMakeFiles/mch.dir/m_elt.c.obj +[185/492] Building C object src/machine/CMakeFiles/mch.dir/m_v86p.c.obj +[186/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc.c.obj +[187/492] Building C object src/machine/CMakeFiles/mch.dir/m_europc.c.obj +[188/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_commodore.c.obj +[189/492] Building C object src/machine/CMakeFiles/mch.dir/m_at.c.obj +[190/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_t1000_vid.c.obj +[191/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_t1000.c.obj +[192/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdi2raw.c.obj +[193/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps2_isa.c.obj +[194/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps1.c.obj +[195/492] Building C object src/disk/CMakeFiles/mo.dir/mo.c.obj +[196/492] Building C object src/machine/CMakeFiles/mch.dir/m_pcjr.c.obj +[197/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_t3100e.c.obj +[198/492] Building C object src/cpu/CMakeFiles/cpu.dir/808x.c.obj +[199/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket4.c.obj +[200/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_olivetti.c.obj +[201/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket5.c.obj +[202/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps1_hdc.c.obj +[203/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_t3100e_vid.c.obj +[204/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_286_386sx.c.obj +[205/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_slot2.c.obj +[206/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_sockets7.c.obj +[207/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket8.c.obj +[208/492] Building C object src/machine/CMakeFiles/mch.dir/m_tandy.c.obj +[209/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket7_3v.c.obj +[210/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_misc.c.obj +[211/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket370.c.obj +[212/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_compaq.c.obj +[213/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps2_mca.c.obj +[214/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_laserxt.c.obj +[215/492] Building C object src/mem/CMakeFiles/mem.dir/i2c_eeprom.c.obj +[216/492] Building C object src/mem/CMakeFiles/mem.dir/catalyst_flash.c.obj +[217/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_slot1.c.obj +[218/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket7.c.obj +[219/492] Building C object src/machine/CMakeFiles/mch.dir/m_amstrad.c.obj +[220/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_86f.c.obj +[221/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_386dx_486.c.obj +[222/492] Building C object src/mem/CMakeFiles/mem.dir/intel_flash.c.obj +[223/492] Building C object src/mem/CMakeFiles/mem.dir/smram.c.obj +[224/492] Building C object src/mem/CMakeFiles/mem.dir/sst_flash.c.obj +[225/492] Building C object src/mem/CMakeFiles/mem.dir/spd.c.obj +[226/492] Building C object src/network/CMakeFiles/net.dir/net_3c503.c.obj +[227/492] Building C object src/mem/CMakeFiles/mem.dir/rom.c.obj +[228/492] Building C object src/network/CMakeFiles/net.dir/net_plip.c.obj +[229/492] Building C object src/network/CMakeFiles/net.dir/net_pcap.c.obj +[230/492] Building C object src/network/CMakeFiles/net.dir/net_3c501.c.obj +[231/492] Building C object src/network/CMakeFiles/net.dir/net_event.c.obj +[232/492] Building C object src/network/CMakeFiles/net.dir/net_dp8390.c.obj +[233/492] Building C object src/network/CMakeFiles/net.dir/net_wd8003.c.obj +[234/492] Building C object src/network/CMakeFiles/net.dir/net_ne2000.c.obj +[235/492] Building C object src/network/CMakeFiles/net.dir/network.c.obj +[236/492] Building C object src/network/CMakeFiles/net.dir/net_slirp.c.obj +[237/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/arp_table.c.obj +[238/492] Building C object src/mem/CMakeFiles/mem.dir/mem.c.obj +[239/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/cksum.c.obj +[240/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/bootp.c.obj +[241/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/if.c.obj +[242/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/ip_output.c.obj +[243/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/dnssearch.c.obj +[244/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/ip_icmp.c.obj +[245/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/ip_input.c.obj +[246/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/sbuf.c.obj +[247/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/mbuf.c.obj +[248/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tinyglib.c.obj +[249/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/misc.c.obj +[250/492] Building C object src/printer/CMakeFiles/print.dir/prt_cpmap.c.obj +[251/492] Building C object src/printer/CMakeFiles/print.dir/png.c.obj +[252/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_output.c.obj +[253/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen_ops.c.obj +[254/492] Building C object src/sio/CMakeFiles/sio.dir/sio_acc3221.c.obj +[255/492] Building C object src/printer/CMakeFiles/print.dir/prt_text.c.obj +[256/492] Building C object src/printer/CMakeFiles/print.dir/prt_ps.c.obj +[257/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/socket.c.obj +[258/492] Building C object src/sio/CMakeFiles/sio.dir/sio_f82c710.c.obj +[259/492] Building C object src/sio/CMakeFiles/sio.dir/sio_ali5123.c.obj +[260/492] Building C object src/network/CMakeFiles/net.dir/net_pcnet.c.obj +[261/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_input.c.obj +[262/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c6xx.c.obj +[263/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/slirp.c.obj +[264/492] Building C object src/sio/CMakeFiles/sio.dir/sio_82091aa.c.obj +[265/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c669.c.obj +[266/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_subr.c.obj +[267/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c67x.c.obj +[268/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37m60x.c.obj +[269/492] Building C object src/sio/CMakeFiles/sio.dir/sio_it8661f.c.obj +[270/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/version.c.obj +[271/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_timer.c.obj +[272/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87306.c.obj +[273/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87310.c.obj +[274/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87311.c.obj +[275/492] Building C object src/sio/CMakeFiles/sio.dir/sio_prime3b.c.obj +[276/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87307.c.obj +[277/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/udp.c.obj +[278/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87332.c.obj +[279/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87309.c.obj +[280/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/util.c.obj +[281/492] Building C object src/sio/CMakeFiles/sio.dir/sio_detect.c.obj +[282/492] Building C object src/sio/CMakeFiles/sio.dir/sio_prime3c.c.obj +[283/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c93x.c.obj +[284/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi.c.obj +[285/492] Building C object src/sio/CMakeFiles/sio.dir/sio_um8669f.c.obj +[286/492] Building C object src/sio/CMakeFiles/sio.dir/sio_w83787f.c.obj +[287/492] Building C object src/sio/CMakeFiles/sio.dir/sio_vt82c686.c.obj +[288/492] Building C object src/sio/CMakeFiles/sio.dir/sio_w83877f.c.obj +[289/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_device.c.obj +[290/492] Building C object src/printer/CMakeFiles/print.dir/prt_escp.c.obj +[291/492] Building C object src/sio/CMakeFiles/sio.dir/sio_w83977f.c.obj +[292/492] Building C object src/sound/CMakeFiles/snd.dir/snd_opl.c.obj +[293/492] Linking C static library src\network\slirp\libslirp.a +[294/492] Building C object src/sound/CMakeFiles/snd.dir/snd_speaker.c.obj +[295/492] Building C object src/sound/CMakeFiles/snd.dir/snd_lpt_dac.c.obj +[296/492] Building C object src/sound/CMakeFiles/snd.dir/sound.c.obj +[297/492] Building CXX object src/sound/CMakeFiles/snd.dir/snd_resid.cc.obj +[298/492] Building C object src/sound/CMakeFiles/snd.dir/snd_pssj.c.obj +[299/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_aha154x.c.obj +[300/492] Building C object src/sound/CMakeFiles/snd.dir/midi.c.obj +[301/492] Building C object src/sound/CMakeFiles/snd.dir/snd_lpt_dss.c.obj +[302/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_disk.c.obj +[303/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ps1.c.obj +[304/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_spock.c.obj +[305/492] Building C object src/sound/CMakeFiles/snd.dir/snd_adlib.c.obj +[306/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ac97_codec.c.obj +[307/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ac97_via.c.obj +[308/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_buslogic.c.obj +[309/492] Building C object src/sound/CMakeFiles/snd.dir/snd_opl_nuked.c.obj +[310/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_ncr5380.c.obj +[311/492] Building C object src/sound/CMakeFiles/snd.dir/snd_cms.c.obj +[312/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_x54x.c.obj +[313/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_pcscsi.c.obj +[314/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ad1848.c.obj +[315/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ssi2001.c.obj +[316/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ym7128.c.obj +[317/492] Building C object src/sound/CMakeFiles/snd.dir/snd_azt2316a.c.obj +[318/492] Building C object src/sound/CMakeFiles/snd.dir/snd_wss.c.obj +[319/492] Building C object src/sound/CMakeFiles/snd.dir/snd_adlibgold.c.obj +[320/492] Building C object src/sound/CMakeFiles/snd.dir/snd_sn76489.c.obj +[321/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_cdrom.c.obj +[322/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_ncr53c8xx.c.obj +[323/492] Building C object src/sound/CMakeFiles/snd.dir/snd_cs423x.c.obj +[324/492] Building C object src/sound/CMakeFiles/snd.dir/openal.c.obj +[325/492] Building C object src/sound/CMakeFiles/snd.dir/snd_optimc.c.obj +[326/492] Building C object src/sound/CMakeFiles/snd.dir/snd_gus.c.obj +[327/492] Building C object src/sound/CMakeFiles/snd.dir/snd_cmi8x38.c.obj +[328/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/LA32Ramp.cpp.obj +[329/492] Building C object src/sound/CMakeFiles/snd.dir/snd_audiopci.c.obj +[330/492] Building C object src/sound/CMakeFiles/snd.dir/midi_fluidsynth.c.obj +[331/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/File.cpp.obj +[332/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Display.cpp.obj +[333/492] Building C object src/sound/CMakeFiles/snd.dir/midi_mt32.c.obj +[334/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/LA32FloatWaveGenerator.cpp.obj +[335/492] Building C object src/sound/CMakeFiles/snd.dir/snd_sb_dsp.c.obj +[336/492] Building C object src/sound/CMakeFiles/snd.dir/snd_pas16.c.obj +[337/492] Building C object src/sound/CMakeFiles/snd.dir/snd_mpu401.c.obj +[338/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Analog.cpp.obj +[339/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Poly.cpp.obj +[340/492] Building C object src/sound/CMakeFiles/snd.dir/snd_emu8k.c.obj +[341/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/LA32WaveGenerator.cpp.obj +[342/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/SampleRateConverter.cpp.obj +[343/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/PartialManager.cpp.obj +[344/492] Building C object src/sound/CMakeFiles/snd.dir/snd_sb.c.obj +[345/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/MidiStreamParser.cpp.obj +[346/492] Building CXX object src/sound/CMakeFiles/snd.dir/snd_opl_ymfm.cpp.obj +[347/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/FIRResampler.cpp.obj +[348/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Partial.cpp.obj +[349/492] Building CXX object src/sound/CMakeFiles/snd.dir/midi_rtmidi.cpp.obj +[350/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/LinearResampler.cpp.obj +[351/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/ROMInfo.cpp.obj +[352/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/FileStream.cpp.obj +[353/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/InternalResampler.cpp.obj +[354/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/IIR2xResampler.cpp.obj +[355/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/SincResampler.cpp.obj +[356/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/ResamplerModel.cpp.obj +[357/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Tables.cpp.obj +[358/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/BReverbModel.cpp.obj +[359/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/TVF.cpp.obj +[360/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/sha1/sha1.cpp.obj +[361/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Part.cpp.obj +[362/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/envelope.cc.obj +[363/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/TVA.cpp.obj +[364/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/TVP.cpp.obj +[365/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/convolve.cc.obj +[366/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/pot.cc.obj +[367/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/convolve-sse.cc.obj +[368/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/extfilt.cc.obj +[369/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581_PST.cc.obj +[370/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581_P_T.cc.obj +[371/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581_PS_.cc.obj +[372/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/filter.cc.obj +[373/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581__ST.cc.obj +[374/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580_PS_.cc.obj +[375/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580_PST.cc.obj +[376/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave.cc.obj +[377/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/voice.cc.obj +[378/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580_P_T.cc.obj +[379/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580__ST.cc.obj +[380/492] Building C object src/video/CMakeFiles/vid.dir/agpgart.c.obj +[381/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_misc.cpp.obj +[382/492] Building C object src/video/CMakeFiles/vid.dir/vid_table.c.obj +[383/492] Building C object src/video/CMakeFiles/vid.dir/vid_cga_comp.c.obj +[384/492] Building C object src/video/CMakeFiles/vid.dir/vid_mda.c.obj +[385/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/sid.cc.obj +[386/492] Building C object src/video/CMakeFiles/vid.dir/vid_compaq_cga.c.obj +[387/492] Building C object src/video/CMakeFiles/vid.dir/vid_cga.c.obj +[388/492] Building C object src/video/CMakeFiles/vid.dir/vid_hercules.c.obj +[389/492] Building C object src/video/CMakeFiles/vid.dir/vid_herculesplus.c.obj +[390/492] Building C object src/video/CMakeFiles/vid.dir/vid_colorplus.c.obj +[391/492] Building C object src/video/CMakeFiles/vid.dir/video.c.obj +[392/492] Building C object src/video/CMakeFiles/vid.dir/vid_genius.c.obj +[393/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/c_interface/c_interface.cpp.obj +[394/492] Building C object src/video/CMakeFiles/vid.dir/vid_incolor.c.obj +[395/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_pcm.cpp.obj +[396/492] Linking CXX static library src\sound\resid-fp\libresid-fp.a +[397/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_adpcm.cpp.obj +[398/492] Building C object src/video/CMakeFiles/vid.dir/vid_im1024.c.obj +[399/492] Building C object src/video/CMakeFiles/vid.dir/vid_ddc.c.obj +[400/492] Building C object src/video/CMakeFiles/vid.dir/vid_wy700.c.obj +[401/492] Building C object src/video/CMakeFiles/vid.dir/vid_sigma.c.obj +[402/492] Building C object src/video/CMakeFiles/vid.dir/vid_vga.c.obj +[403/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati_eeprom.c.obj +[404/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opq.cpp.obj +[405/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opm.cpp.obj +[406/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati18800.c.obj +[407/492] Building C object src/video/CMakeFiles/vid.dir/vid_ega_render.c.obj +[408/492] Building C object src/video/CMakeFiles/vid.dir/vid_av9194.c.obj +[409/492] Building C object src/video/CMakeFiles/vid.dir/vid_icd2061.c.obj +[410/492] Building C object src/video/CMakeFiles/vid.dir/vid_ega.c.obj +[411/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati28800.c.obj +[412/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati68860_ramdac.c.obj +[413/492] Building C object src/video/CMakeFiles/vid.dir/vid_ics2494.c.obj +[414/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Synth.cpp.obj +[415/492] Building C object src/video/CMakeFiles/vid.dir/vid_ics2595.c.obj +[416/492] Building C object src/video/CMakeFiles/vid.dir/vid_bt48x_ramdac.c.obj +[417/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opz.cpp.obj +[418/492] Building C object src/video/CMakeFiles/vid.dir/vid_et3000.c.obj +[419/492] Building C object src/video/CMakeFiles/vid.dir/vid_sc1148x_ramdac.c.obj +[420/492] Building C object src/video/CMakeFiles/vid.dir/vid_sc1502x_ramdac.c.obj +[421/492] Building C object src/video/CMakeFiles/vid.dir/vid_svga.c.obj +[422/492] Building C object src/video/CMakeFiles/vid.dir/vid_stg_ramdac.c.obj +[423/492] Building C object src/video/CMakeFiles/vid.dir/vid_pgc.c.obj +[424/492] Building C object src/video/CMakeFiles/vid.dir/vid_ti_cf62011.c.obj +[425/492] Linking CXX static library src\sound\munt\libmt32emu.a +[426/492] Building C object src/video/CMakeFiles/vid.dir/vid_rtg310x.c.obj +[427/492] Building C object src/video/CMakeFiles/vid.dir/vid_et4000.c.obj +[428/492] Building C object src/video/CMakeFiles/vid.dir/vid_oak_oti.c.obj +[429/492] Building C object src/video/CMakeFiles/vid.dir/vid_tkd8001_ramdac.c.obj +[430/492] Building C object src/video/CMakeFiles/vid.dir/vid_att20c49x_ramdac.c.obj +[431/492] Building C object src/video/CMakeFiles/vid.dir/vid_paradise.c.obj +[432/492] Building C object src/video/CMakeFiles/vid.dir/vid_f82c425.c.obj +[433/492] Building C object src/video/CMakeFiles/vid.dir/vid_tvga.c.obj +[434/492] Building C object src/video/CMakeFiles/vid.dir/vid_sdac_ramdac.c.obj +[435/492] Building C object src/video/CMakeFiles/vid.dir/vid_att2xc498_ramdac.c.obj +[436/492] Building C object src/video/CMakeFiles/vid.dir/vid_ht216.c.obj +[437/492] Building C object src/video/CMakeFiles/vid.dir/vid_tvp3026_ramdac.c.obj +[438/492] Building C object src/video/CMakeFiles/vid.dir/vid_svga_render.c.obj +[439/492] Building C object src/video/CMakeFiles/vid.dir/vid_ogc.c.obj +[440/492] Building C object src/video/CMakeFiles/vid.dir/vid_nga.c.obj +[441/492] Building C object src/video/CMakeFiles/vid.dir/vid_ibm_rgb528_ramdac.c.obj +[442/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_fifo.c.obj +[443/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_blitter.c.obj +[444/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo.c.obj +[445/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_display.c.obj +[446/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_fb.c.obj +[447/492] Building C object src/video/CMakeFiles/vid.dir/vid_tgui9440.c.obj +[448/492] Building C object src/video/CMakeFiles/vid.dir/vid_cl54xx.c.obj +[449/492] Building C object src/video/CMakeFiles/vid.dir/vid_et4000w32.c.obj +[450/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_reg.c.obj +[451/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_setup.c.obj +[452/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_banshee_blitter.c.obj +[453/492] Building C object src/video/CMakeFiles/vid.dir/vid_8514a.c.obj +[454/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opn.cpp.obj +[455/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati_mach64.c.obj +[456/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_texture.c.obj +[457/492] Building C object src/video/CMakeFiles/vid.dir/vid_xga.c.obj +[458/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_banshee.c.obj +[459/492] Building C object src/win/CMakeFiles/plat.dir/win_dynld.c.obj +[460/492] Building C object src/video/CMakeFiles/vid.dir/vid_s3_virge.c.obj +[461/492] Building C object src/win/CMakeFiles/plat.dir/win_keyboard.c.obj +[462/492] Building C object src/win/CMakeFiles/plat.dir/win_mouse.c.obj +[463/492] Building C object src/win/CMakeFiles/plat.dir/win_cdrom.c.obj +[464/492] Building C object src/win/CMakeFiles/ui.dir/win_icon.c.obj +[465/492] Building C object src/win/CMakeFiles/ui.dir/win_about.c.obj +[466/492] Building C object src/win/CMakeFiles/plat.dir/win_joystick_rawinput.c.obj +[467/492] Building C object src/video/CMakeFiles/vid.dir/vid_mga.c.obj +[468/492] Building C object src/win/CMakeFiles/ui.dir/win_sdl.c.obj +[469/492] Building C object src/win/CMakeFiles/ui.dir/win_snd_gain.c.obj +[470/492] Building C object src/win/CMakeFiles/ui.dir/win_opengl_glslp.c.obj +[471/492] Building C object src/win/CMakeFiles/ui.dir/win_stbar.c.obj +[472/492] Building C object src/win/CMakeFiles/ui.dir/win_specify_dim.c.obj +[473/492] Building C object src/win/CMakeFiles/ui.dir/win_ui.c.obj +[474/492] Building C object src/win/CMakeFiles/ui.dir/win_devconf.c.obj +[475/492] Building RC object src/win/CMakeFiles/ui.dir/86Box.rc.obj +[476/492] Building C object src/win/CMakeFiles/ui.dir/win_new_floppy.c.obj +[477/492] Building C object src/win/CMakeFiles/ui.dir/win_preferences.c.obj +[478/492] Building C object src/win/CMakeFiles/ui.dir/win_dialog.c.obj +[479/492] Building C object src/win/CMakeFiles/ui.dir/win_jsconf.c.obj +[480/492] Building C object src/win/CMakeFiles/plat.dir/win.c.obj +[481/492] Building C object src/win/CMakeFiles/ui.dir/glad.c.obj +[482/492] Building C object src/win/CMakeFiles/ui.dir/win_toolbar.c.obj +[483/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opl.cpp.obj +[484/492] Linking CXX static library src\sound\ymfm\libymfm.a +[485/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_render.c.obj +[486/492] Building C object src/video/CMakeFiles/vid.dir/vid_s3.c.obj +[487/492] Building C object src/win/CMakeFiles/ui.dir/win_media_menu.c.obj +[488/492] Building C object src/win/CMakeFiles/ui.dir/win_opengl.c.obj +[489/492] Building C object src/win/CMakeFiles/ui.dir/win_settings.c.obj +[490/492] Building C object src/cpu/CMakeFiles/cpu.dir/386_dynarec_ops.c.obj +[491/492] Building C object src/cpu/CMakeFiles/cpu.dir/386_dynarec.c.obj +[492/492] Linking CXX executable src\86Box.exe diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 94a6f1821..476c27439 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -52,11 +52,14 @@ if(DEV_BRANCH) endif() if(VNC) - add_compile_definitions(USE_VNC) - add_library(vnc OBJECT vnc.c vnc_keymap.c) - target_link_libraries(86Box vnc vncserver) - if(WIN32) - target_link_libraries(86Box ws2_32) + find_package(LibVNCServer) + if(LibVNCServer_FOUND) + add_compile_definitions(USE_VNC) + add_library(vnc OBJECT vnc.c vnc_keymap.c) + target_link_libraries(86Box vnc LibVNCServer::vncserver) + if(WIN32) + target_link_libraries(86Box ws2_32) + endif() endif() endif() diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index 040b14aee..e39792966 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -416,7 +416,7 @@ ifeq ($(VNC), y) OPTS += -I$(VNC_PATH)\INCLUDE VNCLIB := -L$(VNC_PATH)\LIB endif - VNCLIB += -lvncserver + VNCLIB += -lvncserver.dll VNCOBJ := vnc.o vnc_keymap.o endif From 4e0f10969f8374ffb6a75d916459631b3bf9a6fb Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 29 Dec 2022 21:59:28 -0500 Subject: [PATCH 065/112] Use correct case --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 0c4ecd6b7..8987941c1 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -74,7 +74,7 @@ jobs: - uses: actions/checkout@v3 - name: make run: >- - make -fwin/makefile.mingw -j + make -fwin/Makefile.mingw -j DEV_BUILD=${{ matrix.build.dev }} DEBUG=${{ matrix.build.debug }} NEW_DYNAREC=${{ matrix.dynarec.new }} From eb26c1658d25abce8314b8eb17790b51122e4107 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 29 Dec 2022 22:01:33 -0500 Subject: [PATCH 066/112] VNC=n not needed as it's off by default anyway --- .github/workflows/c-cpp.yml | 1 - .github/workflows/cmake.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 8987941c1..8899d9943 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -79,7 +79,6 @@ jobs: DEBUG=${{ matrix.build.debug }} NEW_DYNAREC=${{ matrix.dynarec.new }} X64=${{ matrix.environment.x64 }} - VNC=n working-directory: ./src - uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6876e83bc..c03b6b2b4 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -100,7 +100,6 @@ jobs: -D CMAKE_INSTALL_PREFIX=./build/artifacts -D QT=${{ matrix.ui.qt }} -D STATIC_BUILD=${{ matrix.ui.static }} - -D VNC=n - name: Build run: cmake --build build - name: Generate package From 4cc21ee2dbb789203f27a03918333503520f62b7 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 29 Dec 2022 22:10:53 -0500 Subject: [PATCH 067/112] Delete mingw32-cmake.log It was an accidental upload --- mingw32-cmake.log | 492 ---------------------------------------------- 1 file changed, 492 deletions(-) delete mode 100644 mingw32-cmake.log diff --git a/mingw32-cmake.log b/mingw32-cmake.log deleted file mode 100644 index 112fd3327..000000000 --- a/mingw32-cmake.log +++ /dev/null @@ -1,492 +0,0 @@ -[1/492] Building C object src/CMakeFiles/86Box.dir/random.c.obj -[2/492] Building C object src/CMakeFiles/86Box.dir/nmi.c.obj -[3/492] Building C object src/CMakeFiles/86Box.dir/log.c.obj -[4/492] Building C object src/CMakeFiles/86Box.dir/apm.c.obj -[5/492] Building C object src/CMakeFiles/86Box.dir/ppi.c.obj -[6/492] Building C object src/CMakeFiles/86Box.dir/ddma.c.obj -[7/492] Building C object src/CMakeFiles/86Box.dir/timer.c.obj -[8/492] Building C object src/CMakeFiles/86Box.dir/mca.c.obj -[9/492] Building C object src/CMakeFiles/86Box.dir/port_6x.c.obj -[10/492] Building C object src/CMakeFiles/86Box.dir/fifo8.c.obj -[11/492] Building C object src/CMakeFiles/86Box.dir/port_92.c.obj -[12/492] Building C object src/CMakeFiles/86Box.dir/io.c.obj -[13/492] Building C object src/CMakeFiles/86Box.dir/usb.c.obj -[14/492] Building C object src/CMakeFiles/86Box.dir/nvr_ps2.c.obj -[15/492] Building C object src/CMakeFiles/86Box.dir/machine_status.c.obj -[16/492] Building C object src/CMakeFiles/vnc.dir/vnc_keymap.c.obj -[17/492] Building C object src/CMakeFiles/86Box.dir/pit_fast.c.obj -[18/492] Building C object src/CMakeFiles/86Box.dir/nvr.c.obj -[19/492] Building C object src/CMakeFiles/86Box.dir/pic.c.obj -[20/492] Building C object src/CMakeFiles/86Box.dir/86box.c.obj -[21/492] Building C object src/CMakeFiles/86Box.dir/pit.c.obj -[22/492] Building C object src/CMakeFiles/86Box.dir/pci.c.obj -[23/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_image.c.obj -[24/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_mitsumi.c.obj -[25/492] Building C object src/CMakeFiles/86Box.dir/device.c.obj -[26/492] Building C object src/chipset/CMakeFiles/chipset.dir/82c100.c.obj -[27/492] Building C object src/chipset/CMakeFiles/chipset.dir/acc2168.c.obj -[28/492] Building C object src/CMakeFiles/86Box.dir/ini.c.obj -[29/492] Building C object src/CMakeFiles/86Box.dir/nvr_at.c.obj -[30/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1429.c.obj -[31/492] Building C object src/chipset/CMakeFiles/chipset.dir/cs8230.c.obj -[32/492] Building C object src/CMakeFiles/86Box.dir/dma.c.obj -[33/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1531.c.obj -[34/492] Building C object src/CMakeFiles/86Box.dir/acpi.c.obj -[35/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1489.c.obj -[36/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_82335.c.obj -[37/492] Building C object src/chipset/CMakeFiles/chipset.dir/cs4031.c.obj -[38/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1541.c.obj -[39/492] Building C object src/chipset/CMakeFiles/chipset.dir/contaq_82c59x.c.obj -[40/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali6117.c.obj -[41/492] Building C object src/CMakeFiles/86Box.dir/discord.c.obj -[42/492] Building C object src/chipset/CMakeFiles/chipset.dir/__/ioapic.c.obj -[43/492] Building C object src/chipset/CMakeFiles/chipset.dir/ims8848.c.obj -[44/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1621.c.obj -[45/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_image_backend.c.obj -[46/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_420ex.c.obj -[47/492] Building C object src/chipset/CMakeFiles/chipset.dir/headland.c.obj -[48/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_sio.c.obj -[49/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom.c.obj -[50/492] Building CXX object src/CMakeFiles/86Box.dir/thread.cpp.obj -[51/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti291.c.obj -[52/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti391.c.obj -[53/492] Building C object src/chipset/CMakeFiles/chipset.dir/neat.c.obj -[54/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti495.c.obj -[55/492] Building C object src/CMakeFiles/vnc.dir/vnc.c.obj -[56/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti283.c.obj -[57/492] Building C object src/chipset/CMakeFiles/chipset.dir/ali1543.c.obj -[58/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti5x7.c.obj -[59/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti895.c.obj -[60/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c310.c.obj -[61/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_i450kx.c.obj -[62/492] Building C object src/CMakeFiles/86Box.dir/config.c.obj -[63/492] Building C object src/chipset/CMakeFiles/chipset.dir/opti822.c.obj -[64/492] Building C object src/cdrom/CMakeFiles/cdrom.dir/cdrom_image_viso.c.obj -[65/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c50x.c.obj -[66/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c4xx.c.obj -[67/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_vt82c505.c.obj -[68/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_4x0.c.obj -[69/492] Building C object src/chipset/CMakeFiles/chipset.dir/gc100.c.obj -[70/492] Building C object src/chipset/CMakeFiles/chipset.dir/olivetti_eva.c.obj -[71/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_vt82c49x.c.obj -[72/492] Building C object src/chipset/CMakeFiles/chipset.dir/vl82c480.c.obj -[73/492] Building C object src/chipset/CMakeFiles/chipset.dir/umc_8886.c.obj -[74/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_5571.c.obj -[75/492] Building C object src/cpu/CMakeFiles/cpu.dir/cpu_table.c.obj -[76/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_85c496.c.obj -[77/492] Building C object src/chipset/CMakeFiles/chipset.dir/umc_hb4.c.obj -[78/492] Building C object src/chipset/CMakeFiles/chipset.dir/scamp.c.obj -[79/492] Building C object src/chipset/CMakeFiles/chipset.dir/sis_5511.c.obj -[80/492] Building C object src/cpu/CMakeFiles/cpu.dir/fpu.c.obj -[81/492] Building C object src/chipset/CMakeFiles/chipset.dir/wd76c10.c.obj -[82/492] Building C object src/chipset/CMakeFiles/chipset.dir/intel_piix.c.obj -[83/492] Building C object src/cpu/CMakeFiles/cpu.dir/x87_timings.c.obj -[84/492] Building C object src/cpu/CMakeFiles/cpu.dir/x86.c.obj -[85/492] Building C object src/cpu/CMakeFiles/cpu.dir/x87.c.obj -[86/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_apollo.c.obj -[87/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_common.c.obj -[88/492] Building C object src/cpu/CMakeFiles/cpu.dir/8080.c.obj -[89/492] Building C object src/chipset/CMakeFiles/chipset.dir/stpc.c.obj -[90/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_486.c.obj -[91/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen.c.obj -[92/492] Building C object src/cpu/CMakeFiles/cpu.dir/386.c.obj -[93/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_686.c.obj -[94/492] Building C object src/chipset/CMakeFiles/chipset.dir/scat.c.obj -[95/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_winchip.c.obj -[96/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen_accumulate_x86.c.obj -[97/492] Building C object src/device/CMakeFiles/dev.dir/bugger.c.obj -[98/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_k6.c.obj -[99/492] Building C object src/device/CMakeFiles/dev.dir/cartridge.c.obj -[100/492] Building C object src/device/CMakeFiles/dev.dir/hwm.c.obj -[101/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_winchip2.c.obj -[102/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_p6.c.obj -[103/492] Building C object src/device/CMakeFiles/dev.dir/hasp.c.obj -[104/492] Building C object src/cpu/CMakeFiles/cgt.dir/codegen_timing_pentium.c.obj -[105/492] Building C object src/chipset/CMakeFiles/chipset.dir/via_pipc.c.obj -[106/492] Building C object src/device/CMakeFiles/dev.dir/hwm_lm75.c.obj -[107/492] Building C object src/device/CMakeFiles/dev.dir/hwm_vt82c686.c.obj -[108/492] Building C object src/device/CMakeFiles/dev.dir/hwm_gl518sm.c.obj -[109/492] Building C object src/device/CMakeFiles/dev.dir/ibm_5161.c.obj -[110/492] Building C object src/device/CMakeFiles/dev.dir/cassette.c.obj -[111/492] Building C object src/device/CMakeFiles/dev.dir/postcard.c.obj -[112/492] Building C object src/device/CMakeFiles/dev.dir/__/lpt.c.obj -[113/492] Building C object src/device/CMakeFiles/dev.dir/pci_bridge.c.obj -[114/492] Building C object src/device/CMakeFiles/dev.dir/isamem.c.obj -[115/492] Building C object src/device/CMakeFiles/dev.dir/hwm_lm78.c.obj -[116/492] Building C object src/device/CMakeFiles/dev.dir/clock_ics9xxx.c.obj -[117/492] Building C object src/device/CMakeFiles/dev.dir/i2c.c.obj -[118/492] Building C object src/device/CMakeFiles/dev.dir/i2c_gpio.c.obj -[119/492] Building C object src/device/CMakeFiles/dev.dir/isartc.c.obj -[120/492] Building C object src/cpu/CMakeFiles/cpu.dir/386_common.c.obj -[121/492] Building C object src/device/CMakeFiles/dev.dir/smbus_ali7101.c.obj -[122/492] Building C object src/device/CMakeFiles/dev.dir/smbus_piix4.c.obj -[123/492] Building C object src/device/CMakeFiles/dev.dir/keyboard.c.obj -[124/492] Building C object src/device/CMakeFiles/dev.dir/serial.c.obj -[125/492] Building C object src/cpu/CMakeFiles/cpu.dir/cpu.c.obj -[126/492] Building C object src/disk/CMakeFiles/hdd.dir/hdd_table.c.obj -[127/492] Building C object src/device/CMakeFiles/dev.dir/mouse.c.obj -[128/492] Building C object src/device/CMakeFiles/dev.dir/phoenix_486_jumper.c.obj -[129/492] Building C object src/device/CMakeFiles/dev.dir/isapnp.c.obj -[130/492] Building C object src/device/CMakeFiles/dev.dir/keyboard_xt.c.obj -[131/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc.c.obj -[132/492] Building C object src/device/CMakeFiles/dev.dir/mouse_ps2.c.obj -[133/492] Building C object src/device/CMakeFiles/dev.dir/mouse_bus.c.obj -[134/492] Building C object src/disk/CMakeFiles/hdd.dir/hdd.c.obj -[135/492] Building C object src/cpu/CMakeFiles/cpu.dir/x86seg.c.obj -[136/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_xtide.c.obj -[137/492] Building C object src/device/CMakeFiles/dev.dir/mouse_serial.c.obj -[138/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_st506_at.c.obj -[139/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_opti611.c.obj -[140/492] Building C object src/disk/CMakeFiles/hdd.dir/hdd_image.c.obj -[141/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_cmd646.c.obj -[142/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_esdi_at.c.obj -[143/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_cmd640.c.obj -[144/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide_sff8038i.c.obj -[145/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_xta.c.obj -[146/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_esdi_mca.c.obj -[147/492] Building C object src/device/CMakeFiles/dev.dir/keyboard_at.c.obj -[148/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_convert.c.obj -[149/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_st506_xt.c.obj -[150/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/libxml2_encoding.c.obj -[151/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_io.c.obj -[152/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc_magitronic.c.obj -[153/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_struct_rw.c.obj -[154/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc_monster.c.obj -[155/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc_pii15xb.c.obj -[156/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_create.c.obj -[157/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_manage.c.obj -[158/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/minivhd_util.c.obj -[159/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_common.c.obj -[160/492] Building C object src/disk/minivhd/CMakeFiles/minivhd.dir/cwalk.c.obj -[161/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd.c.obj -[162/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen_x86.c.obj -[163/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_fdi.c.obj -[164/492] Building C object src/game/CMakeFiles/game.dir/joystick_ch_flightstick_pro.c.obj -[165/492] Building C object src/game/CMakeFiles/game.dir/joystick_standard.c.obj -[166/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_mfm.c.obj -[167/492] Building C object src/game/CMakeFiles/game.dir/joystick_tm_fcs.c.obj -[168/492] Building C object src/game/CMakeFiles/game.dir/gameport.c.obj -[169/492] Building C object src/disk/CMakeFiles/zip.dir/zip.c.obj -[170/492] Linking C static library src\disk\minivhd\libminivhd.a -[171/492] Building C object src/game/CMakeFiles/game.dir/joystick_sw_pad.c.obj -[172/492] Building C object src/machine/CMakeFiles/mch.dir/machine.c.obj -[173/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_json.c.obj -[174/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_compaq.c.obj -[175/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_imd.c.obj -[176/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_philips.c.obj -[177/492] Building C object src/machine/CMakeFiles/mch.dir/machine_table.c.obj -[178/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_img.c.obj -[179/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_xi8088.c.obj -[180/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_zenith.c.obj -[181/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt.c.obj -[182/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_td0.c.obj -[183/492] Building C object src/disk/CMakeFiles/hdd.dir/hdc_ide.c.obj -[184/492] Building C object src/machine/CMakeFiles/mch.dir/m_elt.c.obj -[185/492] Building C object src/machine/CMakeFiles/mch.dir/m_v86p.c.obj -[186/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdc.c.obj -[187/492] Building C object src/machine/CMakeFiles/mch.dir/m_europc.c.obj -[188/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_commodore.c.obj -[189/492] Building C object src/machine/CMakeFiles/mch.dir/m_at.c.obj -[190/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_t1000_vid.c.obj -[191/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_t1000.c.obj -[192/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdi2raw.c.obj -[193/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps2_isa.c.obj -[194/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps1.c.obj -[195/492] Building C object src/disk/CMakeFiles/mo.dir/mo.c.obj -[196/492] Building C object src/machine/CMakeFiles/mch.dir/m_pcjr.c.obj -[197/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_t3100e.c.obj -[198/492] Building C object src/cpu/CMakeFiles/cpu.dir/808x.c.obj -[199/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket4.c.obj -[200/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_olivetti.c.obj -[201/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket5.c.obj -[202/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps1_hdc.c.obj -[203/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_t3100e_vid.c.obj -[204/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_286_386sx.c.obj -[205/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_slot2.c.obj -[206/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_sockets7.c.obj -[207/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket8.c.obj -[208/492] Building C object src/machine/CMakeFiles/mch.dir/m_tandy.c.obj -[209/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket7_3v.c.obj -[210/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_misc.c.obj -[211/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket370.c.obj -[212/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_compaq.c.obj -[213/492] Building C object src/machine/CMakeFiles/mch.dir/m_ps2_mca.c.obj -[214/492] Building C object src/machine/CMakeFiles/mch.dir/m_xt_laserxt.c.obj -[215/492] Building C object src/mem/CMakeFiles/mem.dir/i2c_eeprom.c.obj -[216/492] Building C object src/mem/CMakeFiles/mem.dir/catalyst_flash.c.obj -[217/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_slot1.c.obj -[218/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_socket7.c.obj -[219/492] Building C object src/machine/CMakeFiles/mch.dir/m_amstrad.c.obj -[220/492] Building C object src/floppy/CMakeFiles/fdd.dir/fdd_86f.c.obj -[221/492] Building C object src/machine/CMakeFiles/mch.dir/m_at_386dx_486.c.obj -[222/492] Building C object src/mem/CMakeFiles/mem.dir/intel_flash.c.obj -[223/492] Building C object src/mem/CMakeFiles/mem.dir/smram.c.obj -[224/492] Building C object src/mem/CMakeFiles/mem.dir/sst_flash.c.obj -[225/492] Building C object src/mem/CMakeFiles/mem.dir/spd.c.obj -[226/492] Building C object src/network/CMakeFiles/net.dir/net_3c503.c.obj -[227/492] Building C object src/mem/CMakeFiles/mem.dir/rom.c.obj -[228/492] Building C object src/network/CMakeFiles/net.dir/net_plip.c.obj -[229/492] Building C object src/network/CMakeFiles/net.dir/net_pcap.c.obj -[230/492] Building C object src/network/CMakeFiles/net.dir/net_3c501.c.obj -[231/492] Building C object src/network/CMakeFiles/net.dir/net_event.c.obj -[232/492] Building C object src/network/CMakeFiles/net.dir/net_dp8390.c.obj -[233/492] Building C object src/network/CMakeFiles/net.dir/net_wd8003.c.obj -[234/492] Building C object src/network/CMakeFiles/net.dir/net_ne2000.c.obj -[235/492] Building C object src/network/CMakeFiles/net.dir/network.c.obj -[236/492] Building C object src/network/CMakeFiles/net.dir/net_slirp.c.obj -[237/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/arp_table.c.obj -[238/492] Building C object src/mem/CMakeFiles/mem.dir/mem.c.obj -[239/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/cksum.c.obj -[240/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/bootp.c.obj -[241/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/if.c.obj -[242/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/ip_output.c.obj -[243/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/dnssearch.c.obj -[244/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/ip_icmp.c.obj -[245/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/ip_input.c.obj -[246/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/sbuf.c.obj -[247/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/mbuf.c.obj -[248/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tinyglib.c.obj -[249/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/misc.c.obj -[250/492] Building C object src/printer/CMakeFiles/print.dir/prt_cpmap.c.obj -[251/492] Building C object src/printer/CMakeFiles/print.dir/png.c.obj -[252/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_output.c.obj -[253/492] Building C object src/codegen/CMakeFiles/dynarec.dir/codegen_ops.c.obj -[254/492] Building C object src/sio/CMakeFiles/sio.dir/sio_acc3221.c.obj -[255/492] Building C object src/printer/CMakeFiles/print.dir/prt_text.c.obj -[256/492] Building C object src/printer/CMakeFiles/print.dir/prt_ps.c.obj -[257/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/socket.c.obj -[258/492] Building C object src/sio/CMakeFiles/sio.dir/sio_f82c710.c.obj -[259/492] Building C object src/sio/CMakeFiles/sio.dir/sio_ali5123.c.obj -[260/492] Building C object src/network/CMakeFiles/net.dir/net_pcnet.c.obj -[261/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_input.c.obj -[262/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c6xx.c.obj -[263/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/slirp.c.obj -[264/492] Building C object src/sio/CMakeFiles/sio.dir/sio_82091aa.c.obj -[265/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c669.c.obj -[266/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_subr.c.obj -[267/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c67x.c.obj -[268/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37m60x.c.obj -[269/492] Building C object src/sio/CMakeFiles/sio.dir/sio_it8661f.c.obj -[270/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/version.c.obj -[271/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/tcp_timer.c.obj -[272/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87306.c.obj -[273/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87310.c.obj -[274/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87311.c.obj -[275/492] Building C object src/sio/CMakeFiles/sio.dir/sio_prime3b.c.obj -[276/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87307.c.obj -[277/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/udp.c.obj -[278/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87332.c.obj -[279/492] Building C object src/sio/CMakeFiles/sio.dir/sio_pc87309.c.obj -[280/492] Building C object src/network/slirp/CMakeFiles/slirp.dir/util.c.obj -[281/492] Building C object src/sio/CMakeFiles/sio.dir/sio_detect.c.obj -[282/492] Building C object src/sio/CMakeFiles/sio.dir/sio_prime3c.c.obj -[283/492] Building C object src/sio/CMakeFiles/sio.dir/sio_fdc37c93x.c.obj -[284/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi.c.obj -[285/492] Building C object src/sio/CMakeFiles/sio.dir/sio_um8669f.c.obj -[286/492] Building C object src/sio/CMakeFiles/sio.dir/sio_w83787f.c.obj -[287/492] Building C object src/sio/CMakeFiles/sio.dir/sio_vt82c686.c.obj -[288/492] Building C object src/sio/CMakeFiles/sio.dir/sio_w83877f.c.obj -[289/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_device.c.obj -[290/492] Building C object src/printer/CMakeFiles/print.dir/prt_escp.c.obj -[291/492] Building C object src/sio/CMakeFiles/sio.dir/sio_w83977f.c.obj -[292/492] Building C object src/sound/CMakeFiles/snd.dir/snd_opl.c.obj -[293/492] Linking C static library src\network\slirp\libslirp.a -[294/492] Building C object src/sound/CMakeFiles/snd.dir/snd_speaker.c.obj -[295/492] Building C object src/sound/CMakeFiles/snd.dir/snd_lpt_dac.c.obj -[296/492] Building C object src/sound/CMakeFiles/snd.dir/sound.c.obj -[297/492] Building CXX object src/sound/CMakeFiles/snd.dir/snd_resid.cc.obj -[298/492] Building C object src/sound/CMakeFiles/snd.dir/snd_pssj.c.obj -[299/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_aha154x.c.obj -[300/492] Building C object src/sound/CMakeFiles/snd.dir/midi.c.obj -[301/492] Building C object src/sound/CMakeFiles/snd.dir/snd_lpt_dss.c.obj -[302/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_disk.c.obj -[303/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ps1.c.obj -[304/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_spock.c.obj -[305/492] Building C object src/sound/CMakeFiles/snd.dir/snd_adlib.c.obj -[306/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ac97_codec.c.obj -[307/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ac97_via.c.obj -[308/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_buslogic.c.obj -[309/492] Building C object src/sound/CMakeFiles/snd.dir/snd_opl_nuked.c.obj -[310/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_ncr5380.c.obj -[311/492] Building C object src/sound/CMakeFiles/snd.dir/snd_cms.c.obj -[312/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_x54x.c.obj -[313/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_pcscsi.c.obj -[314/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ad1848.c.obj -[315/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ssi2001.c.obj -[316/492] Building C object src/sound/CMakeFiles/snd.dir/snd_ym7128.c.obj -[317/492] Building C object src/sound/CMakeFiles/snd.dir/snd_azt2316a.c.obj -[318/492] Building C object src/sound/CMakeFiles/snd.dir/snd_wss.c.obj -[319/492] Building C object src/sound/CMakeFiles/snd.dir/snd_adlibgold.c.obj -[320/492] Building C object src/sound/CMakeFiles/snd.dir/snd_sn76489.c.obj -[321/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_cdrom.c.obj -[322/492] Building C object src/scsi/CMakeFiles/scsi.dir/scsi_ncr53c8xx.c.obj -[323/492] Building C object src/sound/CMakeFiles/snd.dir/snd_cs423x.c.obj -[324/492] Building C object src/sound/CMakeFiles/snd.dir/openal.c.obj -[325/492] Building C object src/sound/CMakeFiles/snd.dir/snd_optimc.c.obj -[326/492] Building C object src/sound/CMakeFiles/snd.dir/snd_gus.c.obj -[327/492] Building C object src/sound/CMakeFiles/snd.dir/snd_cmi8x38.c.obj -[328/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/LA32Ramp.cpp.obj -[329/492] Building C object src/sound/CMakeFiles/snd.dir/snd_audiopci.c.obj -[330/492] Building C object src/sound/CMakeFiles/snd.dir/midi_fluidsynth.c.obj -[331/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/File.cpp.obj -[332/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Display.cpp.obj -[333/492] Building C object src/sound/CMakeFiles/snd.dir/midi_mt32.c.obj -[334/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/LA32FloatWaveGenerator.cpp.obj -[335/492] Building C object src/sound/CMakeFiles/snd.dir/snd_sb_dsp.c.obj -[336/492] Building C object src/sound/CMakeFiles/snd.dir/snd_pas16.c.obj -[337/492] Building C object src/sound/CMakeFiles/snd.dir/snd_mpu401.c.obj -[338/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Analog.cpp.obj -[339/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Poly.cpp.obj -[340/492] Building C object src/sound/CMakeFiles/snd.dir/snd_emu8k.c.obj -[341/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/LA32WaveGenerator.cpp.obj -[342/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/SampleRateConverter.cpp.obj -[343/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/PartialManager.cpp.obj -[344/492] Building C object src/sound/CMakeFiles/snd.dir/snd_sb.c.obj -[345/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/MidiStreamParser.cpp.obj -[346/492] Building CXX object src/sound/CMakeFiles/snd.dir/snd_opl_ymfm.cpp.obj -[347/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/FIRResampler.cpp.obj -[348/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Partial.cpp.obj -[349/492] Building CXX object src/sound/CMakeFiles/snd.dir/midi_rtmidi.cpp.obj -[350/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/LinearResampler.cpp.obj -[351/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/ROMInfo.cpp.obj -[352/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/FileStream.cpp.obj -[353/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/InternalResampler.cpp.obj -[354/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/IIR2xResampler.cpp.obj -[355/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/SincResampler.cpp.obj -[356/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/srchelper/srctools/src/ResamplerModel.cpp.obj -[357/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Tables.cpp.obj -[358/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/BReverbModel.cpp.obj -[359/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/TVF.cpp.obj -[360/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/sha1/sha1.cpp.obj -[361/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Part.cpp.obj -[362/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/envelope.cc.obj -[363/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/TVA.cpp.obj -[364/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/TVP.cpp.obj -[365/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/convolve.cc.obj -[366/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/pot.cc.obj -[367/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/convolve-sse.cc.obj -[368/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/extfilt.cc.obj -[369/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581_PST.cc.obj -[370/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581_P_T.cc.obj -[371/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581_PS_.cc.obj -[372/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/filter.cc.obj -[373/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave6581__ST.cc.obj -[374/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580_PS_.cc.obj -[375/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580_PST.cc.obj -[376/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave.cc.obj -[377/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/voice.cc.obj -[378/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580_P_T.cc.obj -[379/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/wave8580__ST.cc.obj -[380/492] Building C object src/video/CMakeFiles/vid.dir/agpgart.c.obj -[381/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_misc.cpp.obj -[382/492] Building C object src/video/CMakeFiles/vid.dir/vid_table.c.obj -[383/492] Building C object src/video/CMakeFiles/vid.dir/vid_cga_comp.c.obj -[384/492] Building C object src/video/CMakeFiles/vid.dir/vid_mda.c.obj -[385/492] Building CXX object src/sound/resid-fp/CMakeFiles/resid-fp.dir/sid.cc.obj -[386/492] Building C object src/video/CMakeFiles/vid.dir/vid_compaq_cga.c.obj -[387/492] Building C object src/video/CMakeFiles/vid.dir/vid_cga.c.obj -[388/492] Building C object src/video/CMakeFiles/vid.dir/vid_hercules.c.obj -[389/492] Building C object src/video/CMakeFiles/vid.dir/vid_herculesplus.c.obj -[390/492] Building C object src/video/CMakeFiles/vid.dir/vid_colorplus.c.obj -[391/492] Building C object src/video/CMakeFiles/vid.dir/video.c.obj -[392/492] Building C object src/video/CMakeFiles/vid.dir/vid_genius.c.obj -[393/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/c_interface/c_interface.cpp.obj -[394/492] Building C object src/video/CMakeFiles/vid.dir/vid_incolor.c.obj -[395/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_pcm.cpp.obj -[396/492] Linking CXX static library src\sound\resid-fp\libresid-fp.a -[397/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_adpcm.cpp.obj -[398/492] Building C object src/video/CMakeFiles/vid.dir/vid_im1024.c.obj -[399/492] Building C object src/video/CMakeFiles/vid.dir/vid_ddc.c.obj -[400/492] Building C object src/video/CMakeFiles/vid.dir/vid_wy700.c.obj -[401/492] Building C object src/video/CMakeFiles/vid.dir/vid_sigma.c.obj -[402/492] Building C object src/video/CMakeFiles/vid.dir/vid_vga.c.obj -[403/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati_eeprom.c.obj -[404/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opq.cpp.obj -[405/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opm.cpp.obj -[406/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati18800.c.obj -[407/492] Building C object src/video/CMakeFiles/vid.dir/vid_ega_render.c.obj -[408/492] Building C object src/video/CMakeFiles/vid.dir/vid_av9194.c.obj -[409/492] Building C object src/video/CMakeFiles/vid.dir/vid_icd2061.c.obj -[410/492] Building C object src/video/CMakeFiles/vid.dir/vid_ega.c.obj -[411/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati28800.c.obj -[412/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati68860_ramdac.c.obj -[413/492] Building C object src/video/CMakeFiles/vid.dir/vid_ics2494.c.obj -[414/492] Building CXX object src/sound/munt/CMakeFiles/mt32emu.dir/Synth.cpp.obj -[415/492] Building C object src/video/CMakeFiles/vid.dir/vid_ics2595.c.obj -[416/492] Building C object src/video/CMakeFiles/vid.dir/vid_bt48x_ramdac.c.obj -[417/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opz.cpp.obj -[418/492] Building C object src/video/CMakeFiles/vid.dir/vid_et3000.c.obj -[419/492] Building C object src/video/CMakeFiles/vid.dir/vid_sc1148x_ramdac.c.obj -[420/492] Building C object src/video/CMakeFiles/vid.dir/vid_sc1502x_ramdac.c.obj -[421/492] Building C object src/video/CMakeFiles/vid.dir/vid_svga.c.obj -[422/492] Building C object src/video/CMakeFiles/vid.dir/vid_stg_ramdac.c.obj -[423/492] Building C object src/video/CMakeFiles/vid.dir/vid_pgc.c.obj -[424/492] Building C object src/video/CMakeFiles/vid.dir/vid_ti_cf62011.c.obj -[425/492] Linking CXX static library src\sound\munt\libmt32emu.a -[426/492] Building C object src/video/CMakeFiles/vid.dir/vid_rtg310x.c.obj -[427/492] Building C object src/video/CMakeFiles/vid.dir/vid_et4000.c.obj -[428/492] Building C object src/video/CMakeFiles/vid.dir/vid_oak_oti.c.obj -[429/492] Building C object src/video/CMakeFiles/vid.dir/vid_tkd8001_ramdac.c.obj -[430/492] Building C object src/video/CMakeFiles/vid.dir/vid_att20c49x_ramdac.c.obj -[431/492] Building C object src/video/CMakeFiles/vid.dir/vid_paradise.c.obj -[432/492] Building C object src/video/CMakeFiles/vid.dir/vid_f82c425.c.obj -[433/492] Building C object src/video/CMakeFiles/vid.dir/vid_tvga.c.obj -[434/492] Building C object src/video/CMakeFiles/vid.dir/vid_sdac_ramdac.c.obj -[435/492] Building C object src/video/CMakeFiles/vid.dir/vid_att2xc498_ramdac.c.obj -[436/492] Building C object src/video/CMakeFiles/vid.dir/vid_ht216.c.obj -[437/492] Building C object src/video/CMakeFiles/vid.dir/vid_tvp3026_ramdac.c.obj -[438/492] Building C object src/video/CMakeFiles/vid.dir/vid_svga_render.c.obj -[439/492] Building C object src/video/CMakeFiles/vid.dir/vid_ogc.c.obj -[440/492] Building C object src/video/CMakeFiles/vid.dir/vid_nga.c.obj -[441/492] Building C object src/video/CMakeFiles/vid.dir/vid_ibm_rgb528_ramdac.c.obj -[442/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_fifo.c.obj -[443/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_blitter.c.obj -[444/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo.c.obj -[445/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_display.c.obj -[446/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_fb.c.obj -[447/492] Building C object src/video/CMakeFiles/vid.dir/vid_tgui9440.c.obj -[448/492] Building C object src/video/CMakeFiles/vid.dir/vid_cl54xx.c.obj -[449/492] Building C object src/video/CMakeFiles/vid.dir/vid_et4000w32.c.obj -[450/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_reg.c.obj -[451/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_setup.c.obj -[452/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_banshee_blitter.c.obj -[453/492] Building C object src/video/CMakeFiles/vid.dir/vid_8514a.c.obj -[454/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opn.cpp.obj -[455/492] Building C object src/video/CMakeFiles/vid.dir/vid_ati_mach64.c.obj -[456/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_texture.c.obj -[457/492] Building C object src/video/CMakeFiles/vid.dir/vid_xga.c.obj -[458/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_banshee.c.obj -[459/492] Building C object src/win/CMakeFiles/plat.dir/win_dynld.c.obj -[460/492] Building C object src/video/CMakeFiles/vid.dir/vid_s3_virge.c.obj -[461/492] Building C object src/win/CMakeFiles/plat.dir/win_keyboard.c.obj -[462/492] Building C object src/win/CMakeFiles/plat.dir/win_mouse.c.obj -[463/492] Building C object src/win/CMakeFiles/plat.dir/win_cdrom.c.obj -[464/492] Building C object src/win/CMakeFiles/ui.dir/win_icon.c.obj -[465/492] Building C object src/win/CMakeFiles/ui.dir/win_about.c.obj -[466/492] Building C object src/win/CMakeFiles/plat.dir/win_joystick_rawinput.c.obj -[467/492] Building C object src/video/CMakeFiles/vid.dir/vid_mga.c.obj -[468/492] Building C object src/win/CMakeFiles/ui.dir/win_sdl.c.obj -[469/492] Building C object src/win/CMakeFiles/ui.dir/win_snd_gain.c.obj -[470/492] Building C object src/win/CMakeFiles/ui.dir/win_opengl_glslp.c.obj -[471/492] Building C object src/win/CMakeFiles/ui.dir/win_stbar.c.obj -[472/492] Building C object src/win/CMakeFiles/ui.dir/win_specify_dim.c.obj -[473/492] Building C object src/win/CMakeFiles/ui.dir/win_ui.c.obj -[474/492] Building C object src/win/CMakeFiles/ui.dir/win_devconf.c.obj -[475/492] Building RC object src/win/CMakeFiles/ui.dir/86Box.rc.obj -[476/492] Building C object src/win/CMakeFiles/ui.dir/win_new_floppy.c.obj -[477/492] Building C object src/win/CMakeFiles/ui.dir/win_preferences.c.obj -[478/492] Building C object src/win/CMakeFiles/ui.dir/win_dialog.c.obj -[479/492] Building C object src/win/CMakeFiles/ui.dir/win_jsconf.c.obj -[480/492] Building C object src/win/CMakeFiles/plat.dir/win.c.obj -[481/492] Building C object src/win/CMakeFiles/ui.dir/glad.c.obj -[482/492] Building C object src/win/CMakeFiles/ui.dir/win_toolbar.c.obj -[483/492] Building CXX object src/sound/ymfm/CMakeFiles/ymfm.dir/ymfm_opl.cpp.obj -[484/492] Linking CXX static library src\sound\ymfm\libymfm.a -[485/492] Building C object src/video/CMakeFiles/voodoo.dir/vid_voodoo_render.c.obj -[486/492] Building C object src/video/CMakeFiles/vid.dir/vid_s3.c.obj -[487/492] Building C object src/win/CMakeFiles/ui.dir/win_media_menu.c.obj -[488/492] Building C object src/win/CMakeFiles/ui.dir/win_opengl.c.obj -[489/492] Building C object src/win/CMakeFiles/ui.dir/win_settings.c.obj -[490/492] Building C object src/cpu/CMakeFiles/cpu.dir/386_dynarec_ops.c.obj -[491/492] Building C object src/cpu/CMakeFiles/cpu.dir/386_dynarec.c.obj -[492/492] Linking CXX executable src\86Box.exe From 06a7e00af4b53eae996a14ba44d9b8448dd1f552 Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 30 Dec 2022 04:29:56 +0100 Subject: [PATCH 068/112] Fix video output via VNC. --- src/vnc.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/vnc.c b/src/vnc.c index 3bffdcd9d..ef2ac7639 100644 --- a/src/vnc.c +++ b/src/vnc.c @@ -160,20 +160,15 @@ vnc_display(rfbClientPtr cl) static void vnc_blit(int x, int y, int w, int h, int monitor_index) { - uint32_t *p; - int yy; + int row; if (monitor_index || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) { video_blit_complete_monitor(monitor_index); return; } - for (yy = 0; yy < h; yy++) { - p = (uint32_t *) &(((uint32_t *) rfb->frameBuffer)[yy * VNC_MAX_X]); - - if ((y + yy) >= 0 && (y + yy) < VNC_MAX_Y) - video_copy(p, &(buffer32->line[yy]), w * sizeof(uint32_t)); - } + for (row = 0; row < h; ++row) + video_copy(&(((uint8_t *) rfb->frameBuffer)[row * 2048 * sizeof(uint32_t)]), &(buffer32->line[y + row][x]), w * sizeof(uint32_t)); if (screenshots) video_screenshot((uint32_t *) rfb->frameBuffer, 0, 0, VNC_MAX_X); From 06d4ae5595a9cd36a8610d43e363bfaec5929a7c Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 30 Dec 2022 06:05:57 +0100 Subject: [PATCH 069/112] Fixed VNC mouse, but the correct scale factor for X and Y has to be figured out. --- src/device/mouse.c | 12 ++++++- src/include/86box/mouse.h | 1 + src/vnc.c | 72 ++++++++++++++++++++++++++------------- 3 files changed, 61 insertions(+), 24 deletions(-) diff --git a/src/device/mouse.c b/src/device/mouse.c index 422161a83..f628d1efa 100644 --- a/src/device/mouse.c +++ b/src/device/mouse.c @@ -88,6 +88,7 @@ static const device_t *mouse_curr; static void *mouse_priv; static int mouse_nbut; static int (*mouse_dev_poll)(int x, int y, int z, int b, void *priv); +static void (*mouse_poll_ex)(void) = NULL; #ifdef ENABLE_MOUSE_LOG int mouse_do_log = ENABLE_MOUSE_LOG; @@ -164,13 +165,22 @@ mouse_set_buttons(int buttons) mouse_nbut = buttons; } +void +mouse_set_poll_ex(void (*poll_ex)(void)) +{ + mouse_poll_ex = poll_ex; +} + void mouse_process(void) { if (mouse_curr == NULL) return; - mouse_poll(); + if (mouse_poll_ex) + mouse_poll_ex(); + else + mouse_poll(); if ((mouse_dev_poll != NULL) || (mouse_curr->poll != NULL)) { if (mouse_curr->poll != NULL) diff --git a/src/include/86box/mouse.h b/src/include/86box/mouse.h index 434360589..aa046b81c 100644 --- a/src/include/86box/mouse.h +++ b/src/include/86box/mouse.h @@ -65,6 +65,7 @@ extern void mouse_init(void); extern void mouse_close(void); extern void mouse_reset(void); extern void mouse_set_buttons(int buttons); +extern void mouse_set_poll_ex(void (*poll_ex)(void)); extern void mouse_process(void); extern void mouse_set_poll(int (*f)(int, int, int, int, void *), void *); extern void mouse_poll(void); diff --git a/src/vnc.c b/src/vnc.c index ef2ac7639..ef388939a 100644 --- a/src/vnc.c +++ b/src/vnc.c @@ -44,6 +44,15 @@ static int allowedX, allowedY; static int ptr_x, ptr_y, ptr_but; +typedef struct { + int buttons; + int dx; + int dy; + int dwheel; +} MOUSESTATE; + +static MOUSESTATE ms; + #ifdef ENABLE_VNC_LOG int vnc_do_log = ENABLE_VNC_LOG; @@ -71,29 +80,43 @@ vnc_kbdevent(rfbBool down, rfbKeySym k, rfbClientPtr cl) vnc_kbinput(down ? 1 : 0, (int) k); } +void +vnc_mouse_poll(void) +{ + static int b = 0; + if (ms.dx != 0 || ms.dy != 0) { + mouse_x += ms.dx; + mouse_y += ms.dy; + + ms.dx = 0; + ms.dy = 0; + + // pclog("dx=%d, dy=%d, dwheel=%d\n", mouse_x, mouse_y, mouse_z); + } + + if (b != ms.buttons) { + mouse_buttons = ms.buttons; + b = ms.buttons; + } +} + static void vnc_ptrevent(int but, int x, int y, rfbClientPtr cl) { - if (x >= 0 && x < allowedX && y >= 0 && y < allowedY) { - /* VNC uses absolute positions within the window, no deltas. */ - if (x != ptr_x || y != ptr_y) { - mouse_x += (x - ptr_x) / 100; - mouse_y += (y - ptr_y) / 100; - ptr_x = x; - ptr_y = y; - } + ms.buttons = 0; + if (but & 0x01) + ms.buttons |= 0x01; + if (but & 0x02) + ms.buttons |= 0x04; + if (but & 0x04) + ms.buttons |= 0x02; + ptr_but = but; - if (but != ptr_but) { - mouse_buttons = 0; - if (but & 0x01) - mouse_buttons |= 0x01; - if (but & 0x02) - mouse_buttons |= 0x04; - if (but & 0x04) - mouse_buttons |= 0x02; - ptr_but = but; - } - } + /* VNC uses absolute positions within the window, no deltas. */ + ms.dx += (x - ptr_x) / 0.96; /* TODO: Figure out the correct scale factor for X and Y. */ + ms.dy += (y - ptr_y) / 0.96; + ptr_x = x; + ptr_y = y; rfbDefaultPtrAddEvent(but, x, y, cl); } @@ -110,7 +133,8 @@ vnc_clientgone(rfbClientPtr cl) vnc_log("VNC: no clients, pausing..\n"); /* Disable the mouse. */ - plat_mouse_capture(0); + // plat_mouse_capture(0); + mouse_set_poll_ex(NULL); plat_pause(1); } @@ -129,12 +153,14 @@ vnc_newclient(rfbClientPtr cl) ptr_y = allowedY / 2; mouse_x = mouse_y = mouse_z = 0; mouse_buttons = 0x00; + memset(&ms, 0, sizeof(MOUSESTATE)); /* We now have clients, un-pause the emulator if needed. */ vnc_log("VNC: unpausing..\n"); /* Enable the mouse. */ - plat_mouse_capture(1); + // plat_mouse_capture(1); + mouse_set_poll_ex(vnc_mouse_poll); plat_pause(0); } @@ -162,7 +188,7 @@ vnc_blit(int x, int y, int w, int h, int monitor_index) { int row; - if (monitor_index || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) { + if (monitor_index || (x < 0) || (y < 0) || (w < VNC_MIN_X) || (h < VNC_MIN_Y) || (w > VNC_MAX_X) || (h > VNC_MAX_Y) || (buffer32 == NULL)) { video_blit_complete_monitor(monitor_index); return; } @@ -260,7 +286,7 @@ vnc_resize(int x, int y) return; /* TightVNC doesn't like certain sizes.. */ - if (x < VNC_MIN_X || x > VNC_MAX_X || y < VNC_MIN_Y || y > VNC_MAX_Y) { + if ((x < VNC_MIN_X) || (x > VNC_MAX_X) || (y < VNC_MIN_Y) || (y > VNC_MAX_Y)) { vnc_log("VNC: invalid resoltion %dx%d requested!\n", x, y); return; } From b73c442af0c8f2996a4840a18450bff994cc97a8 Mon Sep 17 00:00:00 2001 From: FreeFull Date: Fri, 30 Dec 2022 23:32:57 +0000 Subject: [PATCH 070/112] Fix keyboard input for British keyboard layout Before this change, the `\|` key would be treated the same as the `/?` on a UK keyboard layout. With this change, it should behave properly, assuming the guest is also set to use a UK keyboard. --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index d707fc7ea..c87348663 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1070,7 +1070,7 @@ std::array x11_to_xt_2 { 0x53, 0x138, 0x55, - 0x35, + 0x56, 0x57, 0x58, 0x56, From 9d09a206b4a925660a48af807ea0525f8fe392a2 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sat, 31 Dec 2022 14:06:01 -0500 Subject: [PATCH 071/112] Update version of ninja used for github actions --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c03b6b2b4..c1758ee50 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -168,7 +168,7 @@ jobs: run: echo "C:/Program Files/LLVM/bin" >> $env:GITHUB_PATH - name: Download Ninja run: > - Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip -OutFile ninja-win.zip && + Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip -OutFile ninja-win.zip && Expand-Archive ninja-win.zip -DestinationPath . - name: Setup NuGet Credentials run: > From 4112d1b0c23b85b6579db5716e1c913b79c7a76c Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sat, 31 Dec 2022 17:56:51 -0500 Subject: [PATCH 072/112] Add missing libvncserver dependencies --- .github/workflows/cmake.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c1758ee50..1c1a58e32 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -246,6 +246,7 @@ jobs: qtbase5-dev qttools5-dev libopenal-dev + libvncserver-dev - uses: actions/checkout@v3 - name: Configure CMake run: >- @@ -296,6 +297,7 @@ jobs: rtmidi qt@5 openal-soft + libvncserver - uses: actions/checkout@v3 - name: Configure CMake run: >- From 3d5d37804e9ae105cc310a90567388e990ddf225 Mon Sep 17 00:00:00 2001 From: Dylan Morrison Date: Sat, 31 Dec 2022 21:50:40 -0500 Subject: [PATCH 073/112] Added support for bumpversion to bump version/date info for Debian changelog. --- bumpversion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bumpversion.sh b/bumpversion.sh index ac6116bcc..ce3b7c4c8 100644 --- a/bumpversion.sh +++ b/bumpversion.sh @@ -73,3 +73,5 @@ patch_file src/unix/assets/*.spec '%global romver' 's/(^%global\ romver\s+)[0-9] 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"'\)/' From 1e26ee7cdd447a85452f4d240e760067648a944e Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 1 Jan 2023 17:32:01 -0500 Subject: [PATCH 074/112] Add CodeQL checking --- .github/workflows/codeql.yml | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 000000000..2cc36c6a6 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,51 @@ +name: "CodeQL" + +on: [ push, pull_request] + +jobs: + analyze: + name: Analyze + + runs-on: ubuntu-latest + + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'cpp' ] + + steps: + - name: Install dependencies + run: >- + sudo apt update && sudo apt install + build-essential + ninja-build + libfreetype-dev + libsdl2-dev + libpng-dev + libc6-dev + librtmidi-dev + qtbase5-dev + qttools5-dev + libopenal-dev + libvncserver-dev + + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" From 3738a83980981439e9fafa08f07f7b6cbf1eb265 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 3 Jan 2023 16:01:45 -0500 Subject: [PATCH 075/112] Add Slot1 to Socket 8 slotket One such example is the ASUS C-P6S1 --- src/cpu/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 4d1abcd05..380da450e 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -235,7 +235,7 @@ cpu_is_eligible(const cpu_family_t *cpu_family, int cpu, int machine) if (packages & CPU_PKG_SOCKET3) packages |= CPU_PKG_SOCKET1; else if (packages & CPU_PKG_SLOT1) - packages |= CPU_PKG_SOCKET370; + packages |= CPU_PKG_SOCKET370 | CPU_PKG_SOCKET8; /* Package type. */ if (!(cpu_family->package & packages)) From 6291ae01a3b81b74aebbd67aa9cf27f3dd2ea62b Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 3 Jan 2023 18:15:20 -0500 Subject: [PATCH 076/112] Even more missed formatting --- src/cpu/x87_ops_arith.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpu/x87_ops_arith.h b/src/cpu/x87_ops_arith.h index e2dbbdb8f..d38d584a8 100644 --- a/src/cpu/x87_ops_arith.h +++ b/src/cpu/x87_ops_arith.h @@ -130,7 +130,7 @@ opFPU(s, x87_ts, 16, t.i, geteal, t.s, _32) #ifndef FPU_8087 opFPU(s, x87_ts, 32, t.i, geteal, t.s, _32) #endif - opFPU(d, x87_td, 16, t.i, geteaq, t.d, _64) +opFPU(d, x87_td, 16, t.i, geteaq, t.d, _64) #ifndef FPU_8087 opFPU(d, x87_td, 32, t.i, geteaq, t.d, _64) #endif @@ -139,7 +139,7 @@ opFPU(iw, uint16_t, 16, t, geteaw, (double) (int16_t) t, _i16) #ifndef FPU_8087 opFPU(iw, uint16_t, 32, t, geteaw, (double) (int16_t) t, _i16) #endif - opFPU(il, uint32_t, 16, t, geteal, (double) (int32_t) t, _i32) +opFPU(il, uint32_t, 16, t, geteal, (double) (int32_t) t, _i32) #ifndef FPU_8087 opFPU(il, uint32_t, 32, t, geteal, (double) (int32_t) t, _i32) #endif From 6c3680f268b01176619951c23f45ffc9343e150f Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 3 Jan 2023 19:22:34 -0500 Subject: [PATCH 077/112] Create dependabot.yml --- .github/dependabot.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..0d9f70d96 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,9 @@ +version: 2 + +updates: + + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" From 9f8bada8763fe4843cc7934979e93a646004580f Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 3 Jan 2023 23:38:02 -0500 Subject: [PATCH 078/112] Use pacboy in mingw makefile builds too --- .github/workflows/c-cpp.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 8899d9943..282bfc602 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -62,15 +62,16 @@ jobs: msystem: ${{ matrix.environment.msystem }} install: >- make - ${{ matrix.environment.prefix }}-gcc - ${{ matrix.environment.prefix }}-pkg-config - ${{ matrix.environment.prefix }}-freetype - ${{ matrix.environment.prefix }}-SDL2 - ${{ matrix.environment.prefix }}-zlib - ${{ matrix.environment.prefix }}-libpng - ${{ matrix.environment.prefix }}-openal - ${{ matrix.environment.prefix }}-rtmidi - ${{ matrix.environment.prefix }}-libvncserver + pacboy: >- + gcc:p + pkg-config:p + freetype:p + SDL2:p + zlib:p + libpng:p + openal:p + rtmidi:p + libvncserver:p - uses: actions/checkout@v3 - name: make run: >- From 7ac62e1ff87a21e0ffea824b417803f3b8ed44f2 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 3 Jan 2023 23:38:53 -0500 Subject: [PATCH 079/112] Preparations for alternate UI builds in GHA --- .github/workflows/cmake.yml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 1c1a58e32..24edc4073 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -210,7 +210,7 @@ jobs: path: build/artifacts/** linux: - name: "Linux GCC 11 (Qt GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" + name: "Linux GCC 11 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" runs-on: ubuntu-22.04 @@ -231,6 +231,13 @@ jobs: - name: NDR new: on slug: -NDR + ui: + - name: Qt GUI + qt: on + slug: -Qt + packages: >- + qtbase5-dev + qttools5-dev steps: - name: Install dependencies @@ -243,10 +250,9 @@ jobs: libpng-dev libc6-dev librtmidi-dev - qtbase5-dev - qttools5-dev libopenal-dev libvncserver-dev + ${{ matrix.ui.packages }} - uses: actions/checkout@v3 - name: Configure CMake run: >- @@ -260,11 +266,11 @@ jobs: run: cmake --install build - uses: actions/upload-artifact@v3 with: - name: '86Box-Qt${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-UbuntuJammy-x86_64-gha${{ github.run_number }}' + name: '86Box-{{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-UbuntuJammy-x86_64-gha${{ github.run_number }}' path: build/artifacts/** macos11: - name: "macOS 11 (Qt GUI, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" + name: "macOS 11 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" runs-on: macos-11 @@ -285,6 +291,12 @@ jobs: - name: NDR new: on slug: -NDR + ui: + - name: Qt GUI + qt: on + slug: -Qt + packages: >- + qt@5 steps: - name: Install dependencies @@ -295,9 +307,9 @@ jobs: sdl2 libpng rtmidi - qt@5 openal-soft libvncserver + ${{ matrix.ui.packages }} - uses: actions/checkout@v3 - name: Configure CMake run: >- @@ -314,5 +326,5 @@ jobs: run: cmake --install build - uses: actions/upload-artifact@v3 with: - name: '86Box-Qt${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}' + name: '86Box-{{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}' path: build/artifacts/** From 0966e4bab0865209bea00acea335825dc60a43f0 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 3 Jan 2023 23:39:09 -0500 Subject: [PATCH 080/112] Use pkgconf, not pkg-config, fixes a warning --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 24edc4073..e8fca5dd3 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -82,7 +82,7 @@ jobs: ninja:p cmake:p gcc:p - pkg-config:p + pkgconf:p freetype:p SDL2:p zlib:p From 62817b55c99511e9d44dc0dfb7a263cd0896c6db Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Tue, 3 Jan 2023 23:39:30 -0500 Subject: [PATCH 081/112] release: false should speed up the msys2 builds a little --- .github/workflows/c-cpp.yml | 1 + .github/workflows/cmake.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 282bfc602..5b2573dde 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -58,6 +58,7 @@ jobs: - name: Prepare MSYS2 environment uses: msys2/setup-msys2@v2 with: + release: false update: true msystem: ${{ matrix.environment.msystem }} install: >- diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index e8fca5dd3..58f537d21 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -76,6 +76,7 @@ jobs: - name: Prepare MSYS2 environment uses: msys2/setup-msys2@v2 with: + release: false update: true msystem: ${{ matrix.environment.msystem }} pacboy: >- From d6b118a4fc89a6c5aa8be351dae0db8527f85335 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Wed, 4 Jan 2023 00:26:07 -0500 Subject: [PATCH 082/112] Fix another warning --- src/discord.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/discord.c b/src/discord.c index 55f6d1544..458688eaa 100644 --- a/src/discord.c +++ b/src/discord.c @@ -88,7 +88,7 @@ discord_update_activity(int paused) *(paren - 1) = '\0'; #pragma GCC diagnostic push -#if defined(__GNUC__) +#if defined(__GNUC__) && !defined (__clang__) # pragma GCC diagnostic ignored "-Wformat-truncation" #endif if (strlen(vm_name) < 100) { From 48961b00a4046b9d90daca5394e00ffbfd3d2ff6 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Wed, 4 Jan 2023 06:25:33 -0500 Subject: [PATCH 083/112] Missed bits --- .github/workflows/cmake.yml | 6 ++++-- src/include/86box/device.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 58f537d21..4596b51b8 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -261,13 +261,14 @@ jobs: --toolchain ./cmake/flags-gcc-x86_64.cmake -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D CMAKE_INSTALL_PREFIX=./build/artifacts + -D QT=${{ matrix.ui.qt }} - name: Build run: cmake --build build - name: Generate package run: cmake --install build - uses: actions/upload-artifact@v3 with: - name: '86Box-{{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-UbuntuJammy-x86_64-gha${{ github.run_number }}' + name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-UbuntuJammy-x86_64-gha${{ github.run_number }}' path: build/artifacts/** macos11: @@ -318,6 +319,7 @@ jobs: --toolchain ./cmake/flags-gcc-x86_64.cmake -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D CMAKE_INSTALL_PREFIX=./build/artifacts + -D QT=${{ matrix.ui.qt }} -D Qt5_ROOT=$(brew --prefix qt@5) -D Qt5LinguistTools_ROOT=$(brew --prefix qt@5) -D OpenAL_ROOT=$(brew --prefix openal-soft) @@ -327,5 +329,5 @@ jobs: run: cmake --install build - uses: actions/upload-artifact@v3 with: - name: '86Box-{{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}' + name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}' path: build/artifacts/** diff --git a/src/include/86box/device.h b/src/include/86box/device.h index ca4e6bdf2..9f0a5f864 100644 --- a/src/include/86box/device.h +++ b/src/include/86box/device.h @@ -108,7 +108,7 @@ typedef struct { const char *file_filter; const device_config_spinner_t spinner; const device_config_selection_t selection[16]; - const device_config_bios_t bios[32]; + const device_config_bios_t bios[32]; } device_config_t; typedef struct _device_ { From 95cf08611c0148c1ef8b6fb98ec811b267252952 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 5 Jan 2023 02:25:21 +0100 Subject: [PATCH 084/112] SCAT machines with PS/2 keyboard controller now actually have a PS/2 keyboard controller, fixes #3013. --- src/machine/m_at_286_386sx.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c index 7cfec3735..ee117fa33 100644 --- a/src/machine/m_at_286_386sx.c +++ b/src/machine/m_at_286_386sx.c @@ -259,10 +259,17 @@ machine_at_scat_init(const machine_t *model, int is_v4, int is_ami) { machine_at_common_init(model); - if (is_ami) - device_add(&keyboard_at_ami_device); - else - device_add(&keyboard_at_device); + if (machines[machine].bus_flags & MACHINE_BUS_PS2) { + if (is_ami) + device_add(&keyboard_ps2_ami_device); + else + device_add(&keyboard_ps2_device); + } else { + if (is_ami) + device_add(&keyboard_at_ami_device); + else + device_add(&keyboard_at_device); + } if (is_v4) device_add(&scat_4_device); From 8a375722200936beef9c885e66eca99d647dbce3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 7 Jan 2023 16:55:55 +0600 Subject: [PATCH 085/112] snd_optimc: IRQs of 12, 14 and 15 are actually used --- src/sound/snd_optimc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sound/snd_optimc.c b/src/sound/snd_optimc.c index 7a76d3258..f83161bce 100644 --- a/src/sound/snd_optimc.c +++ b/src/sound/snd_optimc.c @@ -40,7 +40,7 @@ #include <86box/rom.h> static int optimc_wss_dma[4] = { 0, 0, 1, 3 }; -static int optimc_wss_irq[4] = { 7, 9, 10, 11 }; +static int optimc_wss_irq[8] = { 5, 7, 9, 10, 11, 12, 14, 15 }; enum optimc_local_flags { OPTIMC_CS4231 = 0x100, @@ -101,7 +101,7 @@ optimc_wss_write(uint16_t addr, uint8_t val, void *priv) return; optimc->wss_config = val; ad1848_setdma(&optimc->ad1848, optimc_wss_dma[val & 3]); - ad1848_setirq(&optimc->ad1848, optimc_wss_irq[val & 3]); + ad1848_setirq(&optimc->ad1848, optimc_wss_irq[(val >> 3) & 7]); } static void From a40630ba63a755be7abe082b5cccbdc902ede172 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 6 Jan 2023 15:36:05 -0500 Subject: [PATCH 086/112] Even more tabs to spaces --- .ci/AppImageBuilder.yml | 28 +- .ci/Jenkinsfile | 16 +- .ci/build.sh | 16 +- .ci/static2dll.sh | 16 +- bumpversion.sh | 16 +- cmake/flags-gcc-aarch64.cmake | 20 +- cmake/flags-gcc-armv7.cmake | 20 +- cmake/flags-gcc-i686.cmake | 18 +- cmake/flags-gcc-x86_64.cmake | 18 +- cmake/flags-gcc.cmake | 16 +- cmake/llvm-macos-aarch64.cmake | 24 +- cmake/llvm-win32-aarch64.cmake | 18 +- cmake/llvm-win32-arm.cmake | 16 +- cmake/llvm-win32-i686.cmake | 18 +- cmake/llvm-win32-x86_64.cmake | 18 +- src/Makefile.local | 64 +- src/codegen/codegen_ops_x86-64.h | 2 +- src/codegen_new/codegen_backend_arm_uops.c | 8 +- src/cpu/codegen_timing_686.c | 6 +- src/cpu/codegen_timing_p6.c | 54 +- src/cpu/cpu_table.c | 1997 ++++++++--------- src/device/keyboard_at.c | 4 +- src/device/keyboard_xt.c | 214 +- src/device/mouse_bus.c | 14 +- src/device/mouse_ps2.c | 2 +- src/disk/hdc_ide.c | 14 +- src/disk/hdc_st506_xt.c | 72 +- src/disk/zip.c | 3 +- src/floppy/fdc.c | 8 +- src/floppy/fdd.c | 52 +- src/floppy/fdd_86f.c | 50 +- src/floppy/fdd_common.c | 501 +++-- src/floppy/fdd_fdi.c | 2 +- src/floppy/fdd_img.c | 445 ++-- src/floppy/fdd_td0.c | 14 +- src/floppy/fdi2raw.c | 510 ++--- src/include/86box/apm.h | 16 +- src/include/86box/bugger.h | 28 +- src/include/86box/cartridge.h | 16 +- src/include/86box/cdrom.h | 16 +- src/include/86box/cdrom_image.h | 22 +- src/include/86box/cdrom_image_backend.h | 26 +- src/include/86box/cdrom_mitsumi.h | 16 +- src/include/86box/clock.h | 16 +- src/include/86box/ddma.h | 16 +- src/include/86box/discord.h | 16 +- src/include/86box/fdc_ext.h | 26 +- src/include/86box/fdd_86f.h | 20 +- src/include/86box/fdd_common.h | 16 +- src/include/86box/fdd_fdi.h | 26 +- src/include/86box/fdd_imd.h | 20 +- src/include/86box/fdd_img.h | 26 +- src/include/86box/fdd_mfm.h | 16 +- src/include/86box/fdd_td0.h | 20 +- src/include/86box/gameport.h | 24 +- src/include/86box/hdc_ide.h | 22 +- src/include/86box/hdc_ide_sff8038i.h | 21 +- src/include/86box/hdd.h | 21 +- src/include/86box/i2c.h | 16 +- src/include/86box/i8080.h | 18 +- src/include/86box/ibm_5161.h | 17 +- src/include/86box/io.h | 22 +- src/include/86box/isapnp.h | 16 +- .../86box/joystick_ch_flightstick_pro.h | 20 +- src/include/86box/joystick_sw_pad.h | 2 +- src/include/86box/joystick_tm_fcs.h | 2 +- src/include/86box/language.h | 20 +- src/include/86box/log.h | 20 +- src/include/86box/lpt.h | 8 +- src/include/86box/m_amstrad.h | 20 +- src/include/86box/mo.h | 20 +- src/include/86box/mouse.h | 20 +- src/include/86box/net_3c501.h | 21 +- src/include/86box/net_3c503.h | 43 + src/include/86box/net_dp8390.h | 22 +- src/include/86box/net_pcnet.h | 22 +- src/include/86box/net_plip.h | 17 +- src/include/86box/net_wd8003.h | 32 +- src/include/86box/pic.h | 22 +- src/include/86box/pit.h | 19 +- src/include/86box/pit_fast.h | 19 +- src/include/86box/plat_dir.h | 17 +- src/include/86box/plat_dynld.h | 17 +- src/include/86box/port_6x.h | 18 +- src/include/86box/port_92.h | 18 +- src/include/86box/postcard.h | 16 +- src/include/86box/random.h | 19 +- src/include/86box/resource.h | 28 +- src/include/86box/rom.h | 16 +- src/include/86box/scsi.h | 24 +- src/include/86box/scsi_buslogic.h | 23 +- src/include/86box/scsi_cdrom.h | 18 +- src/include/86box/scsi_device.h | 20 +- src/include/86box/scsi_disk.h | 15 +- src/include/86box/scsi_ncr5380.h | 28 +- src/include/86box/scsi_ncr53c8xx.h | 30 +- src/include/86box/scsi_pcscsi.h | 28 +- src/include/86box/scsi_spock.h | 22 +- src/include/86box/scsi_x54x.h | 28 +- src/include/86box/smram.h | 16 +- src/include/86box/snd_ac97.h | 16 +- src/include/86box/snd_ad1848.h | 24 +- src/include/86box/snd_mpu401.h | 29 +- src/include/86box/snd_opl.h | 20 +- src/include/86box/snd_opl_nuked.h | 22 +- src/include/86box/snd_speaker.h | 20 +- src/include/86box/ui.h | 20 +- src/include/86box/usb.h | 16 +- src/include/86box/vid_8514a.h | 18 +- src/include/86box/vid_cga.h | 21 +- src/include/86box/vid_cga_comp.h | 23 +- src/include/86box/vid_ddc.h | 20 +- src/include/86box/vid_ega.h | 22 +- src/include/86box/vid_hercules.h | 24 +- src/include/86box/vid_nga.h | 30 +- src/include/86box/vid_ogc.h | 30 +- src/include/86box/vid_pgc.h | 20 +- src/include/86box/vid_pgc_palette.h | 20 +- src/include/86box/vid_svga_render.h | 21 +- src/include/86box/vid_vga.h | 24 +- src/include/86box/vid_voodoo_banshee.h | 16 +- .../86box/vid_voodoo_banshee_blitter.h | 16 +- src/include/86box/vid_voodoo_common.h | 18 +- src/include/86box/vid_voodoo_display.h | 18 +- src/include/86box/vid_voodoo_dither.h | 18 +- src/include/86box/vid_voodoo_fb.h | 18 +- src/include/86box/vid_voodoo_fifo.h | 18 +- src/include/86box/vid_voodoo_reg.h | 18 +- src/include/86box/vid_voodoo_setup.h | 18 +- src/include/86box/vid_voodoo_texture.h | 18 +- src/include/86box/vnc.h | 16 +- src/include/86box/win.h | 26 +- src/include/86box/win_opengl.h | 16 +- src/include/86box/win_opengl_glslp.h | 16 +- src/include/86box/win_sdl.h | 48 +- src/include/86box/zip.h | 18 +- src/include/fdi2raw.h | 24 +- src/include/minitrace/minitrace.h | 80 +- src/mac/CMakeLists.txt | 4 +- src/machine/m_amstrad.c | 156 +- src/machine/m_at_386dx_486.c | 185 +- src/machine/m_at_compaq.c | 8 +- src/machine/m_at_slot1.c | 2 +- src/machine/m_at_socket370.c | 32 +- src/machine/m_at_socket4.c | 104 +- src/machine/m_at_socket5.c | 76 +- src/machine/m_at_socket7.c | 232 +- src/machine/m_at_socket7_3v.c | 137 +- src/machine/m_at_socket8.c | 80 +- src/machine/m_at_t3100e.c | 4 +- src/machine/m_elt.c | 2 - src/machine/m_europc.c | 86 +- src/machine/m_tandy.c | 214 +- src/machine/m_xt_olivetti.c | 428 ++-- src/minitrace/minitrace.c | 627 +++--- src/network/net_3c501.c | 23 +- src/network/net_3c503.c | 9 +- src/network/net_dp8390.c | 4 +- src/qt/evdev_mouse.cpp | 16 +- src/qt/qt.c | 14 +- src/qt/qt_cdrom.c | 22 +- src/qt/qt_deviceconfig.cpp | 18 +- src/qt/qt_filefield.cpp | 18 +- src/qt/qt_harddiskdialog.cpp | 18 +- src/qt/qt_harddrive_common.cpp | 16 +- src/qt/qt_hardwarerenderer.cpp | 20 +- src/qt/qt_joystickconfiguration.cpp | 16 +- src/qt/qt_machinestatus.cpp | 18 +- src/qt/qt_main.cpp | 20 +- src/qt/qt_mainwindow.cpp | 22 +- src/qt/qt_mediahistorymanager.cpp | 16 +- src/qt/qt_mediahistorymanager.hpp | 16 +- src/qt/qt_mediamenu.cpp | 20 +- src/qt/qt_models_common.cpp | 16 +- src/qt/qt_newfloppydialog.cpp | 20 +- src/qt/qt_opengloptions.cpp | 19 +- src/qt/qt_opengloptions.hpp | 19 +- src/qt/qt_opengloptionsdialog.cpp | 19 +- src/qt/qt_opengloptionsdialog.hpp | 17 +- src/qt/qt_openglrenderer.cpp | 19 +- src/qt/qt_openglrenderer.hpp | 19 +- src/qt/qt_platform.cpp | 21 +- src/qt/qt_progsettings.cpp | 14 +- src/qt/qt_renderercommon.cpp | 14 +- src/qt/qt_rendererstack.cpp | 18 +- src/qt/qt_sdl.c | 54 +- src/qt/qt_sdl.h | 48 +- src/qt/qt_settings.cpp | 16 +- src/qt/qt_settings_bus_tracking.cpp | 16 +- src/qt/qt_settingsdisplay.cpp | 16 +- src/qt/qt_settingsfloppycdrom.cpp | 18 +- src/qt/qt_settingsharddisks.cpp | 18 +- src/qt/qt_settingsinput.cpp | 16 +- src/qt/qt_settingsmachine.cpp | 16 +- src/qt/qt_settingsnetwork.cpp | 16 +- src/qt/qt_settingsotherperipherals.cpp | 16 +- src/qt/qt_settingsotherremovable.cpp | 18 +- src/qt/qt_settingsports.cpp | 20 +- src/qt/qt_settingssound.cpp | 16 +- src/qt/qt_settingsstoragecontrollers.cpp | 16 +- src/qt/qt_softwarerenderer.cpp | 20 +- src/qt/qt_soundgain.cpp | 16 +- src/qt/qt_specifydimensions.cpp | 16 +- src/qt/qt_styleoverride.cpp | 16 +- src/qt/qt_ui.cpp | 18 +- src/qt/qt_unixmanagerfilter.cpp | 23 +- src/qt/qt_unixmanagerfilter.hpp | 21 +- src/qt/qt_util.cpp | 16 +- src/qt/qt_winmanagerfilter.cpp | 19 +- src/qt/qt_winmanagerfilter.hpp | 19 +- src/qt/qt_winrawinputfilter.cpp | 23 +- src/qt/qt_winrawinputfilter.hpp | 19 +- src/qt/win_dynld.c | 16 +- src/qt/win_joystick_rawinput.c | 26 +- src/qt/wl_mouse.cpp | 16 +- src/qt/xinput2_mouse.cpp | 16 +- src/scsi/scsi_aha154x.c | 18 +- src/scsi/scsi_buslogic.c | 2 +- src/scsi/scsi_cdrom.c | 10 +- src/scsi/scsi_spock.c | 12 +- src/scsi/scsi_x54x.c | 16 +- src/sio/sio_82091aa.c | 17 +- src/sio/sio_acc3221.c | 204 +- src/sio/sio_ali5123.c | 17 +- src/sio/sio_detect.c | 16 +- src/sio/sio_f82c710.c | 38 +- src/sio/sio_fdc37c669.c | 17 +- src/sio/sio_fdc37c67x.c | 25 +- src/sio/sio_fdc37c93x.c | 19 +- src/sio/sio_fdc37m60x.c | 19 +- src/sio/sio_it8661f.c | 18 +- src/sio/sio_pc87306.c | 17 +- src/sio/sio_pc87307.c | 17 +- src/sio/sio_pc87309.c | 17 +- src/sio/sio_pc87310.c | 24 +- src/sio/sio_pc87311.c | 19 +- src/sio/sio_pc87332.c | 17 +- src/sio/sio_prime3b.c | 19 +- src/sio/sio_prime3c.c | 19 +- src/sio/sio_um8669f.c | 56 +- src/sio/sio_vt82c686.c | 16 +- src/sio/sio_w83787f.c | 20 +- src/sio/sio_w83877f.c | 20 +- src/sio/sio_w83977f.c | 20 +- src/video/agpgart.c | 16 +- src/video/vid_8514a.c | 18 +- src/video/vid_ati18800.c | 20 +- src/video/vid_ati28800.c | 24 +- src/video/vid_ati68860_ramdac.c | 52 +- src/video/vid_ati_eeprom.c | 20 +- src/video/vid_ati_mach64.c | 20 +- src/video/vid_att20c49x_ramdac.c | 20 +- src/video/vid_att2xc498_ramdac.c | 20 +- src/video/vid_av9194.c | 18 +- src/video/vid_bt48x_ramdac.c | 22 +- src/video/vid_cga.c | 20 +- src/video/vid_cga_comp.c | 22 +- src/video/vid_colorplus.c | 20 +- src/video/vid_compaq_cga.c | 24 +- src/video/vid_ddc.c | 16 +- src/video/vid_ega.c | 22 +- src/video/vid_ega_render.c | 20 +- src/video/vid_et3000.c | 18 +- src/video/vid_f82c425.c | 48 +- src/video/vid_genius.c | 20 +- src/video/vid_hercules.c | 20 +- src/video/vid_herculesplus.c | 20 +- src/video/vid_ht216.c | 20 +- src/video/vid_ibm_rgb528_ramdac.c | 16 +- src/video/vid_icd2061.c | 26 +- src/video/vid_ics2494.c | 18 +- src/video/vid_ics2595.c | 20 +- src/video/vid_im1024.c | 64 +- src/video/vid_incolor.c | 20 +- src/video/vid_mda.c | 20 +- src/video/vid_mga.c | 17 +- src/video/vid_nga.c | 28 +- src/video/vid_oak_oti.c | 20 +- src/video/vid_ogc.c | 30 +- src/video/vid_paradise.c | 24 +- src/video/vid_pgc.c | 74 +- src/video/vid_rtg310x.c | 16 +- src/video/vid_s3_virge.c | 20 +- src/video/vid_sc1148x_ramdac.c | 18 +- src/video/vid_sc1502x_ramdac.c | 22 +- src/video/vid_sdac_ramdac.c | 20 +- src/video/vid_sigma.c | 16 +- src/video/vid_stg_ramdac.c | 20 +- src/video/vid_svga_render.c | 20 +- src/video/vid_tgui9440.c | 84 +- src/video/vid_ti_cf62011.c | 82 +- src/video/vid_tkd8001_ramdac.c | 20 +- src/video/vid_tvga.c | 20 +- src/video/vid_tvp3026_ramdac.c | 20 +- src/video/vid_vga.c | 20 +- src/video/vid_voodoo.c | 18 +- src/video/vid_voodoo_banshee.c | 16 +- src/video/vid_voodoo_blitter.c | 16 +- src/video/vid_voodoo_display.c | 16 +- src/video/vid_voodoo_fb.c | 16 +- src/video/vid_voodoo_fifo.c | 16 +- src/video/vid_voodoo_reg.c | 16 +- src/video/vid_voodoo_render.c | 16 +- src/video/vid_voodoo_setup.c | 16 +- src/video/vid_voodoo_texture.c | 16 +- src/video/vid_wy700.c | 20 +- src/video/video.c | 70 +- src/win/win_icon.c | 1 + src/win/win_joystick_rawinput.c | 2 + src/win/win_opengl.c | 2 + src/win/win_opengl_glslp.c | 2 + 311 files changed, 6218 insertions(+), 6062 deletions(-) diff --git a/.ci/AppImageBuilder.yml b/.ci/AppImageBuilder.yml index 05a7b8fcb..69376b511 100644 --- a/.ci/AppImageBuilder.yml +++ b/.ci/AppImageBuilder.yml @@ -1,26 +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. # -# Recipe file for appimage-builder. +# Recipe file for appimage-builder. # -# build.sh processes conditional comments based on CMakeCache -# options at the end of each line. For example, a line ending in: +# build.sh processes conditional comments based on CMakeCache +# options at the end of each line. For example, a line ending in: # -# # if QT:BOOL=ON +# # if QT:BOOL=ON # -# will be removed from the dynamically-generated copy of this -# file if "QT" is not a boolean option set to ON, either through -# a -D definition or the option's default value in CMakeLists. +# will be removed from the dynamically-generated copy of this +# file if "QT" is not a boolean option set to ON, either through +# a -D definition or the option's default value in CMakeLists. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2022 RichardG. +# Copyright 2022 RichardG. # version: 1 diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index d7b2f94aa..6ab63ea30 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -1,18 +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. * - * Jenkins build pipeline definition. + * Jenkins build pipeline definition. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2021-2022 RichardG. + * Copyright 2021-2022 RichardG. */ /* ['main builds', 'branch builds'] */ diff --git a/.ci/build.sh b/.ci/build.sh index f0d91fe18..b2ff8cd83 100644 --- a/.ci/build.sh +++ b/.ci/build.sh @@ -1,18 +1,18 @@ #!/bin/sh # -# 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. # -# Jenkins build script. +# Jenkins build script. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2021-2022 RichardG. +# Copyright 2021-2022 RichardG. # # diff --git a/.ci/static2dll.sh b/.ci/static2dll.sh index f6e5b63b9..030898752 100644 --- a/.ci/static2dll.sh +++ b/.ci/static2dll.sh @@ -1,18 +1,18 @@ #!/bin/sh # -# 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. # -# Script for converting MinGW static libraries into a DLL. +# Script for converting MinGW static libraries into a DLL. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2021 RichardG. +# Copyright 2021 RichardG. # def_file="static2dll.def" diff --git a/bumpversion.sh b/bumpversion.sh index ce3b7c4c8..87728603c 100644 --- a/bumpversion.sh +++ b/bumpversion.sh @@ -1,18 +1,18 @@ #!/bin/sh # -# 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. # -# Convenience script for changing the emulator's version. +# Convenience script for changing the emulator's version. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2022 RichardG. +# Copyright 2022 RichardG. # # Parse arguments. diff --git a/cmake/flags-gcc-aarch64.cmake b/cmake/flags-gcc-aarch64.cmake index 34ddaf3e6..4344e2c81 100644 --- a/cmake/flags-gcc-aarch64.cmake +++ b/cmake/flags-gcc-aarch64.cmake @@ -1,20 +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. +# 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. # -# CMake toolchain file defining GCC compiler flags -# for AArch64 (ARM64) targets. +# CMake toolchain file defining GCC compiler flags +# for AArch64 (ARM64) targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -march=armv8-a") string(APPEND CMAKE_CXX_FLAGS_INIT " -march=armv8-a") -include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) diff --git a/cmake/flags-gcc-armv7.cmake b/cmake/flags-gcc-armv7.cmake index e73f55edd..828fb1a21 100644 --- a/cmake/flags-gcc-armv7.cmake +++ b/cmake/flags-gcc-armv7.cmake @@ -1,20 +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. +# 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. # -# CMake toolchain file defining GCC compiler flags -# for ARMv7 targets. +# CMake toolchain file defining GCC compiler flags +# for ARMv7 targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -march=armv7-a -mfloat-abi=hard") string(APPEND CMAKE_CXX_FLAGS_INIT " -march=armv7-a -mfloat-abi=hard") -include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) diff --git a/cmake/flags-gcc-i686.cmake b/cmake/flags-gcc-i686.cmake index 2d12b7937..3b3d72a16 100644 --- a/cmake/flags-gcc-i686.cmake +++ b/cmake/flags-gcc-i686.cmake @@ -1,17 +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. # -# CMake toolchain file defining GCC compiler flags -# for 32-bit x86 targets. +# CMake toolchain file defining GCC compiler flags +# for 32-bit x86 targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -m32 -march=i686 -msse2 -mfpmath=sse -mstackrealign") diff --git a/cmake/flags-gcc-x86_64.cmake b/cmake/flags-gcc-x86_64.cmake index f9f39eb97..47928df42 100644 --- a/cmake/flags-gcc-x86_64.cmake +++ b/cmake/flags-gcc-x86_64.cmake @@ -1,17 +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. # -# CMake toolchain file defining GCC compiler flags -# for 64-bit x86 targets. +# CMake toolchain file defining GCC compiler flags +# for 64-bit x86 targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -m64 -march=x86-64 -msse2 -mfpmath=sse -mstackrealign") diff --git a/cmake/flags-gcc.cmake b/cmake/flags-gcc.cmake index e1bf3650e..885353b87 100644 --- a/cmake/flags-gcc.cmake +++ b/cmake/flags-gcc.cmake @@ -1,16 +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. # -# CMake toolchain file defining GCC compiler flags. +# CMake toolchain file defining GCC compiler flags. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # # Define our flags diff --git a/cmake/llvm-macos-aarch64.cmake b/cmake/llvm-macos-aarch64.cmake index da9ccb449..df67ad45b 100644 --- a/cmake/llvm-macos-aarch64.cmake +++ b/cmake/llvm-macos-aarch64.cmake @@ -1,22 +1,22 @@ # -# 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. # -# CMake toolchain file defining Clang compiler flags -# for AArch64 (ARM64)-based Apple Silicon targets. +# CMake toolchain file defining Clang compiler flags +# for AArch64 (ARM64)-based Apple Silicon targets. # -# Authors: David Hrdlička, -# dob205 +# Authors: David Hrdlička, +# dob205 # -# Copyright 2021 David Hrdlička. -# Copyright 2022 dob205. +# Copyright 2021 David Hrdlička. +# Copyright 2022 dob205. # string(APPEND CMAKE_C_FLAGS_INIT " -march=armv8.5-a+simd") string(APPEND CMAKE_CXX_FLAGS_INIT " -march=armv8.5-a+simd") -include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) diff --git a/cmake/llvm-win32-aarch64.cmake b/cmake/llvm-win32-aarch64.cmake index 4aacb248f..015a0dad0 100644 --- a/cmake/llvm-win32-aarch64.cmake +++ b/cmake/llvm-win32-aarch64.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (ARM64 target). +# CMake toolchain file for Clang on Windows builds (ARM64 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-aarch64.cmake) @@ -27,4 +27,4 @@ set(CMAKE_CXX_COMPILER_TARGET aarch64-pc-windows-msvc) set(CMAKE_SYSTEM_PROCESSOR ARM64) -# TODO: set the vcpkg target triplet perhaps? \ No newline at end of file +# TODO: set the vcpkg target triplet perhaps? diff --git a/cmake/llvm-win32-arm.cmake b/cmake/llvm-win32-arm.cmake index 9d3488124..30c9877d4 100644 --- a/cmake/llvm-win32-arm.cmake +++ b/cmake/llvm-win32-arm.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (ARM64 target). +# CMake toolchain file for Clang on Windows builds (ARM64 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-armv7.cmake) diff --git a/cmake/llvm-win32-i686.cmake b/cmake/llvm-win32-i686.cmake index 8221f8bc2..b69771407 100644 --- a/cmake/llvm-win32-i686.cmake +++ b/cmake/llvm-win32-i686.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (x86 target). +# CMake toolchain file for Clang on Windows builds (x86 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-i686.cmake) @@ -27,4 +27,4 @@ set(CMAKE_CXX_COMPILER_TARGET i686-pc-windows-msvc) set(CMAKE_SYSTEM_PROCESSOR X86) -# TODO: set the vcpkg target triplet perhaps? \ No newline at end of file +# TODO: set the vcpkg target triplet perhaps? diff --git a/cmake/llvm-win32-x86_64.cmake b/cmake/llvm-win32-x86_64.cmake index 7caeb7836..da0cfd3f2 100644 --- a/cmake/llvm-win32-x86_64.cmake +++ b/cmake/llvm-win32-x86_64.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (x64/AMD64 target). +# CMake toolchain file for Clang on Windows builds (x64/AMD64 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-x86_64.cmake) @@ -27,4 +27,4 @@ set(CMAKE_CXX_COMPILER_TARGET x86_64-pc-windows-msvc) set(CMAKE_SYSTEM_PROCESSOR AMD64) -# TODO: set the vcpkg target triplet perhaps? \ No newline at end of file +# TODO: set the vcpkg target triplet perhaps? diff --git a/src/Makefile.local b/src/Makefile.local index 4c6830afd..fdb2dcab3 100644 --- a/src/Makefile.local +++ b/src/Makefile.local @@ -1,32 +1,32 @@ # -# 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. # -# Prefix for localizing the general Makefile.mingw for local -# settings, so we can avoid changing the main one for all of -# our local setups. +# Prefix for localizing the general Makefile.mingw for local +# settings, so we can avoid changing the main one for all of +# our local setups. # -# Author: Fred N. van Kempen, +# Authors: Fred N. van Kempen, # ######################################################################### -# Anything here will override defaults in Makefile.MinGW. # +# Anything here will override defaults in Makefile.MinGW. # ######################################################################### # Name of the executable. -#PROG := yourexe +#PROG := 86box.exe # Various compile-time options. # -DROM_TRACE=0xc800 traces ROM access from segment C800 # -DIO_TRACE=0x66 traces I/O on port 0x66 # -DIO_CATCH enables I/O range catch logs -STUFF := +STUFF := # Add feature selections here. # -DANSI_CFG forces the config file to ANSI encoding. @@ -168,31 +168,31 @@ STUFF := # -DENABLE_JOYSTICK_LOG=N sets logging level at N. # -DENABLE_SDL_LOG=N sets logging level at N. # -DENABLE_SETTINGS_LOG=N sets logging level at N. -EXTRAS := +EXTRAS := -AUTODEP := n -DEBUG := n -OPTIM := n -X64 := n -RELEASE := n -USB := n -VNC := n -RDP := n -DEV_BUILD := n -DEV_BRANCH := n -CIRRUS := n -NE1000 := n -NV_RIVA := n -OPENAL := y -FLUIDSYNTH := y -MUNT := y -PAS16 := n -DYNAREC := y +AUTODEP := n +DEBUG := n +OPTIM := n +X64 := n +RELEASE := n +USB := n +VNC := n +RDP := n +DEV_BUILD := n +DEV_BRANCH := n +CIRRUS := n +NE1000 := n +NV_RIVA := n +OPENAL := y +FLUIDSYNTH := y +MUNT := y +PAS16 := n +DYNAREC := y ######################################################################### -# Include the master Makefile.MinGW for the rest. # +# Include the master Makefile.MinGW for the rest. # ######################################################################### include win/Makefile.mingw diff --git a/src/codegen/codegen_ops_x86-64.h b/src/codegen/codegen_ops_x86-64.h index 00518d9ba..77f7c02ab 100644 --- a/src/codegen/codegen_ops_x86-64.h +++ b/src/codegen/codegen_ops_x86-64.h @@ -82,7 +82,7 @@ load_param_1_reg_32(int reg) #if 0 static __inline void load_param_1_64(codeblock_t *block, uint64_t param) { - addbyte(0x48); + addbyte(0x48); # if _WIN64 addbyte(0xb9); /*MOVL $fetchdat,%ecx*/ # else diff --git a/src/codegen_new/codegen_backend_arm_uops.c b/src/codegen_new/codegen_backend_arm_uops.c index 4cc0ff38d..d0b8b86c1 100644 --- a/src/codegen_new/codegen_backend_arm_uops.c +++ b/src/codegen_new/codegen_backend_arm_uops.c @@ -119,8 +119,8 @@ codegen_ADD(codeblock_t *block, uop_t *uop) static int codegen_ADD_IMM(codeblock_t *block, uop_t *uop) { - // host_arm_ADD_IMM(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->imm_data); - // return 0; +// host_arm_ADD_IMM(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->imm_data); +// return 0; int dest_reg = HOST_REG_GET(uop->dest_reg_a_real), src_reg = HOST_REG_GET(uop->src_reg_a_real); int dest_size = IREG_GET_SIZE(uop->dest_reg_a_real), src_size = IREG_GET_SIZE(uop->src_reg_a_real); @@ -2597,8 +2597,8 @@ codegen_SUB(codeblock_t *block, uop_t *uop) return 0; - // host_arm_SUB_REG_LSL(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->src_reg_b_real, 0); - // return 0; +// host_arm_SUB_REG_LSL(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->src_reg_b_real, 0); +// return 0; } static int codegen_SUB_IMM(codeblock_t *block, uop_t *uop) diff --git a/src/cpu/codegen_timing_686.c b/src/cpu/codegen_timing_686.c index 9752b24c4..7d7f4042d 100644 --- a/src/cpu/codegen_timing_686.c +++ b/src/cpu/codegen_timing_686.c @@ -949,7 +949,7 @@ void codegen_timing_686_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uin if (regmask & IMPL_ESP) regmask |= SRCDEP_ESP | DSTDEP_ESP; - agi_stall = check_agi(prev_deps, prev_opcode, prev_fetchdat, prev_op_32); + agi_stall = check_agi(prev_deps, prev_opcode, prev_fetchdat, prev_op_32); /*Second instruction in the pair*/ if ((timings[opcode] & PAIR_MASK) == PAIR_NP) @@ -992,7 +992,7 @@ void codegen_timing_686_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uin if (!t_pair) fatal("Pairable 0 cycles! %02x %02x\n", opcode, prev_opcode); - agi_stall = check_agi(deps, opcode, fetchdat, op_32); + agi_stall = check_agi(deps, opcode, fetchdat, op_32); codegen_block_cycles += t_pair + agi_stall; decode_delay = (-t_pair) + 1 + agi_stall; @@ -1012,7 +1012,7 @@ void codegen_timing_686_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uin /*Instruction not pairable*/ int agi_stall = 0; - agi_stall = check_agi(deps, opcode, fetchdat, op_32); + agi_stall = check_agi(deps, opcode, fetchdat, op_32); codegen_block_cycles += COUNT(timings[opcode], op_32) + decode_delay + agi_stall; decode_delay = (-COUNT(timings[opcode], op_32)) + 1 + agi_stall; diff --git a/src/cpu/codegen_timing_p6.c b/src/cpu/codegen_timing_p6.c index 19fa07de1..cf40e084e 100644 --- a/src/cpu/codegen_timing_p6.c +++ b/src/cpu/codegen_timing_p6.c @@ -23,10 +23,10 @@ typedef enum uop_type_t UOP_ALUP0, /*Executes in Port 0 ALU unit*/ UOP_LOAD, /*Executes in Load unit*/ UOP_STORED, /*Executes in Data Store unit*/ - UOP_STOREA, /*Executes in Address Store unit*/ + UOP_STOREA, /*Executes in Address Store unit*/ UOP_FLOAD, /*Executes in Load unit*/ UOP_FSTORED, /*Executes in Data Store unit*/ - UOP_FSTOREA, /*Executes in Address Store unit*/ + UOP_FSTOREA, /*Executes in Address Store unit*/ UOP_MLOAD, /*Executes in Load unit*/ UOP_MSTORED, /*Executes in Data Store unit*/ UOP_MSTOREA, /*Executes in Address Store unit*/ @@ -93,7 +93,7 @@ static const macro_op_t alu_store_op = .uop[1] = {.type = UOP_ALU, .latency = 1}, .uop[2] = {.type = UOP_STORED, .latency = 1}, .uop[3] = {.type = UOP_STOREA, .latency = 1} - }; +}; static const macro_op_t alup0_store_op = { .nr_uops = 4, @@ -162,8 +162,8 @@ static const macro_op_t loop_op = .decode_type = DECODE_COMPLEX, .uop[0] = {.type = UOP_ALU, .latency = 1}, .uop[1] = {.type = UOP_ALU, .latency = 1}, - .uop[2] = {.type = UOP_ALU, .latency = 1}, - .uop[3] = {.type = UOP_ALU, .latency = 1}, + .uop[2] = {.type = UOP_ALU, .latency = 1}, + .uop[3] = {.type = UOP_ALU, .latency = 1}, .uop[4] = {.type = UOP_BRANCH, .latency = 1} }; static const macro_op_t mov_reg_seg_op = @@ -219,7 +219,7 @@ static const macro_op_t push_seg_op = .uop[0] = {.type = UOP_LOAD, .latency = 1}, .uop[1] = {.type = UOP_STORED, .latency = 1}, .uop[2] = {.type = UOP_STOREA, .latency = 1}, - .uop[3] = {.type = UOP_ALU, .latency = 1} + .uop[3] = {.type = UOP_ALU, .latency = 1} }; static const macro_op_t stos_op = { @@ -1607,24 +1607,24 @@ static p6_unit_t *units; /*Pentium Pro has no MMX*/ static p6_unit_t ppro_units[] = { - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT)}, /*Port 0*/ - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Port 1*/ - {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Port 2*/ - {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Port 3*/ - {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Port 4*/ + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT)}, /*Port 0*/ + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Port 1*/ + {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Port 2*/ + {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Port 3*/ + {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Port 4*/ }; #define NR_PPRO_UNITS (sizeof(ppro_units) / sizeof(p6_unit_t)) /*Pentium II/Celeron assigns the multiplier to port 0, the shifter to port 1, and shares the MMX ALU*/ static p6_unit_t p2_units[] = { - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT) | /*Port 0*/ - (1 << UOP_MMX) | (1 << UOP_MMX_MUL)}, - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Port 1*/ - (1 << UOP_MMX) | (1 << UOP_MMX_SHIFT)}, - {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Port 2*/ - {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Port 3*/ - {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Port 4*/ + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT) | /*Port 0*/ + (1 << UOP_MMX) | (1 << UOP_MMX_MUL)}, + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Port 1*/ + (1 << UOP_MMX) | (1 << UOP_MMX_SHIFT)}, + {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Port 2*/ + {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Port 3*/ + {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Port 4*/ }; #define NR_P2_UNITS (sizeof(p2_units) / sizeof(p6_unit_t)) @@ -1790,7 +1790,7 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe uint32_t regmask_required; uint32_t regmask_modified; int c; - int d = 0; /*Complex decoder uOPs*/ + int d = 0; /*Complex decoder uOPs*/ int earliest_start = 0; decode_type_t decode_type = ins->decode_type; int instr_length = codegen_timing_instr_length(deps, fetchdat, op_32); @@ -1839,7 +1839,7 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe decode_buffer.uops[decode_buffer.nr_uops] = &ins->uop[0]; decode_buffer.earliest_start[decode_buffer.nr_uops] = earliest_start; decode_buffer.nr_uops = 2+d; - if (d) + if (d) decode_flush_p6(); } else if (decode_buffer.nr_uops) @@ -1869,7 +1869,7 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe decode_buffer.earliest_start[d] = earliest_start; else decode_buffer.earliest_start[d] = -1; - d++; + d++; if ((d == 3) && (ins->nr_uops > 4)) /*Ins. with >4 uOPs require the use of special units only present on 3 translate PLAs*/ { @@ -1878,10 +1878,10 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe decode_flush_p6(); /*The other two decoders are halted to preserve in-order issue*/ } } - if (d) - { - decode_buffer.nr_uops = d; - } + if (d) + { + decode_buffer.nr_uops = d; + } break; } @@ -1982,8 +1982,8 @@ void codegen_timing_p6_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uint switch (last_prefix) { case 0x0f: - ins_table = mod3 ? opcode_timings_0f_mod3 : opcode_timings_0f; - deps = mod3 ? opcode_deps_0f_mod3 : opcode_deps_0f; + ins_table = mod3 ? opcode_timings_0f_mod3 : opcode_timings_0f; + deps = mod3 ? opcode_deps_0f_mod3 : opcode_deps_0f; break; case 0xd8: diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index f9e86541c..70c67f91e 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -21,8 +21,8 @@ * Copyright 2016-2019 leilei. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2020 RichardG. - * Copyright 2021 dob205. + * Copyright 2020 RichardG. + * Copyright 2021 dob205. */ #include #include @@ -71,1089 +71,1086 @@ FPU fpus_internal[] = { const cpu_family_t cpu_families[] = { // clang-format off { - .package = CPU_PKG_8088, - .manufacturer = "Intel", - .name = "8088", - .internal_name = "8088", - .cpus = (const CPU[]) { - {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"8", CPU_8088, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, -// {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"10", CPU_8088, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_8088, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_8088, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"", 0} - } + .package = CPU_PKG_8088, + .manufacturer = "Intel", + .name = "8088", + .internal_name = "8088", + .cpus = (const CPU[]) { + {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"8", CPU_8088, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, +// {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"10", CPU_8088, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_8088, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_8088, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"", 0} + } }, { - .package = CPU_PKG_8088_EUROPC, - .manufacturer = "Intel", - .name = "8088", - .internal_name = "8088_europc", - .cpus = (const CPU[]) { - {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"", 0} - } + .package = CPU_PKG_8088_EUROPC, + .manufacturer = "Intel", + .name = "8088", + .internal_name = "8088_europc", + .cpus = (const CPU[]) { + {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"", 0} + } }, { - .package = CPU_PKG_8086, - .manufacturer = "Intel", - .name = "8086", - .internal_name = "8086", - .cpus = (const CPU[]) { - {"7.16", CPU_8086, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"8", CPU_8086, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"9.54", CPU_8086, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"10", CPU_8086, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_8086, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_8086, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"", 0} - } + .package = CPU_PKG_8086, + .manufacturer = "Intel", + .name = "8086", + .internal_name = "8086", + .cpus = (const CPU[]) { + {"7.16", CPU_8086, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"8", CPU_8086, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"9.54", CPU_8086, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"10", CPU_8086, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_8086, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_8086, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"", 0} + } }, { - .package = CPU_PKG_188, - .manufacturer = "Intel", - .name = "80188", - .internal_name = "80188", - .cpus = (const CPU[]) { - {"6", CPU_188, fpus_8088, 6000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_188, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"8", CPU_188, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"9.54", CPU_188, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"10", CPU_188, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_188, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_188, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"20", CPU_188, fpus_8088, 20000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, - {"25", CPU_188, fpus_8088, 25000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, - {"", 0} - } + .package = CPU_PKG_188, + .manufacturer = "Intel", + .name = "80188", + .internal_name = "80188", + .cpus = (const CPU[]) { + {"6", CPU_188, fpus_8088, 6000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_188, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"8", CPU_188, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"9.54", CPU_188, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"10", CPU_188, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_188, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_188, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"20", CPU_188, fpus_8088, 20000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, + {"25", CPU_188, fpus_8088, 25000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, + {"", 0} + } }, { - .package = CPU_PKG_8088, - .manufacturer = "NEC", - .name = "V20", - .internal_name = "necv20", - .cpus = (const CPU[]) { - {"4.77", CPU_V20, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_V20, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"10", CPU_V20, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_V20, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_V20, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"", 0} - } + .package = CPU_PKG_8088, + .manufacturer = "NEC", + .name = "V20", + .internal_name = "necv20", + .cpus = (const CPU[]) { + {"4.77", CPU_V20, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_V20, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"10", CPU_V20, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_V20, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_V20, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"", 0} + } }, { - .package = CPU_PKG_186, - .manufacturer = "Intel", - .name = "80186", - .internal_name = "80186", - .cpus = (const CPU[]) { - {"6", CPU_186, fpus_80186, 6000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_186, fpus_80186, 7159092, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"8", CPU_186, fpus_80186, 8000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"9.54", CPU_186, fpus_80186, 9545456, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"10", CPU_186, fpus_80186, 10000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_186, fpus_80186, 12000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_186, fpus_80186, 16000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 2}, - {"20", CPU_186, fpus_80186, 20000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, - {"25", CPU_186, fpus_80186, 25000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, - {"", 0} - } + .package = CPU_PKG_186, + .manufacturer = "Intel", + .name = "80186", + .internal_name = "80186", + .cpus = (const CPU[]) { + {"6", CPU_186, fpus_80186, 6000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_186, fpus_80186, 7159092, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"8", CPU_186, fpus_80186, 8000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"9.54", CPU_186, fpus_80186, 9545456, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"10", CPU_186, fpus_80186, 10000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_186, fpus_80186, 12000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_186, fpus_80186, 16000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 2}, + {"20", CPU_186, fpus_80186, 20000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, + {"25", CPU_186, fpus_80186, 25000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, + {"", 0} + } }, { - .package = CPU_PKG_8086, - .manufacturer = "NEC", - .name = "V30", - .internal_name = "necv30", - .cpus = (const CPU[]) { - {"5", CPU_V30, fpus_80186, 5000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"8", CPU_V30, fpus_80186, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"10", CPU_V30, fpus_80186, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_V30, fpus_80186, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_V30, fpus_80186, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"", 0} - } + .package = CPU_PKG_8086, + .manufacturer = "NEC", + .name = "V30", + .internal_name = "necv30", + .cpus = (const CPU[]) { + {"5", CPU_V30, fpus_80186, 5000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"8", CPU_V30, fpus_80186, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"10", CPU_V30, fpus_80186, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_V30, fpus_80186, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_V30, fpus_80186, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"", 0} + } }, { - .package = CPU_PKG_286, - .manufacturer = "Intel", - .name = "80286", - .internal_name = "286", - .cpus = (const CPU[]) { - {"6", CPU_286, fpus_80286, 6000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, - {"8", CPU_286, fpus_80286, 8000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, - {"10", CPU_286, fpus_80286, 10000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, - {"12", CPU_286, fpus_80286, 12500000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, - {"16", CPU_286, fpus_80286, 16000000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_286, fpus_80286, 20000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, - {"25", CPU_286, fpus_80286, 25000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, - {"", 0} - } + .package = CPU_PKG_286, + .manufacturer = "Intel", + .name = "80286", + .internal_name = "286", + .cpus = (const CPU[]) { + {"6", CPU_286, fpus_80286, 6000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, + {"8", CPU_286, fpus_80286, 8000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, + {"10", CPU_286, fpus_80286, 10000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, + {"12", CPU_286, fpus_80286, 12500000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, + {"16", CPU_286, fpus_80286, 16000000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_286, fpus_80286, 20000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, + {"25", CPU_286, fpus_80286, 25000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "Intel", - .name = "i386SX", - .internal_name = "i386sx", - .cpus = (const CPU[]) { - {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "Intel", + .name = "i386SX", + .internal_name = "i386sx", + .cpus = (const CPU[]) { + {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "AMD", - .name = "Am386SX", - .internal_name = "am386sx", - .cpus = (const CPU[]) { - {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "AMD", + .name = "Am386SX", + .internal_name = "am386sx", + .cpus = (const CPU[]) { + {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Intel", - .name = "i386DX", - .internal_name = "i386dx", - .cpus = (const CPU[]) { - {"16", CPU_386DX, fpus_80386, 16000000, 1, 5000, 0x0308, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_386DX, fpus_80386, 20000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Intel", + .name = "i386DX", + .internal_name = "i386dx", + .cpus = (const CPU[]) { + {"16", CPU_386DX, fpus_80386, 16000000, 1, 5000, 0x0308, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_386DX, fpus_80386, 20000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Intel", - .name = "RapidCAD", - .internal_name = "rapidcad", - .cpus = (const CPU[]) { - {"25", CPU_RAPIDCAD, fpus_internal, 25000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 4,4,3,3, 3}, - {"33", CPU_RAPIDCAD, fpus_internal, 33333333, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 6,6,3,3, 4}, - {"40", CPU_RAPIDCAD, fpus_internal, 40000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Intel", + .name = "RapidCAD", + .internal_name = "rapidcad", + .cpus = (const CPU[]) { + {"25", CPU_RAPIDCAD, fpus_internal, 25000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 4,4,3,3, 3}, + {"33", CPU_RAPIDCAD, fpus_internal, 33333333, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 6,6,3,3, 4}, + {"40", CPU_RAPIDCAD, fpus_internal, 40000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "AMD", - .name = "Am386DX", - .internal_name = "am386dx", - .cpus = (const CPU[]) { - {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } - }, - { - .package = CPU_PKG_M6117, - .manufacturer = "ALi", - .name = "M6117", - .internal_name = "m6117", - .cpus = (const CPU[]) { /* All timings and edx_reset values assumed. */ - {"33", CPU_386SX, fpus_none, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386SX, fpus_none, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } - }, - { - .package = CPU_PKG_386SLC_IBM, - .manufacturer = "IBM", - .name = "386SLC", - .internal_name = "ibm386slc", - .cpus = (const CPU[]) { - {"16", CPU_IBM386SLC, fpus_80386, 16000000, 1, 5000, 0xA301, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_IBM386SLC, fpus_80386, 20000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_IBM386SLC, fpus_80386, 25000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "AMD", + .name = "Am386DX", + .internal_name = "am386dx", + .cpus = (const CPU[]) { + {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "Cyrix", - .name = "Cx486SLC", - .internal_name = "cx486slc", - .cpus = (const CPU[]) { - {"20", CPU_486SLC, fpus_80386, 20000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, - {"25", CPU_486SLC, fpus_80386, 25000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, - {"33", CPU_486SLC, fpus_80386, 33333333, 1, 5000, 0x400, 0, 0x0000, 0, 6,6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_M6117, + .manufacturer = "ALi", + .name = "M6117", + .internal_name = "m6117", + .cpus = (const CPU[]) { /* All timings and edx_reset values assumed. */ + {"33", CPU_386SX, fpus_none, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386SX, fpus_none, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "Cyrix", - .name = "Cx486SRx2", - .internal_name = "cx486srx2", - .cpus = (const CPU[]) { - {"32", CPU_486SLC, fpus_80386, 32000000, 2, 5000, 0x406, 0, 0x0006, 0, 6,6,6,6, 4}, - {"40", CPU_486SLC, fpus_80386, 40000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, - {"50", CPU_486SLC, fpus_80386, 50000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, - {"", 0} - } + .package = CPU_PKG_386SLC_IBM, + .manufacturer = "IBM", + .name = "386SLC", + .internal_name = "ibm386slc", + .cpus = (const CPU[]) { + {"16", CPU_IBM386SLC, fpus_80386, 16000000, 1, 5000, 0xA301, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_IBM386SLC, fpus_80386, 20000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_IBM386SLC, fpus_80386, 25000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, + {"", 0} + } }, { - .package = CPU_PKG_486SLC_IBM, - .manufacturer = "IBM", - .name = "486SLC", - .internal_name = "ibm486slc", - .cpus = (const CPU[]) { - {"33", CPU_IBM486SLC, fpus_80386, 33333333, 1, 5000, 0xA401, 0, 0, 0, 6,6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "Cyrix", + .name = "Cx486SLC", + .internal_name = "cx486slc", + .cpus = (const CPU[]) { + {"20", CPU_486SLC, fpus_80386, 20000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, + {"25", CPU_486SLC, fpus_80386, 25000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, + {"33", CPU_486SLC, fpus_80386, 33333333, 1, 5000, 0x400, 0, 0x0000, 0, 6,6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_486SLC_IBM, - .manufacturer = "IBM", - .name = "486SLC2", - .internal_name = "ibm486slc2", - .cpus = (const CPU[]) { - {"40", CPU_IBM486SLC, fpus_80386, 40000000, 2, 5000, 0xA421, 0, 0, 0, 7,7,6,6, 5}, - {"50", CPU_IBM486SLC, fpus_80386, 50000000, 2, 5000, 0xA421, 0, 0, 0, 8,8,6,6, 6}, - {"66", CPU_IBM486SLC, fpus_80386, 66666666, 2, 5000, 0xA421, 0, 0, 0, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "Cyrix", + .name = "Cx486SRx2", + .internal_name = "cx486srx2", + .cpus = (const CPU[]) { + {"32", CPU_486SLC, fpus_80386, 32000000, 2, 5000, 0x406, 0, 0x0006, 0, 6,6,6,6, 4}, + {"40", CPU_486SLC, fpus_80386, 40000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, + {"50", CPU_486SLC, fpus_80386, 50000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, + {"", 0} + } }, { - .package = CPU_PKG_486SLC_IBM, - .manufacturer = "IBM", - .name = "486SLC3", - .internal_name = "ibm486slc3", - .cpus = (const CPU[]) { - {"60", CPU_IBM486SLC, fpus_80386, 60000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 7}, - {"75", CPU_IBM486SLC, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, - {"100", CPU_IBM486SLC, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, - {"", 0} - } + .package = CPU_PKG_486SLC_IBM, + .manufacturer = "IBM", + .name = "486SLC", + .internal_name = "ibm486slc", + .cpus = (const CPU[]) { + {"33", CPU_IBM486SLC, fpus_80386, 33333333, 1, 5000, 0xA401, 0, 0, 0, 6,6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_486BL, - .manufacturer = "IBM", - .name = "486BL2", - .internal_name = "ibm486bl2", - .cpus = (const CPU[]) { - {"50", CPU_IBM486BL, fpus_80386, 50000000, 2, 5000, 0xA439, 0, 0, 0, 8,8,6,6, 6}, - {"66", CPU_IBM486BL, fpus_80386, 66666666, 2, 5000, 0xA439, 0, 0, 0, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_486SLC_IBM, + .manufacturer = "IBM", + .name = "486SLC2", + .internal_name = "ibm486slc2", + .cpus = (const CPU[]) { + {"40", CPU_IBM486SLC, fpus_80386, 40000000, 2, 5000, 0xA421, 0, 0, 0, 7,7,6,6, 5}, + {"50", CPU_IBM486SLC, fpus_80386, 50000000, 2, 5000, 0xA421, 0, 0, 0, 8,8,6,6, 6}, + {"66", CPU_IBM486SLC, fpus_80386, 66666666, 2, 5000, 0xA421, 0, 0, 0, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_486BL, - .manufacturer = "IBM", - .name = "486BL3", - .internal_name = "ibm486bl3", - .cpus = (const CPU[]) { - {"75", CPU_IBM486BL, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, - {"100", CPU_IBM486BL, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, - {"", 0} - } + .package = CPU_PKG_486SLC_IBM, + .manufacturer = "IBM", + .name = "486SLC3", + .internal_name = "ibm486slc3", + .cpus = (const CPU[]) { + {"60", CPU_IBM486SLC, fpus_80386, 60000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 7}, + {"75", CPU_IBM486SLC, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, + {"100", CPU_IBM486SLC, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Cyrix", - .name = "Cx486DLC", - .internal_name = "cx486dlc", - .cpus = (const CPU[]) { - {"25", CPU_486DLC, fpus_80386, 25000000, 1, 5000, 0x401, 0, 0x0001, 0, 4, 4,3,3, 3}, - {"33", CPU_486DLC, fpus_80386, 33333333, 1, 5000, 0x401, 0, 0x0001, 0, 6, 6,3,3, 4}, - {"40", CPU_486DLC, fpus_80386, 40000000, 1, 5000, 0x401, 0, 0x0001, 0, 7, 7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_486BL, + .manufacturer = "IBM", + .name = "486BL2", + .internal_name = "ibm486bl2", + .cpus = (const CPU[]) { + {"50", CPU_IBM486BL, fpus_80386, 50000000, 2, 5000, 0xA439, 0, 0, 0, 8,8,6,6, 6}, + {"66", CPU_IBM486BL, fpus_80386, 66666666, 2, 5000, 0xA439, 0, 0, 0, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Cyrix", - .name = "Cx486DRx2", - .internal_name = "cx486drx2", - .cpus = (const CPU[]) { - {"32", CPU_486DLC, fpus_80386, 32000000, 2, 5000, 0x407, 0, 0x0007, 0, 6, 6,6,6, 4}, - {"40", CPU_486DLC, fpus_80386, 40000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, - {"50", CPU_486DLC, fpus_80386, 50000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, - {"66", CPU_486DLC, fpus_80386, 66666666, 2, 5000, 0x407, 0, 0x0007, 0, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_486BL, + .manufacturer = "IBM", + .name = "486BL3", + .internal_name = "ibm486bl3", + .cpus = (const CPU[]) { + {"75", CPU_IBM486BL, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, + {"100", CPU_IBM486BL, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486SX", - .internal_name = "i486sx", - .cpus = (const CPU[]) { - {"16", CPU_i486SX, fpus_486sx, 16000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 3, 3,3,3, 2}, - {"20", CPU_i486SX, fpus_486sx, 20000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"25", CPU_i486SX, fpus_486sx, 25000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"33", CPU_i486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Cyrix", + .name = "Cx486DLC", + .internal_name = "cx486dlc", + .cpus = (const CPU[]) { + {"25", CPU_486DLC, fpus_80386, 25000000, 1, 5000, 0x401, 0, 0x0001, 0, 4, 4,3,3, 3}, + {"33", CPU_486DLC, fpus_80386, 33333333, 1, 5000, 0x401, 0, 0x0001, 0, 6, 6,3,3, 4}, + {"40", CPU_486DLC, fpus_80386, 40000000, 1, 5000, 0x401, 0, 0x0001, 0, 7, 7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486SX (SL-Enhanced)", - .internal_name = "i486sx_slenh", - .cpus = (const CPU[]) { - {"25", CPU_i486SX_SLENH, fpus_486sx, 25000000, 1, 5000, 0x423, 0x423, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"33", CPU_i486SX_SLENH, fpus_486sx, 33333333, 1, 5000, 0x42a, 0x42a, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Cyrix", + .name = "Cx486DRx2", + .internal_name = "cx486drx2", + .cpus = (const CPU[]) { + {"32", CPU_486DLC, fpus_80386, 32000000, 2, 5000, 0x407, 0, 0x0007, 0, 6, 6,6,6, 4}, + {"40", CPU_486DLC, fpus_80386, 40000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, + {"50", CPU_486DLC, fpus_80386, 50000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, + {"66", CPU_486DLC, fpus_80386, 66666666, 2, 5000, 0x407, 0, 0x0007, 0, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486SX2", - .internal_name = "i486sx2", - .cpus = (const CPU[]) { - {"50", CPU_i486SX_SLENH, fpus_486sx, 50000000, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66 (Q0569)", CPU_i486SX_SLENH, fpus_486sx, 66666666, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486SX", + .internal_name = "i486sx", + .cpus = (const CPU[]) { + {"16", CPU_i486SX, fpus_486sx, 16000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 3, 3,3,3, 2}, + {"20", CPU_i486SX, fpus_486sx, 20000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"25", CPU_i486SX, fpus_486sx, 25000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"33", CPU_i486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX", - .internal_name = "i486dx", - .cpus = (const CPU[]) { - {"25", CPU_i486DX, fpus_internal, 25000000, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"33", CPU_i486DX, fpus_internal, 33333333, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"50", CPU_i486DX, fpus_internal, 50000000, 1, 5000, 0x411, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486SX (SL-Enhanced)", + .internal_name = "i486sx_slenh", + .cpus = (const CPU[]) { + {"25", CPU_i486SX_SLENH, fpus_486sx, 25000000, 1, 5000, 0x423, 0x423, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"33", CPU_i486SX_SLENH, fpus_486sx, 33333333, 1, 5000, 0x42a, 0x42a, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX (SL-Enhanced)", - .internal_name = "i486dx_slenh", - .cpus = (const CPU[]) { - {"33", CPU_i486DX_SLENH, fpus_internal, 33333333, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486SX2", + .internal_name = "i486sx2", + .cpus = (const CPU[]) { + {"50", CPU_i486SX_SLENH, fpus_486sx, 50000000, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66 (Q0569)", CPU_i486SX_SLENH, fpus_486sx, 66666666, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX2", - .internal_name = "i486dx2", - .cpus = (const CPU[]) { - {"40", CPU_i486DX, fpus_internal, 40000000, 2, 5000, 0x430, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, - {"50", CPU_i486DX, fpus_internal, 50000000, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66", CPU_i486DX, fpus_internal, 66666666, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX", + .internal_name = "i486dx", + .cpus = (const CPU[]) { + {"25", CPU_i486DX, fpus_internal, 25000000, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"33", CPU_i486DX, fpus_internal, 33333333, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"50", CPU_i486DX, fpus_internal, 50000000, 1, 5000, 0x411, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX2 (SL-Enhanced)", - .internal_name = "i486dx2_slenh", - .cpus = (const CPU[]) { - {"40", CPU_i486DX_SLENH, fpus_internal, 40000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, - {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX (SL-Enhanced)", + .internal_name = "i486dx_slenh", + .cpus = (const CPU[]) { + {"33", CPU_i486DX_SLENH, fpus_internal, 33333333, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3_PC330, - .manufacturer = "Intel", - .name = "i486DX2", - .internal_name = "i486dx2_pc330", - .cpus = (const CPU[]) { - {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX2", + .internal_name = "i486dx2", + .cpus = (const CPU[]) { + {"40", CPU_i486DX, fpus_internal, 40000000, 2, 5000, 0x430, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, + {"50", CPU_i486DX, fpus_internal, 50000000, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66", CPU_i486DX, fpus_internal, 66666666, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1 | CPU_PKG_SOCKET3_PC330, /*OEM versions are 3.3V, Retail versions are 3.3V with a 5V regulator for installation in older boards. They are functionally identical*/ - .manufacturer = "Intel", - .name = "iDX4", - .internal_name = "idx4", - .cpus = (const CPU[]) { - {"75", CPU_i486DX_SLENH, fpus_internal, 75000000, 3.0, 5000, 0x480, 0x480, 0x0000, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"100", CPU_i486DX_SLENH, fpus_internal, 100000000, 3.0, 5000, 0x483, 0x483, 0x0000, CPU_SUPPORTS_DYNAREC, 18,18, 9, 9, 12}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX2 (SL-Enhanced)", + .internal_name = "i486dx2_slenh", + .cpus = (const CPU[]) { + {"40", CPU_i486DX_SLENH, fpus_internal, 40000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, + {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3 | CPU_PKG_SOCKET3_PC330, - .manufacturer = "Intel", - .name = "Pentium OverDrive", - .internal_name = "pentium_p24t", - .cpus = (const CPU[]) { - {"63", CPU_P24T, fpus_internal, 62500000, 2.5, 5000, 0x1531, 0x1531, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,7,7, 15/2}, - {"83", CPU_P24T, fpus_internal, 83333333, 2.5, 5000, 0x1532, 0x1532, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,8,8, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET3_PC330, + .manufacturer = "Intel", + .name = "i486DX2", + .internal_name = "i486dx2_pc330", + .cpus = (const CPU[]) { + {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486SX", - .internal_name = "am486sx", - .cpus = (const CPU[]) { - {"33", CPU_Am486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Am486SX, fpus_486sx, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1 | CPU_PKG_SOCKET3_PC330, /*OEM versions are 3.3V, Retail versions are 3.3V with a 5V regulator for installation in older boards. They are functionally identical*/ + .manufacturer = "Intel", + .name = "iDX4", + .internal_name = "idx4", + .cpus = (const CPU[]) { + {"75", CPU_i486DX_SLENH, fpus_internal, 75000000, 3.0, 5000, 0x480, 0x480, 0x0000, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"100", CPU_i486DX_SLENH, fpus_internal, 100000000, 3.0, 5000, 0x483, 0x483, 0x0000, CPU_SUPPORTS_DYNAREC, 18,18, 9, 9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486SX2", - .internal_name = "am486sx2", - .cpus = (const CPU[]) { - {"50", CPU_Am486SX, fpus_486sx, 50000000, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Am486SX, fpus_486sx, 66666666, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET3 | CPU_PKG_SOCKET3_PC330, + .manufacturer = "Intel", + .name = "Pentium OverDrive", + .internal_name = "pentium_p24t", + .cpus = (const CPU[]) { + {"63", CPU_P24T, fpus_internal, 62500000, 2.5, 5000, 0x1531, 0x1531, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,7,7, 15/2}, + {"83", CPU_P24T, fpus_internal, 83333333, 2.5, 5000, 0x1532, 0x1532, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,8,8, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DX", - .internal_name = "am486dx", - .cpus = (const CPU[]) { - {"33", CPU_Am486DX, fpus_internal, 33333333, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Am486DX, fpus_internal, 40000000, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486SX", + .internal_name = "am486sx", + .cpus = (const CPU[]) { + {"33", CPU_Am486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Am486SX, fpus_486sx, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DX2", - .internal_name = "am486dx2", - .cpus = (const CPU[]) { - {"50", CPU_Am486DX, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Am486DX, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_Am486DX, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486SX2", + .internal_name = "am486sx2", + .cpus = (const CPU[]) { + {"50", CPU_Am486SX, fpus_486sx, 50000000, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Am486SX, fpus_486sx, 66666666, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DXL", - .internal_name = "am486dxl", - .cpus = (const CPU[]) { - {"33", CPU_Am486DXL, fpus_internal, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Am486DXL, fpus_internal, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DX", + .internal_name = "am486dx", + .cpus = (const CPU[]) { + {"33", CPU_Am486DX, fpus_internal, 33333333, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Am486DX, fpus_internal, 40000000, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DXL2", - .internal_name = "am486dxl2", - .cpus = (const CPU[]) { - {"50", CPU_Am486DXL, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Am486DXL, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_Am486DXL, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } - }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am486DX4", - .internal_name = "am486dx4", - .cpus = (const CPU[]) { - {"75", CPU_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"90", CPU_Am486DX, fpus_internal, 90000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"100", CPU_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"120", CPU_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, - {"", 0} - } - }, - { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am486DX2 (Enhanced)", - .internal_name = "am486dx2_slenh", - .cpus = (const CPU[]) { - {"66", CPU_ENH_Am486DX, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_ENH_Am486DX, fpus_internal, 80000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DX2", + .internal_name = "am486dx2", + .cpus = (const CPU[]) { + {"50", CPU_Am486DX, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Am486DX, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_Am486DX, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am486DX4 (Enhanced)", - .internal_name = "am486dx4_slenh", - .cpus = (const CPU[]) { - {"75", CPU_ENH_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"100", CPU_ENH_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"120", CPU_ENH_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DXL", + .internal_name = "am486dxl", + .cpus = (const CPU[]) { + {"33", CPU_Am486DXL, fpus_internal, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Am486DXL, fpus_internal, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am5x86", - .internal_name = "am5x86", - .cpus = (const CPU[]) { - {"P75", CPU_ENH_Am486DX, fpus_internal, 133333333, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, - {"P75+", CPU_ENH_Am486DX, fpus_internal, 150000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*The rare P75+ was indeed a triple-clocked 150 MHz according to research*/ - {"P90", CPU_ENH_Am486DX, fpus_internal, 160000000, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*160 MHz on a 40 MHz bus was a common overclock and "5x86/P90" was used by a number of BIOSes to refer to that configuration*/ - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DXL2", + .internal_name = "am486dxl2", + .cpus = (const CPU[]) { + {"50", CPU_Am486DXL, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Am486DXL, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_Am486DXL, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Cyrix", - .name = "Cx486S", - .internal_name = "cx486s", - .cpus = (const CPU[]) { - {"25", CPU_Cx486S, fpus_486sx, 25000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 4, 4, 3, 3, 3}, - {"33", CPU_Cx486S, fpus_486sx, 33333333, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Cx486S, fpus_486sx, 40000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am486DX4", + .internal_name = "am486dx4", + .cpus = (const CPU[]) { + {"75", CPU_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"90", CPU_Am486DX, fpus_internal, 90000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"100", CPU_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"120", CPU_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Cyrix", - .name = "Cx486DX", - .internal_name = "cx486dx", - .cpus = (const CPU[]) { - {"33", CPU_Cx486DX, fpus_internal, 33333333, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Cx486DX, fpus_internal, 40000000, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am486DX2 (Enhanced)", + .internal_name = "am486dx2_slenh", + .cpus = (const CPU[]) { + {"66", CPU_ENH_Am486DX, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_ENH_Am486DX, fpus_internal, 80000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Cyrix", - .name = "Cx486DX2", - .internal_name = "cx486dx2", - .cpus = (const CPU[]) { - {"50", CPU_Cx486DX, fpus_internal, 50000000, 2.0, 5000, 0x430, 0, 0x081b, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Cx486DX, fpus_internal, 66666666, 2.0, 5000, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_Cx486DX, fpus_internal, 80000000, 2.0, 5000, 0x430, 0, 0x311b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am486DX4 (Enhanced)", + .internal_name = "am486dx4_slenh", + .cpus = (const CPU[]) { + {"75", CPU_ENH_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"100", CPU_ENH_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"120", CPU_ENH_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "Cyrix", - .name = "Cx486DX4", - .internal_name = "cx486dx4", - .cpus = (const CPU[]) { - {"75", CPU_Cx486DX, fpus_internal, 75000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"100", CPU_Cx486DX, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am5x86", + .internal_name = "am5x86", + .cpus = (const CPU[]) { + {"P75", CPU_ENH_Am486DX, fpus_internal, 133333333, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, + {"P75+", CPU_ENH_Am486DX, fpus_internal, 150000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*The rare P75+ was indeed a triple-clocked 150 MHz according to research*/ + {"P90", CPU_ENH_Am486DX, fpus_internal, 160000000, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*160 MHz on a 40 MHz bus was a common overclock and "5x86/P90" was used by a number of BIOSes to refer to that configuration*/ + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "Cyrix", - .name = "Cx5x86", - .internal_name = "cx5x86", - .cpus = (const CPU[]) { - {"80", CPU_Cx5x86, fpus_internal, 80000000, 2.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, /*If we're including the Pentium 50, might as well include this*/ - {"100", CPU_Cx5x86, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"120", CPU_Cx5x86, fpus_internal, 120000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, - {"133", CPU_Cx5x86, fpus_internal, 133333333, 4.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Cyrix", + .name = "Cx486S", + .internal_name = "cx486s", + .cpus = (const CPU[]) { + {"25", CPU_Cx486S, fpus_486sx, 25000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 4, 4, 3, 3, 3}, + {"33", CPU_Cx486S, fpus_486sx, 33333333, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Cx486S, fpus_486sx, 40000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_STPC, - .manufacturer = "ST", - .name = "STPC-DX", - .internal_name = "stpc_dx", - .cpus = (const CPU[]) { - {"66", CPU_STPC, fpus_internal, 66666666, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"75", CPU_STPC, fpus_internal, 75000000, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Cyrix", + .name = "Cx486DX", + .internal_name = "cx486dx", + .cpus = (const CPU[]) { + {"33", CPU_Cx486DX, fpus_internal, 33333333, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Cx486DX, fpus_internal, 40000000, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_STPC, - .manufacturer = "ST", - .name = "STPC-DX2", - .internal_name = "stpc_dx2", - .cpus = (const CPU[]) { - {"133", CPU_STPC, fpus_internal, 133333333, 2.0, 3300, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Cyrix", + .name = "Cx486DX2", + .internal_name = "cx486dx2", + .cpus = (const CPU[]) { + {"50", CPU_Cx486DX, fpus_internal, 50000000, 2.0, 5000, 0x430, 0, 0x081b, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Cx486DX, fpus_internal, 66666666, 2.0, 5000, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_Cx486DX, fpus_internal, 80000000, 2.0, 5000, 0x430, 0, 0x311b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET4, - .manufacturer = "Intel", - .name = "Pentium", - .internal_name = "pentium_p5", - .cpus = (const CPU[]) { - {"50 (Q0399)", CPU_PENTIUM, fpus_internal, 50000000, 1, 5000, 0x513, 0x513, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 4, 4,3,3, 6}, - {"60", CPU_PENTIUM, fpus_internal, 60000000, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 7}, - {"66", CPU_PENTIUM, fpus_internal, 66666666, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "Cyrix", + .name = "Cx486DX4", + .internal_name = "cx486dx4", + .cpus = (const CPU[]) { + {"75", CPU_Cx486DX, fpus_internal, 75000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"100", CPU_Cx486DX, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET4, - .manufacturer = "Intel", - .name = "Pentium OverDrive", - .internal_name = "pentium_p54c_od5v", - .cpus = (const CPU[]) { - {"100", CPU_PENTIUM, fpus_internal, 100000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8,6,6, 12}, - {"120", CPU_PENTIUM, fpus_internal, 120000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 14}, - {"133", CPU_PENTIUM, fpus_internal, 133333333, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 16}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "Cyrix", + .name = "Cx5x86", + .internal_name = "cx5x86", + .cpus = (const CPU[]) { + {"80", CPU_Cx5x86, fpus_internal, 80000000, 2.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, /*If we're including the Pentium 50, might as well include this*/ + {"100", CPU_Cx5x86, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"120", CPU_Cx5x86, fpus_internal, 120000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, + {"133", CPU_Cx5x86, fpus_internal, 133333333, 4.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium", - .internal_name = "pentium_p54c", - .cpus = (const CPU[]) { - {"75", CPU_PENTIUM, fpus_internal, 75000000, 1.5, 3520, 0x522, 0x522, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, - {"90", CPU_PENTIUM, fpus_internal, 90000000, 1.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, - {"100/50", CPU_PENTIUM, fpus_internal, 100000000, 2.0, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,6,6, 12}, - {"100/66", CPU_PENTIUM, fpus_internal, 100000000, 1.5, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, - {"120", CPU_PENTIUM, fpus_internal, 120000000, 2.0, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, - {"133", CPU_PENTIUM, fpus_internal, 133333333, 2.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, - {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, - {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_PENTIUM, fpus_internal, 200000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"", 0} - } + .package = CPU_PKG_STPC, + .manufacturer = "ST", + .name = "STPC-DX", + .internal_name = "stpc_dx", + .cpus = (const CPU[]) { + {"66", CPU_STPC, fpus_internal, 66666666, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"75", CPU_STPC, fpus_internal, 75000000, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium MMX", - .internal_name = "pentium_p55c", - .cpus = (const CPU[]) { - {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"", 0} - } + .package = CPU_PKG_STPC, + .manufacturer = "ST", + .name = "STPC-DX2", + .internal_name = "stpc_dx2", + .cpus = (const CPU[]) { + {"133", CPU_STPC, fpus_internal, 133333333, 2.0, 3300, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Mobile Pentium MMX", - .internal_name = "pentium_tillamook", - .cpus = (const CPU[]) { - {"120", CPU_PENTIUMMMX, fpus_internal, 120000000, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, - {"133", CPU_PENTIUMMMX, fpus_internal, 133333333, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"150", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, - {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"266", CPU_PENTIUMMMX, fpus_internal, 266666666, 4.0, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_PENTIUMMMX, fpus_internal, 300000000, 4.5, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, - {"", 0} - } + .package = CPU_PKG_SOCKET4, + .manufacturer = "Intel", + .name = "Pentium", + .internal_name = "pentium_p5", + .cpus = (const CPU[]) { + {"50 (Q0399)", CPU_PENTIUM, fpus_internal, 50000000, 1, 5000, 0x513, 0x513, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 4, 4,3,3, 6}, + {"60", CPU_PENTIUM, fpus_internal, 60000000, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 7}, + {"66", CPU_PENTIUM, fpus_internal, 66666666, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium OverDrive", - .internal_name = "pentium_p54c_od3v", - .cpus = (const CPU[]) { - {"125", CPU_PENTIUM, fpus_internal, 125000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, - {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, - {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, - {"", 0} - } + .package = CPU_PKG_SOCKET4, + .manufacturer = "Intel", + .name = "Pentium OverDrive", + .internal_name = "pentium_p54c_od5v", + .cpus = (const CPU[]) { + {"100", CPU_PENTIUM, fpus_internal, 100000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8,6,6, 12}, + {"120", CPU_PENTIUM, fpus_internal, 120000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 14}, + {"133", CPU_PENTIUM, fpus_internal, 133333333, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 16}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium OverDrive MMX", - .internal_name = "pentium_p55c_od", - .cpus = (const CPU[]) { - {"75", CPU_PENTIUMMMX, fpus_internal, 75000000, 1.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 7, 7,4,4, 9}, - {"125", CPU_PENTIUMMMX, fpus_internal, 125000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, - {"150/60", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, - {"166", CPU_PENTIUMMMX, fpus_internal, 166000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, - {"180", CPU_PENTIUMMMX, fpus_internal, 180000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 21}, - {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 24}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium", + .internal_name = "pentium_p54c", + .cpus = (const CPU[]) { + {"75", CPU_PENTIUM, fpus_internal, 75000000, 1.5, 3520, 0x522, 0x522, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, + {"90", CPU_PENTIUM, fpus_internal, 90000000, 1.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, + {"100/50", CPU_PENTIUM, fpus_internal, 100000000, 2.0, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,6,6, 12}, + {"100/66", CPU_PENTIUM, fpus_internal, 100000000, 1.5, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, + {"120", CPU_PENTIUM, fpus_internal, 120000000, 2.0, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, + {"133", CPU_PENTIUM, fpus_internal, 133333333, 2.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, + {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, + {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_PENTIUM, fpus_internal, 200000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "IDT", - .name = "WinChip", - .internal_name = "winchip", - .cpus = (const CPU[]) { - {"75", CPU_WINCHIP, fpus_internal, 75000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 4, 4, 9}, - {"90", CPU_WINCHIP, fpus_internal, 90000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 21/2}, - {"100", CPU_WINCHIP, fpus_internal, 100000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 12}, - {"120", CPU_WINCHIP, fpus_internal, 120000000, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 14}, - {"133", CPU_WINCHIP, fpus_internal, 133333333, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 16}, - {"150", CPU_WINCHIP, fpus_internal, 150000000, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 35/2}, - {"166", CPU_WINCHIP, fpus_internal, 166666666, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 40}, - {"180", CPU_WINCHIP, fpus_internal, 180000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 21}, - {"200", CPU_WINCHIP, fpus_internal, 200000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 24}, - {"225", CPU_WINCHIP, fpus_internal, 225000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 27}, - {"240", CPU_WINCHIP, fpus_internal, 240000000, 4.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 28}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium MMX", + .internal_name = "pentium_p55c", + .cpus = (const CPU[]) { + {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "IDT", - .name = "WinChip 2", - .internal_name = "winchip2", - .cpus = (const CPU[]) { - {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, - {"225", CPU_WINCHIP2, fpus_internal, 225000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*9}, - {"240", CPU_WINCHIP2, fpus_internal, 240000000, 4.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, - {"250", CPU_WINCHIP2, fpus_internal, 250000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Mobile Pentium MMX", + .internal_name = "pentium_tillamook", + .cpus = (const CPU[]) { + {"120", CPU_PENTIUMMMX, fpus_internal, 120000000, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, + {"133", CPU_PENTIUMMMX, fpus_internal, 133333333, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"150", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, + {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"266", CPU_PENTIUMMMX, fpus_internal, 266666666, 4.0, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_PENTIUMMMX, fpus_internal, 300000000, 4.5, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "IDT", - .name = "WinChip 2A", - .internal_name = "winchip2a", - .cpus = (const CPU[]) { - {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, - {"233", CPU_WINCHIP2, fpus_internal, 233333333, 3.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 9, 9, (7*8)/2}, - {"266", CPU_WINCHIP2, fpus_internal, 233333333, 7.0/3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 7, 7, 28}, - {"300", CPU_WINCHIP2, fpus_internal, 250000000, 2.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 8, 8, 30}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium OverDrive", + .internal_name = "pentium_p54c_od3v", + .cpus = (const CPU[]) { + {"125", CPU_PENTIUM, fpus_internal, 125000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, + {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, + {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium OverDrive MMX", + .internal_name = "pentium_p55c_od", + .cpus = (const CPU[]) { + {"75", CPU_PENTIUMMMX, fpus_internal, 75000000, 1.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 7, 7,4,4, 9}, + {"125", CPU_PENTIUMMMX, fpus_internal, 125000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, + {"150/60", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, + {"166", CPU_PENTIUMMMX, fpus_internal, 166000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, + {"180", CPU_PENTIUMMMX, fpus_internal, 180000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 21}, + {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 24}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "IDT", + .name = "WinChip", + .internal_name = "winchip", + .cpus = (const CPU[]) { + {"75", CPU_WINCHIP, fpus_internal, 75000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 4, 4, 9}, + {"90", CPU_WINCHIP, fpus_internal, 90000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 21/2}, + {"100", CPU_WINCHIP, fpus_internal, 100000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 12}, + {"120", CPU_WINCHIP, fpus_internal, 120000000, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 14}, + {"133", CPU_WINCHIP, fpus_internal, 133333333, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 16}, + {"150", CPU_WINCHIP, fpus_internal, 150000000, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 35/2}, + {"166", CPU_WINCHIP, fpus_internal, 166666666, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 40}, + {"180", CPU_WINCHIP, fpus_internal, 180000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 21}, + {"200", CPU_WINCHIP, fpus_internal, 200000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 24}, + {"225", CPU_WINCHIP, fpus_internal, 225000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 27}, + {"240", CPU_WINCHIP, fpus_internal, 240000000, 4.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 28}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "IDT", + .name = "WinChip 2", + .internal_name = "winchip2", + .cpus = (const CPU[]) { + {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, + {"225", CPU_WINCHIP2, fpus_internal, 225000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*9}, + {"240", CPU_WINCHIP2, fpus_internal, 240000000, 4.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, + {"250", CPU_WINCHIP2, fpus_internal, 250000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "IDT", + .name = "WinChip 2A", + .internal_name = "winchip2a", + .cpus = (const CPU[]) { + {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, + {"233", CPU_WINCHIP2, fpus_internal, 233333333, 3.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 9, 9, (7*8)/2}, + {"266", CPU_WINCHIP2, fpus_internal, 233333333, 7.0/3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 7, 7, 28}, + {"300", CPU_WINCHIP2, fpus_internal, 250000000, 2.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 8, 8, 30}, + {"", 0} + } }, #if defined(DEV_BRANCH) && defined(USE_AMD_K5) { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K5 (5k86)", - .internal_name = "k5_5k86", - .cpus = (const CPU[]) { - {"75 (P75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, - {"90 (P90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, - {"100 (P100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, - {"90 (PR120)", CPU_5K86, fpus_internal, 120000000, 2.0, 3520, 0x511, 0x511, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, - {"100 (PR133)", CPU_5K86, fpus_internal, 133333333, 2.0, 3520, 0x514, 0x514, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, - {"105 (PR150)", CPU_5K86, fpus_internal, 150000000, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 35/2}, - {"116.5 (PR166)", CPU_5K86, fpus_internal, 166666666, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 20}, - {"133 (PR200)", CPU_5K86, fpus_internal, 200000000, 3.0, 3520, 0x534, 0x534, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,9,9, 24}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K5 (5k86)", + .internal_name = "k5_5k86", + .cpus = (const CPU[]) { + {"75 (P75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, + {"90 (P90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, + {"100 (P100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, + {"90 (PR120)", CPU_5K86, fpus_internal, 120000000, 2.0, 3520, 0x511, 0x511, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, + {"100 (PR133)", CPU_5K86, fpus_internal, 133333333, 2.0, 3520, 0x514, 0x514, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, + {"105 (PR150)", CPU_5K86, fpus_internal, 150000000, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 35/2}, + {"116.5 (PR166)", CPU_5K86, fpus_internal, 166666666, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 20}, + {"133 (PR200)", CPU_5K86, fpus_internal, 200000000, 3.0, 3520, 0x534, 0x534, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,9,9, 24}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K5 (SSA/5)", - .internal_name = "k5_ssa5", - .cpus = (const CPU[]) { - {"75 (PR75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, - {"90 (PR90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, - {"100 (PR100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K5 (SSA/5)", + .internal_name = "k5_ssa5", + .cpus = (const CPU[]) { + {"75 (PR75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, + {"90 (PR90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, + {"100 (PR100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, + {"", 0} + } }, #endif { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6 (Model 6)", - .internal_name = "k6_m6", - .cpus = (const CPU[]) { - {"66", CPU_K6, fpus_internal, 66666666, 1.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_K6, fpus_internal, 233333333, 3.5, 3200, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6 (Model 6)", + .internal_name = "k6_m6", + .cpus = (const CPU[]) { + {"66", CPU_K6, fpus_internal, 66666666, 1.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_K6, fpus_internal, 233333333, 3.5, 3200, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6 (Model 7)", - .internal_name = "k6_m7", - .cpus = (const CPU[]) { - {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_K6, fpus_internal, 233333333, 3.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"266", CPU_K6, fpus_internal, 266666666, 4.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_K6, fpus_internal, 300000000, 4.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6 (Model 7)", + .internal_name = "k6_m7", + .cpus = (const CPU[]) { + {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_K6, fpus_internal, 233333333, 3.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"266", CPU_K6, fpus_internal, 266666666, 4.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_K6, fpus_internal, 300000000, 4.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-2", - .internal_name = "k6_2", - .cpus = (const CPU[]) { - {"100", CPU_K6_2, fpus_internal, 100000000, 1.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6_2, fpus_internal, 133333333, 2.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_2, fpus_internal, 166666666, 2.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_2, fpus_internal, 200000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_2, fpus_internal, 233333333, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, - {"266", CPU_K6_2, fpus_internal, 266666666, 4.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, - {"300", CPU_K6_2, fpus_internal, 300000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, - {"333", CPU_K6_2, fpus_internal, 332500000, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, - {"350", CPU_K6_2C, fpus_internal, 350000000, 3.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, - {"366", CPU_K6_2C, fpus_internal, 366666666, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, - {"380", CPU_K6_2C, fpus_internal, 380000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, - {"400/66", CPU_K6_2C, fpus_internal, 400000000, 6.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"400/100", CPU_K6_2C, fpus_internal, 400000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"450", CPU_K6_2C, fpus_internal, 450000000, 4.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"475", CPU_K6_2C, fpus_internal, 475000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, - {"500", CPU_K6_2C, fpus_internal, 500000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, - {"533", CPU_K6_2C, fpus_internal, 533333333, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, - {"550", CPU_K6_2C, fpus_internal, 550000000, 5.5, 2300, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-2", + .internal_name = "k6_2", + .cpus = (const CPU[]) { + {"100", CPU_K6_2, fpus_internal, 100000000, 1.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6_2, fpus_internal, 133333333, 2.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_2, fpus_internal, 166666666, 2.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_2, fpus_internal, 200000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_2, fpus_internal, 233333333, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, + {"266", CPU_K6_2, fpus_internal, 266666666, 4.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, + {"300", CPU_K6_2, fpus_internal, 300000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, + {"333", CPU_K6_2, fpus_internal, 332500000, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, + {"350", CPU_K6_2C, fpus_internal, 350000000, 3.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, + {"366", CPU_K6_2C, fpus_internal, 366666666, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, + {"380", CPU_K6_2C, fpus_internal, 380000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, + {"400/66", CPU_K6_2C, fpus_internal, 400000000, 6.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"400/100", CPU_K6_2C, fpus_internal, 400000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"450", CPU_K6_2C, fpus_internal, 450000000, 4.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"475", CPU_K6_2C, fpus_internal, 475000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, + {"500", CPU_K6_2C, fpus_internal, 500000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, + {"533", CPU_K6_2C, fpus_internal, 533333333, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, + {"550", CPU_K6_2C, fpus_internal, 550000000, 5.5, 2300, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-2+", - .internal_name = "k6_2p", - .cpus = (const CPU[]) { - {"100", CPU_K6_2P, fpus_internal, 100000000, 1.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6_2P, fpus_internal, 133333333, 2.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_2P, fpus_internal, 166666666, 2.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_2P, fpus_internal, 200000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_2P, fpus_internal, 233333333, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ - {"266", CPU_K6_2P, fpus_internal, 266666666, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ - {"300", CPU_K6_2P, fpus_internal, 300000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ - {"333", CPU_K6_2P, fpus_internal, 332500000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ - {"350", CPU_K6_2P, fpus_internal, 350000000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ - {"366", CPU_K6_2P, fpus_internal, 366666666, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ - {"380", CPU_K6_2P, fpus_internal, 380000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ - {"400/66", CPU_K6_2P, fpus_internal, 400000000, 6.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ - {"400/100", CPU_K6_2P, fpus_internal, 400000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ - {"450", CPU_K6_2P, fpus_internal, 450000000, 4.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"475", CPU_K6_2P, fpus_internal, 475000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, - {"500", CPU_K6_2P, fpus_internal, 500000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, - {"533", CPU_K6_2P, fpus_internal, 533333333, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, - {"550", CPU_K6_2P, fpus_internal, 550000000, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-2+", + .internal_name = "k6_2p", + .cpus = (const CPU[]) { + {"100", CPU_K6_2P, fpus_internal, 100000000, 1.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6_2P, fpus_internal, 133333333, 2.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_2P, fpus_internal, 166666666, 2.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_2P, fpus_internal, 200000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_2P, fpus_internal, 233333333, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ + {"266", CPU_K6_2P, fpus_internal, 266666666, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ + {"300", CPU_K6_2P, fpus_internal, 300000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ + {"333", CPU_K6_2P, fpus_internal, 332500000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ + {"350", CPU_K6_2P, fpus_internal, 350000000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ + {"366", CPU_K6_2P, fpus_internal, 366666666, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ + {"380", CPU_K6_2P, fpus_internal, 380000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ + {"400/66", CPU_K6_2P, fpus_internal, 400000000, 6.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ + {"400/100", CPU_K6_2P, fpus_internal, 400000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ + {"450", CPU_K6_2P, fpus_internal, 450000000, 4.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"475", CPU_K6_2P, fpus_internal, 475000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, + {"500", CPU_K6_2P, fpus_internal, 500000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, + {"533", CPU_K6_2P, fpus_internal, 533333333, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, + {"550", CPU_K6_2P, fpus_internal, 550000000, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-III", - .internal_name = "k6_3", - .cpus = (const CPU[]) { - {"100", CPU_K6_3, fpus_internal, 100000000, 1.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6_3, fpus_internal, 133333333, 2.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_3, fpus_internal, 166666666, 2.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_3, fpus_internal, 200000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_3, fpus_internal, 233333333, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ - {"266", CPU_K6_3, fpus_internal, 266666666, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ - {"300", CPU_K6_3, fpus_internal, 300000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ - {"333", CPU_K6_3, fpus_internal, 332500000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ - {"350", CPU_K6_3, fpus_internal, 350000000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ - {"366", CPU_K6_3, fpus_internal, 366666666, 5.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ - {"380", CPU_K6_3, fpus_internal, 380000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ - {"400", CPU_K6_3, fpus_internal, 400000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"450", CPU_K6_3, fpus_internal, 450000000, 4.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-III", + .internal_name = "k6_3", + .cpus = (const CPU[]) { + {"100", CPU_K6_3, fpus_internal, 100000000, 1.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6_3, fpus_internal, 133333333, 2.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_3, fpus_internal, 166666666, 2.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_3, fpus_internal, 200000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_3, fpus_internal, 233333333, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ + {"266", CPU_K6_3, fpus_internal, 266666666, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ + {"300", CPU_K6_3, fpus_internal, 300000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ + {"333", CPU_K6_3, fpus_internal, 332500000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ + {"350", CPU_K6_3, fpus_internal, 350000000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ + {"366", CPU_K6_3, fpus_internal, 366666666, 5.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ + {"380", CPU_K6_3, fpus_internal, 380000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ + {"400", CPU_K6_3, fpus_internal, 400000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"450", CPU_K6_3, fpus_internal, 450000000, 4.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-III+", - .internal_name = "k6_3p", - .cpus = (const CPU[]) { - {"100", CPU_K6_3P, fpus_internal, 100000000, 1.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7, 4, 4, 9}, /* out of spec */ - {"133", CPU_K6_3P, fpus_internal, 133333333, 2.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_3P, fpus_internal, 166666666, 2.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_3P, fpus_internal, 200000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_3P, fpus_internal, 233333333, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ - {"266", CPU_K6_3P, fpus_internal, 266666666, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ - {"300", CPU_K6_3P, fpus_internal, 300000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ - {"333", CPU_K6_3P, fpus_internal, 332500000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ - {"350", CPU_K6_3P, fpus_internal, 350000000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ - {"366", CPU_K6_3P, fpus_internal, 366666666, 5.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ - {"380", CPU_K6_3P, fpus_internal, 380000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ - {"400", CPU_K6_3P, fpus_internal, 400000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"450", CPU_K6_3P, fpus_internal, 450000000, 4.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"475", CPU_K6_3P, fpus_internal, 475000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, - {"500", CPU_K6_3P, fpus_internal, 500000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-III+", + .internal_name = "k6_3p", + .cpus = (const CPU[]) { + {"100", CPU_K6_3P, fpus_internal, 100000000, 1.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7, 4, 4, 9}, /* out of spec */ + {"133", CPU_K6_3P, fpus_internal, 133333333, 2.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_3P, fpus_internal, 166666666, 2.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_3P, fpus_internal, 200000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_3P, fpus_internal, 233333333, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ + {"266", CPU_K6_3P, fpus_internal, 266666666, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ + {"300", CPU_K6_3P, fpus_internal, 300000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ + {"333", CPU_K6_3P, fpus_internal, 332500000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ + {"350", CPU_K6_3P, fpus_internal, 350000000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ + {"366", CPU_K6_3P, fpus_internal, 366666666, 5.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ + {"380", CPU_K6_3P, fpus_internal, 380000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ + {"400", CPU_K6_3P, fpus_internal, 400000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"450", CPU_K6_3P, fpus_internal, 450000000, 4.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"475", CPU_K6_3P, fpus_internal, 475000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, + {"500", CPU_K6_3P, fpus_internal, 500000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, + {"", 0} + } }, #if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86) { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "Cx6x86", - .internal_name = "cx6x86", - .cpus = (const CPU[]) { - {"P90", CPU_Cx6x86, fpus_internal, 80000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 8, 8, 6, 6, 10}, - {"PR120+", CPU_Cx6x86, fpus_internal, 100000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 12}, - {"PR133+", CPU_Cx6x86, fpus_internal, 110000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, - {"PR150+", CPU_Cx6x86, fpus_internal, 120000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, - {"PR166+", CPU_Cx6x86, fpus_internal, 133333333, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"PR200+", CPU_Cx6x86, fpus_internal, 150000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "Cx6x86", + .internal_name = "cx6x86", + .cpus = (const CPU[]) { + {"P90", CPU_Cx6x86, fpus_internal, 80000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 8, 8, 6, 6, 10}, + {"PR120+", CPU_Cx6x86, fpus_internal, 100000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 12}, + {"PR133+", CPU_Cx6x86, fpus_internal, 110000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, + {"PR150+", CPU_Cx6x86, fpus_internal, 120000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, + {"PR166+", CPU_Cx6x86, fpus_internal, 133333333, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"PR200+", CPU_Cx6x86, fpus_internal, 150000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "Cx6x86L", - .internal_name = "cx6x86l", - .cpus = (const CPU[]) { - {"PR133+", CPU_Cx6x86L, fpus_internal, 110000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, - {"PR150+", CPU_Cx6x86L, fpus_internal, 120000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, - {"PR166+", CPU_Cx6x86L, fpus_internal, 133333333, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"PR200+", CPU_Cx6x86L, fpus_internal, 150000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "Cx6x86L", + .internal_name = "cx6x86l", + .cpus = (const CPU[]) { + {"PR133+", CPU_Cx6x86L, fpus_internal, 110000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, + {"PR150+", CPU_Cx6x86L, fpus_internal, 120000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, + {"PR166+", CPU_Cx6x86L, fpus_internal, 133333333, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"PR200+", CPU_Cx6x86L, fpus_internal, 150000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "Cx6x86MX", - .internal_name = "cx6x86mx", - .cpus = (const CPU[]) { - {"PR166", CPU_Cx6x86MX, fpus_internal, 133333333, 2.0, 2900, 0x600, 0x600, 0x0451, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"PR200", CPU_Cx6x86MX, fpus_internal, 166666666, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"PR233", CPU_Cx6x86MX, fpus_internal, 187500000, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 45/2}, - {"PR266", CPU_Cx6x86MX, fpus_internal, 208333333, 2.5, 2700, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 17,17, 7, 7, 25}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "Cx6x86MX", + .internal_name = "cx6x86mx", + .cpus = (const CPU[]) { + {"PR166", CPU_Cx6x86MX, fpus_internal, 133333333, 2.0, 2900, 0x600, 0x600, 0x0451, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"PR200", CPU_Cx6x86MX, fpus_internal, 166666666, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"PR233", CPU_Cx6x86MX, fpus_internal, 187500000, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 45/2}, + {"PR266", CPU_Cx6x86MX, fpus_internal, 208333333, 2.5, 2700, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 17,17, 7, 7, 25}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "MII", - .internal_name = "mii", - .cpus = (const CPU[]) { - {"PR300", CPU_Cx6x86MX, fpus_internal, 233333333, 3.5, 2900, 0x601, 0x601, 0x0852, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, - {"PR333", CPU_Cx6x86MX, fpus_internal, 250000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 9, 9, 30}, - {"PR366", CPU_Cx6x86MX, fpus_internal, 250000000, 2.5, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 7, 7, 30}, - {"PR400", CPU_Cx6x86MX, fpus_internal, 285000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 34}, - {"PR433", CPU_Cx6x86MX, fpus_internal, 300000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "MII", + .internal_name = "mii", + .cpus = (const CPU[]) { + {"PR300", CPU_Cx6x86MX, fpus_internal, 233333333, 3.5, 2900, 0x601, 0x601, 0x0852, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, + {"PR333", CPU_Cx6x86MX, fpus_internal, 250000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 9, 9, 30}, + {"PR366", CPU_Cx6x86MX, fpus_internal, 250000000, 2.5, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 7, 7, 30}, + {"PR400", CPU_Cx6x86MX, fpus_internal, 285000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 34}, + {"PR433", CPU_Cx6x86MX, fpus_internal, 300000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, + {"", 0} + } }, #endif { - .package = CPU_PKG_SOCKET8, - .manufacturer = "Intel", - .name = "Pentium Pro", - .internal_name = "pentiumpro", - .cpus = (const CPU[]) { - {"60", CPU_PENTIUMPRO, fpus_internal, 60000000, 1.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 7}, /* out of spec */ - {"66", CPU_PENTIUMPRO, fpus_internal, 66666666, 1.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 8}, /* out of spec */ - {"90", CPU_PENTIUMPRO, fpus_internal, 90000000, 1.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 11}, /* out of spec */ - {"100", CPU_PENTIUMPRO, fpus_internal, 100000000, 1.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ - {"120", CPU_PENTIUMPRO, fpus_internal, 120000000, 2.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 14}, /* out of spec */ - {"133", CPU_PENTIUMPRO, fpus_internal, 133333333, 2.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 16}, /* out of spec */ - {"150", CPU_PENTIUMPRO, fpus_internal, 150000000, 2.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, - {"166", CPU_PENTIUMPRO, fpus_internal, 166666666, 2.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"180", CPU_PENTIUMPRO, fpus_internal, 180000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 21}, - {"200", CPU_PENTIUMPRO, fpus_internal, 200000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"", 0} - } + .package = CPU_PKG_SOCKET8, + .manufacturer = "Intel", + .name = "Pentium Pro", + .internal_name = "pentiumpro", + .cpus = (const CPU[]) { + {"60", CPU_PENTIUMPRO, fpus_internal, 60000000, 1.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 7}, /* out of spec */ + {"66", CPU_PENTIUMPRO, fpus_internal, 66666666, 1.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 8}, /* out of spec */ + {"90", CPU_PENTIUMPRO, fpus_internal, 90000000, 1.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 11}, /* out of spec */ + {"100", CPU_PENTIUMPRO, fpus_internal, 100000000, 1.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ + {"120", CPU_PENTIUMPRO, fpus_internal, 120000000, 2.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 14}, /* out of spec */ + {"133", CPU_PENTIUMPRO, fpus_internal, 133333333, 2.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 16}, /* out of spec */ + {"150", CPU_PENTIUMPRO, fpus_internal, 150000000, 2.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, + {"166", CPU_PENTIUMPRO, fpus_internal, 166666666, 2.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"180", CPU_PENTIUMPRO, fpus_internal, 180000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 21}, + {"200", CPU_PENTIUMPRO, fpus_internal, 200000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET8, - .manufacturer = "Intel", - .name = "Pentium II OverDrive", - .internal_name = "pentium2_od", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18, 9, 9, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 21,21,10,10, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 24,24,12,12, 32}, /* out of spec */ - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 36}, - {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, - {"", 0} - } + .package = CPU_PKG_SOCKET8, + .manufacturer = "Intel", + .name = "Pentium II OverDrive", + .internal_name = "pentium2_od", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18, 9, 9, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 21,21,10,10, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 24,24,12,12, 32}, /* out of spec */ + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 36}, + {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT1, - .manufacturer = "Intel", - .name = "Pentium II (Klamath)", - .internal_name = "pentium2_klamath", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2, fpus_internal, 66666666, 1.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2, fpus_internal, 100000000, 1.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_PENTIUM2, fpus_internal, 133333333, 2.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_PENTIUM2, fpus_internal, 166666666, 2.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2, fpus_internal, 200000000, 3.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ - {"233", CPU_PENTIUM2, fpus_internal, 233333333, 3.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"266", CPU_PENTIUM2, fpus_internal, 266666666, 4.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_PENTIUM2, fpus_internal, 300000000, 4.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, - {"", 0} - } + .package = CPU_PKG_SLOT1, + .manufacturer = "Intel", + .name = "Pentium II (Klamath)", + .internal_name = "pentium2_klamath", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2, fpus_internal, 66666666, 1.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2, fpus_internal, 100000000, 1.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_PENTIUM2, fpus_internal, 133333333, 2.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_PENTIUM2, fpus_internal, 166666666, 2.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2, fpus_internal, 200000000, 3.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ + {"233", CPU_PENTIUM2, fpus_internal, 233333333, 3.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"266", CPU_PENTIUM2, fpus_internal, 266666666, 4.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_PENTIUM2, fpus_internal, 300000000, 4.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT1, - .manufacturer = "Intel", - .name = "Pentium II (Deschutes)", - .internal_name = "pentium2_deschutes", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 5, 5, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, - {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 40}, - {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,11,11, 42}, - {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, - {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, - {"", 0} - } + .package = CPU_PKG_SLOT1, + .manufacturer = "Intel", + .name = "Pentium II (Deschutes)", + .internal_name = "pentium2_deschutes", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 5, 5, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, + {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 40}, + {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,11,11, 42}, + {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, + {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT1, - .manufacturer = "Intel", - .name = "Celeron (Covington)", - .internal_name = "celeron_covington", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 6, 6, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 9, 9, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,12,12, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,15,15, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,18,18, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,21,21, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,24,24, 32}, - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,25,25, 36}, - {"", 0} - } + .package = CPU_PKG_SLOT1, + .manufacturer = "Intel", + .name = "Celeron (Covington)", + .internal_name = "celeron_covington", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 6, 6, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 9, 9, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,12,12, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,15,15, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,18,18, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,21,21, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,24,24, 32}, + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,25,25, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT2, - .manufacturer = "Intel", - .name = "Pentium II Xeon", - .internal_name = "pentium2_xeon", - .cpus = (const CPU[]) { - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ - {"150", CPU_PENTIUM2D, fpus_internal, 150000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 14,14, 4, 4, 18}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 6, 6, 24}, /* out of spec */ - {"250", CPU_PENTIUM2D, fpus_internal, 250000000, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 22,22, 7, 7, 30}, /* out of spec */ - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, /* out of spec */ - {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,10,10, 42}, /* out of spec */ - {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, - {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, - {"", 0} - } + .package = CPU_PKG_SLOT2, + .manufacturer = "Intel", + .name = "Pentium II Xeon", + .internal_name = "pentium2_xeon", + .cpus = (const CPU[]) { + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ + {"150", CPU_PENTIUM2D, fpus_internal, 150000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 14,14, 4, 4, 18}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 6, 6, 24}, /* out of spec */ + {"250", CPU_PENTIUM2D, fpus_internal, 250000000, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 22,22, 7, 7, 30}, /* out of spec */ + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, /* out of spec */ + {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,10,10, 42}, /* out of spec */ + {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, + {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET370, - .manufacturer = "Intel", - .name = "Celeron (Mendocino)", - .internal_name = "celeron_mendocino", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8, 4, 4, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 11,11, 5, 5, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 14,14, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 17,17, 8, 8, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 19,19, 9, 9, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 22,22,11,11, 32}, /* out of spec */ - {"300A", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 25,25,12,12, 36}, - {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, - {"366", CPU_PENTIUM2D, fpus_internal, 366666666, 5.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 33,33,17,17, 44}, - {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 6.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 36,36,12,12, 48}, - {"433", CPU_PENTIUM2D, fpus_internal, 433333333, 6.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 39,39,13,13, 51}, - {"466", CPU_PENTIUM2D, fpus_internal, 466666666, 7.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 42,42,14,14, 56}, - {"500", CPU_PENTIUM2D, fpus_internal, 500000000, 7.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 45,45,15,15, 60}, - {"533", CPU_PENTIUM2D, fpus_internal, 533333333, 8.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 48,48,17,17, 64}, - {"", 0} - } + .package = CPU_PKG_SOCKET370, + .manufacturer = "Intel", + .name = "Celeron (Mendocino)", + .internal_name = "celeron_mendocino", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8, 4, 4, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 11,11, 5, 5, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 14,14, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 17,17, 8, 8, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 19,19, 9, 9, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 22,22,11,11, 32}, /* out of spec */ + {"300A", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 25,25,12,12, 36}, + {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, + {"366", CPU_PENTIUM2D, fpus_internal, 366666666, 5.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 33,33,17,17, 44}, + {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 6.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 36,36,12,12, 48}, + {"433", CPU_PENTIUM2D, fpus_internal, 433333333, 6.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 39,39,13,13, 51}, + {"466", CPU_PENTIUM2D, fpus_internal, 466666666, 7.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 42,42,14,14, 56}, + {"500", CPU_PENTIUM2D, fpus_internal, 500000000, 7.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 45,45,15,15, 60}, + {"533", CPU_PENTIUM2D, fpus_internal, 533333333, 8.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 48,48,17,17, 64}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET370, - .manufacturer = "VIA", - .name = "Cyrix III", - .internal_name = "c3_samuel", - .cpus = (const CPU[]) { - {"66", CPU_CYRIX3S, fpus_internal, 66666666, 1.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of multiplier range */ - {"100", CPU_CYRIX3S, fpus_internal, 100000000, 1.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of multiplier range */ - {"133", CPU_CYRIX3S, fpus_internal, 133333333, 2.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 12, 12, 6, 6, 16}, /* out of multiplier range */ - {"166", CPU_CYRIX3S, fpus_internal, 166666666, 2.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 15, 15, 7, 7, 20}, /* out of multiplier range */ - {"200", CPU_CYRIX3S, fpus_internal, 200000000, 3.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 18, 18, 8, 8, 24}, /* out of multiplier range */ - {"233", CPU_CYRIX3S, fpus_internal, 233333333, 3.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 21, 21, 9, 9, 28}, /* out of multiplier range */ - {"266", CPU_CYRIX3S, fpus_internal, 266666666, 4.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 24, 24, 12, 12, 32}, /* out of multiplier range */ - {"300", CPU_CYRIX3S, fpus_internal, 300000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 27, 27, 13, 13, 36}, /* out of spec */ - {"333", CPU_CYRIX3S, fpus_internal, 333333333, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 30, 30, 15, 15, 40}, /* out of spec */ - {"366", CPU_CYRIX3S, fpus_internal, 366666666, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 33, 33, 16, 16, 44}, /* out of spec */ - {"400", CPU_CYRIX3S, fpus_internal, 400000000, 6.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 36, 36, 17, 17, 48}, - {"433", CPU_CYRIX3S, fpus_internal, 433333333, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 39, 39, 18, 18, 52}, /* out of spec */ - {"450", CPU_CYRIX3S, fpus_internal, 450000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 41, 41, 14, 14, 54}, - {"466", CPU_CYRIX3S, fpus_internal, 466666666, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 42, 42, 14, 14, 56}, /* out of spec */ - {"500", CPU_CYRIX3S, fpus_internal, 500000000, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 45, 45, 15, 15, 60}, - {"533", CPU_CYRIX3S, fpus_internal, 533333333, 8.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 48, 48, 15, 15, 64}, /* out of spec */ - {"550", CPU_CYRIX3S, fpus_internal, 550000000, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 50, 50, 17, 17, 66}, - {"600/100", CPU_CYRIX3S, fpus_internal, 600000000, 6.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 18, 18, 72}, - {"600/133", CPU_CYRIX3S, fpus_internal, 600000000, 4.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 13, 13, 72}, - {"650", CPU_CYRIX3S, fpus_internal, 650000000, 6.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 58, 58, 20, 20, 78}, - {"667", CPU_CYRIX3S, fpus_internal, 666666667, 5.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 60, 60, 16, 16, 80}, - {"700", CPU_CYRIX3S, fpus_internal, 700000000, 7.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 63, 63, 21, 21, 84}, - {"733", CPU_CYRIX3S, fpus_internal, 733333333, 5.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 66, 66, 18, 18, 88}, - {"", 0} - } + .package = CPU_PKG_SOCKET370, + .manufacturer = "VIA", + .name = "Cyrix III", + .internal_name = "c3_samuel", + .cpus = (const CPU[]) { + {"66", CPU_CYRIX3S, fpus_internal, 66666666, 1.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of multiplier range */ + {"100", CPU_CYRIX3S, fpus_internal, 100000000, 1.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of multiplier range */ + {"133", CPU_CYRIX3S, fpus_internal, 133333333, 2.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 12, 12, 6, 6, 16}, /* out of multiplier range */ + {"166", CPU_CYRIX3S, fpus_internal, 166666666, 2.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 15, 15, 7, 7, 20}, /* out of multiplier range */ + {"200", CPU_CYRIX3S, fpus_internal, 200000000, 3.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 18, 18, 8, 8, 24}, /* out of multiplier range */ + {"233", CPU_CYRIX3S, fpus_internal, 233333333, 3.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 21, 21, 9, 9, 28}, /* out of multiplier range */ + {"266", CPU_CYRIX3S, fpus_internal, 266666666, 4.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 24, 24, 12, 12, 32}, /* out of multiplier range */ + {"300", CPU_CYRIX3S, fpus_internal, 300000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 27, 27, 13, 13, 36}, /* out of spec */ + {"333", CPU_CYRIX3S, fpus_internal, 333333333, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 30, 30, 15, 15, 40}, /* out of spec */ + {"366", CPU_CYRIX3S, fpus_internal, 366666666, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 33, 33, 16, 16, 44}, /* out of spec */ + {"400", CPU_CYRIX3S, fpus_internal, 400000000, 6.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 36, 36, 17, 17, 48}, + {"433", CPU_CYRIX3S, fpus_internal, 433333333, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 39, 39, 18, 18, 52}, /* out of spec */ + {"450", CPU_CYRIX3S, fpus_internal, 450000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 41, 41, 14, 14, 54}, + {"466", CPU_CYRIX3S, fpus_internal, 466666666, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 42, 42, 14, 14, 56}, /* out of spec */ + {"500", CPU_CYRIX3S, fpus_internal, 500000000, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 45, 45, 15, 15, 60}, + {"533", CPU_CYRIX3S, fpus_internal, 533333333, 8.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 48, 48, 15, 15, 64}, /* out of spec */ + {"550", CPU_CYRIX3S, fpus_internal, 550000000, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 50, 50, 17, 17, 66}, + {"600/100", CPU_CYRIX3S, fpus_internal, 600000000, 6.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 18, 18, 72}, + {"600/133", CPU_CYRIX3S, fpus_internal, 600000000, 4.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 13, 13, 72}, + {"650", CPU_CYRIX3S, fpus_internal, 650000000, 6.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 58, 58, 20, 20, 78}, + {"667", CPU_CYRIX3S, fpus_internal, 666666667, 5.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 60, 60, 16, 16, 80}, + {"700", CPU_CYRIX3S, fpus_internal, 700000000, 7.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 63, 63, 21, 21, 84}, + {"733", CPU_CYRIX3S, fpus_internal, 733333333, 5.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 66, 66, 18, 18, 88}, + {"", 0} + } }, { - .package = 0, + .package = 0, } // clang-format on }; diff --git a/src/device/keyboard_at.c b/src/device/keyboard_at.c index 542be0a24..3f5e8e4be 100644 --- a/src/device/keyboard_at.c +++ b/src/device/keyboard_at.c @@ -1291,8 +1291,8 @@ write64_generic(void *priv, uint8_t val) } else { if (((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) && ((dev->flags & KBC_VEN_MASK) != KBC_VEN_INTEL_AMI)) #if 0 - add_to_kbc_queue_front(dev, (dev->input_port | fixed_bits) & - (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0xeb : 0xef), 0, 0x00); + add_to_kbc_queue_front(dev, (dev->input_port | fixed_bits) & + (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0xeb : 0xef), 0, 0x00); #else add_to_kbc_queue_front(dev, ((dev->input_port | fixed_bits) & 0xf0) | (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0x08 : 0x0c), 0, 0x00); #endif diff --git a/src/device/keyboard_xt.c b/src/device/keyboard_xt.c index f6d02a4d4..7c484af0d 100644 --- a/src/device/keyboard_xt.c +++ b/src/device/keyboard_xt.c @@ -126,219 +126,219 @@ const scancode scancode_xt[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*054*/ + { {0}, {0} }, { {0}, {0} }, /*054*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x1c, 0}, {0x9c, 0} }, { {0x1d, 0}, {0x9d, 0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x35, 0}, {0xb5, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x38, 0}, {0xb8, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ { {0x48, 0}, {0xc8, 0} }, { {0x49, 0}, {0xc9, 0} }, - { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ + { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ { {0}, {0} }, { {0x4d, 0}, {0xcd, 0} }, - { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ + { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, - { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ + { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*158*/ + { {0}, {0} }, { {0}, {0} }, /*158*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*15c*/ + { {0}, {0} }, { {0}, {0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*88*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; diff --git a/src/device/mouse_bus.c b/src/device/mouse_bus.c index 802ae6d45..73104cc4a 100644 --- a/src/device/mouse_bus.c +++ b/src/device/mouse_bus.c @@ -317,14 +317,14 @@ lt_write(uint16_t port, uint8_t val, void *priv) * This indicates the mode of operation of D7: * 1 = Mode set, 0 = Bit set/reset * D6,D5 = Mode selection (port A) - * 00 = Mode 0 = Basic I/O - * 01 = Mode 1 = Strobed I/O - * 10 = Mode 2 = Bi-dir bus + * 00 = Mode 0 = Basic I/O + * 01 = Mode 1 = Strobed I/O + * 10 = Mode 2 = Bi-dir bus * D4 = Port A direction (1 = input) * D3 = Port C (upper 4 bits) direction. (1 = input) * D2 = Mode selection (port B & C) - * 0 = Mode 0 = Basic I/O - * 1 = Mode 1 = Strobed I/O + * 0 = Mode 0 = Basic I/O + * 1 = Mode 1 = Strobed I/O * D1 = Port B direction (1 = input) * D0 = Port C (lower 4 bits) direction. (1 = input) * @@ -333,8 +333,8 @@ lt_write(uint16_t port, uint8_t val, void *priv) * being an output port and lower 4 bits an input port, and * enable the sucker. Courtesy Intel 8255 databook. Lars * - * 1001 1011 9B 1111 Default state - * 1001 0001 91 1001 Driver-initialized state + * 1001 1011 9B 1111 Default state + * 1001 0001 91 1001 Driver-initialized state * The only difference is - port C upper and port B go from * input to output. */ diff --git a/src/device/mouse_ps2.c b/src/device/mouse_ps2.c index e7670b2fc..42e2211b9 100644 --- a/src/device/mouse_ps2.c +++ b/src/device/mouse_ps2.c @@ -270,7 +270,7 @@ ps2_poll(int x, int y, int z, int b, void *priv) #if 0 if (!(dev->flags & FLAG_ENABLED)) - return(0xff); + return(0xff); #endif if (!mouse_scan) diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index 2f544cfb9..062f0fde5 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -537,7 +537,7 @@ ide_hd_identify(ide_t *ide) /* Bit 0 = The fields reported in words 54-58 are valid; Bit 1 = The fields reported in words 64-70 are valid; - Bit 2 = The fields reported in word 88 are valid. */ + Bit 2 = The fields reported in word 88 are valid. */ ide->buffer[53] = 1; if (ide->cfg_spt != 0) { @@ -1946,12 +1946,12 @@ ide_readb(uint16_t addr, void *priv) Direction: To device if set; From device if clear. - IO DRQ CoD - 0 1 1 Ready to accept command packet - 1 1 1 Message - ready to send message to host - 1 1 0 Data to host - 0 1 0 Data from host - 1 0 1 Status. */ + IO DRQ CoD + 0 1 1 Ready to accept command packet + 1 1 1 Message - ready to send message to host + 1 1 0 Data to host + 0 1 0 Data from host + 1 0 1 Status. */ case 0x2: /* Sector count */ if (ide->type == IDE_ATAPI) temp = ide->sc->phase; diff --git a/src/disk/hdc_st506_xt.c b/src/disk/hdc_st506_xt.c index 88bf8c2c9..c7b62f127 100644 --- a/src/disk/hdc_st506_xt.c +++ b/src/disk/hdc_st506_xt.c @@ -180,28 +180,28 @@ #define ERR_CRC_FAIL 0x32 /* CRC circuit failed test */ /* Controller commands. */ -#define CMD_TEST_DRIVE_READY 0x00 -#define CMD_RECALIBRATE 0x01 -/* reserved 0x02 */ -#define CMD_STATUS 0x03 -#define CMD_FORMAT_DRIVE 0x04 -#define CMD_VERIFY 0x05 -#define CMD_FORMAT_TRACK 0x06 -#define CMD_FORMAT_BAD_TRACK 0x07 -#define CMD_READ 0x08 -#define CMD_REASSIGN 0x09 -#define CMD_WRITE 0x0a -#define CMD_SEEK 0x0b -#define CMD_SPECIFY 0x0c -#define CMD_READ_ECC_BURST_LEN 0x0d -#define CMD_READ_BUFFER 0x0e -#define CMD_WRITE_BUFFER 0x0f -#define CMD_ALT_TRACK 0x11 -#define CMD_INQUIRY_ST11 0x12 /* ST-11 BIOS */ -#define CMD_V86P_POWEROFF 0x1a /* Victor V86P */ -#define CMD_RAM_DIAGNOSTIC 0xe0 -/* reserved 0xe1 */ -/* reserved 0xe2 */ +#define CMD_TEST_DRIVE_READY 0x00 +#define CMD_RECALIBRATE 0x01 +/* reserved 0x02 */ +#define CMD_STATUS 0x03 +#define CMD_FORMAT_DRIVE 0x04 +#define CMD_VERIFY 0x05 +#define CMD_FORMAT_TRACK 0x06 +#define CMD_FORMAT_BAD_TRACK 0x07 +#define CMD_READ 0x08 +#define CMD_REASSIGN 0x09 +#define CMD_WRITE 0x0a +#define CMD_SEEK 0x0b +#define CMD_SPECIFY 0x0c +#define CMD_READ_ECC_BURST_LEN 0x0d +#define CMD_READ_BUFFER 0x0e +#define CMD_WRITE_BUFFER 0x0f +#define CMD_ALT_TRACK 0x11 +#define CMD_INQUIRY_ST11 0x12 /* ST-11 BIOS */ +#define CMD_V86P_POWEROFF 0x1a /* Victor V86P */ +#define CMD_RAM_DIAGNOSTIC 0xe0 +/* reserved 0xe1 */ +/* reserved 0xe2 */ #define CMD_DRIVE_DIAGNOSTIC 0xe3 #define CMD_CTRLR_DIAGNOSTIC 0xe4 #define CMD_READ_LONG 0xe5 @@ -295,19 +295,19 @@ typedef struct { hd_type_t hd_types[4] = { // clang-format off - { 306, 4, MFM_SECTORS}, /* type 0 */ - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 615, 4, MFM_SECTORS}, /* type 2 */ - { 306, 8, MFM_SECTORS} /* type 13 */ + { 306, 4, MFM_SECTORS}, /* type 0 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 615, 4, MFM_SECTORS}, /* type 2 */ + { 306, 8, MFM_SECTORS} /* type 13 */ // clang-format on }; hd_type_t hd_types_olivetti[16] = { // clang-format off { 697, 5, MFM_SECTORS}, - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 306, 4, MFM_SECTORS}, /* type 0 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 306, 4, MFM_SECTORS}, /* type 0 */ { 612, 8, MFM_SECTORS}, { 820, 6, MFM_SECTORS}, { 820, 6, MFM_SECTORS}, @@ -317,8 +317,8 @@ hd_type_t hd_types_olivetti[16] = { {1024, 8, MFM_SECTORS}, {1024, 9, MFM_SECTORS}, { 872, 5, MFM_SECTORS}, - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 612, 4, MFM_SECTORS}, /* type 16 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ { 306, 4, MFM_SECTORS} /* "not present" with the second hard disk */ // clang-format on }; @@ -375,10 +375,10 @@ get_sector(hdc_t *dev, drive_t *drive, off64_t *addr) #if 0 if (drive->cylinder != dev->cylinder) { # ifdef ENABLE_ST506_XT_LOG - st506_xt_log("ST506: get_sector: wrong cylinder\n"); + st506_xt_log("ST506: get_sector: wrong cylinder\n"); # endif - dev->error = ERR_ILLEGAL_ADDR; - return(0); + dev->error = ERR_ILLEGAL_ADDR; + return(0); } #endif @@ -653,7 +653,7 @@ st506_callback(void *priv) } case CMD_READ: #if 0 - case CMD_READ_LONG: + case CMD_READ_LONG: #endif switch (dev->state) { case STATE_START_COMMAND: @@ -749,7 +749,7 @@ st506_callback(void *priv) } case CMD_WRITE: #if 0 - case CMD_WRITE_LONG: + case CMD_WRITE_LONG: #endif switch (dev->state) { case STATE_START_COMMAND: diff --git a/src/disk/zip.c b/src/disk/zip.c index 959a5fbbe..c79f5d3d6 100644 --- a/src/disk/zip.c +++ b/src/disk/zip.c @@ -199,7 +199,8 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_default = { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, + { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index 2abc4a8f5..1f81f025e 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -637,7 +637,7 @@ fdc_io_command_phase1(fdc_t *fdc, int out) pclog_toggle_suppr(); pclog("%02X ", fdc->processed_cmd); for (i = 0; i < fdc->pnum; i++) - pclog("%02X ", fdc->params[i]); + pclog("%02X ", fdc->params[i]); pclog("\n"); pclog_toggle_suppr(); #endif @@ -1329,9 +1329,9 @@ fdc_read(uint16_t addr, void *priv) * fdc_t on one of the motherboard's support chips. * * Confirmed: 00=1.44M 3.5 - * 10=2.88M 3.5 - * 20=1.2M 5.25 - * 30=1.2M 5.25 + * 10=2.88M 3.5 + * 20=1.2M 5.25 + * 30=1.2M 5.25 * * as reported by Configur.exe. */ diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index a6ccb6da5..06b949ffb 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -40,17 +40,17 @@ #include <86box/fdc.h> /* Flags: - Bit 0: 300 rpm supported; - Bit 1: 360 rpm supported; - Bit 2: size (0 = 3.5", 1 = 5.25"); - Bit 3: sides (0 = 1, 1 = 2); - Bit 4: double density supported; - Bit 5: high density supported; - Bit 6: extended density supported; - Bit 7: double step for 40-track media; - Bit 8: invert DENSEL polarity; - Bit 9: ignore DENSEL; - Bit 10: drive is a PS/2 drive; + Bit 0: 300 rpm supported; + Bit 1: 360 rpm supported; + Bit 2: size (0 = 3.5", 1 = 5.25"); + Bit 3: sides (0 = 1, 1 = 2); + Bit 4: double density supported; + Bit 5: high density supported; + Bit 6: extended density supported; + Bit 7: double step for 40-track media; + Bit 8: invert DENSEL polarity; + Bit 9: ignore DENSEL; + Bit 10: drive is a PS/2 drive; */ #define FLAG_RPM_300 1 #define FLAG_RPM_360 2 @@ -146,49 +146,49 @@ static const struct } drive_types[] = { { /*None*/ - 0, 0, "None", "none" + 0, 0, "None", "none" }, { /*5.25" 1DD*/ - 43, FLAG_RPM_300 | FLAG_525 | FLAG_HOLE0, "5.25\" 180k", "525_1dd" + 43, FLAG_RPM_300 | FLAG_525 | FLAG_HOLE0, "5.25\" 180k", "525_1dd" }, { /*5.25" DD*/ - 43, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0, "5.25\" 360k", "525_2dd" + 43, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0, "5.25\" 360k", "525_2dd" }, { /*5.25" QD*/ - 86, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "5.25\" 720k", "525_2qd" + 86, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "5.25\" 720k", "525_2qd" }, { /*5.25" HD PS/2*/ - 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "5.25\" 1.2M PS/2", "525_2hd_ps2" + 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "5.25\" 1.2M PS/2", "525_2hd_ps2" }, { /*5.25" HD*/ - 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M", "525_2hd" + 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M", "525_2hd" }, { /*5.25" HD Dual RPM*/ - 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M 300/360 RPM", "525_2hd_dualrpm" + 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M 300/360 RPM", "525_2hd_dualrpm" }, { /*3.5" 1DD*/ - 86, FLAG_RPM_300 | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 360k", "35_1dd" + 86, FLAG_RPM_300 | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 360k", "35_1dd" }, { /*3.5" DD*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 720k", "35_2dd" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 720k", "35_2dd" }, { /*3.5" HD PS/2*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "3.5\" 1.44M PS/2", "35_2hd_ps2" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "3.5\" 1.44M PS/2", "35_2hd_ps2" }, { /*3.5" HD*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M", "35_2hd" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M", "35_2hd" }, { /*3.5" HD PC-98*/ - 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL, "3.5\" 1.25M PC-98", "35_2hd_nec" + 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL, "3.5\" 1.25M PC-98", "35_2hd_nec" }, { /*3.5" HD 3-Mode*/ - 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M 300/360 RPM", "35_2hd_3mode" + 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M 300/360 RPM", "35_2hd_3mode" }, { /*3.5" ED*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2 | FLAG_DOUBLE_STEP, "3.5\" 2.88M", "35_2ed" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2 | FLAG_DOUBLE_STEP, "3.5\" 2.88M", "35_2ed" }, { /*End of list*/ - -1, -1, "", "" + -1, -1, "", "" } }; diff --git a/src/floppy/fdd_86f.c b/src/floppy/fdd_86f.c index 7509dd3a5..0267cfe81 100644 --- a/src/floppy/fdd_86f.c +++ b/src/floppy/fdd_86f.c @@ -155,23 +155,23 @@ typedef struct { } sector_t; /* Disk flags: - * Bit 0 Has surface data (1 = yes, 0 = no) - * Bits 2, 1 Hole (3 = ED + 2000 kbps, 2 = ED, 1 = HD, 0 = DD) - * Bit 3 Sides (1 = 2 sides, 0 = 1 side) - * Bit 4 Write protect (1 = yes, 0 = no) - * Bits 6, 5 RPM slowdown (3 = 2%, 2 = 1.5%, 1 = 1%, 0 = 0%) - * Bit 7 Bitcell mode (1 = Extra bitcells count specified after - * disk flags, 0 = No extra bitcells) - * The maximum number of extra bitcells is 1024 (which - * after decoding translates to 64 bytes) - * Bit 8 Disk type (1 = Zoned, 0 = Fixed RPM) - * Bits 10, 9 Zone type (3 = Commodore 64 zoned, 2 = Apple zoned, - * 1 = Pre-Apple zoned #2, 0 = Pre-Apple zoned #1) - * Bit 11 Data and surface bits are stored in reverse byte endianness - * Bit 12 If bits 6, 5 are not 0, they specify % of speedup instead - * of slowdown; - * If bits 6, 5 are 0, and bit 7 is 1, the extra bitcell count - * specifies the entire bitcell count + * Bit 0 Has surface data (1 = yes, 0 = no) + * Bits 2, 1 Hole (3 = ED + 2000 kbps, 2 = ED, 1 = HD, 0 = DD) + * Bit 3 Sides (1 = 2 sides, 0 = 1 side) + * Bit 4 Write protect (1 = yes, 0 = no) + * Bits 6, 5 RPM slowdown (3 = 2%, 2 = 1.5%, 1 = 1%, 0 = 0%) + * Bit 7 Bitcell mode (1 = Extra bitcells count specified after + * disk flags, 0 = No extra bitcells) + * The maximum number of extra bitcells is 1024 (which + * after decoding translates to 64 bytes) + * Bit 8 Disk type (1 = Zoned, 0 = Fixed RPM) + * Bits 10, 9 Zone type (3 = Commodore 64 zoned, 2 = Apple zoned, + * 1 = Pre-Apple zoned #2, 0 = Pre-Apple zoned #1) + * Bit 11 Data and surface bits are stored in reverse byte endianness + * Bit 12 If bits 6, 5 are not 0, they specify % of speedup instead + * of slowdown; + * If bits 6, 5 are 0, and bit 7 is 1, the extra bitcell count + * specifies the entire bitcell count */ typedef struct { FILE *f; @@ -2732,14 +2732,14 @@ d86f_prepare_sector(int drive, int side, int prev_pos, uint8_t *id_buf, uint8_t * ((track << 1) + 1); * * - Any bits that differ are treated as thus: - * - Both are regular but contents differ -> Output is fuzzy; - * - One is regular and one is fuzzy -> Output is fuzzy; - * - Both are fuzzy -> Output is fuzzy; - * - Both are physical holes -> Output is a physical hole; - * - One is regular and one is a physical hole -> Output is fuzzy, - * the hole half is handled appropriately on writeback; - * - One is fuzzy and one is a physical hole -> Output is fuzzy, - * the hole half is handled appropriately on writeback; + * - Both are regular but contents differ -> Output is fuzzy; + * - One is regular and one is fuzzy -> Output is fuzzy; + * - Both are fuzzy -> Output is fuzzy; + * - Both are physical holes -> Output is a physical hole; + * - One is regular and one is a physical hole -> Output is fuzzy, + * the hole half is handled appropriately on writeback; + * - One is fuzzy and one is a physical hole -> Output is fuzzy, + * the hole half is handled appropriately on writeback; * - On write back, apart from the above notes, the final two tracks * are written; * - Destination ALWAYS has surface data even if the image does not. diff --git a/src/floppy/fdd_common.c b/src/floppy/fdd_common.c index 28dea0735..9c1f98c39 100644 --- a/src/floppy/fdd_common.c +++ b/src/floppy/fdd_common.c @@ -48,14 +48,14 @@ const double fdd_bit_rates_300[6] = { * single-RPM drive by setting the rate to 300 kbps. */ const uint8_t fdd_max_sectors[8][6] = { - { 26, 31, 38, 53, 64, 118 }, /* 128 */ - { 15, 19, 23, 32, 38, 73 }, /* 256 */ - { 7, 10, 12, 17, 22, 41 }, /* 512 */ - { 3, 5, 6, 9, 11, 22 }, /* 1024 */ - { 2, 2, 3, 4, 5, 11 }, /* 2048 */ - { 1, 1, 1, 2, 2, 5 }, /* 4096 */ - { 0, 0, 0, 1, 1, 3 }, /* 8192 */ - { 0, 0, 0, 0, 0, 1 } /* 16384 */ + { 26, 31, 38, 53, 64, 118 }, /* 128 */ + { 15, 19, 23, 32, 38, 73 }, /* 256 */ + { 7, 10, 12, 17, 22, 41 }, /* 512 */ + { 3, 5, 6, 9, 11, 22 }, /* 1024 */ + { 2, 2, 3, 4, 5, 11 }, /* 2048 */ + { 1, 1, 1, 2, 2, 5 }, /* 4096 */ + { 0, 0, 0, 1, 1, 3 }, /* 8192 */ + { 0, 0, 0, 0, 0, 1 } /* 16384 */ }; const uint8_t fdd_dmf_r[21] = { @@ -63,285 +63,290 @@ const uint8_t fdd_dmf_r[21] = { }; static const uint8_t fdd_gap3_sizes[5][8][48] = { - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][1] */ - 0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][1] */ + 0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][2] */ - 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][2] */ + 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x83,0x26,0x00,0x00,0x00,0x00, /* [0][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x83,0x26,0x00,0x00,0x00,0x00, /* [0][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][1] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][1] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x54,0x1C,0x0E,0x00,0x00, /* [1][2] */ - 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x54,0x1C,0x0E,0x00,0x00, /* [1][2] */ + 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x06, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x06, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x32,0x0C,0x00,0x00,0x00,0x36, /* [2][1] */ - 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x32,0x0C,0x00,0x00,0x00,0x36, /* [2][1] */ + 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x58,0x50,0x2E,0x00,0x00,0x00,0x00,0x00, /* [2][2] */ - 0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x58,0x50,0x2E,0x00,0x00,0x00,0x00,0x00, /* [2][2] */ + 0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0xF0,0x74,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0xF0,0x74,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][1] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][1] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][2] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x53,0x4E,0x3D,0x2C, - 0x1C,0x0D,0x02,0x00,0x00,0x00,0x01,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][2] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x53,0x4E,0x3D,0x2C, + 0x1C,0x0D,0x02,0x00,0x00,0x00,0x01,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][3] */ - 0x00,0x00,0xF7,0xAF,0x6F,0x55,0x1F,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][3] */ + 0x00,0x00,0xF7,0xAF,0x6F,0x55,0x1F,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][1] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][1] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x54, /* [4][2] */ - 0x38,0x23,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x54, /* [4][2] */ + 0x38,0x23,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x74,0x24,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x74,0x24,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } } }; diff --git a/src/floppy/fdd_fdi.c b/src/floppy/fdd_fdi.c index 5d09d8df2..2a1ef5ba4 100644 --- a/src/floppy/fdd_fdi.c +++ b/src/floppy/fdd_fdi.c @@ -298,7 +298,7 @@ fdi_seek(int drive, int track) #if 0 if (track > dev->lasttrack) - track = dev->lasttrack - 1; + track = dev->lasttrack - 1; #endif dev->track = track; diff --git a/src/floppy/fdd_img.c b/src/floppy/fdd_img.c index e0847c010..f7bad2922 100644 --- a/src/floppy/fdd_img.c +++ b/src/floppy/fdd_img.c @@ -66,21 +66,21 @@ typedef struct { } img_t; -static img_t *img[FDD_NUM]; -static fdc_t *img_fdc; +static img_t *img[FDD_NUM]; +static fdc_t *img_fdc; -static double bit_rate_300; -static char *ext; -static uint8_t first_byte, - second_byte, - third_byte, - fourth_byte; -static uint8_t fdf_suppress_final_byte = 0; /* This is hard-coded to 0 - - * if you really need to read - * those NT 3.1 Beta floppy - * images, change this to 1 - * and recompile. - */ +static double bit_rate_300; +static char *ext; +static uint8_t first_byte, + second_byte, + third_byte, + fourth_byte; +static uint8_t fdf_suppress_final_byte = 0; /* This is hard-coded to 0 - + * if you really need to read + * those NT 3.1 Beta floppy + * images, change this to 1 + * and recompile. + */ const uint8_t dmf_r[21] = { 12, 2, 13, 3, 14, 4, 15, 5, 16, 6, 17, 7, 18, 8, 19, 9, 20, 10, 21, 11, 1 }; @@ -90,197 +90,230 @@ const uint8_t xdf_gap3_sizes[2][2] = { { 60, 69 }, { 60, 50 } }; const uint16_t xdf_trackx_spos[2][8] = { { 0xA7F, 0xF02, 0x11B7, 0xB66, 0xE1B, 0x129E }, { 0x302, 0x7E2, 0xA52, 0x12DA, 0x572, 0xDFA, 0x106A, 0x154A } }; /* XDF: Layout of the sectors in the image. */ -const xdf_sector_t xdf_img_layout[2][2][46] = { { { {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, - {0x8101}, {0x8201}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, {0x0500}, {0x0600}, - {0x0700}, {0x0800}, { 0}, - {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, {0x8A01}, - {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, {0x9001}, { 0}, { 0}, - { 0}, { 0}, { 0} }, - { {0x8300}, {0x8600}, {0x8201}, {0x8200}, {0x8601}, {0x8301} } - }, /* 5.25" 2HD */ - { { {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, - {0x8900}, {0x8A00}, {0x8B00}, {0x8101}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, - {0x0500}, {0x0600}, {0x0700}, {0x0800}, { 0}, { 0}, { 0}, - {0x8201}, {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, - {0x8A01}, {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, { 0}, { 0}, - { 0}, { 0}, { 0}, {0x9001}, {0x9101}, {0x9201}, {0x9301} }, - { {0x8300}, {0x8400}, {0x8601}, {0x8200}, {0x8201}, {0x8600}, {0x8401}, {0x8301} } - } /* 3.5" 2HD */ - }; +const xdf_sector_t xdf_img_layout[2][2][46] = { + { + { + {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, + {0x8101}, {0x8201}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, {0x0500}, {0x0600}, + {0x0700}, {0x0800}, { 0}, + {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, {0x8A01}, + {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, {0x9001}, { 0}, { 0}, + { 0}, { 0}, { 0} + }, + { {0x8300}, {0x8600}, {0x8201}, {0x8200}, {0x8601}, {0x8301} } + }, /* 5.25" 2HD */ + { + { + {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, + {0x8900}, {0x8A00}, {0x8B00}, {0x8101}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, + {0x0500}, {0x0600}, {0x0700}, {0x0800}, { 0}, { 0}, { 0}, + {0x8201}, {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, + {0x8A01}, {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, { 0}, { 0}, + { 0}, { 0}, { 0}, {0x9001}, {0x9101}, {0x9201}, {0x9301} + }, + { {0x8300}, {0x8400}, {0x8601}, {0x8200}, {0x8201}, {0x8600}, {0x8401}, {0x8301} } + } /* 3.5" 2HD */ +}; /* XDF: Layout of the sectors on the disk's track. */ -const xdf_sector_t xdf_disk_layout[2][2][38] = { { { {0x0100}, {0x0200}, {0x8100}, {0x8800}, {0x8200}, {0x0300}, {0x8300}, {0x0400}, - {0x8400}, {0x0500}, {0x8500}, {0x0600}, {0x8600}, {0x0700}, {0x8700}, {0x0800}, - {0x8D01}, {0x8501}, {0x8E01}, {0x8601}, {0x8F01}, {0x8701}, {0x9001}, {0x8801}, - {0x8101}, {0x8901}, {0x8201}, {0x8A01}, {0x8301}, {0x8B01}, {0x8401}, {0x8C01} }, - { {0x8300}, {0x8200}, {0x8600}, {0x8201}, {0x8301}, {0x8601} } - }, /* 5.25" 2HD */ - { { {0x0100}, {0x8A00}, {0x8100}, {0x8B00}, {0x8200}, {0x0200}, {0x8300}, {0x0300}, - {0x8400}, {0x0400}, {0x8500}, {0x0500}, {0x8600}, {0x0600}, {0x8700}, {0x0700}, - {0x8800}, {0x0800}, {0x8900}, - {0x9001}, {0x8701}, {0x9101}, {0x8801}, {0x9201}, {0x8901}, {0x9301}, {0x8A01}, - {0x8101}, {0x8B01}, {0x8201}, {0x8C01}, {0x8301}, {0x8D01}, {0x8401}, {0x8E01}, - {0x8501}, {0x8F01}, {0x8601} }, - { {0x8300}, {0x8200}, {0x8400}, {0x8600}, {0x8401}, {0x8201}, {0x8301}, {0x8601} }, - }, /* 3.5" 2HD */ - }; +const xdf_sector_t xdf_disk_layout[2][2][38] = { + { + { + {0x0100}, {0x0200}, {0x8100}, {0x8800}, {0x8200}, {0x0300}, {0x8300}, {0x0400}, + {0x8400}, {0x0500}, {0x8500}, {0x0600}, {0x8600}, {0x0700}, {0x8700}, {0x0800}, + {0x8D01}, {0x8501}, {0x8E01}, {0x8601}, {0x8F01}, {0x8701}, {0x9001}, {0x8801}, + {0x8101}, {0x8901}, {0x8201}, {0x8A01}, {0x8301}, {0x8B01}, {0x8401}, {0x8C01} + }, + { {0x8300}, {0x8200}, {0x8600}, {0x8201}, {0x8301}, {0x8601} } + }, /* 5.25" 2HD */ + { + { + {0x0100}, {0x8A00}, {0x8100}, {0x8B00}, {0x8200}, {0x0200}, {0x8300}, {0x0300}, + {0x8400}, {0x0400}, {0x8500}, {0x0500}, {0x8600}, {0x0600}, {0x8700}, {0x0700}, + {0x8800}, {0x0800}, {0x8900}, + {0x9001}, {0x8701}, {0x9101}, {0x8801}, {0x9201}, {0x8901}, {0x9301}, {0x8A01}, + {0x8101}, {0x8B01}, {0x8201}, {0x8C01}, {0x8301}, {0x8D01}, {0x8401}, {0x8E01}, + {0x8501}, {0x8F01}, {0x8601} + }, + { {0x8300}, {0x8200}, {0x8400}, {0x8600}, {0x8401}, {0x8201}, {0x8301}, {0x8601} }, + }, /* 3.5" 2HD */ +}; /* First dimension is possible sector sizes (0 = 128, 7 = 16384), second is possible bit rates (250/360, 250, 300, 500/360, 500, 1000). */ /* Disks formatted at 250 kbps @ 360 RPM can be read with a 360 RPM single-RPM 5.25" drive by setting the rate to 250 kbps. Disks formatted at 300 kbps @ 300 RPM can be read with any 300 RPM single-RPM drive by setting the rate rate to 300 kbps. */ -static const uint8_t maximum_sectors[8][6] = { { 26, 31, 38, 53, 64, 118 }, /* 128 */ - { 15, 19, 23, 32, 38, 73 }, /* 256 */ - { 7, 10, 12, 17, 22, 41 }, /* 512 */ - { 3, 5, 6, 9, 11, 22 }, /* 1024 */ - { 2, 2, 3, 4, 5, 11 }, /* 2048 */ - { 1, 1, 1, 2, 2, 5 }, /* 4096 */ - { 0, 0, 0, 1, 1, 3 }, /* 8192 */ - { 0, 0, 0, 0, 0, 1 } }; /* 16384 */ +static const uint8_t maximum_sectors[8][6] = { + { 26, 31, 38, 53, 64, 118 }, /* 128 */ + { 15, 19, 23, 32, 38, 73 }, /* 256 */ + { 7, 10, 12, 17, 22, 41 }, /* 512 */ + { 3, 5, 6, 9, 11, 22 }, /* 1024 */ + { 2, 2, 3, 4, 5, 11 }, /* 2048 */ + { 1, 1, 1, 2, 2, 5 }, /* 4096 */ + { 0, 0, 0, 1, 1, 3 }, /* 8192 */ + { 0, 0, 0, 0, 0, 1 } /* 16384 */ +}; -static const uint8_t xdf_sectors[8][6] = { { 0, 0, 0, 0, 0, 0 }, /* 128 */ - { 0, 0, 0, 0, 0, 0 }, /* 256 */ - { 0, 0, 0, 19, 23, 0 }, /* 512 */ - { 0, 0, 0, 0, 0, 0 }, /* 1024 */ - { 0, 0, 0, 0, 0, 0 }, /* 2048 */ - { 0, 0, 0, 0, 0, 0 }, /* 4096 */ - { 0, 0, 0, 0, 0, 0 }, /* 8192 */ - { 0, 0, 0, 0, 0, 0 } }; /* 16384 */ +static const uint8_t xdf_sectors[8][6] = { + { 0, 0, 0, 0, 0, 0 }, /* 128 */ + { 0, 0, 0, 0, 0, 0 }, /* 256 */ + { 0, 0, 0, 19, 23, 0 }, /* 512 */ + { 0, 0, 0, 0, 0, 0 }, /* 1024 */ + { 0, 0, 0, 0, 0, 0 }, /* 2048 */ + { 0, 0, 0, 0, 0, 0 }, /* 4096 */ + { 0, 0, 0, 0, 0, 0 }, /* 8192 */ + { 0, 0, 0, 0, 0, 0 } /* 16384 */ +}; -static const uint8_t xdf_types[8][6] = { { 0, 0, 0, 0, 0, 0 }, /* 128 */ - { 0, 0, 0, 0, 0, 0 }, /* 256 */ - { 0, 0, 0, 1, 2, 0 }, /* 512 */ - { 0, 0, 0, 0, 0, 0 }, /* 1024 */ - { 0, 0, 0, 0, 0, 0 }, /* 2048 */ - { 0, 0, 0, 0, 0, 0 }, /* 4096 */ - { 0, 0, 0, 0, 0, 0 }, /* 8192 */ - { 0, 0, 0, 0, 0, 0 } }; /* 16384 */ +static const uint8_t xdf_types[8][6] = { + { 0, 0, 0, 0, 0, 0 }, /* 128 */ + { 0, 0, 0, 0, 0, 0 }, /* 256 */ + { 0, 0, 0, 1, 2, 0 }, /* 512 */ + { 0, 0, 0, 0, 0, 0 }, /* 1024 */ + { 0, 0, 0, 0, 0, 0 }, /* 2048 */ + { 0, 0, 0, 0, 0, 0 }, /* 4096 */ + { 0, 0, 0, 0, 0, 0 }, /* 8192 */ + { 0, 0, 0, 0, 0, 0 } /* 16384 */ +}; -static const double bit_rates_300[6] = { (250.0 * 300.0) / 360.0, 250.0, 300.0, (500.0 * 300.0) / 360.0, 500.0, 1000.0 }; +static const double bit_rates_300[6] = { (250.0 * 300.0) / 360.0, 250.0, 300.0, (500.0 * 300.0) / 360.0, 500.0, 1000.0 }; -static const uint8_t rates[6] = { 2, 2, 1, 4, 0, 3 }; +static const uint8_t rates[6] = { 2, 2, 1, 4, 0, 3 }; -static const uint8_t holes[6] = { 0, 0, 0, 1, 1, 2 }; +static const uint8_t holes[6] = { 0, 0, 0, 1, 1, 2 }; -const int gap3_sizes[5][8][48] = { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][1] */ - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][2] */ - 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x26, 0x00, 0x00, 0x00, 0x00, /* [0][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][1] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x1C, 0x0E, 0x00, 0x00, /* [1][2] */ - 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0C, 0x00, 0x00, 0x00, 0x36, /* [2][1] */ - 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x50, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][2] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0xF0, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][1] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][2] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x53, 0x4E, 0x3D, 0x2C, 0x1C, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][3] */ - 0x00, 0x00, 0xF7, 0xAF, 0x6F, 0x55, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][1] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x54, /* [4][2] */ - 0x38, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }; +const int gap3_sizes[5][8][48] = { + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][1] */ + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][2] */ + 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x26, 0x00, 0x00, 0x00, 0x00, /* [0][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][1] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x1C, 0x0E, 0x00, 0x00, /* [1][2] */ + 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0C, 0x00, 0x00, 0x00, 0x36, /* [2][1] */ + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x50, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][2] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0xF0, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][1] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][2] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x4E, 0x3D, 0x2C, 0x1C, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][3] */ + 0x00, 0x00, 0xF7, 0xAF, 0x6F, 0x55, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][1] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x54, /* [4][2] */ + 0x38, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + } +}; #ifdef ENABLE_IMG_LOG int img_do_log = ENABLE_IMG_LOG; @@ -856,8 +889,8 @@ img_load(int drive, char *fn) fseek(dev->f, 0x03, SEEK_SET); (void) !fread(&bpb_bps, 1, 2, dev->f); #if 0 - fseek(dev->f, 0x0B, SEEK_SET); - (void) !fread(&bpb_total, 1, 2, dev->f); + fseek(dev->f, 0x0B, SEEK_SET); + (void) !fread(&bpb_total, 1, 2, dev->f); #endif fseek(dev->f, 0x10, SEEK_SET); bpb_sectors = fgetc(dev->f); @@ -958,13 +991,13 @@ jump_if_fdf: img_log("BPB reports %i sides and %i bytes per sector (%i sectors total)\n", bpb_sides, bpb_bps, bpb_total); - /* Invalid conditions: */ - guess = (bpb_sides < 1); /* Sides < 1; */ - guess = guess || (bpb_sides > 2); /* Sides > 2; */ - guess = guess || !bps_is_valid(bpb_bps); /* Invalid number of bytes per sector; */ - guess = guess || !first_byte_is_valid(first_byte); /* Invalid first bytes; */ - guess = guess || !is_divisible(bpb_total, bpb_sectors); /* Total sectors not divisible by sectors per track; */ - guess = guess || !is_divisible(bpb_total, bpb_sides); /* Total sectors not divisible by sides. */ + /* Invalid conditions: */ + guess = (bpb_sides < 1); /* Sides < 1; */ + guess = guess || (bpb_sides > 2); /* Sides > 2; */ + guess = guess || !bps_is_valid(bpb_bps); /* Invalid number of bytes per sector; */ + guess = guess || !first_byte_is_valid(first_byte); /* Invalid first bytes; */ + guess = guess || !is_divisible(bpb_total, bpb_sectors); /* Total sectors not divisible by sectors per track; */ + guess = guess || !is_divisible(bpb_total, bpb_sides); /* Total sectors not divisible by sides. */ guess = guess || !fdd_get_check_bpb(drive); guess = guess && !fdi; guess = guess && !cqm; @@ -1069,10 +1102,10 @@ jump_if_fdf: dev->sectors = 42; dev->tracks = 80; #if 0 - } else if (size <= 3440640) { /*HD 1024 sector*/ - dev->sectors = 21; - dev->tracks = 80; - dev->sector_size = 3; + } else if (size <= 3440640) { /*HD 1024 sector*/ + dev->sectors = 21; + dev->tracks = 80; + dev->sector_size = 3; #endif } else if (size <= 3604480) { /*HD 1024 sector*/ dev->sectors = 22; diff --git a/src/floppy/fdd_td0.c b/src/floppy/fdd_td0.c index 4b478baba..bf2b643ff 100644 --- a/src/floppy/fdd_td0.c +++ b/src/floppy/fdd_td0.c @@ -668,27 +668,27 @@ td0_initialize(int drive) * from the CMOS. */ switch (header[6]) { - case 0: /* 5.25" 360k in 1.2M drive: 360 rpm + case 0: /* 5.25" 360k in 1.2M drive: 360 rpm CMOS Drive type: None, value probably reused by Teledisk */ - case 2: /* 5.25" 1.2M 360 rpm */ - case 5: /* 8"/5.25"/3.5" 1.25M 360 rpm */ + case 2: /* 5.25" 1.2M: 360 rpm */ + case 5: /* 8"/5.25"/3.5" 1.25M: 360 rpm */ dev->default_track_flags = (density == 1) ? 0x20 : 0x21; dev->max_sector_size = (density == 1) ? 6 : 5; /* 8192 or 4096 bytes. */ break; - case 1: /* 5.25" 360k: 300 rpm */ - case 3: /* 3.5" 720k: 300 rpm */ + case 1: /* 5.25" 360k: 300 rpm */ + case 3: /* 3.5" 720k: 300 rpm */ dev->default_track_flags = 0x02; dev->max_sector_size = 5; /* 4096 bytes. */ break; - case 4: /* 3.5" 1.44M: 300 rpm */ + case 4: /* 3.5" 1.44M: 300 rpm */ dev->default_track_flags = (density == 1) ? 0x00 : 0x02; dev->max_sector_size = (density == 1) ? 6 : 5; /* 8192 or 4096 bytes. */ break; - case 6: /* 3.5" 2.88M: 300 rpm */ + case 6: /* 3.5" 2.88M: 300 rpm */ dev->default_track_flags = (density == 1) ? 0x00 : ((density == 2) ? 0x03 : 0x02); dev->max_sector_size = (density == 1) ? 6 : ((density == 2) ? 7 : 5); /* 16384, 8192, or 4096 bytes. */ break; diff --git a/src/floppy/fdi2raw.c b/src/floppy/fdi2raw.c index b367db5c1..92d299caf 100644 --- a/src/floppy/fdi2raw.c +++ b/src/floppy/fdi2raw.c @@ -363,7 +363,7 @@ zxx(FDI *fdi) #if 0 static void zyy (FDI *fdi) { - fdi2raw_log("track %d: unsupported track type 0x%02.2X\n", fdi->current_track, fdi->track_type); + fdi2raw_log("track %d: unsupported track type 0x%02.2X\n", fdi->current_track, fdi->track_type); } #endif /* empty track */ @@ -676,157 +676,157 @@ s0d(FDI *fdi) #if 0 static int amiga_check_track (FDI *fdi) { - int i, j, secwritten = 0; - int fwlen = fdi->out / 8; - int length = 2 * fwlen; - int drvsec = 11; - uae_u32 odd, even, chksum, id, dlong; - uae_u8 *secdata; - uae_u8 secbuf[544]; - uae_u8 bigmfmbuf[60000]; - uae_u8 *mbuf, *mbuf2, *mend; - char sectable[22]; - uae_u8 *raw = fdi->track_dst_buffer; - int slabel, off; - int ok = 1; + int i, j, secwritten = 0; + int fwlen = fdi->out / 8; + int length = 2 * fwlen; + int drvsec = 11; + uae_u32 odd, even, chksum, id, dlong; + uae_u8 *secdata; + uae_u8 secbuf[544]; + uae_u8 bigmfmbuf[60000]; + uae_u8 *mbuf, *mbuf2, *mend; + char sectable[22]; + uae_u8 *raw = fdi->track_dst_buffer; + int slabel, off; + int ok = 1; - memset (bigmfmbuf, 0, sizeof (bigmfmbuf)); - mbuf = bigmfmbuf; - check_offset = 0; - for (i = 0; i < (fdi->out + 7) / 8; i++) - *mbuf++ = raw[i]; - off = fdi->out & 7; + memset (bigmfmbuf, 0, sizeof (bigmfmbuf)); + mbuf = bigmfmbuf; + check_offset = 0; + for (i = 0; i < (fdi->out + 7) / 8; i++) + *mbuf++ = raw[i]; + off = fdi->out & 7; # if 1 - if (off > 0) { - mbuf--; - *mbuf &= ~((1 << (8 - off)) - 1); - } - j = 0; - while (i < (fdi->out + 7) / 8 + 600) { - *mbuf++ |= (raw[j] >> off) | ((raw[j + 1]) << (8 - off)); - j++; - i++; - } + if (off > 0) { + mbuf--; + *mbuf &= ~((1 << (8 - off)) - 1); + } + j = 0; + while (i < (fdi->out + 7) / 8 + 600) { + *mbuf++ |= (raw[j] >> off) | ((raw[j + 1]) << (8 - off)); + j++; + i++; + } # endif - mbuf = bigmfmbuf; + mbuf = bigmfmbuf; - memset (sectable, 0, sizeof (sectable)); - mend = bigmfmbuf + length; - mend -= (4 + 16 + 8 + 512); + memset (sectable, 0, sizeof (sectable)); + mend = bigmfmbuf + length; + mend -= (4 + 16 + 8 + 512); - while (secwritten < drvsec) { - int trackoffs; + while (secwritten < drvsec) { + int trackoffs; - for (;;) { - rotateonebit (bigmfmbuf, mend, 1); - if (getmfmword (mbuf) == 0) - break; - if (secwritten == 10) { - mbuf[0] = 0x44; - mbuf[1] = 0x89; - } - if (check_offset > 7) { - check_offset = 0; - mbuf++; - if (mbuf >= mend || *mbuf == 0) - break; - } - if (getmfmword (mbuf) == 0x4489) - break; - } - if (mbuf >= mend || *mbuf == 0) - break; + for (;;) { + rotateonebit (bigmfmbuf, mend, 1); + if (getmfmword (mbuf) == 0) + break; + if (secwritten == 10) { + mbuf[0] = 0x44; + mbuf[1] = 0x89; + } + if (check_offset > 7) { + check_offset = 0; + mbuf++; + if (mbuf >= mend || *mbuf == 0) + break; + } + if (getmfmword (mbuf) == 0x4489) + break; + } + if (mbuf >= mend || *mbuf == 0) + break; - rotateonebit (bigmfmbuf, mend, check_offset); - check_offset = 0; + rotateonebit (bigmfmbuf, mend, check_offset); + check_offset = 0; - while (getmfmword (mbuf) == 0x4489) - mbuf+= 1 * 2; - mbuf2 = mbuf + 8; + while (getmfmword (mbuf) == 0x4489) + mbuf+= 1 * 2; + mbuf2 = mbuf + 8; - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 2 * 2); - mbuf += 4 * 2; - id = (odd << 1) | even; + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 2 * 2); + mbuf += 4 * 2; + id = (odd << 1) | even; - trackoffs = (id & 0xff00) >> 8; - if (trackoffs + 1 > drvsec) { - fdi2raw_log("illegal sector offset %d\n",trackoffs); - ok = 0; - mbuf = mbuf2; - continue; - } - if ((id >> 24) != 0xff) { - fdi2raw_log("sector %d format type %02.2X?\n", trackoffs, id >> 24); - ok = 0; - } - chksum = odd ^ even; - slabel = 0; - for (i = 0; i < 4; i++) { - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 8 * 2); - mbuf += 2* 2; + trackoffs = (id & 0xff00) >> 8; + if (trackoffs + 1 > drvsec) { + fdi2raw_log("illegal sector offset %d\n",trackoffs); + ok = 0; + mbuf = mbuf2; + continue; + } + if ((id >> 24) != 0xff) { + fdi2raw_log("sector %d format type %02.2X?\n", trackoffs, id >> 24); + ok = 0; + } + chksum = odd ^ even; + slabel = 0; + for (i = 0; i < 4; i++) { + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 8 * 2); + mbuf += 2* 2; - dlong = (odd << 1) | even; - if (dlong) slabel = 1; - chksum ^= odd ^ even; - } - mbuf += 8 * 2; - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 2 * 2); - mbuf += 4 * 2; - if (((odd << 1) | even) != chksum) { - fdi2raw_log("sector %d header crc error\n", trackoffs); - ok = 0; - mbuf = mbuf2; - continue; - } - fdi2raw_log("sector %d header crc ok\n", trackoffs); - if (((id & 0x00ff0000) >> 16) != (uae_u32)fdi->current_track) { - fdi2raw_log("illegal track number %d <> %d\n",fdi->current_track,(id & 0x00ff0000) >> 16); - ok++; - mbuf = mbuf2; - continue; - } - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 2 * 2); - mbuf += 4 * 2; - chksum = (odd << 1) | even; - secdata = secbuf + 32; - for (i = 0; i < 128; i++) { - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 256 * 2); - mbuf += 2 * 2; - dlong = (odd << 1) | even; - *secdata++ = (uae_u8) (dlong >> 24); - *secdata++ = (uae_u8) (dlong >> 16); - *secdata++ = (uae_u8) (dlong >> 8); - *secdata++ = (uae_u8) dlong; - chksum ^= odd ^ even; - } - mbuf += 256 * 2; - if (chksum) { - fdi2raw_log("sector %d data checksum error\n",trackoffs); - ok = 0; - } else if (sectable[trackoffs]) { - fdi2raw_log("sector %d already found?\n", trackoffs); - mbuf = mbuf2; - } else { - fdi2raw_log("sector %d ok\n",trackoffs); - if (slabel) fdi2raw_log("(non-empty sector header)\n"); - sectable[trackoffs] = 1; - secwritten++; - if (trackoffs == 9) - mbuf += 0x228; - } - } - for (i = 0; i < drvsec; i++) { - if (!sectable[i]) { - fdi2raw_log("sector %d missing\n", i); - ok = 0; - } - } - return ok; + dlong = (odd << 1) | even; + if (dlong) slabel = 1; + chksum ^= odd ^ even; + } + mbuf += 8 * 2; + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 2 * 2); + mbuf += 4 * 2; + if (((odd << 1) | even) != chksum) { + fdi2raw_log("sector %d header crc error\n", trackoffs); + ok = 0; + mbuf = mbuf2; + continue; + } + fdi2raw_log("sector %d header crc ok\n", trackoffs); + if (((id & 0x00ff0000) >> 16) != (uae_u32)fdi->current_track) { + fdi2raw_log("illegal track number %d <> %d\n",fdi->current_track,(id & 0x00ff0000) >> 16); + ok++; + mbuf = mbuf2; + continue; + } + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 2 * 2); + mbuf += 4 * 2; + chksum = (odd << 1) | even; + secdata = secbuf + 32; + for (i = 0; i < 128; i++) { + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 256 * 2); + mbuf += 2 * 2; + dlong = (odd << 1) | even; + *secdata++ = (uae_u8) (dlong >> 24); + *secdata++ = (uae_u8) (dlong >> 16); + *secdata++ = (uae_u8) (dlong >> 8); + *secdata++ = (uae_u8) dlong; + chksum ^= odd ^ even; + } + mbuf += 256 * 2; + if (chksum) { + fdi2raw_log("sector %d data checksum error\n",trackoffs); + ok = 0; + } else if (sectable[trackoffs]) { + fdi2raw_log("sector %d already found?\n", trackoffs); + mbuf = mbuf2; + } else { + fdi2raw_log("sector %d ok\n",trackoffs); + if (slabel) fdi2raw_log("(non-empty sector header)\n"); + sectable[trackoffs] = 1; + secwritten++; + if (trackoffs == 9) + mbuf += 0x228; + } + } + for (i = 0; i < drvsec; i++) { + if (!sectable[i]) { + fdi2raw_log("sector %d missing\n", i); + ok = 0; + } + } + return ok; } #endif @@ -1538,126 +1538,126 @@ init_array(uint32_t standard_MFM_2_bit_cell_size, int nb_of_bits) static void fdi2_decode (FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 *maxp, uae_u8 *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) { - uint32_t adjust; - uint32_t adjusted_pulse; - uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000; - uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; - int real_size, i, j, eodat, outstep; - int indexoffset = *indexoffsetp; - uae_u8 *d = fdi->track_dst_buffer; - uae_u16 *pt = fdi->track_dst_buffer_timing; - uae_u32 ref_pulse, pulse; + uint32_t adjust; + uint32_t adjusted_pulse; + uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000; + uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; + int real_size, i, j, eodat, outstep; + int indexoffset = *indexoffsetp; + uae_u8 *d = fdi->track_dst_buffer; + uae_u16 *pt = fdi->track_dst_buffer_timing; + uae_u32 ref_pulse, pulse; - /* detects a long-enough stable pulse coming just after another stable pulse */ - i = 1; - while ( (i < pulses) && ( (idx[i] < maxidx) - || (idx[i - 1] < maxidx) - || (avgp[i] < (standard_MFM_2_bit_cell_size - (standard_MFM_2_bit_cell_size / 4))) ) ) - i++; - if (i == pulses) { - fdi2raw_log("No stable and long-enough pulse in track.\n"); - return; - } - i--; - eodat = i; - adjust = 0; - total = 0; - totaldiv = 0; - init_array(standard_MFM_2_bit_cell_size, 2); - bitoffset = 0; - ref_pulse = 0; - outstep = 0; - while (outstep < 2) { + /* detects a long-enough stable pulse coming just after another stable pulse */ + i = 1; + while ( (i < pulses) && ( (idx[i] < maxidx) + || (idx[i - 1] < maxidx) + || (avgp[i] < (standard_MFM_2_bit_cell_size - (standard_MFM_2_bit_cell_size / 4))) ) ) + i++; + if (i == pulses) { + fdi2raw_log("No stable and long-enough pulse in track.\n"); + return; + } + i--; + eodat = i; + adjust = 0; + total = 0; + totaldiv = 0; + init_array(standard_MFM_2_bit_cell_size, 2); + bitoffset = 0; + ref_pulse = 0; + outstep = 0; + while (outstep < 2) { - /* calculates the current average bitrate from previous decoded data */ - uae_u32 avg_size = (total << 3) / totaldiv; /* this is the new average size for one MFM bit */ - /* uae_u32 avg_size = (uae_u32)((((float)total)*8.0) / ((float)totaldiv)); */ - /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ - if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || - (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { - avg_size = standard_MFM_8_bit_cell_size; - } - /* this is to prevent the average value from going too far - * from the theoretical value, otherwise it could progressively go to (2 * - * real value), or (real value / 2), etc. */ + /* calculates the current average bitrate from previous decoded data */ + uae_u32 avg_size = (total << 3) / totaldiv; /* this is the new average size for one MFM bit */ + /* uae_u32 avg_size = (uae_u32)((((float)total)*8.0) / ((float)totaldiv)); */ + /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ + if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || + (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { + avg_size = standard_MFM_8_bit_cell_size; + } + /* this is to prevent the average value from going too far + * from the theoretical value, otherwise it could progressively go to (2 * + * real value), or (real value / 2), etc. */ - /* gets the next long-enough pulse (this may require more than one pulse) */ - pulse = 0; - while (pulse < ((avg_size / 4) - (avg_size / 16))) { - int indx; - i++; - if (i >= pulses) - i = 0; - indx = idx[i]; - if (rand() <= (indx * RAND_MAX) / maxidx) { - pulse += avgp[i] - ref_pulse; - if (indx >= maxidx) - ref_pulse = 0; - else - ref_pulse = avgp[i]; - } - if (i == eodat) - outstep++; - if (outstep == 1 && indexoffset == i) - *indexoffsetp = bitoffset; - } + /* gets the next long-enough pulse (this may require more than one pulse) */ + pulse = 0; + while (pulse < ((avg_size / 4) - (avg_size / 16))) { + int indx; + i++; + if (i >= pulses) + i = 0; + indx = idx[i]; + if (rand() <= (indx * RAND_MAX) / maxidx) { + pulse += avgp[i] - ref_pulse; + if (indx >= maxidx) + ref_pulse = 0; + else + ref_pulse = avgp[i]; + } + if (i == eodat) + outstep++; + if (outstep == 1 && indexoffset == i) + *indexoffsetp = bitoffset; + } - /* gets the size in bits from the pulse width, considering the current average bitrate */ - adjusted_pulse = pulse; - real_size = 0; - while (adjusted_pulse >= avg_size) { - real_size += 4; - adjusted_pulse -= avg_size / 2; - } - adjusted_pulse <<= 3; - while (adjusted_pulse >= ((avg_size * 4) + (avg_size / 4))) { - real_size += 2; - adjusted_pulse -= avg_size * 2; - } - if (adjusted_pulse >= ((avg_size * 3) + (avg_size / 4))) { - if (adjusted_pulse <= ((avg_size * 4) - (avg_size / 4))) { - if ((2 * ((adjusted_pulse >> 2) - adjust)) <= ((2 * avg_size) - (avg_size / 4))) - real_size += 3; - else - real_size += 4; - } else - real_size += 4; - } else { - if (adjusted_pulse > ((avg_size * 3) - (avg_size / 4))) { - real_size += 3; - } else { - if (adjusted_pulse >= ((avg_size * 2) + (avg_size / 4))) { - if ((2 * ((adjusted_pulse >> 2) - adjust)) < (avg_size + (avg_size / 4))) - real_size += 2; - else - real_size += 3; - } else - real_size += 2; - } - } + /* gets the size in bits from the pulse width, considering the current average bitrate */ + adjusted_pulse = pulse; + real_size = 0; + while (adjusted_pulse >= avg_size) { + real_size += 4; + adjusted_pulse -= avg_size / 2; + } + adjusted_pulse <<= 3; + while (adjusted_pulse >= ((avg_size * 4) + (avg_size / 4))) { + real_size += 2; + adjusted_pulse -= avg_size * 2; + } + if (adjusted_pulse >= ((avg_size * 3) + (avg_size / 4))) { + if (adjusted_pulse <= ((avg_size * 4) - (avg_size / 4))) { + if ((2 * ((adjusted_pulse >> 2) - adjust)) <= ((2 * avg_size) - (avg_size / 4))) + real_size += 3; + else + real_size += 4; + } else + real_size += 4; + } else { + if (adjusted_pulse > ((avg_size * 3) - (avg_size / 4))) { + real_size += 3; + } else { + if (adjusted_pulse >= ((avg_size * 2) + (avg_size / 4))) { + if ((2 * ((adjusted_pulse >> 2) - adjust)) < (avg_size + (avg_size / 4))) + real_size += 2; + else + real_size += 3; + } else + real_size += 2; + } + } - if (outstep == 1) { - for (j = real_size; j > 1; j--) - addbit (d, 0); - addbit (d, 1); - for (j = 0; j < real_size; j++) - *pt++ = (uae_u16)(pulse / real_size); - } + if (outstep == 1) { + for (j = real_size; j > 1; j--) + addbit (d, 0); + addbit (d, 1); + for (j = 0; j < real_size; j++) + *pt++ = (uae_u16)(pulse / real_size); + } - /* prepares for the next pulse */ - adjust = ((real_size * avg_size)/8) - pulse; - total -= psarray[array_index].size; - totaldiv -= psarray[array_index].number_of_bits; - psarray[array_index].size = pulse; - psarray[array_index].number_of_bits = real_size; - total += pulse; - totaldiv += real_size; - array_index++; - if (array_index >= FDI_MAX_ARRAY) - array_index = 0; - } + /* prepares for the next pulse */ + adjust = ((real_size * avg_size)/8) - pulse; + total -= psarray[array_index].size; + totaldiv -= psarray[array_index].number_of_bits; + psarray[array_index].size = pulse; + psarray[array_index].number_of_bits = real_size; + total += pulse; + totaldiv += real_size; + array_index++; + if (array_index >= FDI_MAX_ARRAY) + array_index = 0; + } - fdi->out = bitoffset; + fdi->out = bitoffset; } #else @@ -1704,7 +1704,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { avg_size = standard_MFM_8_bit_cell_size; } - /* this is to prevent the average value from going too far + /* this is to prevent the average value from going too far * from the theoretical value, otherwise it could progressively go to (2 * * real value), or (real value / 2), etc. */ diff --git a/src/include/86box/apm.h b/src/include/86box/apm.h index 2676fa198..854969f3d 100644 --- a/src/include/86box/apm.h +++ b/src/include/86box/apm.h @@ -1,18 +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 the Advanced Power Management emulation. + * Definitions for the Advanced Power Management emulation. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2019 Miran Grca. + * Copyright 2019 Miran Grca. */ #ifndef APM_H #define APM_H diff --git a/src/include/86box/bugger.h b/src/include/86box/bugger.h index b0a6a5469..57dabd172 100644 --- a/src/include/86box/bugger.h +++ b/src/include/86box/bugger.h @@ -1,25 +1,25 @@ /* - * 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. * - * Implementation of the ISA Bus (de)Bugger expansion card - * sold as a DIY kit in the late 1980's in The Netherlands. - * This card was a assemble-yourself 8bit ISA addon card for - * PC and AT systems that had several tools to aid in low- - * level debugging (mostly for faulty BIOSes, bootloaders - * and system kernels...) + * Implementation of the ISA Bus (de)Bugger expansion card + * sold as a DIY kit in the late 1980's in The Netherlands. + * This card was a assemble-yourself 8bit ISA addon card for + * PC and AT systems that had several tools to aid in low- + * level debugging (mostly for faulty BIOSes, bootloaders + * and system kernels...) * - * Definitions for the BUGGER card. + * Definitions for the BUGGER card. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 1989-2018 Fred N. van Kempen. + * Copyright 1989-2018 Fred N. van Kempen. */ #ifndef BUGGER_H #define BUGGER_H diff --git a/src/include/86box/cartridge.h b/src/include/86box/cartridge.h index c07fe1cfd..2fa0a9358 100644 --- a/src/include/86box/cartridge.h +++ b/src/include/86box/cartridge.h @@ -1,18 +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 the PCjr cartridge emulation. + * Definitions for the PCjr cartridge emulation. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2021 Miran Grca. + * Copyright 2021 Miran Grca. */ #ifndef EMU_CARTRIDGE_H #define EMU_CARTRIDGE_H diff --git a/src/include/86box/cdrom.h b/src/include/86box/cdrom.h index f5bfc9026..ad57b3bad 100644 --- a/src/include/86box/cdrom.h +++ b/src/include/86box/cdrom.h @@ -1,16 +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. * - * Generic CD-ROM drive core header. + * Generic CD-ROM drive core header. * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2019 Miran Grca. + * Copyright 2016-2019 Miran Grca. */ #ifndef EMU_CDROM_H #define EMU_CDROM_H diff --git a/src/include/86box/cdrom_image.h b/src/include/86box/cdrom_image.h index b43e8cee3..c848af50d 100644 --- a/src/include/86box/cdrom_image.h +++ b/src/include/86box/cdrom_image.h @@ -1,19 +1,19 @@ /* - * 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. * - * CD-ROM image file handling module header, translated to C - * from cdrom_dosbox.h. + * CD-ROM image file handling module header, translated to C + * from cdrom_dosbox.h. * - * Authors: RichardG, - * Miran Grca, + * Authors: RichardG, + * Miran Grca, * - * Copyright 2016-2022 RichardG. - * Copyright 2016-2022 Miran Grca. + * Copyright 2016-2022 RichardG. + * Copyright 2016-2022 Miran Grca. */ #ifndef CDROM_IMAGE_H #define CDROM_IMAGE_H diff --git a/src/include/86box/cdrom_image_backend.h b/src/include/86box/cdrom_image_backend.h index 2a581624d..511ca68eb 100644 --- a/src/include/86box/cdrom_image_backend.h +++ b/src/include/86box/cdrom_image_backend.h @@ -1,21 +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. + * 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. * - * CD-ROM image file handling module header , translated to C - * from cdrom_dosbox.h. + * CD-ROM image file handling module header , translated to C + * from cdrom_dosbox.h. * - * Authors: Miran Grca, - * Fred N. van Kempen, - * The DOSBox Team, + * Authors: Miran Grca, + * Fred N. van Kempen, + * The DOSBox Team, * - * Copyright 2016-2020 Miran Grca. - * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2002-2020 The DOSBox Team. + * Copyright 2016-2020 Miran Grca. + * Copyright 2017-2020 Fred N. van Kempen. + * Copyright 2002-2020 The DOSBox Team. */ #ifndef CDROM_IMAGE_BACKEND_H #define CDROM_IMAGE_BACKEND_H diff --git a/src/include/86box/cdrom_mitsumi.h b/src/include/86box/cdrom_mitsumi.h index 747668c5d..0b8a3a250 100644 --- a/src/include/86box/cdrom_mitsumi.h +++ b/src/include/86box/cdrom_mitsumi.h @@ -1,18 +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. * - * Mitsumi CD-ROM emulation for the ISA bus. + * Mitsumi CD-ROM emulation for the ISA bus. * * * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2022 Miran Grca. + * Copyright 2022 Miran Grca. */ #ifndef CDROM_MITSUMI_H #define CDROM_MITSUMI_H diff --git a/src/include/86box/clock.h b/src/include/86box/clock.h index 813c21af7..10155eabc 100644 --- a/src/include/86box/clock.h +++ b/src/include/86box/clock.h @@ -1,18 +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 clock generator chips. + * Definitions for clock generator chips. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #ifndef EMU_CLOCK_H #define EMU_CLOCK_H diff --git a/src/include/86box/ddma.h b/src/include/86box/ddma.h index 1f422ab65..ccc423d27 100644 --- a/src/include/86box/ddma.h +++ b/src/include/86box/ddma.h @@ -1,18 +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 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 DDMA_H #define DDMA_H diff --git a/src/include/86box/discord.h b/src/include/86box/discord.h index 9a1467e08..358c95c9b 100644 --- a/src/include/86box/discord.h +++ b/src/include/86box/discord.h @@ -1,18 +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 the Discord integration module. + * Definitions for the Discord integration module. * * * - * Authors: David Hrdlička, + * Authors: David Hrdlička, * - * Copyright 2019 David Hrdlička. + * Copyright 2019 David Hrdlička. */ #ifndef WIN_DISCORD_H #define WIN_DISCORD_H diff --git a/src/include/86box/fdc_ext.h b/src/include/86box/fdc_ext.h index 2287978c1..3dc518f81 100644 --- a/src/include/86box/fdc_ext.h +++ b/src/include/86box/fdc_ext.h @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the NEC uPD-765 and compatible floppy disk - * controller. + * Implementation of the NEC uPD-765 and compatible floppy disk + * controller. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. - * Copyright 2018-2020 Fred N. van Kempen. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. + * Copyright 2018-2020 Fred N. van Kempen. */ #ifndef EMU_FDC_EXT_H #define EMU_FDC_EXT_H diff --git a/src/include/86box/fdd_86f.h b/src/include/86box/fdd_86f.h index 88eeb035f..e20990b09 100644 --- a/src/include/86box/fdd_86f.h +++ b/src/include/86box/fdd_86f.h @@ -1,20 +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. + * 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 86F floppy image format. + * Definitions for the 86F floppy image format. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2018,2019 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_86F_H #define EMU_FLOPPY_86F_H diff --git a/src/include/86box/fdd_common.h b/src/include/86box/fdd_common.h index 9c6f8853c..9c10a4a9a 100644 --- a/src/include/86box/fdd_common.h +++ b/src/include/86box/fdd_common.h @@ -1,18 +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. * - * Shared code for all the floppy modules. + * Shared code for all the floppy modules. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef FDD_COMMON_H #define FDD_COMMON_H diff --git a/src/include/86box/fdd_fdi.h b/src/include/86box/fdd_fdi.h index b984a8154..4d4e551d6 100644 --- a/src/include/86box/fdd_fdi.h +++ b/src/include/86box/fdd_fdi.h @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the FDI floppy stream image format - * interface to the FDI2RAW module. + * Implementation of the FDI floppy stream image format + * interface to the FDI2RAW module. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 Fred N. van Kempen. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_FDI_H #define EMU_FLOPPY_FDI_H diff --git a/src/include/86box/fdd_imd.h b/src/include/86box/fdd_imd.h index 806304093..f50ad865e 100644 --- a/src/include/86box/fdd_imd.h +++ b/src/include/86box/fdd_imd.h @@ -1,20 +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. + * 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 IMD floppy image format. + * Definitions for the IMD floppy image format. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 Fred N. van Kempen. * * 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 diff --git a/src/include/86box/fdd_img.h b/src/include/86box/fdd_img.h index 7c36929c3..ec0e9df67 100644 --- a/src/include/86box/fdd_img.h +++ b/src/include/86box/fdd_img.h @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the raw sector-based floppy image format, - * as well as the Japanese FDI, CopyQM, and FDF formats. + * 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, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 Fred N. van Kempen. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_IMG_H #define EMU_FLOPPY_IMG_H diff --git a/src/include/86box/fdd_mfm.h b/src/include/86box/fdd_mfm.h index 36c6e6b8f..3a8494a26 100644 --- a/src/include/86box/fdd_mfm.h +++ b/src/include/86box/fdd_mfm.h @@ -1,18 +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. * - * Implementation of the HxC MFM image format. + * Implementation of the HxC MFM image format. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2018 Miran Grca. + * Copyright 2018 Miran Grca. */ #ifndef EMU_FLOPPY_MFM_H #define EMU_FLOPPY_MFM_H diff --git a/src/include/86box/fdd_td0.h b/src/include/86box/fdd_td0.h index 56ff8f3c8..06938c66a 100644 --- a/src/include/86box/fdd_td0.h +++ b/src/include/86box/fdd_td0.h @@ -1,20 +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. + * 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 Teledisk floppy image format. + * Definitions for the Teledisk floppy image format. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_TD0_H #define EMU_FLOPPY_TD0_H diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index 07a51edc4..66024867d 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -1,22 +1,22 @@ /* - * 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 generic game port handlers. + * Definitions for the generic game port handlers. * * * - * Authors: Miran Grca, - * Sarah Walker, - * RichardG, + * Authors: Miran Grca, + * Sarah Walker, + * RichardG, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2008-2018 Sarah Walker. - * Copyright 2021 RichardG. + * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2021 RichardG. */ #ifndef EMU_GAMEPORT_H #define EMU_GAMEPORT_H diff --git a/src/include/86box/hdc_ide.h b/src/include/86box/hdc_ide.h index da5fe1b32..c1143af5b 100644 --- a/src/include/86box/hdc_ide.h +++ b/src/include/86box/hdc_ide.h @@ -1,20 +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. + * 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. * - * Implementation of the IDE emulation for hard disks and ATAPI - * CD-ROM devices. + * Implementation of the IDE emulation for hard disks and ATAPI + * CD-ROM devices. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #ifndef EMU_IDE_H #define EMU_IDE_H diff --git a/src/include/86box/hdc_ide_sff8038i.h b/src/include/86box/hdc_ide_sff8038i.h index 5533319e1..277e9b25a 100644 --- a/src/include/86box/hdc_ide_sff8038i.h +++ b/src/include/86box/hdc_ide_sff8038i.h @@ -1,19 +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. + * 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. * - * Emulation of the SFF-8038i IDE Bus Master. + * This file is part of the 86Box distribution. * - * Emulation core dispatcher. + * Emulation of the SFF-8038i IDE Bus Master. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #ifndef EMU_HDC_IDE_SFF8038I_H diff --git a/src/include/86box/hdd.h b/src/include/86box/hdd.h index abb2aa388..c4b3b0328 100644 --- a/src/include/86box/hdd.h +++ b/src/include/86box/hdd.h @@ -1,19 +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. + * 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 hard disk image handler. + * Definitions for the hard disk image handler. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Authors: Miran Grca, + * Fred N. van Kempen, + * + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef EMU_HDD_H #define EMU_HDD_H diff --git a/src/include/86box/i2c.h b/src/include/86box/i2c.h index 071e57729..20e2f8b30 100644 --- a/src/include/86box/i2c.h +++ b/src/include/86box/i2c.h @@ -1,18 +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 the I2C handler. + * Definitions for the I2C handler. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #ifndef EMU_I2C_H #define EMU_I2C_H diff --git a/src/include/86box/i8080.h b/src/include/86box/i8080.h index 9f85a85c0..a3f3fba64 100644 --- a/src/include/86box/i8080.h +++ b/src/include/86box/i8080.h @@ -1,16 +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. * - * 8080 CPU emulation (header). + * 8080 CPU emulation (header). * - * Authors: Cacodemon345 * - * Copyright 2022 Cacodemon345 + * + * Authors: Cacodemon345 + * + * Copyright 2022 Cacodemon345 */ #include diff --git a/src/include/86box/ibm_5161.h b/src/include/86box/ibm_5161.h index 711773d6d..e189826a8 100644 --- a/src/include/86box/ibm_5161.h +++ b/src/include/86box/ibm_5161.h @@ -1,15 +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. * - * Emulation of the IBM Expansion Unit (5161). + * This file is part of the 86Box distribution. + * + * Emulation of the IBM Expansion Unit (5161). * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #ifndef EMU_IBM_5161_H diff --git a/src/include/86box/io.h b/src/include/86box/io.h index 7e7b45912..20b493e7f 100644 --- a/src/include/86box/io.h +++ b/src/include/86box/io.h @@ -1,21 +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. + * 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 I/O handler. + * Definitions for the I/O handler. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2008-2017 Sarah Walker. + * Copyright 2016,2017 Miran Grca. */ #ifndef EMU_IO_H #define EMU_IO_H diff --git a/src/include/86box/isapnp.h b/src/include/86box/isapnp.h index abf3eb10d..9fff876dc 100644 --- a/src/include/86box/isapnp.h +++ b/src/include/86box/isapnp.h @@ -1,18 +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 ISA Plug and Play. + * Definitions for ISA Plug and Play. * * * - * Author: RichardG, + * Authors: RichardG, * - * Copyright 2021 RichardG. + * Copyright 2021 RichardG. */ #ifndef EMU_ISAPNP_H diff --git a/src/include/86box/joystick_ch_flightstick_pro.h b/src/include/86box/joystick_ch_flightstick_pro.h index 5bdedede9..73e2d7c69 100644 --- a/src/include/86box/joystick_ch_flightstick_pro.h +++ b/src/include/86box/joystick_ch_flightstick_pro.h @@ -1,20 +1,20 @@ /* - * VARCem Virtual ARchaeological Computer EMulator. - * An emulator of (mostly) x86-based PC systems and devices, - * using the ISA,EISA,VLB,MCA and PCI system buses, roughly - * spanning the era between 1981 and 1995. + * 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 VARCem Project. + * This file is part of the 86Box distribution. * - * Definitions for the Flight Stick Pro driver. + * Definitions for the Flight Stick Pro driver. * * * - * Authors: Miran Grca, - * Sarah Walker, + * Authors: Miran Grca, + * Sarah Walker, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. * * 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 diff --git a/src/include/86box/joystick_sw_pad.h b/src/include/86box/joystick_sw_pad.h index d5aef7ccb..d22f337a8 100644 --- a/src/include/86box/joystick_sw_pad.h +++ b/src/include/86box/joystick_sw_pad.h @@ -6,7 +6,7 @@ * * This file is part of the 86Box distribution. * - * Definitions for the Sidewinder Pro driver. + * Definitions for the Sidewinder Pro driver. * * * diff --git a/src/include/86box/joystick_tm_fcs.h b/src/include/86box/joystick_tm_fcs.h index 74b3edd2e..2e875190e 100644 --- a/src/include/86box/joystick_tm_fcs.h +++ b/src/include/86box/joystick_tm_fcs.h @@ -6,7 +6,7 @@ * * This file is part of the 86Box distribution. * - * Definitions for the Flight Control System driver. + * Definitions for the Flight Control System driver. * * * diff --git a/src/include/86box/language.h b/src/include/86box/language.h index 90bfecc06..fbd1f6e2b 100644 --- a/src/include/86box/language.h +++ b/src/include/86box/language.h @@ -1,21 +1,19 @@ /* - * 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 language management module. - * - * NOTE: FIXME: Strings 2176 and 2193 are same. + * Definitions for the language management module. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. - * Copyright 2022 Jasmine Iwanek. + * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2022 Jasmine Iwanek. */ #ifndef LANG_UAGE_H diff --git a/src/include/86box/log.h b/src/include/86box/log.h index b736ef2b6..9d3568069 100644 --- a/src/include/86box/log.h +++ b/src/include/86box/log.h @@ -1,20 +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. + * 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. * - * Main include file for the application. + * Main include file for the application. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2021 Miran Grca. - * Copyright 2021 Fred N. van Kempen. + * Copyright 2021 Miran Grca. + * Copyright 2021 Fred N. van Kempen. */ #ifndef EMU_LOG_H diff --git a/src/include/86box/lpt.h b/src/include/86box/lpt.h index 87bd90d48..cb8fc7cc6 100644 --- a/src/include/86box/lpt.h +++ b/src/include/86box/lpt.h @@ -11,10 +11,10 @@ #define LPT4_ADDR 0x0268 #define LPT4_IRQ 5 /* -#define LPT5_ADDR 0x027c -#define LPT5_IRQ 7 -#define LPT6_ADDR 0x026c -#define LPT6_IRQ 5 +#define LPT5_ADDR 0x027c +#define LPT5_IRQ 7 +#define LPT6_ADDR 0x026c +#define LPT6_IRQ 5 */ typedef struct diff --git a/src/include/86box/m_amstrad.h b/src/include/86box/m_amstrad.h index 1b99617ca..5d0350703 100644 --- a/src/include/86box/m_amstrad.h +++ b/src/include/86box/m_amstrad.h @@ -1,20 +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. + * 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 of the emulation of the Amstrad series of PC's: - * PC1512, PC1640 and PC200, including their keyboard, mouse and - * video devices, as well as the PC2086 and PC3086 systems. + * Header of the emulation of the Amstrad series of PC's: + * PC1512, PC1640 and PC200, including their keyboard, mouse and + * video devices, as well as the PC2086 and PC3086 systems. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2019 Sarah Walker. + * Copyright 2008-2019 Sarah Walker. */ #ifndef MACHINE_AMSTRAD_H diff --git a/src/include/86box/mo.h b/src/include/86box/mo.h index ea22f8f29..19c999ee3 100644 --- a/src/include/86box/mo.h +++ b/src/include/86box/mo.h @@ -1,21 +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. + * 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. * - * Implementation of a generic Magneto-Optical Disk drive - * commands, for both ATAPI and SCSI usage. + * Implementation of a generic Magneto-Optical Disk drive + * commands, for both ATAPI and SCSI usage. * * * - * Authors: Natalia Portillo + * Authors: Natalia Portillo * Fred N. van Kempen, - * Miran Grca, + * Miran Grca, * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. */ #ifndef EMU_MO_H diff --git a/src/include/86box/mouse.h b/src/include/86box/mouse.h index aa046b81c..c260b3571 100644 --- a/src/include/86box/mouse.h +++ b/src/include/86box/mouse.h @@ -1,20 +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. + * 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 mouse driver. + * Definitions for the mouse driver. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. */ #ifndef EMU_MOUSE_H diff --git a/src/include/86box/net_3c501.h b/src/include/86box/net_3c501.h index e45f9a82a..996720f8f 100644 --- a/src/include/86box/net_3c501.h +++ b/src/include/86box/net_3c501.h @@ -1,22 +1,23 @@ /* - * 86Box An emulator of (mostly) x86-based PC systems and devices, - * using the ISA, EISA, VLB, MCA, and PCI system buses, - * roughly spanning the era between 1981 and 1995. + * 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 Project. + * This file is part of the 86Box Project. * - * Implementation of the following network controller: - * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). + * Implementation of the following network controller: + * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). * * * * Based on @(#)Dev3C501.cpp Oracle (VirtualBox) * - * Authors: TheCollector1995, - * Oracle + * Authors: TheCollector1995, + * Oracle * - * Copyright 2022 TheCollector1995. - * Portions Copyright (C) 2022 Oracle and/or its affilitates. + * Copyright 2022 TheCollector1995. + * Portions Copyright (C) 2022 Oracle and/or its affilitates. * * 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 diff --git a/src/include/86box/net_3c503.h b/src/include/86box/net_3c503.h index 147ae0f05..44024850f 100644 --- a/src/include/86box/net_3c503.h +++ b/src/include/86box/net_3c503.h @@ -1,3 +1,46 @@ +/* + * 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. + * + * Implementation of the following network controllers: + * - 3Com Etherlink II 3c503 (ISA 8-bit). + * + * + * + * Based on @(#)3c503.cpp Carl (MAME) + * + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, + * Carl, + * + * Copyright 2018 TheCollector1995. + * Copyright 2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. + * Portions Copyright (C) 2018 MAME Project + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the: + * + * Free Software Foundation, Inc. + * 59 Temple Place - Suite 330 + * Boston, MA 02111-1307 + * USA. + */ #ifndef NET_3C503_H #define NET_3C503_H diff --git a/src/include/86box/net_dp8390.h b/src/include/86box/net_dp8390.h index 7cb91d30a..4a172d4fe 100644 --- a/src/include/86box/net_dp8390.h +++ b/src/include/86box/net_dp8390.h @@ -1,20 +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. + * 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. * - * Header of the emulation of the DP8390 Network Interface - * Controller used by the WD family, NE1000/NE2000 family, and - * 3Com 3C503 NIC's. + * Header of the emulation of the DP8390 Network Interface + * Controller used by the WD family, NE1000/NE2000 family, and + * 3Com 3C503 NIC's. * * * - * Authors: Miran Grca, - * Bochs project, + * Authors: Miran Grca, + * Bochs project, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2008-2018 Bochs project. + * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Bochs project. */ #ifndef NET_DP8390_H diff --git a/src/include/86box/net_pcnet.h b/src/include/86box/net_pcnet.h index f1db74045..ccdc7e832 100644 --- a/src/include/86box/net_pcnet.h +++ b/src/include/86box/net_pcnet.h @@ -1,20 +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. + * 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. * - * Emulation of the AMD PCnet LANCE NIC controller for both the ISA - * and PCI buses. + * Emulation of the AMD PCnet LANCE NIC controller for both the ISA + * and PCI buses. * * * - * Authors: Miran Grca, - * TheCollector1995, - * Antony T Curtis + * Authors: Miran Grca, + * TheCollector1995, + * Antony T Curtis * - * Copyright 2004-2019 Antony T Curtis - * Copyright 2016-2019 Miran Grca. + * Copyright 2004-2019 Antony T Curtis + * Copyright 2016-2019 Miran Grca. */ #ifndef NET_PCNET_H diff --git a/src/include/86box/net_plip.h b/src/include/86box/net_plip.h index 890de3fd0..83c33e4c6 100644 --- a/src/include/86box/net_plip.h +++ b/src/include/86box/net_plip.h @@ -1,17 +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 the PLIP parallel port network device. + * Definitions for the PLIP parallel port network device. * * * - * Author: RichardG, - * Copyright 2020 RichardG. + * Authors: RichardG, + * + * Copyright 2020 RichardG. */ #ifndef NET_PLIP_H diff --git a/src/include/86box/net_wd8003.h b/src/include/86box/net_wd8003.h index ee313c1a9..deb4ce7b8 100644 --- a/src/include/86box/net_wd8003.h +++ b/src/include/86box/net_wd8003.h @@ -1,26 +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. * - * Implementation of the following network controllers: - * - SMC/WD 8003E (ISA 8-bit); - * - SMC/WD 8013EBT (ISA 16-bit); - * - SMC/WD 8013EP/A (MCA). + * Implementation of the following network controllers: + * - SMC/WD 8003E (ISA 8-bit); + * - SMC/WD 8013EBT (ISA 16-bit); + * - SMC/WD 8013EP/A (MCA). * * * - * Authors: Fred N. van Kempen, - * TheCollector1995, - * Miran Grca, - * Peter Grehan, + * Authors: Fred N. van Kempen, + * TheCollector1995, + * Miran Grca, + * Peter Grehan, * - * Copyright 2017,2018 Fred N. van Kempen. - * Copyright 2016-2018 Miran Grca. - * Portions Copyright (C) 2002 MandrakeSoft S.A. + * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Portions Copyright (C) 2002 MandrakeSoft S.A. * * 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 diff --git a/src/include/86box/pic.h b/src/include/86box/pic.h index d1295be4b..318ce2fad 100644 --- a/src/include/86box/pic.h +++ b/src/include/86box/pic.h @@ -1,19 +1,19 @@ /* - * 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 of the implementation of the Intel PIC chip emulation, - * partially ported from reenigne's XTCE. + * Header of the implementation of the Intel PIC chip emulation, + * partially ported from reenigne's XTCE. * - * Authors: Andrew Jenner, - * Miran Grca, + * Authors: Andrew Jenner, + * Miran Grca, * - * Copyright 2015-2020 Andrew Jenner. - * Copyright 2016-2020 Miran Grca. + * Copyright 2015-2020 Andrew Jenner. + * Copyright 2016-2020 Miran Grca. */ #ifndef EMU_PIC_H diff --git a/src/include/86box/pit.h b/src/include/86box/pit.h index f6eb4cc6d..292844d4f 100644 --- a/src/include/86box/pit.h +++ b/src/include/86box/pit.h @@ -1,18 +1,19 @@ /* - * 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 of the implementation of the Intel 8253/8254 - * Programmable Interval Timer. + * Header of the implementation of the Intel 8253/8254 + * Programmable Interval Timer. * * * - * Author: Miran Grca, - * Copyright 2019,2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2019,2020 Miran Grca. */ #ifndef EMU_PIT_H diff --git a/src/include/86box/pit_fast.h b/src/include/86box/pit_fast.h index 317b8f13e..b306e63ec 100644 --- a/src/include/86box/pit_fast.h +++ b/src/include/86box/pit_fast.h @@ -1,18 +1,19 @@ /* - * 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 of the implementation of the Intel 8253/8254 - * Programmable Interval Timer. + * Header of the implementation of the Intel 8253/8254 + * Programmable Interval Timer. * * * - * Author: Miran Grca, - * Copyright 2019,2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2019,2020 Miran Grca. */ #ifndef EMU_PIT_FAST_H diff --git a/src/include/86box/plat_dir.h b/src/include/86box/plat_dir.h index 74caac23f..f6c135001 100644 --- a/src/include/86box/plat_dir.h +++ b/src/include/86box/plat_dir.h @@ -1,17 +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 the platform OpenDir module. + * Definitions for the platform OpenDir module. * * * - * Author: Fred N. van Kempen, - * Copyright 2017 Fred N. van Kempen. + * Authors: Fred N. van Kempen, + * + * Copyright 2017 Fred N. van Kempen. */ #ifndef PLAT_DIR_H diff --git a/src/include/86box/plat_dynld.h b/src/include/86box/plat_dynld.h index 6e20f6e27..986e72424 100644 --- a/src/include/86box/plat_dynld.h +++ b/src/include/86box/plat_dynld.h @@ -1,17 +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. * - * Define the Dynamic Module Loader interface. + * Define the Dynamic Module Loader interface. * * * - * Author: Fred N. van Kempen, - * Copyright 2017 Fred N. van Kempen + * Authors: Fred N. van Kempen, + * + * Copyright 2017 Fred N. van Kempen */ #ifndef PLAT_DYNLD_H diff --git a/src/include/86box/port_6x.h b/src/include/86box/port_6x.h index 927a15efa..7eb0c9a56 100644 --- a/src/include/86box/port_6x.h +++ b/src/include/86box/port_6x.h @@ -1,19 +1,19 @@ /* - * 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 the implementation of Port 6x used by various - * machines. + * Header for the implementation of Port 6x used by various + * machines. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2021 Miran Grca. + * Copyright 2021 Miran Grca. */ #ifndef EMU_PORT_6X_H diff --git a/src/include/86box/port_92.h b/src/include/86box/port_92.h index 4d5aa031c..319b2b3ac 100644 --- a/src/include/86box/port_92.h +++ b/src/include/86box/port_92.h @@ -1,19 +1,19 @@ /* - * 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 the implementation of Port 92 used by PS/2 - * machines and 386+ clones. + * Header for the implementation of Port 92 used by PS/2 + * machines and 386+ clones. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2019 Miran Grca. + * Copyright 2019 Miran Grca. */ #ifndef EMU_PORT_92_H diff --git a/src/include/86box/postcard.h b/src/include/86box/postcard.h index 0db2d6187..5ceb64ae3 100644 --- a/src/include/86box/postcard.h +++ b/src/include/86box/postcard.h @@ -1,18 +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. * - * Implementation of a port 80h POST diagnostic card. + * Implementation of a port 80h POST diagnostic card. * * * - * Author: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #ifndef POSTCARD_H diff --git a/src/include/86box/random.h b/src/include/86box/random.h index 089a49c4a..1c3124d53 100644 --- a/src/include/86box/random.h +++ b/src/include/86box/random.h @@ -1,18 +1,19 @@ /* - * 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. * - * A better random number generation, used for floppy weak bits - * and network MAC address generation. + * A better random number generation, used for floppy weak bits + * and network MAC address generation. * * * - * Author: Miran Grca, - * Copyright 2016,2017 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016,2017 Miran Grca. */ #ifndef EMU_RANDOM_H diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h index dc54b504f..81c182980 100644 --- a/src/include/86box/resource.h +++ b/src/include/86box/resource.h @@ -1,24 +1,24 @@ /* - * 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. * - * Windows resource defines. + * Windows resource defines. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * David Hrdlička, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * David Hrdlička, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 David Hrdlička. - * Copyright 2021-2022 Jasmine Iwanek. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2018,2019 David Hrdlička. + * Copyright 2021-2022 Jasmine Iwanek. */ #ifndef WIN_RESOURCE_H diff --git a/src/include/86box/rom.h b/src/include/86box/rom.h index 82a1aef5f..e581e0744 100644 --- a/src/include/86box/rom.h +++ b/src/include/86box/rom.h @@ -1,17 +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. * - * Definitions for the ROM image handler. + * Definitions for the ROM image handler. * * * - * Author: Fred N. van Kempen, - * Copyright 2018,2019 Fred N. van Kempen. + * Authors: Fred N. van Kempen, + * Copyright 2018,2019 Fred N. van Kempen. */ #ifndef EMU_ROM_H diff --git a/src/include/86box/scsi.h b/src/include/86box/scsi.h index 93a7fd010..ce641712b 100644 --- a/src/include/86box/scsi.h +++ b/src/include/86box/scsi.h @@ -1,22 +1,22 @@ /* - * 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. * - * SCSI controller handler header. + * SCSI controller handler header. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Fred N. van Kempen, + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 TheCollector1995. - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 TheCollector1995. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef EMU_SCSI_H #define EMU_SCSI_H diff --git a/src/include/86box/scsi_buslogic.h b/src/include/86box/scsi_buslogic.h index be865ec57..021c4fa97 100644 --- a/src/include/86box/scsi_buslogic.h +++ b/src/include/86box/scsi_buslogic.h @@ -1,19 +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. + * 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. * - * Emulation of BusLogic BT-542B ISA and BT-958D PCI SCSI - * controllers. + * Emulation of BusLogic BT-542B ISA and BT-958D PCI SCSI + * controllers. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Fred N. van Kempen, - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, + * + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef SCSI_BUSLOGIC_H diff --git a/src/include/86box/scsi_cdrom.h b/src/include/86box/scsi_cdrom.h index e991ccc36..97ebb39bc 100644 --- a/src/include/86box/scsi_cdrom.h +++ b/src/include/86box/scsi_cdrom.h @@ -1,19 +1,19 @@ /* - * 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. * - * Implementation of the CD-ROM drive with SCSI(-like) - * commands, for both ATAPI and SCSI usage. + * Implementation of the CD-ROM drive with SCSI(-like) + * commands, for both ATAPI and SCSI usage. * * * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2018,2019 Miran Grca. + * Copyright 2018,2019 Miran Grca. */ #ifndef EMU_SCSI_CDROM_H diff --git a/src/include/86box/scsi_device.h b/src/include/86box/scsi_device.h index 650215cb5..70cfef69a 100644 --- a/src/include/86box/scsi_device.h +++ b/src/include/86box/scsi_device.h @@ -1,20 +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. + * 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 generic SCSI device command handler. + * Definitions for the generic SCSI device command handler. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. */ #ifndef SCSI_DEVICE_H diff --git a/src/include/86box/scsi_disk.h b/src/include/86box/scsi_disk.h index 94171e7ac..0ac78f8b5 100644 --- a/src/include/86box/scsi_disk.h +++ b/src/include/86box/scsi_disk.h @@ -1,15 +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. * - * Emulation of SCSI fixed and removable disks. + * Emulation of SCSI fixed and removable disks. * * * - * Author: Miran Grca, - * Copyright 2017,2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2017,2018 Miran Grca. */ #ifndef SCSI_DISK_H diff --git a/src/include/86box/scsi_ncr5380.h b/src/include/86box/scsi_ncr5380.h index 045e6bbe7..314f9d082 100644 --- a/src/include/86box/scsi_ncr5380.h +++ b/src/include/86box/scsi_ncr5380.h @@ -1,24 +1,24 @@ /* - * 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. * - * Implementation of the NCR 5380 series of SCSI Host Adapters - * made by NCR. These controllers were designed for - * the ISA bus. + * Implementation of the NCR 5380 series of SCSI Host Adapters + * made by NCR. These controllers were designed for + * the ISA bus. * * * - * Authors: Sarah Walker, - * TheCollector1995, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * TheCollector1995, + * Fred N. van Kempen, * - * Copyright 2017-2018 Sarah Walker. - * Copyright 2017-2018 TheCollector1995. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Sarah Walker. + * Copyright 2017-2018 TheCollector1995. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef SCSI_NCR5380_H diff --git a/src/include/86box/scsi_ncr53c8xx.h b/src/include/86box/scsi_ncr53c8xx.h index 37c5a72bf..e495925b0 100644 --- a/src/include/86box/scsi_ncr53c8xx.h +++ b/src/include/86box/scsi_ncr53c8xx.h @@ -1,25 +1,25 @@ /* - * 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. * - * Implementation of the NCR 53C810 and 53C875 SCSI Host - * Adapters made by NCR and later Symbios and LSI. These - * controllers were designed for the PCI bus. + * Implementation of the NCR 53C810 and 53C875 SCSI Host + * Adapters made by NCR and later Symbios and LSI. These + * controllers were designed for the PCI bus. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Paul Brook (QEMU), - * Artyom Tarasenko (QEMU), + * Authors: TheCollector1995, + * Miran Grca, + * Paul Brook (QEMU), + * Artyom Tarasenko (QEMU), * - * Copyright 2006-2018 Paul Brook. - * Copyright 2009-2018 Artyom Tarasenko. - * Copyright 2017,2018 Miran Grca. + * Copyright 2006-2018 Paul Brook. + * Copyright 2009-2018 Artyom Tarasenko. + * Copyright 2017,2018 Miran Grca. */ #ifndef SCSI_NCR53C8XX_H diff --git a/src/include/86box/scsi_pcscsi.h b/src/include/86box/scsi_pcscsi.h index d0b5baf04..3f56fb19d 100644 --- a/src/include/86box/scsi_pcscsi.h +++ b/src/include/86box/scsi_pcscsi.h @@ -1,25 +1,25 @@ /* - * 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. * - * Implementation of the AMD PCscsi and Tekram DC-390 SCSI - * controllers using the NCR 53c9x series of chips. + * 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, - * Miran Grca, + * Authors: Fabrice Bellard (QEMU) + * Herve Poussineau (QEMU) + * TheCollector1995, + * Miran Grca, * - * Copyright 2005-2018 Fabrice Bellard. - * Copyright 2012-2018 Herve Poussineau. - * Copyright 2017,2018 Miran Grca. + * Copyright 2005-2018 Fabrice Bellard. + * Copyright 2012-2018 Herve Poussineau. + * Copyright 2017,2018 Miran Grca. */ #ifndef SCSI_PCSCSI_H diff --git a/src/include/86box/scsi_spock.h b/src/include/86box/scsi_spock.h index 3dae005db..6dfc87011 100644 --- a/src/include/86box/scsi_spock.h +++ b/src/include/86box/scsi_spock.h @@ -1,21 +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. + * 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. * - * Implementation of the IBM PS/2 SCSI controller with - * cache for MCA only. + * Implementation of the IBM PS/2 SCSI controller with + * cache for MCA only. * * * - * Authors: Sarah Walker, - * TheCollector1995, + * Authors: Sarah Walker, + * TheCollector1995, * - * Copyright 2020 Sarah Walker. - * Copyright 2020 TheCollector1995. + * Copyright 2020 Sarah Walker. + * Copyright 2020 TheCollector1995. */ #ifndef SCSI_SPOCK_H diff --git a/src/include/86box/scsi_x54x.h b/src/include/86box/scsi_x54x.h index 68a31e651..e32a9369e 100644 --- a/src/include/86box/scsi_x54x.h +++ b/src/include/86box/scsi_x54x.h @@ -1,24 +1,24 @@ /* - * 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 of the code common to the AHA-154x series of SCSI - * Host Adapters made by Adaptec, Inc. and the BusLogic series - * of SCSI Host Adapters made by Mylex. - * These controllers were designed for various buses. + * Header of the code common to the AHA-154x series of SCSI + * Host Adapters made by Adaptec, Inc. and the BusLogic series + * of SCSI Host Adapters made by Mylex. + * These controllers were designed for various buses. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Fred N. van Kempen, + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef SCSI_X54X_H diff --git a/src/include/86box/smram.h b/src/include/86box/smram.h index 07537a7f6..84d1cbe8d 100644 --- a/src/include/86box/smram.h +++ b/src/include/86box/smram.h @@ -1,18 +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 the SMRAM interface. + * Definitions for the SMRAM interface. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2020 Miran Grca. + * Copyright 2016-2020 Miran Grca. */ #ifndef EMU_SMRAM_H diff --git a/src/include/86box/snd_ac97.h b/src/include/86box/snd_ac97.h index 600dd84d8..14d31dc40 100644 --- a/src/include/86box/snd_ac97.h +++ b/src/include/86box/snd_ac97.h @@ -1,18 +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 AC'97 audio emulation. + * Definitions for AC'97 audio emulation. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2021 RichardG. + * Copyright 2021 RichardG. */ #ifndef SOUND_AC97_H #define SOUND_AC97_H diff --git a/src/include/86box/snd_ad1848.h b/src/include/86box/snd_ad1848.h index bdf5022e5..d954eaccb 100644 --- a/src/include/86box/snd_ad1848.h +++ b/src/include/86box/snd_ad1848.h @@ -1,22 +1,22 @@ /* - * 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 AD1848 / CS4248 / CS4231 (Windows Sound System) codec emulation. + * Definitions for AD1848 / CS4248 / CS4231 (Windows Sound System) codec emulation. * * * - * Authors: Sarah Walker, - * TheCollector1995, - * RichardG, + * Authors: Sarah Walker, + * TheCollector1995, + * RichardG, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2018-2020 TheCollector1995. - * Copyright 2021 RichardG. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2018-2020 TheCollector1995. + * Copyright 2021 RichardG. */ #ifndef SOUND_AD1848_H diff --git a/src/include/86box/snd_mpu401.h b/src/include/86box/snd_mpu401.h index 96143b251..2fcf31d96 100644 --- a/src/include/86box/snd_mpu401.h +++ b/src/include/86box/snd_mpu401.h @@ -1,23 +1,24 @@ /* - * 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. * - * Roland MPU-401 emulation. + * Roland MPU-401 emulation. * * * - * Author: Sarah Walker, - * DOSBox Team, - * Miran Grca, - * TheCollector1995, - * Copyright 2008-2020 Sarah Walker. - * Copyright 2008-2020 DOSBox Team. - * Copyright 2016-2020 Miran Grca. - * Copyright 2016-2020 TheCollector1995. + * Authors: Sarah Walker, + * DOSBox Team, + * Miran Grca, + * TheCollector1995, + * + * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 DOSBox Team. + * Copyright 2016-2020 Miran Grca. + * Copyright 2016-2020 TheCollector1995. */ #ifndef SOUND_MPU401_H diff --git a/src/include/86box/snd_opl.h b/src/include/86box/snd_opl.h index 5caccf8fc..b4f26543d 100644 --- a/src/include/86box/snd_opl.h +++ b/src/include/86box/snd_opl.h @@ -1,18 +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 the OPL interface. + * Definitions for the OPL interface. * - * Authors: Fred N. van Kempen, - * Miran Grca, + * Authors: Fred N. van Kempen, + * Miran Grca, * - * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2016-2020 Miran Grca. + * Copyright 2017-2020 Fred N. van Kempen. + * Copyright 2016-2020 Miran Grca. */ #ifndef SOUND_OPL_H #define SOUND_OPL_H diff --git a/src/include/86box/snd_opl_nuked.h b/src/include/86box/snd_opl_nuked.h index 635863407..f82e85b0e 100644 --- a/src/include/86box/snd_opl_nuked.h +++ b/src/include/86box/snd_opl_nuked.h @@ -1,20 +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. + * 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 NukedOPL3 driver. + * Definitions for the NukedOPL3 driver. * - * Version: @(#)snd_opl_nuked.h 1.0.5 2020/07/16 + * Version: @(#)snd_opl_nuked.h 1.0.5 2020/07/16 * - * Authors: Fred N. van Kempen, - * Miran Grca, + * Authors: Fred N. van Kempen, + * Miran Grca, * - * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2020 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. */ #ifndef SOUND_OPL_NUKED_H diff --git a/src/include/86box/snd_speaker.h b/src/include/86box/snd_speaker.h index 922603d98..433accea8 100644 --- a/src/include/86box/snd_speaker.h +++ b/src/include/86box/snd_speaker.h @@ -1,20 +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. + * 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 of the emulation of the PC speaker. + * Header of the emulation of the PC speaker. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #ifndef SOUND_SPEAKER_H diff --git a/src/include/86box/ui.h b/src/include/86box/ui.h index 5eb15a08d..58168ceb8 100644 --- a/src/include/86box/ui.h +++ b/src/include/86box/ui.h @@ -1,20 +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. + * 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. * - * Define the various UI functions. + * Define the various UI functions. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. */ #ifndef EMU_UI_H #define EMU_UI_H diff --git a/src/include/86box/usb.h b/src/include/86box/usb.h index 893a9f501..d0b169b6c 100644 --- a/src/include/86box/usb.h +++ b/src/include/86box/usb.h @@ -1,18 +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 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/vid_8514a.h b/src/include/86box/vid_8514a.h index be6c5d177..6463d0214 100644 --- a/src/include/86box/vid_8514a.h +++ b/src/include/86box/vid_8514a.h @@ -1,19 +1,19 @@ /* - * 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. * - * Emulation of the 8514/A card from IBM for the MCA bus and - * generic ISA bus clones without vendor extensions. + * Emulation of the 8514/A card from IBM for the MCA bus and + * generic ISA bus clones without vendor extensions. * * * - * Authors: TheCollector1995 + * Authors: TheCollector1995 * - * Copyright 2022 TheCollector1995. + * Copyright 2022 TheCollector1995. */ #ifndef VIDEO_8514A_H diff --git a/src/include/86box/vid_cga.h b/src/include/86box/vid_cga.h index 4421840d6..23c7e7b4a 100644 --- a/src/include/86box/vid_cga.h +++ b/src/include/86box/vid_cga.h @@ -1,19 +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. + * 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. * - * Emulation of the old and new IBM CGA graphics cards. + * Emulation of the old and new IBM CGA graphics cards. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #ifndef VIDEO_CGA_H diff --git a/src/include/86box/vid_cga_comp.h b/src/include/86box/vid_cga_comp.h index f4dd58b40..3c7916034 100644 --- a/src/include/86box/vid_cga_comp.h +++ b/src/include/86box/vid_cga_comp.h @@ -1,20 +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. + * 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. * - * IBM CGA composite filter, borrowed from reenigne's DOSBox - * patch and ported to C. + * IBM CGA composite filter, borrowed from reenigne's DOSBox + * patch and ported to C. * * * - * Author: reenigne, - * Miran Grca, - * Copyright 2015-2018 reenigne. - * Copyright 2015-2018 Miran Grca. + * Authors: reenigne, + * Miran Grca, + * + * Copyright 2015-2018 reenigne. + * Copyright 2015-2018 Miran Grca. */ #ifndef VIDEO_CGA_COMP_H diff --git a/src/include/86box/vid_ddc.h b/src/include/86box/vid_ddc.h index b64759bac..0846cc32f 100644 --- a/src/include/86box/vid_ddc.h +++ b/src/include/86box/vid_ddc.h @@ -1,20 +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. + * 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. * - * DDC monitor emulation definitions. + * DDC monitor emulation definitions. * * * - * Authors: Sarah Walker, - * RichardG, + * Authors: Sarah Walker, + * RichardG, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2020 RichardG. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2020 RichardG. */ #ifndef EMU_VID_DDC_H diff --git a/src/include/86box/vid_ega.h b/src/include/86box/vid_ega.h index 3b4797bf8..f49ad55b4 100644 --- a/src/include/86box/vid_ega.h +++ b/src/include/86box/vid_ega.h @@ -1,21 +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. + * 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. * - * Emulation of the EGA and Chips & Technologies SuperEGA - * graphics cards. + * Emulation of the EGA and Chips & Technologies SuperEGA + * graphics cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #ifndef VIDEO_EGA_H diff --git a/src/include/86box/vid_hercules.h b/src/include/86box/vid_hercules.h index 109d721ae..949e45417 100644 --- a/src/include/86box/vid_hercules.h +++ b/src/include/86box/vid_hercules.h @@ -1,20 +1,22 @@ /* - * 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. * - * Emulation of the Hercules graphics cards. + * Emulation of the Hercules graphics cards. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2021 Jasmine Iwanek. + * Authors: Sarah Walker, + * Miran Grca, + * Jasmine Iwanek, + * + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2021 Jasmine Iwanek. */ #ifndef VIDEO_HERCULES_H diff --git a/src/include/86box/vid_nga.h b/src/include/86box/vid_nga.h index 8dc0ad881..d91d852d7 100644 --- a/src/include/86box/vid_nga.h +++ b/src/include/86box/vid_nga.h @@ -1,25 +1,25 @@ /* - * 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. * - * Emulation of the Olivetti OGC 8-bit ISA (GO708) and - * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. + * Emulation of the Olivetti OGC 8-bit ISA (GO708) and + * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #ifndef VIDEO_NGA_H diff --git a/src/include/86box/vid_ogc.h b/src/include/86box/vid_ogc.h index 6e6447694..45eedf8cf 100644 --- a/src/include/86box/vid_ogc.h +++ b/src/include/86box/vid_ogc.h @@ -1,25 +1,25 @@ /* - * 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. * - * Emulation of the Olivetti OGC 8-bit ISA (GO708) and - * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. + * Emulation of the Olivetti OGC 8-bit ISA (GO708) and + * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #ifndef VIDEO_OGC_H diff --git a/src/include/86box/vid_pgc.h b/src/include/86box/vid_pgc.h index 3960598ab..12450c0d1 100644 --- a/src/include/86box/vid_pgc.h +++ b/src/include/86box/vid_pgc.h @@ -1,20 +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. + * 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 PGC driver. + * Definitions for the PGC driver. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. */ #ifndef VID_PGC_H #define VID_PGC_H diff --git a/src/include/86box/vid_pgc_palette.h b/src/include/86box/vid_pgc_palette.h index ffcf6a9f0..a242e0cbd 100644 --- a/src/include/86box/vid_pgc_palette.h +++ b/src/include/86box/vid_pgc_palette.h @@ -1,20 +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. + * 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. * - * Palette definitions for the PGC core. + * Palette definitions for the PGC core. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. */ #ifndef VID_PGC_PALETTE_H diff --git a/src/include/86box/vid_svga_render.h b/src/include/86box/vid_svga_render.h index 04bd740b1..a8369ca42 100644 --- a/src/include/86box/vid_svga_render.h +++ b/src/include/86box/vid_svga_render.h @@ -1,19 +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. + * 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. * - * SVGA renderers. + * SVGA renderers. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #ifndef VIDEO_SVGA_RENDER_H diff --git a/src/include/86box/vid_vga.h b/src/include/86box/vid_vga.h index 44cc6b7c3..9d9972be0 100644 --- a/src/include/86box/vid_vga.h +++ b/src/include/86box/vid_vga.h @@ -1,20 +1,22 @@ /* - * 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. * - * Emulation of the IBM MDA + VGA graphics cards. + * Emulation of the IBM MDA + VGA graphics cards. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2021 Jasmine Iwanek. + * Authors: Sarah Walker, + * Miran Grca, + * Jasmine Iwanek, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2021 Jasmine Iwanek. */ #ifndef VIDEO_VGA_H diff --git a/src/include/86box/vid_voodoo_banshee.h b/src/include/86box/vid_voodoo_banshee.h index 4d966ea3e..4cd26dc2a 100644 --- a/src/include/86box/vid_voodoo_banshee.h +++ b/src/include/86box/vid_voodoo_banshee.h @@ -1,18 +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. * - * Voodoo Banshee and 3 specific emulation. + * Voodoo Banshee and 3 specific emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef 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 9f7a1825e..ec6e214d5 100644 --- a/src/include/86box/vid_voodoo_banshee_blitter.h +++ b/src/include/86box/vid_voodoo_banshee_blitter.h @@ -1,18 +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. * - * Voodoo Banshee and 3 specific emulation. + * Voodoo Banshee and 3 specific emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_BANSHEE_BLITTER_H diff --git a/src/include/86box/vid_voodoo_common.h b/src/include/86box/vid_voodoo_common.h index e6d4ad5e4..6dee9ca8f 100644 --- a/src/include/86box/vid_voodoo_common.h +++ b/src/include/86box/vid_voodoo_common.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_COMMON_H diff --git a/src/include/86box/vid_voodoo_display.h b/src/include/86box/vid_voodoo_display.h index e415f7824..53d4076e7 100644 --- a/src/include/86box/vid_voodoo_display.h +++ b/src/include/86box/vid_voodoo_display.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_DISPLAY_H diff --git a/src/include/86box/vid_voodoo_dither.h b/src/include/86box/vid_voodoo_dither.h index 2d674c5b4..dc87b293e 100644 --- a/src/include/86box/vid_voodoo_dither.h +++ b/src/include/86box/vid_voodoo_dither.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics and 2 specific emulation. + * Voodoo Graphics and 2 specific emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_DITHER_H diff --git a/src/include/86box/vid_voodoo_fb.h b/src/include/86box/vid_voodoo_fb.h index 374474cc5..b954048ff 100644 --- a/src/include/86box/vid_voodoo_fb.h +++ b/src/include/86box/vid_voodoo_fb.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_FB_H diff --git a/src/include/86box/vid_voodoo_fifo.h b/src/include/86box/vid_voodoo_fifo.h index 86956cc5a..088be1dae 100644 --- a/src/include/86box/vid_voodoo_fifo.h +++ b/src/include/86box/vid_voodoo_fifo.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_FIFO_H diff --git a/src/include/86box/vid_voodoo_reg.h b/src/include/86box/vid_voodoo_reg.h index 13f7ae932..1f1160804 100644 --- a/src/include/86box/vid_voodoo_reg.h +++ b/src/include/86box/vid_voodoo_reg.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_REG_H diff --git a/src/include/86box/vid_voodoo_setup.h b/src/include/86box/vid_voodoo_setup.h index be94f9533..8ff892f71 100644 --- a/src/include/86box/vid_voodoo_setup.h +++ b/src/include/86box/vid_voodoo_setup.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_SETUP_H diff --git a/src/include/86box/vid_voodoo_texture.h b/src/include/86box/vid_voodoo_texture.h index 2e0af97a3..a0bd4db44 100644 --- a/src/include/86box/vid_voodoo_texture.h +++ b/src/include/86box/vid_voodoo_texture.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_TEXTURE_H diff --git a/src/include/86box/vnc.h b/src/include/86box/vnc.h index 7b82ce5d1..a63c53403 100644 --- a/src/include/86box/vnc.h +++ b/src/include/86box/vnc.h @@ -1,18 +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 the VNC renderer. + * Definitions for the VNC renderer. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017 Fred N. van Kempen. + * Copyright 2017 Fred N. van Kempen. */ #ifndef EMU_VNC_H diff --git a/src/include/86box/win.h b/src/include/86box/win.h index 3174e24b2..c72b1e5c4 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -1,23 +1,23 @@ /* - * 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. * - * Platform support defintions for Win32. + * Platform support defintions for Win32. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2021 Laci bá' + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2021 Laci bá' */ #ifndef PLAT_WIN_H diff --git a/src/include/86box/win_opengl.h b/src/include/86box/win_opengl.h index 6192a68c1..80d3695ca 100644 --- a/src/include/86box/win_opengl.h +++ b/src/include/86box/win_opengl.h @@ -1,16 +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. * - * Header file for OpenGL rendering module + * Header file for OpenGL rendering module * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2021 Teemu Korhonen + * Copyright 2021 Teemu Korhonen */ #ifndef WIN_OPENGL_H diff --git a/src/include/86box/win_opengl_glslp.h b/src/include/86box/win_opengl_glslp.h index caf86a04f..6586cd526 100644 --- a/src/include/86box/win_opengl_glslp.h +++ b/src/include/86box/win_opengl_glslp.h @@ -1,16 +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. * - * Header file for shader file parser. + * Header file for shader file parser. * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2021 Teemu Korhonen + * Copyright 2021 Teemu Korhonen */ #ifndef WIN_OPENGL_GLSLP_H diff --git a/src/include/86box/win_sdl.h b/src/include/86box/win_sdl.h index 52902034d..72357aa9a 100644 --- a/src/include/86box/win_sdl.h +++ b/src/include/86box/win_sdl.h @@ -1,38 +1,38 @@ /* - * 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 libSDL2 rendering module. + * Definitions for the libSDL2 rendering module. * * * - * Authors: Fred N. van Kempen, - * Michael Drüing, + * Authors: Fred N. van Kempen, + * Michael Drüing, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Michael Drüing. + * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018,2019 Michael Drüing. * - * Redistribution and use in source and binary forms, with - * or without modification, are permitted provided that the - * following conditions are met: + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: * - * 1. Redistributions of source code must retain the entire - * above notice, this list of conditions and the following - * disclaimer. + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names - * of its contributors may be used to endorse or promote - * products derived from this software without specific - * prior written permission. + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT diff --git a/src/include/86box/zip.h b/src/include/86box/zip.h index 910436410..6bff76e36 100644 --- a/src/include/86box/zip.h +++ b/src/include/86box/zip.h @@ -1,19 +1,19 @@ /* - * 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. * - * Implementation of the Iomega ZIP drive with SCSI(-like) - * commands, for both ATAPI and SCSI usage. + * Implementation of the Iomega ZIP drive with SCSI(-like) + * commands, for both ATAPI and SCSI usage. * * * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2018,2019 Miran Grca. + * Copyright 2018,2019 Miran Grca. */ #ifndef EMU_ZIP_H diff --git a/src/include/fdi2raw.h b/src/include/fdi2raw.h index 7a53d9d17..cfc1f84c3 100644 --- a/src/include/fdi2raw.h +++ b/src/include/fdi2raw.h @@ -1,22 +1,22 @@ /* - * 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 FDI floppy file format. + * Definitions for the FDI floppy file format. * * * - * Authors: Toni Wilen, - * and Vincent Joguin, - * Thomas Harte, + * Authors: Toni Wilen, + * and Vincent Joguin, + * Thomas Harte, * - * Copyright 2001-2004 Toni Wilen. - * Copyright 2001-2004 Vincent Joguin. - * Copyright 2001 Thomas Harte. + * Copyright 2001-2004 Toni Wilen. + * Copyright 2001-2004 Vincent Joguin. + * Copyright 2001 Thomas Harte. */ #ifndef __FDI2RAW_H #define __FDI2RAW_H diff --git a/src/include/minitrace/minitrace.h b/src/include/minitrace/minitrace.h index 2047eedb7..8184f5873 100644 --- a/src/include/minitrace/minitrace.h +++ b/src/include/minitrace/minitrace.h @@ -71,13 +71,13 @@ const char *mtr_pool_string(const char *str); // Commented-out types will be supported in the future. typedef enum { - MTR_ARG_TYPE_NONE = 0, - MTR_ARG_TYPE_INT = 1, // I - // MTR_ARG_TYPE_FLOAT = 2, // TODO - // MTR_ARG_TYPE_DOUBLE = 3, // TODO - MTR_ARG_TYPE_STRING_CONST = 8, // C - MTR_ARG_TYPE_STRING_COPY = 9, - // MTR_ARG_TYPE_JSON_COPY = 10, + MTR_ARG_TYPE_NONE = 0, + MTR_ARG_TYPE_INT = 1, // I + // MTR_ARG_TYPE_FLOAT = 2, // TODO + // MTR_ARG_TYPE_DOUBLE = 3, // TODO + MTR_ARG_TYPE_STRING_CONST = 8, // C + MTR_ARG_TYPE_STRING_COPY = 9, + // MTR_ARG_TYPE_JSON_COPY = 10, } mtr_arg_type; // TODO: Add support for more than one argument (metadata) per event @@ -213,55 +213,55 @@ void internal_mtr_raw_event_arg(const char *category, const char *name, char ph, // These are optimized to use X events (combined B and E). Much easier to do in C++ than in C. class MTRScopedTrace { public: - MTRScopedTrace(const char *category, const char *name) - : category_(category), name_(name) { - start_time_ = mtr_time_s(); - } - ~MTRScopedTrace() { - internal_mtr_raw_event(category_, name_, 'X', &start_time_); - } + MTRScopedTrace(const char *category, const char *name) + : category_(category), name_(name) { + start_time_ = mtr_time_s(); + } + ~MTRScopedTrace() { + internal_mtr_raw_event(category_, name_, 'X', &start_time_); + } private: - const char *category_; - const char *name_; - double start_time_; + const char *category_; + const char *name_; + double start_time_; }; // Only outputs a block if execution time exceeded the limit. // TODO: This will effectively call mtr_time_s twice at the end, which is bad. class MTRScopedTraceLimit { public: - MTRScopedTraceLimit(const char *category, const char *name, double limit_s) - : category_(category), name_(name), limit_(limit_s) { - start_time_ = mtr_time_s(); - } - ~MTRScopedTraceLimit() { - double end_time = mtr_time_s(); - if (end_time - start_time_ >= limit_) { - internal_mtr_raw_event(category_, name_, 'X', &start_time_); - } - } + MTRScopedTraceLimit(const char *category, const char *name, double limit_s) + : category_(category), name_(name), limit_(limit_s) { + start_time_ = mtr_time_s(); + } + ~MTRScopedTraceLimit() { + double end_time = mtr_time_s(); + if (end_time - start_time_ >= limit_) { + internal_mtr_raw_event(category_, name_, 'X', &start_time_); + } + } private: - const char *category_; - const char *name_; - double start_time_; - double limit_; + const char *category_; + const char *name_; + double start_time_; + double limit_; }; class MTRScopedTraceArg { public: - MTRScopedTraceArg(const char *category, const char *name, mtr_arg_type arg_type, const char *arg_name, void *arg_value) - : category_(category), name_(name) { - internal_mtr_raw_event_arg(category, name, 'B', 0, arg_type, arg_name, arg_value); - } - ~MTRScopedTraceArg() { - internal_mtr_raw_event(category_, name_, 'E', 0); - } + MTRScopedTraceArg(const char *category, const char *name, mtr_arg_type arg_type, const char *arg_name, void *arg_value) + : category_(category), name_(name) { + internal_mtr_raw_event_arg(category, name, 'B', 0, arg_type, arg_name, arg_value); + } + ~MTRScopedTraceArg() { + internal_mtr_raw_event(category_, name_, 'E', 0); + } private: - const char *category_; - const char *name_; + const char *category_; + const char *name_; }; #endif diff --git a/src/mac/CMakeLists.txt b/src/mac/CMakeLists.txt index 9ad6206a8..bbdf1d5d5 100644 --- a/src/mac/CMakeLists.txt +++ b/src/mac/CMakeLists.txt @@ -38,9 +38,9 @@ set_source_files_properties(${APP_ICON_MACOSX} # Prepare long version string if(EMU_BUILD) - set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION} [${EMU_BUILD}]") + set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION} [${EMU_BUILD}]") else() - set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION}") + set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION}") endif() # Generate Info.plist diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index 5d64bda3b..98bf26c58 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -935,45 +935,45 @@ vid_speed_changed_200(void *priv) */ static unsigned char mapping1[256] = { // clang-format off -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ -/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/*10*/ 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, -/*20*/ 2, 2, 0, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, -/*30*/ 2, 2, 2, 0, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, -/*40*/ 2, 2, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, -/*50*/ 2, 2, 1, 1, 2, 0, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, -/*60*/ 2, 2, 2, 2, 2, 2, 0, 1, 2, 2, 2, 2, 2, 2, 1, 1, -/*70*/ 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 1, -/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, -/*90*/ 2, 2, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, -/*A0*/ 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 0, 1, 2, 2, 1, 1, -/*B0*/ 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 0, 2, 2, 1, 1, -/*C0*/ 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, -/*D0*/ 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 0, 1, 1, -/*E0*/ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 0, 1, -/*F0*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/*10*/ 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, +/*20*/ 2, 2, 0, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, +/*30*/ 2, 2, 2, 0, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, +/*40*/ 2, 2, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, +/*50*/ 2, 2, 1, 1, 2, 0, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, +/*60*/ 2, 2, 2, 2, 2, 2, 0, 1, 2, 2, 2, 2, 2, 2, 1, 1, +/*70*/ 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 1, +/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, +/*90*/ 2, 2, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, +/*A0*/ 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 0, 1, 2, 2, 1, 1, +/*B0*/ 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 0, 2, 2, 1, 1, +/*C0*/ 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, +/*D0*/ 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 0, 1, 1, +/*E0*/ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 0, 1, +/*F0*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, // clang-format on }; static unsigned char mapping2[256] = { // clang-format off -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ -/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/*10*/ 1, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, -/*20*/ 1, 1, 3, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, -/*30*/ 1, 1, 1, 3, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, -/*40*/ 1, 1, 2, 2, 3, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, -/*50*/ 1, 1, 2, 2, 1, 3, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, -/*60*/ 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, -/*70*/ 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, -/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, -/*90*/ 1, 1, 2, 2, 2, 2, 2, 2, 1, 3, 2, 2, 2, 2, 2, 2, -/*A0*/ 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 3, 2, 1, 1, 2, 2, -/*B0*/ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 1, 1, 2, 2, -/*C0*/ 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 3, 2, 2, 2, -/*D0*/ 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 3, 2, 2, -/*E0*/ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, -/*F0*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/*10*/ 1, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, +/*20*/ 1, 1, 3, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, +/*30*/ 1, 1, 1, 3, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, +/*40*/ 1, 1, 2, 2, 3, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, +/*50*/ 1, 1, 2, 2, 1, 3, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, +/*60*/ 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, +/*70*/ 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, +/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, +/*90*/ 1, 1, 2, 2, 2, 2, 2, 2, 1, 3, 2, 2, 2, 2, 2, 2, +/*A0*/ 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 3, 2, 1, 1, 2, 2, +/*B0*/ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 1, 1, 2, 2, +/*C0*/ 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 3, 2, 2, 2, +/*D0*/ 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 3, 2, 2, +/*E0*/ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, +/*F0*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, // clang-format on }; @@ -1054,7 +1054,7 @@ vid_out_200(uint16_t addr, uint8_t val, void *priv) uint8_t old; switch (addr) { - /* MDA writes ============================================================== */ + /* MDA writes ============================================================== */ case 0x3b1: case 0x3b3: case 0x3b5: @@ -1087,7 +1087,7 @@ vid_out_200(uint16_t addr, uint8_t val, void *priv) nmi_raise(); return; - /* CGA writes ============================================================== */ + /* CGA writes ============================================================== */ case 0x03d1: case 0x03d3: case 0x03d5: @@ -1122,12 +1122,12 @@ vid_out_200(uint16_t addr, uint8_t val, void *priv) set_lcd_cols(val); return; - /* PC200 control port writes ============================================== */ + /* PC200 control port writes ============================================== */ case 0x03de: vid->crtc_index = 0x1f; - /* NMI only seems to be triggered if the value being written has the high - * bit set (enable NMI). So it only protects writes to this port if you - * let it? */ + /* NMI only seems to be triggered if the value being written has the high + * bit set (enable NMI). So it only protects writes to this port if you + * let it? */ if (val & 0x80) { vid->operation_ctrl = val; vid->crtc_index |= 0x40; @@ -2032,14 +2032,14 @@ kbd_write(uint16_t port, uint8_t val, void *priv) /* * PortB - System Control. * - * 7 Enable Status-1/Disable Keyboard Code on Port A. - * 6 Enable incoming Keyboard Clock. - * 5 Prevent external parity errors from causing NMI. - * 4 Disable parity checking of on-board system Ram. - * 3 Undefined (Not Connected). - * 2 Enable Port C LSB / Disable MSB. (See 1.8.3) - * 1 Speaker Drive. - * 0 8253 GATE 2 (Speaker Modulate). + * 7 Enable Status-1/Disable Keyboard Code on Port A. + * 6 Enable incoming Keyboard Clock. + * 5 Prevent external parity errors from causing NMI. + * 4 Disable parity checking of on-board system Ram. + * 3 Undefined (Not Connected). + * 2 Enable Port C LSB / Disable MSB. (See 1.8.3) + * 1 Speaker Drive. + * 0 8253 GATE 2 (Speaker Modulate). * * This register is controlled by BIOS and/or ROS. */ @@ -2097,14 +2097,14 @@ kbd_read(uint16_t port, void *priv) /* * PortA - System Status 1 * - * 7 Always 0 (KBD7) - * 6 Second Floppy disk drive installed (KBD6) - * 5 DDM1 - Default Display Mode bit 1 (KBD5) - * 4 DDM0 - Default Display Mode bit 0 (KBD4) - * 3 Always 1 (KBD3) - * 2 Always 1 (KBD2) - * 1 8087 NDP installed (KBD1) - * 0 Always 1 (KBD0) + * 7 Always 0 (KBD7) + * 6 Second Floppy disk drive installed (KBD6) + * 5 DDM1 - Default Display Mode bit 1 (KBD5) + * 4 DDM0 - Default Display Mode bit 0 (KBD4) + * 3 Always 1 (KBD3) + * 2 Always 1 (KBD2) + * 1 8087 NDP installed (KBD1) + * 0 Always 1 (KBD0) * * DDM00 * 00 unknown, external color? @@ -2137,27 +2137,27 @@ kbd_read(uint16_t port, void *priv) /* * PortC - System Status 2. * - * 7 On-board system RAM parity error. - * 6 External parity error (I/OCHCK from expansion bus). - * 5 8253 PIT OUT2 output. - * 4 Undefined (Not Connected). + * 7 On-board system RAM parity error. + * 6 External parity error (I/OCHCK from expansion bus). + * 5 8253 PIT OUT2 output. + * 4 Undefined (Not Connected). *------------------------------------------- - * LSB MSB (depends on PB2) + * LSB MSB (depends on PB2) *------------------------------------------- - * 3 RAM3 Undefined - * 2 RAM2 Undefined - * 1 RAM1 Undefined - * 0 RAM0 RAM4 + * 3 RAM3 Undefined + * 2 RAM2 Undefined + * 1 RAM1 Undefined + * 0 RAM0 RAM4 * * PC7 is forced to 0 when on-board system RAM parity * checking is disabled by PB4. * * RAM4:0 - * 01110 512K bytes on-board. - * 01111 544K bytes (32K external). - * 10000 576K bytes (64K external). - * 10001 608K bytes (96K external). - * 10010 640K bytes (128K external or fitted on-board). + * 01110 512K bytes on-board. + * 01111 544K bytes (32K external). + * 10000 576K bytes (64K external). + * 10001 608K bytes (96K external). + * 10010 640K bytes (128K external or fitted on-board). */ if (ams->pb & 0x04) ret = ams->stat2 & 0x0f; @@ -2226,14 +2226,14 @@ ams_read(uint16_t port, void *priv) case 0x0379: /* printer control, also set LK1-3. * per John Elliott's site, this is xor'ed with 0x07 - * 7 English Language. - * 6 German Language. - * 5 French Language. - * 4 Spanish Language. - * 3 Danish Language. - * 2 Swedish Language. - * 1 Italian Language. - * 0 Diagnostic Mode. + * 7 English Language. + * 6 German Language. + * 5 French Language. + * 4 Spanish Language. + * 3 Danish Language. + * 2 Swedish Language. + * 1 Italian Language. + * 0 Diagnostic Mode. */ ret = (lpt_read(port, &lpt_ports[0]) & 0xf8) | ams->language; break; diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 1343b38ad..6a2329dd6 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -635,10 +635,9 @@ machine_at_pc330_6573_init(const machine_t *model) /* doesn't like every CPU oth pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 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(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); device_add(&opti802g_pci_device); device_add(&opti822_device); @@ -1003,10 +1002,10 @@ machine_at_alfredo_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + 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(&keyboard_ps2_pci_device); device_add(&sio_device); @@ -1033,9 +1032,9 @@ machine_at_ninja_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1 | PCI_NO_IRQ_STEERING); pci_register_slot(0x05, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 1, 2); - pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 1, 2, 1); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 1, 2); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 1, 2, 1); device_add(&keyboard_ps2_intel_ami_pci_device); device_add(&intel_flash_bxt_ami_device); @@ -1061,13 +1060,13 @@ machine_at_486sp3_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ - pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ + pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ + pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ device_add(&sio_device); device_add(&fdc37c663_ide_device); device_add(&sst_flash_29ee010_device); @@ -1095,12 +1094,12 @@ machine_at_pci400cb_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(0x0F, PCI_CARD_NORMAL, 4, 3, 2, 1); /* 0F = Slot 1 */ - pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0E = Slot 2 */ - pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0D = Slot 3 */ - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 0C = Slot 4 */ - device_add(&keyboard_ps2_ami_pci_device); /* Assume AMI Megakey 1993 standalone ('P') - because of the Tekram machine below. */ + pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 3, 2, 1); /* 0F = Slot 1 */ + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0E = Slot 2 */ + pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0D = Slot 3 */ + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 0C = Slot 4 */ + device_add(&keyboard_ps2_ami_pci_device); /* Assume AMI Megakey 1993 standalone ('P') + because of the Tekram machine below. */ device_add(&ims8848_device); @@ -1127,10 +1126,10 @@ machine_at_g486ip_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(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 1 */ - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 3 */ - device_add(&keyboard_ps2_ami_pci_device); /* AMI Megakey 1993 stanalone ('P') */ + pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 1 */ + pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 3 */ + device_add(&keyboard_ps2_ami_pci_device); /* AMI Megakey 1993 stanalone ('P') */ device_add(&ims8848_device); @@ -1156,12 +1155,12 @@ machine_at_486sp3g_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ - pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 06 = Slot 1 */ - pci_register_slot(0x05, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 05 = Slot 2 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 04 = Slot 3 */ + pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ + pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 06 = Slot 1 */ + pci_register_slot(0x05, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 05 = Slot 2 */ + pci_register_slot(0x04, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 04 = Slot 3 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ device_add(&sio_zb_device); device_add(&pc87332_398_ide_device); device_add(&sst_flash_29ee010_device); @@ -1188,11 +1187,11 @@ machine_at_486ap4_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1 | PCI_NO_IRQ_STEERING); /* Excluded: 5, 6, 7, 8 */ pci_register_slot(0x05, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 09 = Slot 1 */ - pci_register_slot(0x0a, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0a = Slot 2 */ - pci_register_slot(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0b = Slot 3 */ - pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 0c = Slot 4 */ - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 09 = Slot 1 */ + pci_register_slot(0x0a, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0a = Slot 2 */ + pci_register_slot(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0b = Slot 3 */ + pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 0c = Slot 4 */ + device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ if (fdc_type == FDC_INTERNAL) device_add(&fdc_at_device); @@ -1217,10 +1216,10 @@ machine_at_g486vpa_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(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(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); device_add(&via_vt82c49x_pci_ide_device); device_add(&via_vt82c505_device); @@ -1246,10 +1245,10 @@ machine_at_486vipio2_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(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(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); device_add(&via_vt82c49x_pci_ide_device); device_add(&via_vt82c505_device); @@ -1275,9 +1274,9 @@ machine_at_abpb4_init(const machine_t *model) pci_init(PCI_CAN_SWITCH_TYPE); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1489_device); device_add(&w83787f_device); @@ -1303,9 +1302,9 @@ machine_at_win486pci_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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1489_device); device_add(&prime3b_device); @@ -1329,10 +1328,10 @@ machine_at_ms4145_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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&ali1489_device); device_add(&w83787f_device); @@ -1357,11 +1356,11 @@ machine_at_sbc490_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(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - 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, 2, 3, 4); - pci_register_slot(0x01, PCI_CARD_VIDEO, 4, 1, 2, 3); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); + 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, 2, 3, 4); + pci_register_slot(0x01, PCI_CARD_VIDEO, 4, 1, 2, 3); device_add(&ali1489_device); device_add(&fdc37c665_device); @@ -1390,7 +1389,7 @@ machine_at_tf486_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(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1489_device); device_add(&w83977ef_device); @@ -1416,7 +1415,7 @@ machine_at_itoxstar_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); - pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&w83977f_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&stpc_client_device); @@ -1445,9 +1444,9 @@ machine_at_arb1423c_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); - 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); + 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(&w83977f_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&stpc_consumer2_device); @@ -1472,9 +1471,9 @@ machine_at_arb1479_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); - 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); + 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(&w83977f_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&stpc_consumer2_device); @@ -1499,9 +1498,9 @@ machine_at_pcm9340_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); - 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); + 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(&w83977f_device, 1); device_add_inst(&w83977f_device, 2); device_add(&keyboard_ps2_ami_pci_device); @@ -1529,7 +1528,7 @@ machine_at_pcm5330_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0D, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0E, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&stpc_serial_device); device_add(&w83977f_370_device); device_add(&keyboard_ps2_ami_pci_device); @@ -1555,10 +1554,10 @@ machine_at_ecs486_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x0C, 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); + pci_register_slot(0x0F, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0C, 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); device_add(&umc_hb4_device); device_add(&umc_8886f_device); @@ -1586,10 +1585,10 @@ machine_at_hot433_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0F, 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); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1618,9 +1617,9 @@ machine_at_atc1415_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1649,10 +1648,10 @@ machine_at_actionpc2600_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0F, 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); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1679,9 +1678,9 @@ machine_at_m919_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1708,9 +1707,9 @@ machine_at_spc7700plw_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&umc_hb4_device); device_add(&umc_8886af_device); diff --git a/src/machine/m_at_compaq.c b/src/machine/m_at_compaq.c index 74e853834..7840eb056 100644 --- a/src/machine/m_at_compaq.c +++ b/src/machine/m_at_compaq.c @@ -527,9 +527,9 @@ compaq_plasma_recalcattrs(compaq_plasma_t *self) * Bit 0: Attributes 01-06, 08-0E are inverse video * Bit 1: Attributes 01-06, 08-0E are bold * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are inverse video + * are inverse video * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are bold */ + * are bold */ /* Set up colours */ amber = makecol(0xff, 0x7D, 0x00); @@ -686,8 +686,8 @@ const device_config_t compaq_plasma_config[] = { }, { .name = "rgb_type", - .description = "RGB type", - .type = CONFIG_SELECTION, + .description = "RGB type", + .type = CONFIG_SELECTION, .default_string = "", .default_int = 0, .file_filter = "", diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index ec818871a..71aeeb7fb 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -654,7 +654,7 @@ machine_at_ms6168_common_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_SOUND, 3, 4, 1, 2); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index 1388eec3a..66ef15e1d 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -96,7 +96,7 @@ machine_at_s1857_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); 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); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); device_add(&keyboard_ps2_ami_pci_device); @@ -228,11 +228,11 @@ machine_at_ambx133_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_NORMAL, 4, 1, 2, 3); + 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, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); @@ -264,11 +264,11 @@ machine_at_awo671r_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_NORMAL, 2, 3, 4, 1); + 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, 2, 3, 4, 1); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); @@ -297,11 +297,11 @@ machine_at_63a1_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(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); /* Integrated Sound? */ + 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); /* Integrated Sound? */ pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440zx_device); device_add(&piix4e_device); diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index d24933ff9..7ae87e120 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -51,10 +51,10 @@ machine_at_premiere_common_init(const machine_t *model, int pci_switch) pci_init(PCI_CONFIG_TYPE_2 | pci_switch); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + 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(&keyboard_ps2_intel_ami_pci_device); device_add(&sio_zb_device); @@ -70,12 +70,12 @@ machine_at_award_common_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ - pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ - pci_register_slot(0x07, PCI_CARD_SCSI, 1, 2, 3, 4); /* 07 = SCSI */ + pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ + pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ + pci_register_slot(0x07, PCI_CARD_SCSI, 1, 2, 3, 4); /* 07 = SCSI */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (fdc_type == FDC_INTERNAL) @@ -97,10 +97,10 @@ machine_at_sp4_common_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_IDE, 1, 2, 3, 4); /* Excluded: 02, 03*, 04*, 05*, 06*, 07*, 08* */ /* Slots: 09 (04), 0A (03), 0B (02), 0C (07) */ - 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(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); device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_device); device_add(&keyboard_ps2_ami_pci_device); @@ -123,10 +123,10 @@ machine_at_excaliburpci_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x03, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&fdc37c665_device); device_add(&keyboard_ps2_ami_pci_device); @@ -155,9 +155,9 @@ machine_at_p5mp3_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 1 */ - 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(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 1 */ + 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(&keyboard_ps2_pci_device); @@ -187,10 +187,10 @@ machine_at_dellxp60_init(const machine_t *model) pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); /* Not: 00, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C, 0D, 0E, 0F. */ /* Yes: 01, 10, 11, 12, 13, 14. */ - pci_register_slot(0x01, PCI_CARD_NORMAL, 1, 3, 2, 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); + pci_register_slot(0x01, PCI_CARD_NORMAL, 1, 3, 2, 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); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430lx_device); device_add(&keyboard_ps2_intel_ami_pci_device); @@ -217,9 +217,9 @@ machine_at_opti560l_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 4, 4, 3, 3); - 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(0x03, PCI_CARD_NORMAL, 4, 4, 3, 3); + 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(&keyboard_ps2_intel_ami_pci_device); @@ -236,7 +236,8 @@ machine_at_ambradp60_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/ambradp60/1004AF1P.BIO", - "roms/machines/ambradp60/1004AF1P.BI1", 0x1c000, 128); + "roms/machines/ambradp60/1004AF1P.BI1", + 0x1c000, 128); if (bios_only || !ret) return ret; @@ -254,7 +255,8 @@ machine_at_valuepointp60_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/valuepointp60/1006AV0M.BIO", - "roms/machines/valuepointp60/1006AV0M.BI1", 0x1d000, 128); + "roms/machines/valuepointp60/1006AV0M.BI1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -264,10 +266,10 @@ machine_at_valuepointp60_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + 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(&keyboard_ps2_ps1_pci_device); device_add(&sio_device); @@ -285,7 +287,8 @@ machine_at_revenge_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/revenge/1009af2_.bio", - "roms/machines/revenge/1009af2_.bi1", 0x1c000, 128); + "roms/machines/revenge/1009af2_.bi1", + 0x1c000, 128); if (bios_only || !ret) return ret; @@ -323,7 +326,8 @@ machine_at_pb520r_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/pb520r/1009bc0r.bio", - "roms/machines/pb520r/1009bc0r.bi1", 0x1d000, 128); + "roms/machines/pb520r/1009bc0r.bi1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -332,11 +336,11 @@ machine_at_pb520r_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_VIDEO, 3, 3, 3, 3); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x03, PCI_CARD_VIDEO, 3, 3, 3, 3); + 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(&i430lx_device); device_add(&ide_cmd640_pci_single_channel_device); @@ -389,10 +393,10 @@ machine_at_p5vl_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 5, 6, 7, 8); - pci_register_slot(0x13, PCI_CARD_NORMAL, 9, 10, 11, 12); - pci_register_slot(0x14, PCI_CARD_NORMAL, 13, 14, 15, 16); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x12, PCI_CARD_NORMAL, 5, 6, 7, 8); + pci_register_slot(0x13, PCI_CARD_NORMAL, 9, 10, 11, 12); + pci_register_slot(0x14, PCI_CARD_NORMAL, 13, 14, 15, 16); device_add(&opti5x7_pci_device); device_add(&opti822_device); @@ -422,11 +426,11 @@ machine_at_excaliburpci2_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(0x08, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&fdc37c665_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&ide_cmd640_pci_legacy_only_device); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 55751ae43..1bbeff550 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -48,7 +48,8 @@ machine_at_plato_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/plato/1016ax1_.bio", - "roms/machines/plato/1016ax1_.bi1", 0x1d000, 128); + "roms/machines/plato/1016ax1_.bi1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -66,7 +67,8 @@ machine_at_ambradp90_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/ambradp90/1002AX1P.BIO", - "roms/machines/ambradp90/1002AX1P.BI1", 0x1d000, 128); + "roms/machines/ambradp90/1002AX1P.BI1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -114,10 +116,10 @@ machine_at_acerv30_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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_acer_pci_device); @@ -144,10 +146,10 @@ machine_at_apollo_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); @@ -173,10 +175,10 @@ 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(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); @@ -193,7 +195,8 @@ machine_at_zappa_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/zappa/1006bs0_.bio", - "roms/machines/zappa/1006bs0_.bi1", 0x20000, 128); + "roms/machines/zappa/1006bs0_.bi1", + 0x20000, 128); if (bios_only || !ret) return ret; @@ -202,9 +205,9 @@ machine_at_zappa_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(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_intel_ami_pci_device); device_add(&i430fx_device); @@ -231,9 +234,9 @@ machine_at_powermatev_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(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); + 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(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); @@ -258,10 +261,10 @@ 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(&keyboard_ps2_pci_device); device_add(&i430fx_device); @@ -288,9 +291,9 @@ machine_at_hawk_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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); @@ -338,10 +341,9 @@ machine_at_hot543_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 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(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); device_add(&opti5x7_pci_device); device_add(&opti822_device); @@ -387,11 +389,11 @@ machine_at_sq588_init(const machine_t *model) pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); /* Correct: 0D (01), 0F (02), 11 (03), 13 (04) */ - pci_register_slot(0x02, PCI_CARD_IDE, 1, 2, 3, 4); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x02, PCI_CARD_IDE, 1, 2, 3, 4); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_ami_pci_device); diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index a51c58b14..319c5930e 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -95,11 +95,11 @@ machine_at_ap5vm_init(const machine_t *model) /* It seems there were plans for an on-board NCR 53C810 according to some clues left in the manual, but were latter scrapped. The BIOS still support that PCI device, though, so why not. */ - pci_register_slot(0x06, PCI_CARD_SCSI, 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(0x06, PCI_CARD_SCSI, 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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); @@ -126,10 +126,10 @@ machine_at_p55t2p4_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); @@ -155,10 +155,10 @@ machine_at_m7shi_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); - 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(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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); @@ -188,11 +188,11 @@ machine_at_tc430hx_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(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); + 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); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); @@ -223,12 +223,12 @@ machine_at_equium5200_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(0x08, PCI_CARD_VIDEO, 4, 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); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 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); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 0, 0, 0); // riser + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 0, 0, 0); // riser device_add(&i430hx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -257,11 +257,11 @@ machine_at_pcv90_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(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); + 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); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); @@ -303,10 +303,10 @@ machine_at_p55tvp4_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(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); - 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(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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); @@ -332,9 +332,9 @@ machine_at_5ivg_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); @@ -361,10 +361,10 @@ machine_at_8500tvxa_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(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 2, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 3, 2, 1); + pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 2, 1); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 3, 2, 1); device_add(&i430vx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -390,8 +390,8 @@ machine_at_presario2240_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(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); if (gfxcard == VID_INTERNAL) device_add(&s3_trio64v2_dx_onboard_pci_device); @@ -421,8 +421,8 @@ machine_at_presario4500_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(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); if (gfxcard == VID_INTERNAL) device_add(&s3_trio64v2_dx_onboard_pci_device); @@ -451,10 +451,10 @@ machine_at_p55va_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); @@ -480,10 +480,10 @@ machine_at_brio80xx_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x14, PCI_CARD_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -513,10 +513,10 @@ machine_at_pb680_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(0x08, PCI_CARD_VIDEO, 4, 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); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 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); + pci_register_slot(0x0B, 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); @@ -542,10 +542,10 @@ machine_at_mb520n_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(&i430vx_device); device_add(&piix3_device); @@ -571,10 +571,10 @@ machine_at_i430vx_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(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -600,12 +600,12 @@ machine_at_nupro592_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(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); /*Strongly suspect these are on-board slots*/ - pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); /*Strongly suspect these are on-board slots*/ + pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); /* PIIX4 */ device_add(&i430tx_device); device_add(&piix4_device); @@ -637,13 +637,13 @@ machine_at_tx97_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(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(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(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); + 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(&keyboard_ps2_ami_pci_device); @@ -691,11 +691,11 @@ machine_at_an430tx_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); /* PIIX4 */ - // pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); - 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); + 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); device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_ami_pci_device); @@ -722,13 +722,13 @@ machine_at_ym430tx_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(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(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(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); + 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(&keyboard_ps2_pci_device); @@ -754,10 +754,10 @@ machine_at_mb540n_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(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); - 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(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ device_add(&i430tx_device); device_add(&piix4_device); @@ -784,12 +784,12 @@ machine_at_56a5_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ - pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_pci_device); @@ -816,10 +816,10 @@ machine_at_p5mms98_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); /* PIIX4 */ - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); + 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); device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_ami_pci_device); @@ -847,10 +847,10 @@ machine_at_ficva502_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); device_add(&via_vpx_device); device_add(&via_vt82c586b_device); @@ -966,15 +966,15 @@ machine_at_m560_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(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0B, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -997,16 +997,16 @@ machine_at_ms5164_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(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0B, PCI_CARD_SOUTHBRIDGE_IDE, 5, 6, 0, 0); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); - pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); + pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1531_device); device_add(&ali1543_device); /* -5 */ diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 09b142c83..3973bd8cf 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -51,11 +51,11 @@ machine_at_thor_common_init(const machine_t *model, int mr) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 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, 2, 1); - pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 3, 2, 1); + 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, 2, 1); + pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 3, 2, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (gfxcard == VID_INTERNAL) @@ -76,10 +76,10 @@ machine_at_p54tp4xe_common_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&keyboard_ps2_pci_device); device_add(&i430fx_device); @@ -126,7 +126,8 @@ machine_at_gw2katx_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/gw2katx/1003CN0T.BIO", - "roms/machines/gw2katx/1003CN0T.BI1", 0x20000, 128); + "roms/machines/gw2katx/1003CN0T.BI1", + 0x20000, 128); if (bios_only || !ret) return ret; @@ -142,7 +143,8 @@ machine_at_thor_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/thor/1006cn0_.bio", - "roms/machines/thor/1006cn0_.bi1", 0x20000, 128); + "roms/machines/thor/1006cn0_.bi1", + 0x20000, 128); if (bios_only || !ret) return ret; @@ -174,7 +176,8 @@ machine_at_endeavor_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/endeavor/1006cb0_.bio", - "roms/machines/endeavor/1006cb0_.bi1", 0x1d000, 128); + "roms/machines/endeavor/1006cb0_.bi1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -183,11 +186,11 @@ machine_at_endeavor_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(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); + 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); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (gfxcard == VID_INTERNAL) @@ -218,9 +221,9 @@ machine_at_ms5119_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(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(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); device_add(&i430fx_device); device_add(&piix_device); @@ -246,10 +249,10 @@ machine_at_pb640_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(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -280,10 +283,10 @@ machine_at_fmb_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(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, 2, 1); - pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 3, 2, 1); + 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, 2, 1); + pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 3, 2, 1); device_add(&i430fx_device); device_add(&piix_no_mirq_device); @@ -310,11 +313,11 @@ machine_at_acerm3a_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(0x0C, 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); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x10, PCI_CARD_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x0C, 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); + 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(&keyboard_ps2_pci_device); @@ -340,12 +343,12 @@ machine_at_ap53_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x06, PCI_CARD_VIDEO, 1, 2, 3, 4); + pci_register_slot(0x06, PCI_CARD_VIDEO, 1, 2, 3, 4); device_add(&i430hx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -370,10 +373,10 @@ machine_at_8500tuc_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); device_add(&i430hx_device); device_add(&piix3_device); @@ -399,10 +402,10 @@ machine_at_p55t2s_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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); - 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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + 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); @@ -428,10 +431,10 @@ machine_at_p5vxb_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(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x06, 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(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x06, 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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); device_add(&i430vx_device); device_add(&piix3_device); @@ -461,11 +464,11 @@ machine_at_gw2kte_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(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, 3, 4, 1, 2); + 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, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); device_add(&i430vx_device); device_add(&piix3_device); @@ -492,10 +495,10 @@ machine_at_ap5s_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_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 2, 1); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 3, 2, 1); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 2, 1); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 3, 2, 1); device_add(&sis_5511_device); device_add(&keyboard_ps2_ami_pci_device); @@ -521,10 +524,10 @@ machine_at_ms5124_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, 0xFE, 0xFF, 0, 0); - pci_register_slot(0x10, PCI_CARD_NORMAL, 0x41, 0x42, 0x43, 0x44); - pci_register_slot(0x11, PCI_CARD_NORMAL, 0x44, 0x41, 0x42, 0x43); - pci_register_slot(0x12, PCI_CARD_NORMAL, 0x43, 0x44, 0x41, 0x42); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 0x42, 0x43, 0x44, 0x41); + pci_register_slot(0x10, PCI_CARD_NORMAL, 0x41, 0x42, 0x43, 0x44); + pci_register_slot(0x11, PCI_CARD_NORMAL, 0x44, 0x41, 0x42, 0x43); + pci_register_slot(0x12, PCI_CARD_NORMAL, 0x43, 0x44, 0x41, 0x42); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 0x42, 0x43, 0x44, 0x41); device_add(&sis_5511_device); device_add(&keyboard_ps2_ami_pci_device); @@ -550,10 +553,10 @@ machine_at_vectra54_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(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); + 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 == VID_INTERNAL) device_add(&s3_phoenix_trio64_onboard_pci_device); diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index 5ffbec822..c1c95f197 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -55,13 +55,13 @@ machine_at_p6rp4_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x19, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x14, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -89,10 +89,10 @@ machine_at_686nx_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(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(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); device_add(&i440fx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); // Uses the AMIKEY keyboard controller @@ -118,10 +118,10 @@ machine_at_mb600n_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(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); device_add(&i440fx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -147,11 +147,11 @@ machine_at_acerv60n_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(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - 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); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); + 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(&keyboard_ps2_pci_device); @@ -180,10 +180,10 @@ machine_at_vs440fx_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(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); - 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(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); + 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); @@ -214,10 +214,10 @@ machine_at_ap440fx_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(0x08, PCI_CARD_VIDEO, 3, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); - 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(0x08, PCI_CARD_VIDEO, 3, 0, 0, 0); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); + 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); @@ -244,10 +244,10 @@ machine_at_8600ttc_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(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(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); device_add(&i440fx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -273,10 +273,10 @@ machine_at_m6mi_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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_ami_pci_device); @@ -294,11 +294,11 @@ machine_at_p65up5_common_init(const machine_t *model, const device_t *northbridg 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(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); - 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); + 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(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(&keyboard_ps2_ami_pci_device); diff --git a/src/machine/m_at_t3100e.c b/src/machine/m_at_t3100e.c index 6b09b1e02..451955ad1 100644 --- a/src/machine/m_at_t3100e.c +++ b/src/machine/m_at_t3100e.c @@ -55,8 +55,8 @@ * * Page mapped at 0xD000 0xD400 0xD800 0xDC00 * ------------------------------------------------------ - * Pages 0x00-0x7F 0x208 0x4208 0x8208 0xc208 - * Pages 0x80-0xFF 0x218 0x4218 0x8218 0xc218 + * Pages 0x00-0x7F 0x208 0x4208 0x8208 0xc208 + * Pages 0x80-0xFF 0x218 0x4218 0x8218 0xc218 * Pages 0x100-0x17F 0x258 0x4258 0x8258 0xc258 * Pages 0x180-0x1FF 0x268 0x4268 0x8268 0xc268 * diff --git a/src/machine/m_elt.c b/src/machine/m_elt.c index 47e6f145d..81647612c 100644 --- a/src/machine/m_elt.c +++ b/src/machine/m_elt.c @@ -31,7 +31,6 @@ * USA. */ -// clang-format off #include #include #include @@ -51,7 +50,6 @@ #include <86box/rom.h> #include <86box/video.h> #include <86box/vid_cga.h> -// clang-format on static void elt_vid_off_poll(void *p) diff --git a/src/machine/m_europc.c b/src/machine/m_europc.c index 3f78c8f49..116e10e5f 100644 --- a/src/machine/m_europc.c +++ b/src/machine/m_europc.c @@ -293,50 +293,50 @@ rtc_reset(nvr_t *nvr) /* * EuroPC System Configuration: * - * [A] unknown + * [A] unknown * - * [B] 7 1 bootdrive extern - * 0 bootdribe intern - * 6:5 11 invalid hard disk type - * 10 hard disk installed, type 2 - * 01 hard disk installed, type 1 - * 00 hard disk not installed - * 4:3 11 invalid external drive type - * 10 external drive 720K - * 01 external drive 360K - * 00 external drive disabled - * 2 unknown - * 1:0 11 invalid internal drive type - * 10 internal drive 360K - * 01 internal drive 720K - * 00 internal drive disabled + * [B] 7 1 bootdrive extern + * 0 bootdrive intern + * 6:5 11 invalid hard disk type + * 10 hard disk installed, type 2 + * 01 hard disk installed, type 1 + * 00 hard disk not installed + * 4:3 11 invalid external drive type + * 10 external drive 720K + * 01 external drive 360K + * 00 external drive disabled + * 2 unknown + * 1:0 11 invalid internal drive type + * 10 internal drive 360K + * 01 internal drive 720K + * 00 internal drive disabled * - * [C] 7:6 unknown - * 5 monitor detection OFF - * 4 unknown - * 3:2 11 illegal memory size - * 10 512K - * 01 256K - * 00 640K - * 1:0 11 illegal game port - * 10 gameport as mouse port - * 01 gameport as joysticks - * 00 gameport disabled + * [C] 7:6 unknown + * 5 monitor detection OFF + * 4 unknown + * 3:2 11 illegal memory size + * 10 512K + * 01 256K + * 00 640K + * 1:0 11 illegal game port + * 10 gameport as mouse port + * 01 gameport as joysticks + * 00 gameport disabled * - * [D] 7:6 10 9MHz CPU speed - * 01 7MHz CPU speed - * 00 4.77 MHz CPU - * 5 unknown - * 4 external: color, internal: mono - * 3 unknown - * 2 internal video ON - * 1:0 11 mono - * 10 color80 - * 01 color40 - * 00 special (EGA,VGA etc) + * [D] 7:6 10 9MHz CPU speed + * 01 7MHz CPU speed + * 00 4.77 MHz CPU + * 5 unknown + * 4 external: color, internal: mono + * 3 unknown + * 2 internal video ON + * 1:0 11 mono + * 10 color80 + * 01 color40 + * 00 special (EGA,VGA etc) * - * [E] 7:4 unknown - * 3:0 country (00=Deutschland, 0A=ASCII) + * [E] 7:4 unknown + * 3:0 country (00=Deutschland, 0A=ASCII) */ nvr->regs[MRTC_CONF_A] = 0x00; /* CONFIG A */ nvr->regs[MRTC_CONF_B] = 0x0A; /* CONFIG B */ @@ -400,15 +400,15 @@ jim_set(europc_t *sys, uint8_t reg, uint8_t val) case 4: /* CPU Speed control */ switch (val & 0xc0) { case 0x00: /* 4.77 MHz */ - // cpu_set_clockscale(0, 1.0/2); + // cpu_set_clockscale(0, 1.0/2); break; case 0x40: /* 7.16 MHz */ - // cpu_set_clockscale(0, 3.0/4); + // cpu_set_clockscale(0, 3.0/4); break; default: /* 9.54 MHz */ - // cpu_set_clockscale(0, 1);break; + // cpu_set_clockscale(0, 1);break; break; } break; diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index c7789de26..bd5e22d89 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -174,219 +174,219 @@ static const scancode scancode_tandy[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x56, 0}, {0xd6, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*054*/ + { {0}, {0} }, { {0}, {0} }, /*054*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x57, 0}, {0xd7, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x35, 0}, {0xb5, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x38, 0}, {0xb8, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ { {0x29, 0}, {0xa9, 0} }, { {0x49, 0}, {0xc9, 0} }, - { {0}, {0} }, { {0x2b, 0}, {0xab, 0} }, /*148*/ + { {0}, {0} }, { {0x2b, 0}, {0xab, 0} }, /*148*/ { {0}, {0} }, { {0x4e, 0}, {0xce, 0} }, - { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ + { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ { {0x4a, 0}, {0xca, 0} }, { {0x51, 0}, {0xd1, 0} }, - { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ + { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*158*/ + { {0}, {0} }, { {0}, {0} }, /*158*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*15c*/ + { {0}, {0} }, { {0}, {0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*188*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; static uint8_t crtcmask[32] = { diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index c978e2caf..4bf24fc1d 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -889,219 +889,219 @@ const scancode scancode_olivetti_m24_deluxe[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0x5e, 0}, {0xde, 0} }, { {0x60, 0}, {0xe0, 0} }, /*054*/ + { {0x5e, 0}, {0xde, 0} }, { {0x60, 0}, {0xe0, 0} }, /*054*/ { {0x61, 0}, {0xe1, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x57, 0}, {0xd7, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x5f, 0}, {0xdf, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x66, 0}, {0xe6, 0} }, { {0x55, 0}, {0xd5, 0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x63, 0}, {0xe3, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x63, 0}, {0xe3, 0} }, /*144*/ { {0x5b, 0}, {0xdb, 0} }, { {0x5c, 0}, {0xdc, 0} }, - { {0}, {0} }, { {0x58, 0}, {0xd8, 0} }, /*148*/ + { {0}, {0} }, { {0x58, 0}, {0xd8, 0} }, /*148*/ { {0}, {0} }, { {0x5a, 0}, {0xda, 0} }, - { {0}, {0} }, { {0x65, 0}, {0xe5, 0} }, /*14c*/ + { {0}, {0} }, { {0x65, 0}, {0xe5, 0} }, /*14c*/ { {0x59, 0}, {0xd9, 0} }, { {0x5d, 0}, {0xdd, 0} }, - { {0x62, 0}, {0xe2, 0} }, { {0x64, 0}, {0xe4, 0} }, /*150*/ + { {0x62, 0}, {0xe2, 0} }, { {0x64, 0}, {0xe4, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0x54, 0}, {0xd4, 0} }, /*158*/ + { {0}, {0} }, { {0x54, 0}, {0xd4, 0} }, /*158*/ { {0x67, 0}, {0xe7, 0} }, { {0x56, 0}, {0xd6, 0} }, - { {0}, {0} }, { {0}, {0} }, /*15c*/ + { {0}, {0} }, { {0}, {0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*188*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; @@ -1156,219 +1156,219 @@ const scancode scancode_olivetti_m240[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*054*/ + { {0}, {0} }, { {0}, {0} }, /*054*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x1c, 0}, {0x9c, 0} }, { {0x1d, 0}, {0x9d, 0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x35, 0}, {0xb5, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x38, 0}, {0xb8, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ { {0x48, 0}, {0xc8, 0} }, { {0x49, 0}, {0xc9, 0} }, - { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ + { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ { {0}, {0} }, { {0x4d, 0}, {0xcd, 0} }, - { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ + { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, - { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ + { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*158*/ + { {0}, {0} }, { {0}, {0} }, /*158*/ { {0}, {0} }, { {0x54, 0}, {0xd4, 0} }, - { {0x56, 0}, {0xd6, 0} }, { {0x5c, 0}, {0xdc, 0} }, /*15c*/ + { {0x56, 0}, {0xd6, 0} }, { {0x5c, 0}, {0xdc, 0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*188*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; diff --git a/src/minitrace/minitrace.c b/src/minitrace/minitrace.c index df68e7d79..40388c5f2 100644 --- a/src/minitrace/minitrace.c +++ b/src/minitrace/minitrace.c @@ -48,20 +48,20 @@ // Ugh, this struct is already pretty heavy. // Will probably need to move arguments to a second buffer to support more than one. typedef struct raw_event { - const char *name; - const char *cat; - void *id; - int64_t ts; - uint32_t pid; - uint32_t tid; - char ph; - mtr_arg_type arg_type; - const char *arg_name; - union { - const char *a_str; - int a_int; - double a_double; - }; + const char *name; + const char *cat; + void *id; + int64_t ts; + uint32_t pid; + uint32_t tid; + char ph; + mtr_arg_type arg_type; + const char *arg_name; + union { + const char *a_str; + int a_int; + double a_double; + }; } raw_event_t; static raw_event_t *event_buffer; @@ -74,7 +74,7 @@ static int events_in_progress = 0; static int64_t time_offset; static int first_line = 1; static FILE *f; -static __thread int cur_thread_id; // Thread local storage +static __thread int cur_thread_id; // Thread local storage static int cur_process_id; static pthread_mutex_t mutex; static pthread_mutex_t event_mutex; @@ -89,44 +89,44 @@ void mtr_flush_with_state(int); // Tiny portability layer. // Exposes: -// get_cur_thread_id() -// get_cur_process_id() -// mtr_time_s() -// pthread basics +// get_cur_thread_id() +// get_cur_process_id() +// mtr_time_s() +// pthread basics #ifdef _WIN32 static int get_cur_thread_id(void) { - return (int)GetCurrentThreadId(); + return (int)GetCurrentThreadId(); } static int get_cur_process_id(void) { - return (int)GetCurrentProcessId(); + return (int)GetCurrentProcessId(); } static uint64_t _frequency = 0; static uint64_t _starttime = 0; double mtr_time_s(void) { - if (_frequency == 0) { - QueryPerformanceFrequency((LARGE_INTEGER*)&_frequency); - QueryPerformanceCounter((LARGE_INTEGER*)&_starttime); - } - __int64 time; - QueryPerformanceCounter((LARGE_INTEGER*)&time); - return ((double) (time - _starttime) / (double) _frequency); + if (_frequency == 0) { + QueryPerformanceFrequency((LARGE_INTEGER*)&_frequency); + QueryPerformanceCounter((LARGE_INTEGER*)&_starttime); + } + __int64 time; + QueryPerformanceCounter((LARGE_INTEGER*)&time); + return ((double) (time - _starttime) / (double) _frequency); } // Ctrl+C handling for Windows console apps static BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) { - if (atomic_load(&is_tracing) && fdwCtrlType == CTRL_C_EVENT) { - printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); - mtr_flush(); - mtr_shutdown(); - } - ExitProcess(1); + if (atomic_load(&is_tracing) && fdwCtrlType == CTRL_C_EVENT) { + printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); + mtr_flush(); + mtr_shutdown(); + } + ExitProcess(1); } void mtr_register_sigint_handler(void) { - // For console apps: - SetConsoleCtrlHandler(&CtrlHandler, TRUE); + // For console apps: + SetConsoleCtrlHandler(&CtrlHandler, TRUE); } HANDLE thread_handle; @@ -155,10 +155,10 @@ static void join_flushing_thread(void) { #else static inline int get_cur_thread_id(void) { - return (int)(intptr_t)pthread_self(); + return (int)(intptr_t)pthread_self(); } static inline int get_cur_process_id(void) { - return (int)getpid(); + return (int)getpid(); } static pthread_t thread_handle = 0; @@ -188,110 +188,110 @@ static void join_flushing_thread(void) { #if defined(BLACKBERRY) double mtr_time_s() { - struct timespec time; - clock_gettime(CLOCK_MONOTONIC, &time); // Linux must use CLOCK_MONOTONIC_RAW due to time warps - return time.tv_sec + time.tv_nsec / 1.0e9; + struct timespec time; + clock_gettime(CLOCK_MONOTONIC, &time); // Linux must use CLOCK_MONOTONIC_RAW due to time warps + return time.tv_sec + time.tv_nsec / 1.0e9; } #else double mtr_time_s(void) { - static time_t start; - struct timeval tv; - gettimeofday(&tv, NULL); - if (start == 0) { - start = tv.tv_sec; - } - tv.tv_sec -= start; - return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; + static time_t start; + struct timeval tv; + gettimeofday(&tv, NULL); + if (start == 0) { + start = tv.tv_sec; + } + tv.tv_sec -= start; + return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; } -#endif // !BLACKBERRY +#endif // !BLACKBERRY static void termination_handler(int signum) ATTR_NORETURN; static void termination_handler(int signum) { - (void) signum; - if (is_tracing) { - printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); - mtr_flush(); - fwrite("\n]}\n", 1, 4, f); - fclose(f); - } - exit(1); + (void) signum; + if (is_tracing) { + printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); + mtr_flush(); + fwrite("\n]}\n", 1, 4, f); + fclose(f); + } + exit(1); } void mtr_register_sigint_handler(void) { #ifndef MTR_ENABLED - return; + return; #endif - // Avoid altering set-to-be-ignored handlers while registering. - if (signal(SIGINT, &termination_handler) == SIG_IGN) - signal(SIGINT, SIG_IGN); + // Avoid altering set-to-be-ignored handlers while registering. + if (signal(SIGINT, &termination_handler) == SIG_IGN) + signal(SIGINT, SIG_IGN); } #endif void mtr_init_from_stream(void *stream) { #ifndef MTR_ENABLED - return; + return; #endif - event_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); - flush_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); - event_count = 0; - f = (FILE *)stream; - const char *header = "{\"traceEvents\":[\n"; - fwrite(header, 1, strlen(header), f); - time_offset = (uint64_t)(mtr_time_s() * 1000000); - first_line = 1; - pthread_mutex_init(&mutex, 0); - pthread_mutex_init(&event_mutex, 0); + event_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); + flush_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); + event_count = 0; + f = (FILE *)stream; + const char *header = "{\"traceEvents\":[\n"; + fwrite(header, 1, strlen(header), f); + time_offset = (uint64_t)(mtr_time_s() * 1000000); + first_line = 1; + pthread_mutex_init(&mutex, 0); + pthread_mutex_init(&event_mutex, 0); } void mtr_init(const char *json_file) { #ifndef MTR_ENABLED - return; + return; #endif - mtr_init_from_stream(fopen(json_file, "wb")); + mtr_init_from_stream(fopen(json_file, "wb")); } void mtr_shutdown(void) { - int i; + int i; #ifndef MTR_ENABLED - return; + return; #endif - mtr_flush_with_state(TRUE); + mtr_flush_with_state(TRUE); - fwrite("\n]}\n", 1, 4, f); - fclose(f); - pthread_mutex_destroy(&mutex); - pthread_mutex_destroy(&event_mutex); - f = 0; - free(event_buffer); - event_buffer = 0; - for (i = 0; i < STRING_POOL_SIZE; i++) { - if (str_pool[i]) { - free(str_pool[i]); - str_pool[i] = 0; - } - } + fwrite("\n]}\n", 1, 4, f); + fclose(f); + pthread_mutex_destroy(&mutex); + pthread_mutex_destroy(&event_mutex); + f = 0; + free(event_buffer); + event_buffer = 0; + for (i = 0; i < STRING_POOL_SIZE; i++) { + if (str_pool[i]) { + free(str_pool[i]); + str_pool[i] = 0; + } + } } const char *mtr_pool_string(const char *str) { - int i; - for (i = 0; i < STRING_POOL_SIZE; i++) { - if (!str_pool[i]) { - str_pool[i] = (char*)malloc(strlen(str) + 1); - strcpy(str_pool[i], str); - return str_pool[i]; - } else { - if (!strcmp(str, str_pool[i])) - return str_pool[i]; - } - } - return "string pool full"; + int i; + for (i = 0; i < STRING_POOL_SIZE; i++) { + if (!str_pool[i]) { + str_pool[i] = (char*)malloc(strlen(str) + 1); + strcpy(str_pool[i], str); + return str_pool[i]; + } else { + if (!strcmp(str, str_pool[i])) + return str_pool[i]; + } + } + return "string pool full"; } void mtr_start(void) { #ifndef MTR_ENABLED - return; + return; #endif #ifdef _WIN32 pthread_cond_init(&buffer_not_full_cond); @@ -301,19 +301,19 @@ void mtr_start(void) { pthread_cond_init(&buffer_full_cond, NULL); #endif atomic_store(&is_tracing, TRUE); - init_flushing_thread(); + init_flushing_thread(); } void mtr_stop(void) { #ifndef MTR_ENABLED - return; + return; #endif - atomic_store(&is_tracing, FALSE); - atomic_store(&stop_flushing_requested, TRUE); - pthread_cond_signal(&buffer_not_full_cond); - pthread_cond_signal(&buffer_full_cond); - join_flushing_thread(); - atomic_store(&stop_flushing_requested, FALSE); + atomic_store(&is_tracing, FALSE); + atomic_store(&stop_flushing_requested, TRUE); + pthread_cond_signal(&buffer_not_full_cond); + pthread_cond_signal(&buffer_full_cond); + join_flushing_thread(); + atomic_store(&stop_flushing_requested, FALSE); } // TODO: fwrite more than one line at a time. @@ -323,247 +323,248 @@ void mtr_stop(void) { // running at any point of time void mtr_flush_with_state(int is_last) { #ifndef MTR_ENABLED - return; + return; #endif - int i = 0; - char linebuf[1024]; - char arg_buf[1024]; - char id_buf[256]; - int event_count_copy = 0; - int events_in_progress_copy = 1; - raw_event_t *event_buffer_tmp = NULL; + int i = 0; + char linebuf[1024]; + char arg_buf[1024]; + char id_buf[256]; + int event_count_copy = 0; + int events_in_progress_copy = 1; + raw_event_t *event_buffer_tmp = NULL; - // small critical section to swap buffers - // - no any new events can be spawn while - // swapping since they tied to the same mutex - // - checks for any flushing in process - pthread_mutex_lock(&mutex); - // if not flushing already - if (is_flushing) { - pthread_mutex_unlock(&mutex); - return; - } - is_flushing = TRUE; - if(!is_last) { - while(event_count < INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { - pthread_cond_wait(&buffer_full_cond, &mutex); - } - } - event_count_copy = event_count; - event_buffer_tmp = flush_buffer; - flush_buffer = event_buffer; - event_buffer = event_buffer_tmp; - event_count = 0; - // waiting for any unfinished events before swap - while (events_in_progress_copy != 0) { - pthread_mutex_lock(&event_mutex); - events_in_progress_copy = events_in_progress; - pthread_mutex_unlock(&event_mutex); - } - pthread_mutex_unlock(&mutex); - pthread_cond_signal(&buffer_not_full_cond); + // small critical section to swap buffers + // - no any new events can be spawn while + // swapping since they tied to the same mutex + // - checks for any flushing in process + pthread_mutex_lock(&mutex); + // if not flushing already + if (is_flushing) { + pthread_mutex_unlock(&mutex); + return; + } + is_flushing = TRUE; + if(!is_last) { + while(event_count < INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { + pthread_cond_wait(&buffer_full_cond, &mutex); + } + } + event_count_copy = event_count; + event_buffer_tmp = flush_buffer; + flush_buffer = event_buffer; + event_buffer = event_buffer_tmp; + event_count = 0; + // waiting for any unfinished events before swap + while (events_in_progress_copy != 0) { + pthread_mutex_lock(&event_mutex); + events_in_progress_copy = events_in_progress; + pthread_mutex_unlock(&event_mutex); + } + pthread_mutex_unlock(&mutex); + pthread_cond_signal(&buffer_not_full_cond); - for (i = 0; i < event_count_copy; i++) { - raw_event_t *raw = &flush_buffer[i]; - int len; - switch (raw->arg_type) { - case MTR_ARG_TYPE_INT: - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":%i", raw->arg_name, raw->a_int); - break; - case MTR_ARG_TYPE_STRING_CONST: - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); - break; - case MTR_ARG_TYPE_STRING_COPY: - if (strlen(raw->a_str) > 700) { - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%.*s\"", raw->arg_name, 700, raw->a_str); - } else { - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); - } - break; - case MTR_ARG_TYPE_NONE: - arg_buf[0] = '\0'; - break; - } - if (raw->id) { - switch (raw->ph) { - case 'S': - case 'T': - case 'F': - // TODO: Support full 64-bit pointers - snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"id\":\"0x%08x\"", (uint32_t)(uintptr_t)raw->id); - break; - case 'X': - snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"dur\":%i", (int)raw->a_double); - break; - } - } else { - id_buf[0] = 0; - } - const char *cat = raw->cat; + for (i = 0; i < event_count_copy; i++) { + raw_event_t *raw = &flush_buffer[i]; + int len; + switch (raw->arg_type) { + case MTR_ARG_TYPE_INT: + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":%i", raw->arg_name, raw->a_int); + break; + case MTR_ARG_TYPE_STRING_CONST: + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); + break; + case MTR_ARG_TYPE_STRING_COPY: + if (strlen(raw->a_str) > 700) { + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%.*s\"", raw->arg_name, 700, raw->a_str); + } else { + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); + } + break; + case MTR_ARG_TYPE_NONE: + arg_buf[0] = '\0'; + break; + } + if (raw->id) { + switch (raw->ph) { + case 'S': + case 'T': + case 'F': + // TODO: Support full 64-bit pointers + snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"id\":\"0x%08x\"", (uint32_t)(uintptr_t)raw->id); + break; + case 'X': + snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"dur\":%i", (int)raw->a_double); + break; + } + } else { + id_buf[0] = 0; + } + const char *cat = raw->cat; #ifdef _WIN32 - // On Windows, we often end up with backslashes in category. - char temp[256]; - { - int len = (int)strlen(cat); - int i; - if (len > 255) len = 255; - for (i = 0; i < len; i++) { - temp[i] = cat[i] == '\\' ? '/' : cat[i]; - } - temp[len] = 0; - cat = temp; - } + // On Windows, we often end up with backslashes in category. + char temp[256]; + { + int len = (int)strlen(cat); + int i; + if (len > 255) len = 255; + for (i = 0; i < len; i++) { + temp[i] = cat[i] == '\\' ? '/' : cat[i]; + } + temp[len] = 0; + cat = temp; + } #endif - len = snprintf(linebuf, ARRAY_SIZE(linebuf), "%s{\"cat\":\"%s\",\"pid\":%i,\"tid\":%i,\"ts\":%" PRId64 ",\"ph\":\"%c\",\"name\":\"%s\",\"args\":{%s}%s}", - first_line ? "" : ",\n", - cat, raw->pid, raw->tid, raw->ts - time_offset, raw->ph, raw->name, arg_buf, id_buf); - fwrite(linebuf, 1, len, f); - first_line = 0; + len = snprintf(linebuf, ARRAY_SIZE(linebuf), "%s{\"cat\":\"%s\",\"pid\":%i,\"tid\":%i,\"ts\":%" PRId64 ",\"ph\":\"%c\",\"name\":\"%s\",\"args\":{%s}%s}", + first_line ? "" : ",\n", + cat, raw->pid, raw->tid, raw->ts - time_offset, raw->ph, raw->name, arg_buf, id_buf); + fwrite(linebuf, 1, len, f); + first_line = 0; - if (raw->arg_type == MTR_ARG_TYPE_STRING_COPY) { - free((void*)raw->a_str); - } - #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME - free(raw->name); - free(raw->cat); - #endif - } + if (raw->arg_type == MTR_ARG_TYPE_STRING_COPY) { + free((void*)raw->a_str); + } + #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME + free(raw->name); + free(raw->cat); + #endif + } - pthread_mutex_lock(&mutex); - is_flushing = is_last; - pthread_mutex_unlock(&mutex); + pthread_mutex_lock(&mutex); + is_flushing = is_last; + pthread_mutex_unlock(&mutex); } void mtr_flush(void) { - mtr_flush_with_state(FALSE); + mtr_flush_with_state(FALSE); } void internal_mtr_raw_event(const char *category, const char *name, char ph, void *id) { #ifndef MTR_ENABLED - return; + return; #endif - if (!atomic_load(&is_tracing)) { - return; - } - pthread_mutex_lock(&mutex); - while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { - pthread_cond_wait(&buffer_not_full_cond, &mutex); - } - raw_event_t *ev = &event_buffer[event_count]; - ++event_count; - pthread_mutex_lock(&event_mutex); - ++events_in_progress; - pthread_mutex_unlock(&event_mutex); - int local_event_count = event_count; - pthread_mutex_unlock(&mutex); - if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { - pthread_cond_signal(&buffer_full_cond); - } + if (!atomic_load(&is_tracing)) { + return; + } + pthread_mutex_lock(&mutex); + while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { + pthread_cond_wait(&buffer_not_full_cond, &mutex); - double ts = mtr_time_s(); + } + raw_event_t *ev = &event_buffer[event_count]; + ++event_count; + pthread_mutex_lock(&event_mutex); + ++events_in_progress; + pthread_mutex_unlock(&event_mutex); + int local_event_count = event_count; + pthread_mutex_unlock(&mutex); + if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { + pthread_cond_signal(&buffer_full_cond); + } - if (!cur_thread_id) { - cur_thread_id = get_cur_thread_id(); - } - if (!cur_process_id) { - cur_process_id = get_cur_process_id(); - } + double ts = mtr_time_s(); + + if (!cur_thread_id) { + cur_thread_id = get_cur_thread_id(); + } + if (!cur_process_id) { + cur_process_id = get_cur_process_id(); + } #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME - const size_t category_len = strlen(category); - ev->cat = malloc(category_len + 1); - strcpy(ev->cat, category); + const size_t category_len = strlen(category); + ev->cat = malloc(category_len + 1); + strcpy(ev->cat, category); - const size_t name_len = strlen(name); - ev->name = malloc(name_len + 1); - strcpy(ev->name, name); + const size_t name_len = strlen(name); + ev->name = malloc(name_len + 1); + strcpy(ev->name, name); #else - ev->cat = category; - ev->name = name; + ev->cat = category; + ev->name = name; #endif - ev->id = id; - ev->ph = ph; - if (ev->ph == 'X') { - double x; - memcpy(&x, id, sizeof(double)); - ev->ts = (int64_t)(x * 1000000); - ev->a_double = (ts - x) * 1000000; - } else { - ev->ts = (int64_t)(ts * 1000000); - } - ev->tid = cur_thread_id; - ev->pid = cur_process_id; - ev->arg_type = MTR_ARG_TYPE_NONE; + ev->id = id; + ev->ph = ph; + if (ev->ph == 'X') { + double x; + memcpy(&x, id, sizeof(double)); + ev->ts = (int64_t)(x * 1000000); + ev->a_double = (ts - x) * 1000000; + } else { + ev->ts = (int64_t)(ts * 1000000); + } + ev->tid = cur_thread_id; + ev->pid = cur_process_id; + ev->arg_type = MTR_ARG_TYPE_NONE; - pthread_mutex_lock(&event_mutex); - --events_in_progress; - pthread_mutex_unlock(&event_mutex); + pthread_mutex_lock(&event_mutex); + --events_in_progress; + pthread_mutex_unlock(&event_mutex); } void internal_mtr_raw_event_arg(const char *category, const char *name, char ph, void *id, mtr_arg_type arg_type, const char *arg_name, void *arg_value) { #ifndef MTR_ENABLED - return; + return; #endif - if (!atomic_load(&is_tracing)) { - return; - } - pthread_mutex_lock(&mutex); - while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { - pthread_cond_wait(&buffer_not_full_cond, &mutex); - } - raw_event_t *ev = &event_buffer[event_count]; - ++event_count; - pthread_mutex_lock(&event_mutex); - ++events_in_progress; - pthread_mutex_unlock(&event_mutex); - int local_event_count = event_count; - pthread_mutex_unlock(&mutex); - if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { - pthread_cond_signal(&buffer_full_cond); - } + if (!atomic_load(&is_tracing)) { + return; + } + pthread_mutex_lock(&mutex); + while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { + pthread_cond_wait(&buffer_not_full_cond, &mutex); + } + raw_event_t *ev = &event_buffer[event_count]; + ++event_count; + pthread_mutex_lock(&event_mutex); + ++events_in_progress; + pthread_mutex_unlock(&event_mutex); + int local_event_count = event_count; + pthread_mutex_unlock(&mutex); + if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { + pthread_cond_signal(&buffer_full_cond); + } - if (!cur_thread_id) { - cur_thread_id = get_cur_thread_id(); - } - if (!cur_process_id) { - cur_process_id = get_cur_process_id(); - } - double ts = mtr_time_s(); + if (!cur_thread_id) { + cur_thread_id = get_cur_thread_id(); + } + if (!cur_process_id) { + cur_process_id = get_cur_process_id(); + } + double ts = mtr_time_s(); #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME - const size_t category_len = strlen(category); - ev->cat = malloc(category_len + 1); - strcpy(ev->cat, category); + const size_t category_len = strlen(category); + ev->cat = malloc(category_len + 1); + strcpy(ev->cat, category); - const size_t name_len = strlen(name); - ev->name = malloc(name_len + 1); - strcpy(ev->name, name); + const size_t name_len = strlen(name); + ev->name = malloc(name_len + 1); + strcpy(ev->name, name); #else - ev->cat = category; - ev->name = name; + ev->cat = category; + ev->name = name; #endif - ev->id = id; - ev->ts = (int64_t)(ts * 1000000); - ev->ph = ph; - ev->tid = cur_thread_id; - ev->pid = cur_process_id; - ev->arg_type = arg_type; - ev->arg_name = arg_name; - switch (arg_type) { - case MTR_ARG_TYPE_INT: ev->a_int = (int)(uintptr_t)arg_value; break; - case MTR_ARG_TYPE_STRING_CONST: ev->a_str = (const char*)arg_value; break; - case MTR_ARG_TYPE_STRING_COPY: ev->a_str = strdup((const char*)arg_value); break; - case MTR_ARG_TYPE_NONE: break; - } + ev->id = id; + ev->ts = (int64_t)(ts * 1000000); + ev->ph = ph; + ev->tid = cur_thread_id; + ev->pid = cur_process_id; + ev->arg_type = arg_type; + ev->arg_name = arg_name; + switch (arg_type) { + case MTR_ARG_TYPE_INT: ev->a_int = (int)(uintptr_t)arg_value; break; + case MTR_ARG_TYPE_STRING_CONST: ev->a_str = (const char*)arg_value; break; + case MTR_ARG_TYPE_STRING_COPY: ev->a_str = strdup((const char*)arg_value); break; + case MTR_ARG_TYPE_NONE: break; + } - pthread_mutex_lock(&event_mutex); - --events_in_progress; - pthread_mutex_unlock(&event_mutex); + pthread_mutex_lock(&event_mutex); + --events_in_progress; + pthread_mutex_unlock(&event_mutex); } diff --git a/src/network/net_3c501.c b/src/network/net_3c501.c index 19ad587c2..736edb85b 100644 --- a/src/network/net_3c501.c +++ b/src/network/net_3c501.c @@ -1,22 +1,23 @@ /* - * 86Box An emulator of (mostly) x86-based PC systems and devices, - * using the ISA, EISA, VLB, MCA, and PCI system buses, - * roughly spanning the era between 1981 and 1995. + * 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 Project. + * This file is part of the 86Box distribution. * - * Implementation of the following network controller: - * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). + * Implementation of the following network controller: + * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). * * * - * Based on @(#)Dev3C501.cpp Oracle (VirtualBox) + * Based on @(#)Dev3C501.cpp Oracle (VirtualBox) * - * Authors: TheCollector1995, - * Oracle + * Authors: TheCollector1995, + * Oracle * - * Copyright 2022 TheCollector1995. - * Portions Copyright (C) 2022 Oracle and/or its affilitates. + * Copyright 2022 TheCollector1995. + * Portions Copyright (C) 2022 Oracle and/or its affilitates. * * 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 diff --git a/src/network/net_3c503.c b/src/network/net_3c503.c index 07dcc1a43..9e4f9c12b 100644 --- a/src/network/net_3c503.c +++ b/src/network/net_3c503.c @@ -1,9 +1,10 @@ /* - * 86Box An emulator of (mostly) x86-based PC systems and devices, - * using the ISA, EISA, VLB, MCA, and PCI system buses, - * roughly spanning the era between 1981 and 1995. + * 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 Project. + * This file is part of the 86Box distribution. * * Implementation of the following network controllers: * - 3Com Etherlink II 3c503 (ISA 8-bit). diff --git a/src/network/net_dp8390.c b/src/network/net_dp8390.c index 255749e4e..3b54fdb9d 100644 --- a/src/network/net_dp8390.c +++ b/src/network/net_dp8390.c @@ -44,11 +44,11 @@ dp8390_log(const char *fmt, ...) { va_list ap; - // if (dp8390_do_log >= lvl) { +// if (dp8390_do_log >= lvl) { va_start(ap, fmt); pclog_ex(fmt, ap); va_end(ap); - // } +// } } #else # define dp8390_log(lvl, fmt, ...) diff --git a/src/qt/evdev_mouse.cpp b/src/qt/evdev_mouse.cpp index c3d926285..4b487e65d 100644 --- a/src/qt/evdev_mouse.cpp +++ b/src/qt/evdev_mouse.cpp @@ -1,18 +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. * - * Linux/FreeBSD libevdev mouse input module. + * Linux/FreeBSD libevdev mouse input module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "evdev_mouse.hpp" #include diff --git a/src/qt/qt.c b/src/qt/qt.c index f1c6eee3f..c2a5396da 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -1,16 +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. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ /* * C functionality for Qt platform, where the C equivalent is not easily diff --git a/src/qt/qt_cdrom.c b/src/qt/qt_cdrom.c index d0ab0113e..80310835b 100644 --- a/src/qt/qt_cdrom.c +++ b/src/qt/qt_cdrom.c @@ -1,21 +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. + * 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. * - * Handle the platform-side of CDROM/ZIP/MO drives. + * Handle the platform-side of CDROM/ZIP/MO drives. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #include diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 81f8b8493..2fecdc543 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -1,20 +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. + * 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. * - * Device configuration UI code. + * Device configuration UI code. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 */ #include "qt_deviceconfig.hpp" #include "ui_qt_deviceconfig.h" diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index 969d5ff29..9bdb6cd7f 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -1,20 +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. + * 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. * - * File field widget. + * File field widget. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 */ #include "qt_filefield.hpp" #include "ui_qt_filefield.h" diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index eb8b3fd1a..943b13dc0 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -1,20 +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. + * 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. * - * Hard disk dialog code. + * Hard disk dialog code. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 */ #include "qt_harddiskdialog.hpp" #include "ui_qt_harddiskdialog.h" diff --git a/src/qt/qt_harddrive_common.cpp b/src/qt/qt_harddrive_common.cpp index 7d3beaa2b..3bfb62c09 100644 --- a/src/qt/qt_harddrive_common.cpp +++ b/src/qt/qt_harddrive_common.cpp @@ -1,18 +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. * - * Common storage devices module. + * Common storage devices module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_harddrive_common.hpp" diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index f158e7d62..647827e85 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Hardware renderer module. + * Hardware renderer module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include "qt_hardwarerenderer.hpp" #include diff --git a/src/qt/qt_joystickconfiguration.cpp b/src/qt/qt_joystickconfiguration.cpp index a9c53c07e..e91cb9086 100644 --- a/src/qt/qt_joystickconfiguration.cpp +++ b/src/qt/qt_joystickconfiguration.cpp @@ -1,18 +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. * - * Joystick configuration UI module. + * Joystick configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_joystickconfiguration.hpp" #include "ui_qt_joystickconfiguration.h" diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 23df27150..69180f758 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -1,20 +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. + * 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. * - * Joystick configuration UI module. + * Joystick configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 */ #include "qt_machinestatus.hpp" diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 1ae545227..e2d4c6c90 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -1,21 +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. + * 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. * - * Main entry point module + * Main entry point module * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include #include diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 24c37d107..f0e8fdc34 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1,24 +1,24 @@ /* - * 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. * - * Main window module. + * Main window module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * dob205 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen - * Copyright 2022 dob205 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen + * Copyright 2022 dob205 */ #include diff --git a/src/qt/qt_mediahistorymanager.cpp b/src/qt/qt_mediahistorymanager.cpp index 5564afd46..b895b46aa 100644 --- a/src/qt/qt_mediahistorymanager.cpp +++ b/src/qt/qt_mediahistorymanager.cpp @@ -1,18 +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. * - * Media history management module + * Media history management module * * * - * Authors: cold-brewed + * Authors: cold-brewed * - * Copyright 2022 The 86Box development team + * Copyright 2022 The 86Box development team */ #include diff --git a/src/qt/qt_mediahistorymanager.hpp b/src/qt/qt_mediahistorymanager.hpp index 507cbdf7f..f1942b81c 100644 --- a/src/qt/qt_mediahistorymanager.hpp +++ b/src/qt/qt_mediahistorymanager.hpp @@ -1,18 +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. * - * Header for the media history management module + * Header for the media history management module * * * - * Authors: cold-brewed + * Authors: cold-brewed * - * Copyright 2022 The 86Box development team + * Copyright 2022 The 86Box development team */ #ifndef QT_MEDIAHISTORYMANAGER_HPP diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index e0c145981..7d230b095 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Media menu UI module. + * Media menu UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include "qt_progsettings.hpp" #include "qt_machinestatus.hpp" diff --git a/src/qt/qt_models_common.cpp b/src/qt/qt_models_common.cpp index 0e9856a50..ed6aeaa7d 100644 --- a/src/qt/qt_models_common.cpp +++ b/src/qt/qt_models_common.cpp @@ -1,18 +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. * - * Common storage devices module. + * Common storage devices module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_models_common.hpp" diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index cbb021963..479b6711f 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Common storage devices module. + * Common storage devices module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 - * Copyright 2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 + * Copyright 2022 Teemu Korhonen */ #include "qt_newfloppydialog.hpp" #include "ui_qt_newfloppydialog.h" diff --git a/src/qt/qt_opengloptions.cpp b/src/qt/qt_opengloptions.cpp index f90ba37c0..58030b467 100644 --- a/src/qt/qt_opengloptions.cpp +++ b/src/qt/qt_opengloptions.cpp @@ -1,17 +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. * - * OpenGL renderer options for Qt + * OpenGL renderer options for Qt * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_opengloptions.hpp b/src/qt/qt_opengloptions.hpp index b88cf4b07..64f761670 100644 --- a/src/qt/qt_opengloptions.hpp +++ b/src/qt/qt_opengloptions.hpp @@ -1,17 +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. * - * Header for OpenGL renderer options + * Header for OpenGL renderer options * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #ifndef QT_OPENGLOPTIONS_HPP diff --git a/src/qt/qt_opengloptionsdialog.cpp b/src/qt/qt_opengloptionsdialog.cpp index c87989161..acb2ce9f2 100644 --- a/src/qt/qt_opengloptionsdialog.cpp +++ b/src/qt/qt_opengloptionsdialog.cpp @@ -1,17 +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. * - * OpenGL renderer options dialog for Qt + * OpenGL renderer options dialog for Qt * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_opengloptionsdialog.hpp b/src/qt/qt_opengloptionsdialog.hpp index 6b1c673bd..f34d74d75 100644 --- a/src/qt/qt_opengloptionsdialog.hpp +++ b/src/qt/qt_opengloptionsdialog.hpp @@ -1,17 +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. * - * Header for OpenGL renderer options dialog + * Header for OpenGL renderer options dialog * - * Authors: - * Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * Copyright 2022 Teemu Korhonen */ #ifndef QT_OPENGLOPTIONSDIALOG_H diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index a2f1ecad0..60aa998a9 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -1,17 +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. * - * OpenGL renderer for Qt + * OpenGL renderer for Qt * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_openglrenderer.hpp b/src/qt/qt_openglrenderer.hpp index c303ca614..27822600c 100644 --- a/src/qt/qt_openglrenderer.hpp +++ b/src/qt/qt_openglrenderer.hpp @@ -1,17 +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. * - * Header file for OpenGL renderer + * Header file for OpenGL renderer * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #ifndef QT_OPENGLRENDERER_HPP diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 0fe611cbe..f1d56d061 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -1,21 +1,22 @@ /* - * 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. * - * Common platform functions. + * Common platform functions. * * - * Authors: Joakim L. Gilje + * + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 3ee998002..4dda901d7 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -1,18 +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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include diff --git a/src/qt/qt_renderercommon.cpp b/src/qt/qt_renderercommon.cpp index 98fb27ca0..47bc33d51 100644 --- a/src/qt/qt_renderercommon.cpp +++ b/src/qt/qt_renderercommon.cpp @@ -1,18 +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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_renderercommon.hpp" diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index d36a88f86..885c97990 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -1,12 +1,12 @@ /* - * 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. * - * Program settings UI module. + * Program settings UI module. * * * @@ -14,9 +14,9 @@ * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2021 Teemu Korhonen - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2021 Teemu Korhonen + * Copyright 2021-2022 Cacodemon345 */ #include "qt_rendererstack.hpp" #include "ui_qt_rendererstack.h" diff --git a/src/qt/qt_sdl.c b/src/qt/qt_sdl.c index 54eca952b..857ccf381 100644 --- a/src/qt/qt_sdl.c +++ b/src/qt/qt_sdl.c @@ -1,42 +1,42 @@ /* - * 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. * - * Rendering module for libSDL2 + * Rendering module for libSDL2 * - * NOTE: Given all the problems reported with FULLSCREEN use of SDL, - * we will not use that, but, instead, use a new window which - * coverrs the entire desktop. + * NOTE: Given all the problems reported with FULLSCREEN use of SDL, + * we will not use that, but, instead, use a new window which + * covers the entire desktop. * * * - * Authors: Fred N. van Kempen, - * Michael Drüing, + * Authors: Fred N. van Kempen, + * Michael Drüing, * - * Copyright 2018-2020 Fred N. van Kempen. - * Copyright 2018-2020 Michael Drüing. + * Copyright 2018-2020 Fred N. van Kempen. + * Copyright 2018-2020 Michael Drüing. * - * Redistribution and use in source and binary forms, with - * or without modification, are permitted provided that the - * following conditions are met: + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: * - * 1. Redistributions of source code must retain the entire - * above notice, this list of conditions and the following - * disclaimer. + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names - * of its contributors may be used to endorse or promote - * products derived from this software without specific - * prior written permission. + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT diff --git a/src/qt/qt_sdl.h b/src/qt/qt_sdl.h index 684e6ccd0..8b691c78c 100644 --- a/src/qt/qt_sdl.h +++ b/src/qt/qt_sdl.h @@ -1,38 +1,38 @@ /* - * 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 libSDL2 rendering module. + * Definitions for the libSDL2 rendering module. * * * - * Authors: Fred N. van Kempen, - * Michael Drüing, + * Authors: Fred N. van Kempen, + * Michael Drüing, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Michael Drüing. + * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018,2019 Michael Drüing. * - * Redistribution and use in source and binary forms, with - * or without modification, are permitted provided that the - * following conditions are met: + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: * - * 1. Redistributions of source code must retain the entire - * above notice, this list of conditions and the following - * disclaimer. + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names - * of its contributors may be used to endorse or promote - * products derived from this software without specific - * prior written permission. + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index b42b20786..f9a6b8e14 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -1,20 +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. + * 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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 */ #include "qt_settings.hpp" #include "ui_qt_settings.h" diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp index c22b8b10b..c6069e99e 100644 --- a/src/qt/qt_settings_bus_tracking.cpp +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -1,20 +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. + * 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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Miran Grca * Cacodemon345 * - * Copyright 2022 Miran Grca - * Copyright 2022 Cacodemon345 + * Copyright 2022 Miran Grca + * Copyright 2022 Cacodemon345 */ #include #include diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp index f01d7fc4d..d459b0e53 100644 --- a/src/qt/qt_settingsdisplay.cpp +++ b/src/qt/qt_settingsdisplay.cpp @@ -1,18 +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. * - * Display settings UI module. + * Display settings UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsdisplay.hpp" #include "ui_qt_settingsdisplay.h" diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 2eabe80ab..63a7e4cb5 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -1,20 +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. + * 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. * - * Floppy/CD-ROM devices configuration UI module. + * Floppy/CD-ROM devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsfloppycdrom.hpp" #include "ui_qt_settingsfloppycdrom.h" diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index 1883797e5..1b6964898 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -1,20 +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. + * 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. * - * Hard disk configuration UI module. + * Hard disk configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsharddisks.hpp" #include "ui_qt_settingsharddisks.h" diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp index 49d84037f..630fc705d 100644 --- a/src/qt/qt_settingsinput.cpp +++ b/src/qt/qt_settingsinput.cpp @@ -1,18 +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. * - * Mouse/Joystick configuration UI module. + * Mouse/Joystick configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsinput.hpp" #include "ui_qt_settingsinput.h" diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index 0d2ffa129..b88397e30 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -1,18 +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. * - * Machine selection and configuration UI module. + * Machine selection and configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsmachine.hpp" #include "ui_qt_settingsmachine.h" diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp index cbddfab72..014e82ab3 100644 --- a/src/qt/qt_settingsnetwork.cpp +++ b/src/qt/qt_settingsnetwork.cpp @@ -1,18 +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. * - * Network devices configuration UI module. + * Network devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsnetwork.hpp" #include "ui_qt_settingsnetwork.h" diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp index edffd360a..e0edd7358 100644 --- a/src/qt/qt_settingsotherperipherals.cpp +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -1,18 +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. * - * Other peripherals configuration UI module. + * Other peripherals configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsotherperipherals.hpp" #include "ui_qt_settingsotherperipherals.h" diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index f625388ea..bb77046d2 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -1,20 +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. + * 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. * - * Other removable devices configuration UI module. + * Other removable devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsotherremovable.hpp" #include "ui_qt_settingsotherremovable.h" diff --git a/src/qt/qt_settingsports.cpp b/src/qt/qt_settingsports.cpp index dfa2c8853..a4be440e5 100644 --- a/src/qt/qt_settingsports.cpp +++ b/src/qt/qt_settingsports.cpp @@ -1,21 +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. + * 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. * - * Serial/Parallel ports configuration UI module. + * Serial/Parallel ports configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2022 Cacodemon345 - * Copyright 2022 Jasmine Iwanek - * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 + * Copyright 2022 Jasmine Iwanek + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsports.hpp" #include "ui_qt_settingsports.h" diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp index 57686f7df..e17ec5ed1 100644 --- a/src/qt/qt_settingssound.cpp +++ b/src/qt/qt_settingssound.cpp @@ -1,18 +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. * - * Sound/MIDI devices configuration UI module. + * Sound/MIDI devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingssound.hpp" #include "ui_qt_settingssound.h" diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index 2aecab568..5b85739f7 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -1,18 +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. * - * Storage devices configuration UI module. + * Storage devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsstoragecontrollers.hpp" #include "ui_qt_settingsstoragecontrollers.h" diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index cd27e1c0e..a8c0229d3 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Software renderer module. + * Software renderer module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include "qt_softwarerenderer.hpp" #include diff --git a/src/qt/qt_soundgain.cpp b/src/qt/qt_soundgain.cpp index 9283ae42e..725a5b115 100644 --- a/src/qt/qt_soundgain.cpp +++ b/src/qt/qt_soundgain.cpp @@ -1,18 +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. * - * Sound gain dialog UI module. + * Sound gain dialog UI module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "qt_soundgain.hpp" #include "ui_qt_soundgain.h" diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp index e2aa24a9b..c01ef2ae4 100644 --- a/src/qt/qt_specifydimensions.cpp +++ b/src/qt/qt_specifydimensions.cpp @@ -1,18 +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. * - * Specify dimensions UI module. + * Specify dimensions UI module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "qt_specifydimensions.h" #include "ui_qt_specifydimensions.h" diff --git a/src/qt/qt_styleoverride.cpp b/src/qt/qt_styleoverride.cpp index 6efe523d9..7ec5a341c 100644 --- a/src/qt/qt_styleoverride.cpp +++ b/src/qt/qt_styleoverride.cpp @@ -1,18 +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. * - * Style override class. + * Style override class. * * * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * Copyright 2022 Teemu Korhonen */ #include "qt_styleoverride.hpp" diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index a2864f3ea..05a2e8f6c 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -1,20 +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. + * 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. * - * Common UI functions. + * Common UI functions. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 */ #include diff --git a/src/qt/qt_unixmanagerfilter.cpp b/src/qt/qt_unixmanagerfilter.cpp index d1091198d..5d94584e6 100644 --- a/src/qt/qt_unixmanagerfilter.cpp +++ b/src/qt/qt_unixmanagerfilter.cpp @@ -1,19 +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. + * 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. * - * Source file for Unix VM-managers (client-side) + * Source file for Unix VM-managers (client-side) * - * Authors: - * Teemu Korhonen - Cacodemon345 * - * Copyright 2022 Teemu Korhonen - * Copyright 2022 Cacodemon345 + * + * Authors: Teemu Korhonen + * Cacodemon345 + * + * Copyright 2022 Teemu Korhonen + * Copyright 2022 Cacodemon345 */ #include "qt_unixmanagerfilter.hpp" diff --git a/src/qt/qt_unixmanagerfilter.hpp b/src/qt/qt_unixmanagerfilter.hpp index eca373b47..0587e06ee 100644 --- a/src/qt/qt_unixmanagerfilter.hpp +++ b/src/qt/qt_unixmanagerfilter.hpp @@ -1,19 +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. + * 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 file for Unix VM-managers (client-side) * - * Authors: - * Teemu Korhonen - Cacodemon345 * - * Copyright 2022 Teemu Korhonen - * Copyright 2022 Cacodemon345 + * + * Authors: Teemu Korhonen + * Cacodemon345 + * + * Copyright 2022 Teemu Korhonen + * Copyright 2022 Cacodemon345 */ #ifndef QT_UNIXMANAGERFILTER_HPP diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp index 876a4b047..b05b656bb 100644 --- a/src/qt/qt_util.cpp +++ b/src/qt/qt_util.cpp @@ -1,18 +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. * - * Utility functions. + * Utility functions. * * * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * Copyright 2022 Teemu Korhonen */ #include #include diff --git a/src/qt/qt_winmanagerfilter.cpp b/src/qt/qt_winmanagerfilter.cpp index d9a6208b1..0218ae5ba 100644 --- a/src/qt/qt_winmanagerfilter.cpp +++ b/src/qt/qt_winmanagerfilter.cpp @@ -1,17 +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. * - * Windows VM-managers native messages filter + * Windows VM-managers native messages filter * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include "qt_winmanagerfilter.hpp" diff --git a/src/qt/qt_winmanagerfilter.hpp b/src/qt/qt_winmanagerfilter.hpp index cd141e93f..e8fb06d90 100644 --- a/src/qt/qt_winmanagerfilter.hpp +++ b/src/qt/qt_winmanagerfilter.hpp @@ -1,17 +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. * - * Header file for Windows VM-managers native messages filter + * Header file for Windows VM-managers native messages filter * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #ifndef QT_WINDOWSMANAGERFILTER_HPP diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp index 56d8c9ec9..88b723d4c 100644 --- a/src/qt/qt_winrawinputfilter.cpp +++ b/src/qt/qt_winrawinputfilter.cpp @@ -1,19 +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. + * 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. * - * Windows raw input native filter for QT + * Windows raw input native filter for QT * - * Authors: - * Teemu Korhonen - * Miran Grca, * - * Copyright 2021 Teemu Korhonen - * Copyright 2016-2018 Miran Grca. + * + * Authors: Teemu Korhonen + * Miran Grca, + * + * Copyright 2021 Teemu Korhonen + * Copyright 2016-2018 Miran Grca. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/qt/qt_winrawinputfilter.hpp b/src/qt/qt_winrawinputfilter.hpp index 252f7206c..6d23b83b7 100644 --- a/src/qt/qt_winrawinputfilter.hpp +++ b/src/qt/qt_winrawinputfilter.hpp @@ -1,17 +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. * - * Header file for windows raw input native filter for QT + * Header file for windows raw input native filter for QT * - * Authors: - * Teemu Korhonen * - * Copyright 2021 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2021 Teemu Korhonen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/qt/win_dynld.c b/src/qt/win_dynld.c index 66fd0503d..fd0064d7f 100644 --- a/src/qt/win_dynld.c +++ b/src/qt/win_dynld.c @@ -1,18 +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. * - * Try to load a support DLL. + * Try to load a support DLL. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen + * Copyright 2017,2018 Fred N. van Kempen */ #include #include diff --git a/src/qt/win_joystick_rawinput.c b/src/qt/win_joystick_rawinput.c index f41131b28..efa7714df 100644 --- a/src/qt/win_joystick_rawinput.c +++ b/src/qt/win_joystick_rawinput.c @@ -1,20 +1,22 @@ /* - * 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. * - * RawInput joystick interface. + * RawInput joystick interface. * - * Authors: Sarah Walker, - * Miran Grca, - * GH Cao, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2020 GH Cao. + * + * Authors: Sarah Walker, + * Miran Grca, + * GH Cao, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2020 GH Cao. */ #include #include diff --git a/src/qt/wl_mouse.cpp b/src/qt/wl_mouse.cpp index 4cc1b3169..9b23792c8 100644 --- a/src/qt/wl_mouse.cpp +++ b/src/qt/wl_mouse.cpp @@ -1,18 +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. * - * Wayland mouse input module. + * Wayland mouse input module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "wl_mouse.hpp" #include diff --git a/src/qt/xinput2_mouse.cpp b/src/qt/xinput2_mouse.cpp index 5017c78d2..7e49c2694 100644 --- a/src/qt/xinput2_mouse.cpp +++ b/src/qt/xinput2_mouse.cpp @@ -1,18 +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. * - * X11 Xinput2 mouse input module. + * X11 Xinput2 mouse input module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2022 Cacodemon345 + * Copyright 2022 Cacodemon345 */ /* Valuator parsing and duplicate event checking code from SDL2. */ diff --git a/src/scsi/scsi_aha154x.c b/src/scsi/scsi_aha154x.c index 669d050bf..aec89d588 100644 --- a/src/scsi/scsi_aha154x.c +++ b/src/scsi/scsi_aha154x.c @@ -641,8 +641,8 @@ aha_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv) * their way of handling issues like these at the time.. * * Patch 1: emulate the I/O ADDR SW setting by patching a - * byte in the BIOS that indicates the I/O ADDR - * switch setting on the board. + * byte in the BIOS that indicates the I/O ADDR + * switch setting on the board. */ if (dev->rom_ioaddr != 0x0000) { /* Look up the I/O address in the table. */ @@ -789,8 +789,8 @@ aha_setbios(x54x_t *dev) * their way of handling issues like these at the time.. * * Patch 1: emulate the I/O ADDR SW setting by patching a - * byte in the BIOS that indicates the I/O ADDR - * switch setting on the board. + * byte in the BIOS that indicates the I/O ADDR + * switch setting on the board. */ if (dev->rom_ioaddr != 0x0000) { /* Look up the I/O address in the table. */ @@ -880,11 +880,11 @@ aha_initnvr(x54x_t *dev) dev->nvr[0] |= EE0_ALTFLOP; dev->nvr[1] = dev->Irq - 9; /* IRQ15 */ dev->nvr[1] |= (dev->DmaChannel << 4); /* DMA6 */ - dev->nvr[2] = (EE2_HABIOS | /* BIOS enabled */ - EE2_DYNSCAN | /* scan bus */ - EE2_EXT1G | EE2_RMVOK); /* Imm return on seek */ - dev->nvr[3] = SPEED_50; /* speed 5.0 MB/s */ - dev->nvr[6] = (EE6_TERM | /* host term enable */ + dev->nvr[2] = (EE2_HABIOS | /* BIOS enabled */ + EE2_DYNSCAN | /* scan bus */ + EE2_EXT1G | EE2_RMVOK); /* Imm return on seek */ + dev->nvr[3] = SPEED_50; /* speed 5.0 MB/s */ + dev->nvr[6] = (EE6_TERM | /* host term enable */ EE6_RSTBUS); /* reset SCSI bus on boot*/ } diff --git a/src/scsi/scsi_buslogic.c b/src/scsi/scsi_buslogic.c index c0b0575df..1e0f74d0f 100644 --- a/src/scsi/scsi_buslogic.c +++ b/src/scsi/scsi_buslogic.c @@ -1152,7 +1152,7 @@ BuslogicPCIRead(int func, int addr, void *p) case 0x13: return buslogic_pci_bar[0].addr_regs[3]; case 0x14: - // return (buslogic_pci_bar[1].addr_regs[0] & 0xe0); /*Memory space*/ + // return (buslogic_pci_bar[1].addr_regs[0] & 0xe0); /*Memory space*/ return 0x00; case 0x15: return buslogic_pci_bar[1].addr_regs[1] & 0xc0; diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index e736b879d..dbae39be9 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -980,10 +980,10 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *l data than that. */ #if 0 if ((dev->sector_pos + dev->sector_len - 1) >= cdsize) { - scsi_cdrom_log("CD-ROM %i: Trying to read to beyond the end of disc (%i >= %i)\n", dev->id, - (dev->sector_pos + dev->sector_len - 1), cdsize); - scsi_cdrom_lba_out_of_range(dev); - return -1; + scsi_cdrom_log("CD-ROM %i: Trying to read to beyond the end of disc (%i >= %i)\n", dev->id, + (dev->sector_pos + dev->sector_len - 1), cdsize); + scsi_cdrom_lba_out_of_range(dev); + return -1; } #endif @@ -2488,7 +2488,7 @@ atapi_out: break; #if 0 - case GPCMD_PAUSE_RESUME_ALT: + case GPCMD_PAUSE_RESUME_ALT: #endif case GPCMD_PAUSE_RESUME: scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); diff --git a/src/scsi/scsi_spock.c b/src/scsi/scsi_spock.c index ab970f17a..acfb1ea27 100644 --- a/src/scsi/scsi_spock.c +++ b/src/scsi/scsi_spock.c @@ -1162,12 +1162,12 @@ static const device_config_t spock_rom_config[] = { // clang-format off { .name = "bios_ver", - .description = "BIOS Version", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 1, - .file_filter = "", - .spinner = { 0 }, + .description = "BIOS Version", + .type = CONFIG_SELECTION, + .default_string = "", + .default_int = 1, + .file_filter = "", + .spinner = { 0 }, .selection = { { .description = "1991 BIOS (>1GB)", .value = 1 }, { .description = "1990 BIOS", .value = 0 }, diff --git a/src/scsi/scsi_x54x.c b/src/scsi/scsi_x54x.c index 45854a0ba..ae049d921 100644 --- a/src/scsi/scsi_x54x.c +++ b/src/scsi/scsi_x54x.c @@ -1312,14 +1312,14 @@ x54x_in(uint16_t port, void *priv) case 3: /* Bits according to ASPI4DOS.SYS v3.36: - 0 Not checked - 1 Must be 0 - 2 Must be 0-0-0-1 - 3 Must be 0 - 4 Must be 0-1-0-0 - 5 Must be 0 - 6 Not checked - 7 Not checked + 0 Not checked + 1 Must be 0 + 2 Must be 0-0-0-1 + 3 Must be 0 + 4 Must be 0-1-0-0 + 5 Must be 0 + 6 Not checked + 7 Not checked */ if (dev->flags & X54X_INT_GEOM_WRITABLE) ret = dev->Geometry; diff --git a/src/sio/sio_82091aa.c b/src/sio/sio_82091aa.c index 1a7910cab..52a8809e9 100644 --- a/src/sio/sio_82091aa.c +++ b/src/sio/sio_82091aa.c @@ -1,17 +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. * - * Emulation of the Intel 82091AA Super I/O chip. + * Emulation of the Intel 82091AA Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_acc3221.c b/src/sio/sio_acc3221.c index dd0c247f0..9aaf802f3 100644 --- a/src/sio/sio_acc3221.c +++ b/src/sio/sio_acc3221.c @@ -1,18 +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. * - * Implementation of the ACC 3221-SP Super I/O Chip. + * Implementation of the ACC 3221-SP Super I/O Chip. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2019 Sarah Walker. + * Copyright 2019 Sarah Walker. */ #include #include @@ -40,31 +40,31 @@ typedef struct acc3221_t { } acc3221_t; /* Configuration Register Index, BE (R/W): - Bit Function - 7 PIRQ 5 polarity. + Bit Function + 7 PIRQ 5 polarity. 1 = active high, default 0 = active low - 6 PIRQ 7 polarity. + 6 PIRQ 7 polarity. 1 = active high, default 0 = active low - 5 Primary Parallel Port Extended Mode + 5 Primary Parallel Port Extended Mode 0 = Compatible mode, default 1 = Extended/Bidirectional mode. - 4 Primary Parallel Port Disable + 4 Primary Parallel Port Disable 1 = Disable, 0 = Enable Power Up Default is set by pin 120 (3221-DP)/pin 96 (3221-SP) - 3 Primary Parallel Port Power Down + 3 Primary Parallel Port Power Down 1 = Power Down, default = 0 - 2** Secondary Parallel Port Extended + 2** Secondary Parallel Port Extended Mode 0 = Compatible mode, default 1 = Extended/Bidirectional mode. - 1** Secondary Parallel Port Disable + 1** Secondary Parallel Port Disable 1 = Disable, 0 = Enable Power Up Default is set by pin 77 (3221-DP) - 0** Secondary Parallel Port Power Down + 0** Secondary Parallel Port Power Down 1 = Power Down 0 = Enable, default Note: Power Up not applicable to 3221-EP. */ @@ -72,41 +72,41 @@ typedef struct acc3221_t { #define REG_BE_LPT2_DISABLE (3 << 0) /* 3221-DP/EP only */ /* Configuration Register Index, BF (R/W): - Bit Function - 7-0 The 8 most significant address bits of + Bit Function + 7-0 The 8 most significant address bits of the primary parallel port (A9-2) Default 9E (LPT2, at 278-27B) */ /* Configuration Register Index, DA (R/W)**: - Bit Function - 7-0 The 8 most significant address bits of + Bit Function + 7-0 The 8 most significant address bits of the secondary parallel port (A9-2) Default DE (LPT1, at 378-37B) */ /* Configuration Register Index, DB (R/W): - Bit Function - 7 SIRQ4 polarity. + Bit Function + 7 SIRQ4 polarity. 1 = active high; default 0 = active low - 6 SIRQ3 polarity. + 6 SIRQ3 polarity. 1 = active high; default 0 = active low - 5 SXTAL clock off. 1 = SCLK off, + 5 SXTAL clock off. 1 = SCLK off, 0 = SCKL on, default - 4 Primary serial port disable + 4 Primary serial port disable 1 = Disable, 0 = Enable Power Up default is set by pin 116 (3221-DP)/pin 93 (3221-SP) - 3 Primary serial port power down + 3 Primary serial port power down 1 = Power down, 0 = Enable Power Up default is set by pin 116 (3221-DP)/pin 93 (3221-SP) - 2 Reserved - 1 Secondary serial port disable + 2 Reserved + 1 Secondary serial port disable 1 = Disable, 0 = Enable Power Up default is set by pin 121 (3221-DP)/pin 97 (3221-SP) - 0 Secondary serial port power down + 0 Secondary serial port power down 1 = Power down, 0 = Enable Power Up default is set by pin 121 (3221-DP)/pin 97 (3221-SP) @@ -115,57 +115,57 @@ typedef struct acc3221_t { #define REG_DB_SERIAL2_DISABLE (3 << 0) /* Configuration Register Index, DC (R/W): - Bit Function - 7-1 The MSB of the Primary Serial Port + Bit Function + 7-1 The MSB of the Primary Serial Port Address (bits A9-3). Default = 7F (COM1, at 3F8-3FF). - 0 When this bit is set to 1, bit A2 of + 0 When this bit is set to 1, bit A2 of primary parallel port is decoded. Default is 0. */ /* Configuration Register Index, DD (R/W): - Bit Function - 7-1 The MSB of the Secondary Serial Port + Bit Function + 7-1 The MSB of the Secondary Serial Port Address (bits A9-3). Default = 5F (COM2, at 2F8-2FF). - 0** When this bit is set to 1, bit A2 of + 0** When this bit is set to 1, bit A2 of secondary parallel port is decoded. Default is 0. */ /* Configuration Register Index, DE (R/W): - Bit Function - 7-6 SIRQ3 source - b7 b6 - 0 0 Disabled, tri-stated - 0 1 Disabled, tri-stated** - 1 0 Primary serial port - 1 1 Secondary serial port, + Bit Function + 7-6 SIRQ3 source + b7 b6 + 0 0 Disabled, tri-stated + 0 1 Disabled, tri-stated** + 1 0 Primary serial port + 1 1 Secondary serial port, default - 5-4 SIRQ4 source - b5 b4 - 0 0 Disabled, tri-stated - 0 1 Disabled, tri-stated** - 1 0 Primary serial port, + 5-4 SIRQ4 source + b5 b4 + 0 0 Disabled, tri-stated + 0 1 Disabled, tri-stated** + 1 0 Primary serial port, default - 1 1 Secondary serial port + 1 1 Secondary serial port - 3-2** PIRQ7 source - b3 b2 - 0 0 Diabled, tri-stated, + 3-2** PIRQ7 source + b3 b2 + 0 0 Diabled, tri-stated, default - 0 1 Primary serial port - 1 0 Primary parallel port - 1 1 Secondary parallel + 0 1 Primary serial port + 1 0 Primary parallel port + 1 1 Secondary parallel port Note: Bits 3-2 are reserved in 3221-SP. - 1-0 PIRQ5 source - b1 b0 - 0 0 Disabled, tri-stated - 0 1 Secondary serial port - 1 0 Primary parallel port, + 1-0 PIRQ5 source + b1 b0 + 0 0 Disabled, tri-stated + 0 1 Secondary serial port + 1 0 Primary parallel port, default - 1 1 Secondary parallel + 1 1 Secondary parallel port** */ #define REG_DE_SIRQ3_SOURCE (3 << 6) #define REG_DE_SIRQ3_SERIAL1 (1 << 6) @@ -183,48 +183,48 @@ typedef struct acc3221_t { #define REG_DE_PIRQ5_LPT2 (3 << 0) /* Configuration Register Index, DF (R/W)**: - Bit Function - 7-6 Reserved - 5 RTC interface disable + Bit Function + 7-6 Reserved + 5 RTC interface disable 1 = /RTCCS disabled 0 = /RTCCS enabled, default - 4 Disable Modem Select + 4 Disable Modem Select 1 = Moden CS disabled, default 0 = Modem CS enabled 3-2 - b3 b2 - 1 1 Reserved - 1 0 Modem port address + b3 b2 + 1 1 Reserved + 1 0 Modem port address = 3E8-3EF (default) - 0 1 Modem port address: + 0 1 Modem port address: 2F8-2FF - 0 0 Modem port address: + 0 0 Modem port address: 3F8-3FF 1-0 - b1 b0 - 1 1 Reserved - 1 0 Mode 2, EISA Mode - 0 1 Mode 1, AT BUS, - 0 0 Mode 0, Two parallel + b1 b0 + 1 1 Reserved + 1 0 Mode 2, EISA Mode + 0 1 Mode 1, AT BUS, + 0 0 Mode 0, Two parallel ports, default */ /* Configuration Register Index, FA (R/W)**: - Bit Function - 7 General purpose I/O register, Bit 7 - 6 General purpose I/O register, Bit 6 - 5 General purpose I/O register, Bit 5 - 4 General purpose I/O register, Bit 4 - 3 General purpose I/O register, Bit 3 - 2 General purpose I/O register, Bit 2 - 1 General purpose I/O register, Bit 1 - 0 General purpose I/O register, Bit 0 */ + Bit Function + 7 General purpose I/O register, Bit 7 + 6 General purpose I/O register, Bit 6 + 5 General purpose I/O register, Bit 5 + 4 General purpose I/O register, Bit 4 + 3 General purpose I/O register, Bit 3 + 2 General purpose I/O register, Bit 2 + 1 General purpose I/O register, Bit 1 + 0 General purpose I/O register, Bit 0 */ /* Configuration Register Index, FB (R/W)**: - Bit Function - 7 Reserved - 6** 0/2 EXG (Read Only) + Bit Function + 7 Reserved + 6** 0/2 EXG (Read Only) In mode 1 and mode 2 operation, when the third floppy drive is installed, pin @@ -234,7 +234,7 @@ typedef struct acc3221_t { disable the third floppy drive. 1 = Third floppy drive enabled 0 = Third floppy drive disabled - 5** EXTFDD (Read Only) + 5** EXTFDD (Read Only) In mode 1 and mode 2 operation, when the third floppy drive is installed and @@ -246,7 +246,7 @@ typedef struct acc3221_t { drive 2. 1 = Third floppy drive as drive 0 (bootable) 0 = Third floppy drive as drive 2 - 4** MS + 4** MS In mode 1 and mode 2, t his bit is to control the output pin MS to support a special 3 1/2", 1.2M drive. When this @@ -254,45 +254,45 @@ typedef struct acc3221_t { a low signal. When this bit is set to low (0), the MS pin sends a high signal to support a 3 1/2", 1.2M drive. - 3 FDC, Clock disable + 3 FDC, Clock disable 0 = enable, default 1 = disable - 2 Reserved - 1 FDC disable + 2 Reserved + 1 FDC disable 0 = enable, 1= disable Power Upd efault set by pin 117 (3221- DP)/pin 94 (3221-SP) - 0 FDC address + 0 FDC address 0 = Primary, default 1 = Secondary Note: Bits 6-4 are reserved in 3221-SP. */ #define REG_FB_FDC_DISABLE (1 << 1) /* Configuration Register Index, FB (R/W)**: - Bit Function - 7** Disable general chip select 1 + Bit Function + 7** Disable general chip select 1 1 = disable, default 0 = enable - 6** Disable general chip select 2 + 6** Disable general chip select 2 1 = disable, default 0 = enable - 5** Enable SA2 decoding for general chip + 5** Enable SA2 decoding for general chip select 1 1 = enable 0 = disable, default - 4** Enable SA2 decoding for general chip + 4** Enable SA2 decoding for general chip select 2 1 = enable 0 = disable, default - 3 Reserved - 2 IDE XT selected + 3 Reserved + 2 IDE XT selected 0 = IDE AT interface, default 1 = IDE XT interface - 1 IDE disable, 1 = IDE disable + 1 IDE disable, 1 = IDE disable 0 = IDE enable Power Up default set by pin 13 (3221- DP)/pin 13 (3221-SP) - 0 Secondary IDE + 0 Secondary IDE 1 = secondary 0 = primary, default Note: Bits 6-4 are reserved in 3221-SP. */ diff --git a/src/sio/sio_ali5123.c b/src/sio/sio_ali5123.c index 5c52bbc88..310a09ab0 100644 --- a/src/sio/sio_ali5123.c +++ b/src/sio/sio_ali5123.c @@ -1,17 +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. * - * Implementation of the ALi M5123/1543C Super I/O Chip. + * Implementation of the ALi M5123/1543C Super I/O Chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_detect.c b/src/sio/sio_detect.c index 871ad1a0a..36c12cd54 100644 --- a/src/sio/sio_detect.c +++ b/src/sio/sio_detect.c @@ -1,18 +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. * - * Super I/O chip detection code. + * Super I/O chip detection code. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_f82c710.c b/src/sio/sio_f82c710.c index eccf799f4..123232d7e 100644 --- a/src/sio/sio_f82c710.c +++ b/src/sio/sio_f82c710.c @@ -1,28 +1,30 @@ /* - * 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. * - * Implementation of the Chips & Technologies F82C710 Universal Peripheral - * Controller (UPC) and 82C606 CHIPSpak Multifunction Controller. + * Implementation of the Chips & Technologies F82C710 Universal Peripheral + * Controller (UPC) and 82C606 CHIPSpak Multifunction Controller. * - * Relevant literature: + * Relevant literature: * - * [1] Chips and Technologies, Inc., - * 82C605/82C606 CHIPSpak/CHIPSport MULTIFUNCTION CONTROLLERS, - * PRELIMINARY Data Sheet, Revision 1, May 1987. - * + * [1] Chips and Technologies, Inc., + * 82C605/82C606 CHIPSpak/CHIPSport MULTIFUNCTION CONTROLLERS, + * PRELIMINARY Data Sheet, Revision 1, May 1987. + * * - * Authors: Sarah Walker, - * Eluan Costa Miranda - * Lubomir Rintel * - * Copyright 2020 Sarah Walker. - * Copyright 2020 Eluan Costa Miranda. - * Copyright 2021 Lubomir Rintel. + * + * Authors: Sarah Walker, + * Eluan Costa Miranda + * Lubomir Rintel + * + * Copyright 2020 Sarah Walker. + * Copyright 2020 Eluan Costa Miranda. + * Copyright 2021 Lubomir Rintel. */ #include #include diff --git a/src/sio/sio_fdc37c669.c b/src/sio/sio_fdc37c669.c index 81d9647c0..a8bc4d700 100644 --- a/src/sio/sio_fdc37c669.c +++ b/src/sio/sio_fdc37c669.c @@ -1,17 +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. * - * Implementation of the SMC FDC37C669 Super I/O Chip. + * Implementation of the SMC FDC37C669 Super I/O Chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_fdc37c67x.c b/src/sio/sio_fdc37c67x.c index e728a8ffb..af8a89bf5 100644 --- a/src/sio/sio_fdc37c67x.c +++ b/src/sio/sio_fdc37c67x.c @@ -1,17 +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. * - * Implementation of the SMC FDC37C67X Super I/O Chip. + * Implementation of the SMC FDC37C67X Super I/O Chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include @@ -171,13 +172,13 @@ fdc37c67x_sio_handler(fdc37c67x_t *dev) { #if 0 if (dev->sio_base) { - io_removehandler(dev->sio_base, 0x0002, - fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); + io_removehandler(dev->sio_base, 0x0002, + fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); } dev->sio_base = (((uint16_t) dev->regs[0x27]) << 8) | dev->regs[0x26]; if (dev->sio_base) { - io_sethandler(dev->sio_base, 0x0002, - fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); + io_sethandler(dev->sio_base, 0x0002, + fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); } #endif } diff --git a/src/sio/sio_fdc37c93x.c b/src/sio/sio_fdc37c93x.c index afc1642a5..55464ec98 100644 --- a/src/sio/sio_fdc37c93x.c +++ b/src/sio/sio_fdc37c93x.c @@ -1,18 +1,19 @@ /* - * 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. * - * Implementation of the SMC FDC37C932FR and FDC37C935 Super - * I/O Chips. + * Implementation of the SMC FDC37C932FR and FDC37C935 Super + * I/O Chips. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_fdc37m60x.c b/src/sio/sio_fdc37m60x.c index d74db6207..e29734c51 100644 --- a/src/sio/sio_fdc37m60x.c +++ b/src/sio/sio_fdc37m60x.c @@ -1,15 +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. * - * Emulation of the SMSC FDC37M60x Super I/O + * Emulation of the SMSC FDC37M60x Super I/O * - * Authors: Tiseno100 - * Copyright 2020 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2020 Tiseno100 */ #include #include diff --git a/src/sio/sio_it8661f.c b/src/sio/sio_it8661f.c index 98340aaa5..c7d4110be 100644 --- a/src/sio/sio_it8661f.c +++ b/src/sio/sio_it8661f.c @@ -1,18 +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. * - * Implementation of the ITE IT8661F chipset. + * Implementation of the ITE IT8661F chipset. * - * Note: This Super I/O is partially incomplete and intended only for having the intended machine to function + * Note: This Super I/O is partially incomplete and intended only for having the intended machine to function * - * Authors: Tiseno100 + * Authors: Tiseno100 * - * Copyright 2021 Tiseno100 + * Copyright 2021 Tiseno100 * */ #include diff --git a/src/sio/sio_pc87306.c b/src/sio/sio_pc87306.c index 18b9a9357..68d0383b0 100644 --- a/src/sio/sio_pc87306.c +++ b/src/sio/sio_pc87306.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87306 Super I/O chip. + * Emulation of the NatSemi PC87306 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index ecdb13c5b..ae376f659 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87307 Super I/O chip. + * Emulation of the NatSemi PC87307 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c index 8d7ff7065..db6b78848 100644 --- a/src/sio/sio_pc87309.c +++ b/src/sio/sio_pc87309.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87309 Super I/O chip. + * Emulation of the NatSemi PC87309 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_pc87310.c b/src/sio/sio_pc87310.c index 5b5267191..f7d5ced71 100644 --- a/src/sio/sio_pc87310.c +++ b/src/sio/sio_pc87310.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of the NatSemi PC87310 Super I/O chip. + * Emulation of the NatSemi PC87310 Super I/O chip. * * * - * Author: Miran Grca, - * Tiseno100 - * EngiNerd + * Authors: Miran Grca, + * Tiseno100 + * EngiNerd * - * Copyright 2020 Miran Grca. - * Copyright 2020 Tiseno100 - * Copyright 2021 EngiNerd. + * Copyright 2020 Miran Grca. + * Copyright 2020 Tiseno100 + * Copyright 2021 EngiNerd. */ #include #include diff --git a/src/sio/sio_pc87311.c b/src/sio/sio_pc87311.c index 2c098d5ab..c795da8a9 100644 --- a/src/sio/sio_pc87311.c +++ b/src/sio/sio_pc87311.c @@ -1,15 +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. * - * Emulation of the National Semiconductor PC87311 Super I/O + * Emulation of the National Semiconductor PC87311 Super I/O * - * Authors: Tiseno100 - * Copyright 2020 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2020 Tiseno100 */ #include #include diff --git a/src/sio/sio_pc87332.c b/src/sio/sio_pc87332.c index 71f7584f4..1ea0e1255 100644 --- a/src/sio/sio_pc87332.c +++ b/src/sio/sio_pc87332.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87332 Super I/O chip. + * Emulation of the NatSemi PC87332 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_prime3b.c b/src/sio/sio_prime3b.c index b0267f0a0..a204fde5b 100644 --- a/src/sio/sio_prime3b.c +++ b/src/sio/sio_prime3b.c @@ -1,15 +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. * - * Emulation of the Goldstar Prime3B Super I/O + * Emulation of the Goldstar Prime3B Super I/O * - * Authors: Tiseno100 - * Copyright 2021 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2021 Tiseno100 */ #include #include diff --git a/src/sio/sio_prime3c.c b/src/sio/sio_prime3c.c index 303a10967..eae3fe1b2 100644 --- a/src/sio/sio_prime3c.c +++ b/src/sio/sio_prime3c.c @@ -1,15 +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. * - * Emulation of the LG Prime3C Super I/O + * Emulation of the LG Prime3C Super I/O * - * Authors: Tiseno100 - * Copyright 2020 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2020 Tiseno100 */ #include #include diff --git a/src/sio/sio_um8669f.c b/src/sio/sio_um8669f.c index 954e7c45c..f50832040 100644 --- a/src/sio/sio_um8669f.c +++ b/src/sio/sio_um8669f.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of the UMC UM8669F Super I/O chip. + * Emulation of the UMC UM8669F Super I/O chip. * * * - * Authors: Sarah Walker, - * Miran Grca, - * RichardG, + * Authors: Sarah Walker, + * Miran Grca, + * RichardG, * - * Copyright 2008-2021 Sarah Walker. - * Copyright 2016-2021 Miran Grca. - * Copyright 2021 RichardG. + * Copyright 2008-2021 Sarah Walker. + * Copyright 2016-2021 Miran Grca. + * Copyright 2021 RichardG. */ #include #include @@ -69,27 +69,27 @@ static uint8_t um8669f_pnp_rom[] = { }; static const isapnp_device_config_t um8669f_pnp_defaults[] = { { - .activate = 1, - .io = { { .base = FDC_PRIMARY_ADDR }, }, - .irq = { { .irq = FDC_PRIMARY_IRQ }, }, - .dma = { { .dma = FDC_PRIMARY_DMA }, } + .activate = 1, + .io = { { .base = FDC_PRIMARY_ADDR }, }, + .irq = { { .irq = FDC_PRIMARY_IRQ }, }, + .dma = { { .dma = FDC_PRIMARY_DMA }, } }, { - .activate = 1, - .io = { { .base = COM1_ADDR }, }, - .irq = { { .irq = COM1_IRQ }, } + .activate = 1, + .io = { { .base = COM1_ADDR }, }, + .irq = { { .irq = COM1_IRQ }, } }, { - .activate = 1, - .io = { { .base = COM2_ADDR }, }, - .irq = { { .irq = COM2_IRQ }, } + .activate = 1, + .io = { { .base = COM2_ADDR }, }, + .irq = { { .irq = COM2_IRQ }, } }, { - .activate = 1, - .io = { { .base = LPT1_ADDR }, }, - .irq = { { .irq = LPT1_IRQ }, } + .activate = 1, + .io = { { .base = LPT1_ADDR }, }, + .irq = { { .irq = LPT1_IRQ }, } }, { - .activate = 0 + .activate = 0 }, { - .activate = 0, - .io = { { .base = 0x200 }, } + .activate = 0, + .io = { { .base = 0x200 }, } } }; diff --git a/src/sio/sio_vt82c686.c b/src/sio/sio_vt82c686.c index 00617e4ea..c7f9c28bc 100644 --- a/src/sio/sio_vt82c686.c +++ b/src/sio/sio_vt82c686.c @@ -1,18 +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. * - * Emulation of the VIA VT82C686A/B integrated Super I/O. + * Emulation of the VIA VT82C686A/B integrated Super I/O. * * * - * Author: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #include #include diff --git a/src/sio/sio_w83787f.c b/src/sio/sio_w83787f.c index ce6c20386..722f1eef8 100644 --- a/src/sio/sio_w83787f.c +++ b/src/sio/sio_w83787f.c @@ -1,20 +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. + * 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. * - * Emulation of the Winbond W83787F/IF Super I/O Chip. + * Emulation of the Winbond W83787F/IF Super I/O Chip. * - * Winbond W83787F Super I/O Chip - * Used by the Award 430HX + * Winbond W83787F Super I/O Chip + * Used by the Award 430HX * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_w83877f.c b/src/sio/sio_w83877f.c index 28ab95f46..4f8b45118 100644 --- a/src/sio/sio_w83877f.c +++ b/src/sio/sio_w83877f.c @@ -1,20 +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. + * 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. * - * Emulation of the Winbond W83877F Super I/O Chip. + * Emulation of the Winbond W83877F Super I/O Chip. * - * Winbond W83877F Super I/O Chip - * Used by the Award 430HX + * Winbond W83877F Super I/O Chip + * Used by the Award 430HX * * * - * Author: Miran Grca, - * Copyright 2016-2020 Miran Grca. + * Authors: Miran Grca, + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_w83977f.c b/src/sio/sio_w83977f.c index e214f883d..1b6105840 100644 --- a/src/sio/sio_w83977f.c +++ b/src/sio/sio_w83977f.c @@ -1,20 +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. + * 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. * - * Emulation of the Winbond W83977F Super I/O Chip. + * Emulation of the Winbond W83977F Super I/O Chip. * - * Winbond W83977F Super I/O Chip - * Used by the Award 430TX + * Winbond W83977F Super I/O Chip + * Used by the Award 430TX * * * - * Author: Miran Grca, - * Copyright 2016-2020 Miran Grca. + * Authors: Miran Grca, + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/video/agpgart.c b/src/video/agpgart.c index 0a594a8d3..523fcc996 100644 --- a/src/video/agpgart.c +++ b/src/video/agpgart.c @@ -1,18 +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. * - * AGP Graphics Address Remapping Table remapping emulation. + * AGP Graphics Address Remapping Table remapping emulation. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2021 RichardG. + * Copyright 2021 RichardG. */ #include #include diff --git a/src/video/vid_8514a.c b/src/video/vid_8514a.c index 88dcee020..f7f3ce607 100644 --- a/src/video/vid_8514a.c +++ b/src/video/vid_8514a.c @@ -1,19 +1,19 @@ /* - * 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. * - * Emulation of the 8514/A card from IBM for the MCA bus and - * generic ISA bus clones without vendor extensions. + * Emulation of the 8514/A card from IBM for the MCA bus and + * generic ISA bus clones without vendor extensions. * * * - * Authors: TheCollector1995. + * Authors: TheCollector1995. * - * Copyright 2022 TheCollector1995. + * Copyright 2022 TheCollector1995. */ #include #include diff --git a/src/video/vid_ati18800.c b/src/video/vid_ati18800.c index 2fb58aa5b..c9cd8bfcd 100644 --- a/src/video/vid_ati18800.c +++ b/src/video/vid_ati18800.c @@ -1,20 +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. + * 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. * - * ATI 18800 emulation (VGA Edge-16) + * ATI 18800 emulation (VGA Edge-16) * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c index 06b61d41f..1824d7fdc 100644 --- a/src/video/vid_ati28800.c +++ b/src/video/vid_ati28800.c @@ -1,22 +1,22 @@ /* - * 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. * - * ATI 28800 emulation (VGA Charger and Korean VGA) + * ATI 28800 emulation (VGA Charger and Korean VGA) * * * - * Authors: Sarah Walker, - * Miran Grca, - * greatpsycho, + * Authors: Sarah Walker, + * Miran Grca, + * greatpsycho, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 greatpsycho. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 greatpsycho. */ #include #include diff --git a/src/video/vid_ati68860_ramdac.c b/src/video/vid_ati68860_ramdac.c index 1bf74067a..43811ce68 100644 --- a/src/video/vid_ati68860_ramdac.c +++ b/src/video/vid_ati68860_ramdac.c @@ -1,40 +1,40 @@ /* - * 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. * - * ATI 68860 RAMDAC emulation (for Mach64) + * ATI 68860 RAMDAC emulation (for Mach64) * - * ATI 68860/68880 Truecolor DACs: - * REG08 (R/W): - * bit 0-? Always 2 ?? + * ATI 68860/68880 Truecolor DACs: + * REG08 (R/W): + * bit 0-? Always 2 ?? * - * REG0A (R/W): - * bit 0-? Always 1Dh ?? + * REG0A (R/W): + * bit 0-? Always 1Dh ?? * - * REG0B (R/W): (GMR ?) - * bit 0-7 Mode. 82h: 4bpp, 83h: 8bpp, - * A0h: 15bpp, A1h: 16bpp, C0h: 24bpp, - * E3h: 32bpp (80h for VGA modes ?) + * REG0B (R/W): (GMR ?) + * bit 0-7 Mode. 82h: 4bpp, 83h: 8bpp, + * A0h: 15bpp, A1h: 16bpp, C0h: 24bpp, + * E3h: 32bpp (80h for VGA modes ?) * - * REG0C (R/W): Device Setup Register A - * bit 0 Controls 6/8bit DAC. 0: 8bit DAC/LUT, 1: 6bit DAC/LUT - * 2-3 Depends on Video memory (= VRAM width ?) . - * 1: Less than 1Mb, 2: 1Mb, 3: > 1Mb - * 5-6 Always set ? - * 7 If set can remove "snow" in some cases - * (A860_Delay_L ?) ?? + * REG0C (R/W): Device Setup Register A + * bit 0 Controls 6/8bit DAC. 0: 8bit DAC/LUT, 1: 6bit DAC/LUT + * 2-3 Depends on Video memory (= VRAM width ?) . + * 1: Less than 1Mb, 2: 1Mb, 3: > 1Mb + * 5-6 Always set ? + * 7 If set can remove "snow" in some cases + * (A860_Delay_L ?) ?? * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ati_eeprom.c b/src/video/vid_ati_eeprom.c index 15696be63..c09d03846 100644 --- a/src/video/vid_ati_eeprom.c +++ b/src/video/vid_ati_eeprom.c @@ -1,20 +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. + * 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. * - * Emulation of the EEPROM on select ATI cards. + * Emulation of the EEPROM on select ATI cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index c2aa2b6ad..0bd3b3843 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -1,20 +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. + * 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. * - * ATi Mach64 graphics card emulation. + * ATi Mach64 graphics card emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_att20c49x_ramdac.c b/src/video/vid_att20c49x_ramdac.c index 81cde31a4..4269f8b33 100644 --- a/src/video/vid_att20c49x_ramdac.c +++ b/src/video/vid_att20c49x_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of a AT&T 20c490/491 and 492/493 RAMDAC. + * Emulation of a AT&T 20c490/491 and 492/493 RAMDAC. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_att2xc498_ramdac.c b/src/video/vid_att2xc498_ramdac.c index 5983677db..32a91a490 100644 --- a/src/video/vid_att2xc498_ramdac.c +++ b/src/video/vid_att2xc498_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of a AT&T 2xc498 RAMDAC. + * Emulation of a AT&T 2xc498 RAMDAC. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_av9194.c b/src/video/vid_av9194.c index 20d39f247..f8ebc89de 100644 --- a/src/video/vid_av9194.c +++ b/src/video/vid_av9194.c @@ -1,20 +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. + * 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. * - * AV9194 clock generator emulation. + * AV9194 clock generator emulation. * - * Used by the S3 86c801 (V7-Mirage) card. + * Used by the S3 86c801 (V7-Mirage) card. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_bt48x_ramdac.c b/src/video/vid_bt48x_ramdac.c index 05ade0cc3..daf840df8 100644 --- a/src/video/vid_bt48x_ramdac.c +++ b/src/video/vid_bt48x_ramdac.c @@ -1,21 +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. + * 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. * - * Emulation of the Brooktree BT484-485A true colour RAMDAC - * family. + * Emulation of the Brooktree BT484-485A true colour RAMDAC + * family. * * * - * Authors: Miran Grca, - * TheCollector1995, + * Authors: Miran Grca, + * TheCollector1995, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 TheCollector1995. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 TheCollector1995. */ #include #include diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c index 8dba373df..80bf3bc85 100644 --- a/src/video/vid_cga.c +++ b/src/video/vid_cga.c @@ -1,20 +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. + * 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. * - * Emulation of the old and new IBM CGA graphics cards. + * Emulation of the old and new IBM CGA graphics cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_cga_comp.c b/src/video/vid_cga_comp.c index 077084000..ad9f673fb 100644 --- a/src/video/vid_cga_comp.c +++ b/src/video/vid_cga_comp.c @@ -1,21 +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. + * 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. * - * IBM CGA composite filter, borrowed from reenigne's DOSBox - * patch and ported to C. + * IBM CGA composite filter, borrowed from reenigne's DOSBox + * patch and ported to C. * * * - * Authors: reenigne, - * Miran Grca, + * Authors: reenigne, + * Miran Grca, * - * Copyright 2015-2019 reenigne. - * Copyright 2015-2019 Miran Grca. + * Copyright 2015-2019 reenigne. + * Copyright 2015-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_colorplus.c b/src/video/vid_colorplus.c index a343087d4..b460c15dd 100644 --- a/src/video/vid_colorplus.c +++ b/src/video/vid_colorplus.c @@ -1,20 +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. + * 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. * - * Plantronics ColorPlus emulation. + * Plantronics ColorPlus emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_compaq_cga.c b/src/video/vid_compaq_cga.c index da4006339..e1295d629 100644 --- a/src/video/vid_compaq_cga.c +++ b/src/video/vid_compaq_cga.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of the Compaq CGA graphics cards. + * Emulation of the Compaq CGA graphics cards. * * * - * Authors: John Elliott, - * Sarah Walker, - * Miran Grca, + * Authors: John Elliott, + * Sarah Walker, + * Miran Grca, * - * Copyright 2016-2019 John Elliott. - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2016-2019 John Elliott. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ddc.c b/src/video/vid_ddc.c index b263448fc..f6c4d4dac 100644 --- a/src/video/vid_ddc.c +++ b/src/video/vid_ddc.c @@ -1,18 +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. * - * DDC monitor emulation. + * DDC monitor emulation. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #include #include diff --git a/src/video/vid_ega.c b/src/video/vid_ega.c index af1c06335..c50c0a7b7 100644 --- a/src/video/vid_ega.c +++ b/src/video/vid_ega.c @@ -1,21 +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. + * 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. * - * Emulation of the EGA and Chips & Technologies SuperEGA - * graphics cards. + * Emulation of the EGA and Chips & Technologies SuperEGA + * graphics cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ega_render.c b/src/video/vid_ega_render.c index a9699dbf9..ac5c65546 100644 --- a/src/video/vid_ega_render.c +++ b/src/video/vid_ega_render.c @@ -1,20 +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. + * 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. * - * EGA renderers. + * EGA renderers. * * * - * Author: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_et3000.c b/src/video/vid_et3000.c index 1d6288d9c..d107afe5c 100644 --- a/src/video/vid_et3000.c +++ b/src/video/vid_et3000.c @@ -1,16 +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. * - * Emulation of the Tseng Labs ET3000. + * Emulation of the Tseng Labs ET3000. * - * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_f82c425.c b/src/video/vid_f82c425.c index 3fea0c1bd..1fda74630 100644 --- a/src/video/vid_f82c425.c +++ b/src/video/vid_f82c425.c @@ -1,36 +1,36 @@ /* - * 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. * - * Chips & Technologies 82C425 display controller emulation, - * with support for 640x200 LCD and SMARTMAP text contrast - * enhancement. + * Chips & Technologies 82C425 display controller emulation, + * with support for 640x200 LCD and SMARTMAP text contrast + * enhancement. * - * Relevant literature: + * Relevant literature: * - * [1] Chips and Technologies, Inc., 82C425 CGA LCD/CRT Controller, - * Data Sheet, Revision No. 2.2, September 1991. - * + * [1] Chips and Technologies, Inc., 82C425 CGA LCD/CRT Controller, + * Data Sheet, Revision No. 2.2, September 1991. + * * - * [2] Pleva et al., COLOR TO MONOCHROME CONVERSION, - * U.S. Patent 4,977,398, Dec. 11, 1990. - * + * [2] Pleva et al., COLOR TO MONOCHROME CONVERSION, + * U.S. Patent 4,977,398, Dec. 11, 1990. + * * - * Based on Toshiba T1000 plasma display emulation code. + * Based on Toshiba T1000 plasma display emulation code. * - * Authors: Fred N. van Kempen, - * Miran Grca, - * Sarah Walker, - * Lubomir Rintel, + * Authors: Fred N. van Kempen, + * Miran Grca, + * Sarah Walker, + * Lubomir Rintel, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Miran Grca. - * Copyright 2018,2019 Sarah Walker. - * Copyright 2021 Lubomir Rintel. + * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018,2019 Miran Grca. + * Copyright 2018,2019 Sarah Walker. + * Copyright 2021 Lubomir Rintel. * * 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 diff --git a/src/video/vid_genius.c b/src/video/vid_genius.c index 5c13e3415..9d2cbb947 100644 --- a/src/video/vid_genius.c +++ b/src/video/vid_genius.c @@ -1,20 +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. + * 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. * - * MDSI Genius VHR emulation. + * MDSI Genius VHR emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_hercules.c b/src/video/vid_hercules.c index 550f05338..e9fab0a16 100644 --- a/src/video/vid_hercules.c +++ b/src/video/vid_hercules.c @@ -1,20 +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. + * 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. * - * Hercules emulation. + * Hercules emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_herculesplus.c b/src/video/vid_herculesplus.c index ea569cd3e..cf762365a 100644 --- a/src/video/vid_herculesplus.c +++ b/src/video/vid_herculesplus.c @@ -1,20 +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. + * 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. * - * Hercules Plus emulation. + * Hercules Plus emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ht216.c b/src/video/vid_ht216.c index 72d101e2b..ad5bf7af0 100644 --- a/src/video/vid_ht216.c +++ b/src/video/vid_ht216.c @@ -1,20 +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. + * 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. * - * Video 7 VGA 1024i emulation. + * Video 7 VGA 1024i emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2019 Sarah Walker. - * Copyright 2019 Miran Grca. + * Copyright 2019 Sarah Walker. + * Copyright 2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ibm_rgb528_ramdac.c b/src/video/vid_ibm_rgb528_ramdac.c index 2f050e7c7..adfc6ea39 100644 --- a/src/video/vid_ibm_rgb528_ramdac.c +++ b/src/video/vid_ibm_rgb528_ramdac.c @@ -1,18 +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. * - * Emulation of the IBM RGB 528 true colour RAMDAC. + * Emulation of the IBM RGB 528 true colour RAMDAC. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/video/vid_icd2061.c b/src/video/vid_icd2061.c index 85740144c..3fafb65d9 100644 --- a/src/video/vid_icd2061.c +++ b/src/video/vid_icd2061.c @@ -1,24 +1,24 @@ /* - * 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. * - * ICD2061 clock generator emulation. - * Also emulates the ICS9161 which is the same as the ICD2016, - * but without the need for tuning (which is irrelevant in - * emulation anyway). + * ICD2061 clock generator emulation. + * Also emulates the ICS9161 which is the same as the ICD2016, + * but without the need for tuning (which is irrelevant in + * emulation anyway). * - * Used by ET4000w32/p (Diamond Stealth 32) and the S3 - * Vision964 family. + * Used by ET4000w32/p (Diamond Stealth 32) and the S3 + * Vision964 family. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ics2494.c b/src/video/vid_ics2494.c index d3a40cc8b..8bb4b0cb8 100644 --- a/src/video/vid_ics2494.c +++ b/src/video/vid_ics2494.c @@ -1,20 +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. + * 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. * - * ICS2494 clock generator emulation. + * ICS2494 clock generator emulation. * - * Used by the AMI S3 924. + * Used by the AMI S3 924. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/video/vid_ics2595.c b/src/video/vid_ics2595.c index 77c46b6c3..157987083 100644 --- a/src/video/vid_ics2595.c +++ b/src/video/vid_ics2595.c @@ -1,20 +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. + * 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. * - * ICS2595 clock chip emulation. Used by ATI Mach64. + * ICS2595 clock chip emulation. Used by ATI Mach64. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_im1024.c b/src/video/vid_im1024.c index 9e08ce583..12d884127 100644 --- a/src/video/vid_im1024.c +++ b/src/video/vid_im1024.c @@ -1,50 +1,50 @@ /* - * 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. * - * Emulation of the ImageManager 1024 video controller. + * Emulation of the ImageManager 1024 video controller. * - * Just enough of the Vermont Microsystems IM-1024 is implemented - * to support the Windows 1.03 driver. Functions are partially - * implemented or hardwired to the behavior expected by the - * Windows driver. + * Just enough of the Vermont Microsystems IM-1024 is implemented + * to support the Windows 1.03 driver. Functions are partially + * implemented or hardwired to the behavior expected by the + * Windows driver. * - * One major difference seems to be that in hex mode, coordinates - * are passed as 2-byte integer words rather than 4-byte - * fixed-point fractions. + * One major difference seems to be that in hex mode, coordinates + * are passed as 2-byte integer words rather than 4-byte + * fixed-point fractions. * - * It is unknown what triggers this, so for now it's always on. + * It is unknown what triggers this, so for now it's always on. * - * As well as the usual PGC ring buffer at 0xC6000, the IM1024 - * appears to have an alternate method of passing commands. This - * is enabled by setting 0xC6330 to 1, and then: + * As well as the usual PGC ring buffer at 0xC6000, the IM1024 + * appears to have an alternate method of passing commands. This + * is enabled by setting 0xC6330 to 1, and then: * - * CX = count to write - * SI -> bytes to write + * CX = count to write + * SI -> bytes to write * - * Set pending bytes to 0 - * Read [C6331]. This gives number of bytes that can be written: - * 0xFF => 0, 0xFE => 1, 0xFD => 2 etc. - * Write that number of bytes to C6000. - * If there are more to come, go back to reading [C6331]. + * Set pending bytes to 0 + * Read [C6331]. This gives number of bytes that can be written: + * 0xFF => 0, 0xFE => 1, 0xFD => 2 etc. + * Write that number of bytes to C6000. + * If there are more to come, go back to reading [C6331]. * - * As far as can be determined, at least one byte is always - * written; there is no provision to pause if the queue is full. + * As far as can be determined, at least one byte is always + * written; there is no provision to pause if the queue is full. * - * This is implemented by holding a FIFO of unlimited depth in - * the IM1024 to receive the data. + * This is implemented by holding a FIFO of unlimited depth in + * the IM1024 to receive the data. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. */ #include #include diff --git a/src/video/vid_incolor.c b/src/video/vid_incolor.c index 6bf98ab86..652dc79ab 100644 --- a/src/video/vid_incolor.c +++ b/src/video/vid_incolor.c @@ -1,20 +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. + * 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. * - * Hercules InColor emulation. + * Hercules InColor emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_mda.c b/src/video/vid_mda.c index 5ace70058..019dc4885 100644 --- a/src/video/vid_mda.c +++ b/src/video/vid_mda.c @@ -1,20 +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. + * 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. * - * MDA emulation. + * MDA emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_mga.c b/src/video/vid_mga.c index 6da9a7c0f..1532ae116 100644 --- a/src/video/vid_mga.c +++ b/src/video/vid_mga.c @@ -1,17 +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. * - * Matrox MGA graphics card emulation. + * Matrox MGA graphics card emulation. * * * - * Author: Sarah Walker, - * Copyright 2008-2020 Sarah Walker. + * Authors: Sarah Walker, + * + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_nga.c b/src/video/vid_nga.c index 86173f198..331b0f70b 100644 --- a/src/video/vid_nga.c +++ b/src/video/vid_nga.c @@ -1,24 +1,24 @@ /* - * 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. * - * Emulation of the NCR NGA (K511, K201) video cards. + * Emulation of the NCR NGA (K511, K201) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #include diff --git a/src/video/vid_oak_oti.c b/src/video/vid_oak_oti.c index 742bbafb0..936ef158a 100644 --- a/src/video/vid_oak_oti.c +++ b/src/video/vid_oak_oti.c @@ -1,20 +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. + * 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. * - * Oak OTI037C/67/077 emulation. + * Oak OTI037C/67/077 emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ogc.c b/src/video/vid_ogc.c index eddc6da8d..a3ca21ad9 100644 --- a/src/video/vid_ogc.c +++ b/src/video/vid_ogc.c @@ -1,25 +1,25 @@ /* - * 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. * - * Emulation of the Olivetti OGC 8-bit ISA (GO708) and - * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. + * Emulation of the Olivetti OGC 8-bit ISA (GO708) and + * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #include diff --git a/src/video/vid_paradise.c b/src/video/vid_paradise.c index 3d82d459a..a60d61eb8 100644 --- a/src/video/vid_paradise.c +++ b/src/video/vid_paradise.c @@ -1,22 +1,22 @@ /* - * 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. * - * Paradise VGA emulation - * PC2086, PC3086 use PVGA1A - * MegaPC uses W90C11A + * Paradise VGA emulation + * PC2086, PC3086 use PVGA1A + * MegaPC uses W90C11A * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_pgc.c b/src/video/vid_pgc.c index eb28540fc..74a20145c 100644 --- a/src/video/vid_pgc.c +++ b/src/video/vid_pgc.c @@ -1,56 +1,56 @@ /* - * 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. * - * This implements just enough of the Professional Graphics - * Controller to act as a basis for the Vermont Microsystems - * IM-1024. + * This implements just enough of the Professional Graphics + * Controller to act as a basis for the Vermont Microsystems + * IM-1024. * - * PGC features implemented include: - * > The CGA-compatible display modes - * > Switching to and from native mode - * > Communicating with the host PC + * PGC features implemented include: + * > The CGA-compatible display modes + * > Switching to and from native mode + * > Communicating with the host PC * - * Numerous features are implemented partially or not at all, - * such as: - * > 2D drawing - * > 3D drawing - * > Command lists - * Some of these are marked TODO. + * Numerous features are implemented partially or not at all, + * such as: + * > 2D drawing + * > 3D drawing + * > Command lists + * Some of these are marked TODO. * - * The PGC has two display modes: CGA (in which it appears in - * the normal CGA memory and I/O ranges) and native (in which - * all functions are accessed through reads and writes to 1K - * of memory at 0xC6000). + * The PGC has two display modes: CGA (in which it appears in + * the normal CGA memory and I/O ranges) and native (in which + * all functions are accessed through reads and writes to 1K + * of memory at 0xC6000). * - * The PGC's 8088 processor monitors this buffer and executes - * instructions left there for it. We simulate this behavior - * with a separate thread. + * The PGC's 8088 processor monitors this buffer and executes + * instructions left there for it. We simulate this behavior + * with a separate thread. * - * **NOTE** This driver is not finished yet: + * **NOTE** This driver is not finished yet: * - * - cursor will blink at very high speed if used on a machine - * with clock greater than 4.77MHz. We should "scale down" - * this speed, to become relative to a 4.77MHz-based system. + * - cursor will blink at very high speed if used on a machine + * with clock greater than 4.77MHz. We should "scale down" + * this speed, to become relative to a 4.77MHz-based system. * - * - pgc_plot() should be overloaded by clones if they support - * modes other than WRITE and INVERT, like the IM-1024. + * - pgc_plot() should be overloaded by clones if they support + * modes other than WRITE and INVERT, like the IM-1024. * - * - test it with the Windows 1.x driver? + * - test it with the Windows 1.x driver? * - * This is expected to be done shortly. + * This is expected to be done shortly. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. * * 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 diff --git a/src/video/vid_rtg310x.c b/src/video/vid_rtg310x.c index 10f97cf4f..6f317426b 100644 --- a/src/video/vid_rtg310x.c +++ b/src/video/vid_rtg310x.c @@ -1,18 +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. * - * Emulation of the Realtek RTG series of VGA ISA chips. + * Emulation of the Realtek RTG series of VGA ISA chips. * * * - * Authors: TheCollector1995, + * Authors: TheCollector1995, * - * Copyright 2021 TheCollector1995. + * Copyright 2021 TheCollector1995. */ #include #include diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index 99661d309..94c0f575c 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1,20 +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. + * 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. * - * S3 ViRGE emulation. + * S3 ViRGE emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_sc1148x_ramdac.c b/src/video/vid_sc1148x_ramdac.c index 936ff308d..873f66e92 100644 --- a/src/video/vid_sc1148x_ramdac.c +++ b/src/video/vid_sc1148x_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of Sierra SC1148x RAMDACs and clones (e.g.: Winbond). + * Emulation of Sierra SC1148x RAMDACs and clones (e.g.: Winbond). * - * Used by the S3 911 and 924 chips. + * Used by the S3 911 and 924 chips. * * * - * Authors: TheCollector1995, + * Authors: TheCollector1995, * - * Copyright 2020 TheCollector1995. + * Copyright 2020 TheCollector1995. */ #include #include diff --git a/src/video/vid_sc1502x_ramdac.c b/src/video/vid_sc1502x_ramdac.c index 202091449..625788efe 100644 --- a/src/video/vid_sc1502x_ramdac.c +++ b/src/video/vid_sc1502x_ramdac.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of a Sierra SC1502X RAMDAC. + * Emulation of a Sierra SC1502X RAMDAC. * - * Used by the TLIVESA1 driver for ET4000. + * Used by the TLIVESA1 driver for ET4000. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_sdac_ramdac.c b/src/video/vid_sdac_ramdac.c index 58d6b164c..4c97924bd 100644 --- a/src/video/vid_sdac_ramdac.c +++ b/src/video/vid_sdac_ramdac.c @@ -1,20 +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. + * 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. * - * 87C716 'SDAC' true colour RAMDAC emulation. + * 87C716 'SDAC' true colour RAMDAC emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_sigma.c b/src/video/vid_sigma.c index d8fa55ce3..0e1833b1e 100644 --- a/src/video/vid_sigma.c +++ b/src/video/vid_sigma.c @@ -1,18 +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. * - * Sigma Color 400 emulation. + * Sigma Color 400 emulation. * * * - * Authors: John Elliott, + * Authors: John Elliott, * - * Copyright 2018 John Elliott. + * Copyright 2018 John Elliott. */ #include #include diff --git a/src/video/vid_stg_ramdac.c b/src/video/vid_stg_ramdac.c index 161cf1177..592cc275e 100644 --- a/src/video/vid_stg_ramdac.c +++ b/src/video/vid_stg_ramdac.c @@ -1,20 +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. + * 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. * - * STG1702 true colour RAMDAC emulation. + * STG1702 true colour RAMDAC emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_svga_render.c b/src/video/vid_svga_render.c index c67a46e0d..36e25771b 100644 --- a/src/video/vid_svga_render.c +++ b/src/video/vid_svga_render.c @@ -1,20 +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. + * 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. * - * SVGA renderers. + * SVGA renderers. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_tgui9440.c b/src/video/vid_tgui9440.c index dd39daf8e..8b67bb23e 100644 --- a/src/video/vid_tgui9440.c +++ b/src/video/vid_tgui9440.c @@ -1,59 +1,59 @@ /* - * 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. * - * Trident TGUI9400CXi and TGUI9440 emulation. + * Trident TGUI9400CXi and TGUI9440 emulation. * - * TGUI9400CXi has extended write modes, controlled by extended - * GDC registers : + * TGUI9400CXi has extended write modes, controlled by extended + * GDC registers : * - * GDC[0x10] - Control - * bit 0 - pixel width (1 = 16 bit, 0 = 8 bit) - * bit 1 - mono->colour expansion (1 = enabled, - * 0 = disabled) - * bit 2 - mono->colour expansion transparency - * (1 = transparent, 0 = opaque) - * bit 3 - extended latch copy - * GDC[0x11] - Background colour (low byte) - * GDC[0x12] - Background colour (high byte) - * GDC[0x14] - Foreground colour (low byte) - * GDC[0x15] - Foreground colour (high byte) - * GDC[0x17] - Write mask (low byte) - * GDC[0x18] - Write mask (high byte) + * GDC[0x10] - Control + * bit 0 - pixel width (1 = 16 bit, 0 = 8 bit) + * bit 1 - mono->colour expansion (1 = enabled, + * 0 = disabled) + * bit 2 - mono->colour expansion transparency + * (1 = transparent, 0 = opaque) + * bit 3 - extended latch copy + * GDC[0x11] - Background colour (low byte) + * GDC[0x12] - Background colour (high byte) + * GDC[0x14] - Foreground colour (low byte) + * GDC[0x15] - Foreground colour (high byte) + * GDC[0x17] - Write mask (low byte) + * GDC[0x18] - Write mask (high byte) * - * Mono->colour expansion will expand written data 8:1 to 8/16 - * consecutive bytes. - * MSB is processed first. On word writes, low byte is processed - * first. 1 bits write foreground colour, 0 bits write background - * colour unless transparency is enabled. - * If the relevant bit is clear in the write mask then the data - * is not written. + * Mono->colour expansion will expand written data 8:1 to 8/16 + * consecutive bytes. + * MSB is processed first. On word writes, low byte is processed + * first. 1 bits write foreground colour, 0 bits write background + * colour unless transparency is enabled. + * If the relevant bit is clear in the write mask then the data + * is not written. * - * With 16-bit pixel width, each bit still expands to one byte, - * so the TGUI driver doubles up monochrome data. + * With 16-bit pixel width, each bit still expands to one byte, + * so the TGUI driver doubles up monochrome data. * - * While there is room in the register map for three byte colours, - * I don't believe 24-bit colour is supported. The TGUI9440 - * blitter has the same limitation. + * While there is room in the register map for three byte colours, + * I don't believe 24-bit colour is supported. The TGUI9440 + * blitter has the same limitation. * - * I don't think double word writes are supported. + * I don't think double word writes are supported. * - * Extended latch copy uses an internal 16 byte latch. Reads load - * the latch, writing writes out 16 bytes. I don't think the - * access size or host data has any affect, but the Windows 3.1 - * driver always reads bytes and write words of 0xffff. + * Extended latch copy uses an internal 16 byte latch. Reads load + * the latch, writing writes out 16 bytes. I don't think the + * access size or host data has any affect, but the Windows 3.1 + * driver always reads bytes and write words of 0xffff. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ti_cf62011.c b/src/video/vid_ti_cf62011.c index 417f85861..1ceaf169e 100644 --- a/src/video/vid_ti_cf62011.c +++ b/src/video/vid_ti_cf62011.c @@ -1,56 +1,56 @@ /* - * 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. * - * Emulation of the TI CF62011 SVGA chip. + * Emulation of the TI CF62011 SVGA chip. * - * This chip was used in several of IBM's later machines, such - * as the PS/1 Model 2121, and a number of PS/2 models. As noted - * in an article on Usenet: + * This chip was used in several of IBM's later machines, such + * as the PS/1 Model 2121, and a number of PS/2 models. As noted + * in an article on Usenet: * - * "In the early 90s IBM looked for some cheap VGA card to - * substitute the (relatively) expensive XGA-2 adapter for - * *servers*, where the primary purpose is supervision of the - * machine rather than real *work* with it in Hi-Res. It was - * just to supply a base video, where a XGA-2 were a waste of - * potential. They had a contract with TI for some DSPs in - * multimedia already (the MWave for instance is based on - * TI-DSPs as well as many Thinkpad internal chipsets) and TI - * offered them a rather cheap – and inexpensive – chipset - * and combined it with a cheap clock oscillator and an Inmos - * RAMDAC. That chipset was already pretty much outdated at - * that time but IBM decided it would suffice for that low - * end purpose. + * "In the early 90s IBM looked for some cheap VGA card to + * substitute the (relatively) expensive XGA-2 adapter for + * *servers*, where the primary purpose is supervision of the + * machine rather than real *work* with it in Hi-Res. It was + * just to supply a base video, where a XGA-2 were a waste of + * potential. They had a contract with TI for some DSPs in + * multimedia already (the MWave for instance is based on + * TI-DSPs as well as many Thinkpad internal chipsets) and TI + * offered them a rather cheap – and inexpensive – chipset + * and combined it with a cheap clock oscillator and an Inmos + * RAMDAC. That chipset was already pretty much outdated at + * that time but IBM decided it would suffice for that low + * end purpose. * - * Driver support was given under DOS and OS/2 only for base - * functions like selection of the vertical refresh and few - * different modes only. Not even the Win 3.x support has - * been finalized. Technically the adapter could do better - * than VGA, but its video BIOS is largely undocumented and - * intentionally crippled down to a few functions." + * Driver support was given under DOS and OS/2 only for base + * functions like selection of the vertical refresh and few + * different modes only. Not even the Win 3.x support has + * been finalized. Technically the adapter could do better + * than VGA, but its video BIOS is largely undocumented and + * intentionally crippled down to a few functions." * - * This chip is reportedly the same one as used in the MCA - * IBM SVGA Adapter/A (ID 090EEh), which mostly had faster - * VRAM and RAMDAC. The VESA DOS graphics driver for that - * card can be used: m95svga.exe + * This chip is reportedly the same one as used in the MCA + * IBM SVGA Adapter/A (ID 090EEh), which mostly had faster + * VRAM and RAMDAC. The VESA DOS graphics driver for that + * card can be used: m95svga.exe * - * The controller responds at ports in the range 0x2100-0x210F, - * which are the same as the XGA. It supports up to 1MB of VRAM, - * but we lock it down to 512K. The PS/1 2122 had 256K. + * The controller responds at ports in the range 0x2100-0x210F, + * which are the same as the XGA. It supports up to 1MB of VRAM, + * but we lock it down to 512K. The PS/1 2122 had 256K. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #include #include diff --git a/src/video/vid_tkd8001_ramdac.c b/src/video/vid_tkd8001_ramdac.c index 225c91c4b..1d1668d25 100644 --- a/src/video/vid_tkd8001_ramdac.c +++ b/src/video/vid_tkd8001_ramdac.c @@ -1,20 +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. + * 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. * - * Trident TKD8001 RAMDAC emulation. + * Trident TKD8001 RAMDAC emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_tvga.c b/src/video/vid_tvga.c index ed249f618..491dc24a9 100644 --- a/src/video/vid_tvga.c +++ b/src/video/vid_tvga.c @@ -1,20 +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. + * 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. * - * Trident TVGA (8900D) emulation. + * Trident TVGA (8900D) emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_tvp3026_ramdac.c b/src/video/vid_tvp3026_ramdac.c index cde953b01..2ea60d520 100644 --- a/src/video/vid_tvp3026_ramdac.c +++ b/src/video/vid_tvp3026_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of the Texas Instruments TVP3026 true colour RAMDAC - * family. + * Emulation of the Texas Instruments TVP3026 true colour RAMDAC + * family. * * - * TODO: Clock and other parts. + * TODO: Clock and other parts. * - * Authors: TheCollector1995, + * Authors: TheCollector1995, * - * Copyright 2021 TheCollector1995. + * Copyright 2021 TheCollector1995. */ #include #include diff --git a/src/video/vid_vga.c b/src/video/vid_vga.c index e581f237c..de3943ec0 100644 --- a/src/video/vid_vga.c +++ b/src/video/vid_vga.c @@ -1,20 +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. + * 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. * - * IBM VGA emulation. + * IBM VGA emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_voodoo.c b/src/video/vid_voodoo.c index 326ff9879..346e33755 100644 --- a/src/video/vid_voodoo.c +++ b/src/video/vid_voodoo.c @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 386ac8575..956176180 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -1,18 +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. * - * Voodoo Banshee and 3 specific emulation. + * Voodoo Banshee and 3 specific emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_blitter.c b/src/video/vid_voodoo_blitter.c index 00847554a..a0f8109f0 100644 --- a/src/video/vid_voodoo_blitter.c +++ b/src/video/vid_voodoo_blitter.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_display.c b/src/video/vid_voodoo_display.c index 40e0b2ce9..7ab72dabe 100644 --- a/src/video/vid_voodoo_display.c +++ b/src/video/vid_voodoo_display.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_fb.c b/src/video/vid_voodoo_fb.c index 705c16853..267949cde 100644 --- a/src/video/vid_voodoo_fb.c +++ b/src/video/vid_voodoo_fb.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_fifo.c b/src/video/vid_voodoo_fifo.c index d90c12bb5..5b2ef1bb2 100644 --- a/src/video/vid_voodoo_fifo.c +++ b/src/video/vid_voodoo_fifo.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_reg.c b/src/video/vid_voodoo_reg.c index 3d5580d04..1822e3070 100644 --- a/src/video/vid_voodoo_reg.c +++ b/src/video/vid_voodoo_reg.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_render.c b/src/video/vid_voodoo_render.c index ec16b3a32..d419d1891 100644 --- a/src/video/vid_voodoo_render.c +++ b/src/video/vid_voodoo_render.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_setup.c b/src/video/vid_voodoo_setup.c index f98ddb450..7a09dffcc 100644 --- a/src/video/vid_voodoo_setup.c +++ b/src/video/vid_voodoo_setup.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_texture.c b/src/video/vid_voodoo_texture.c index 9d1149c65..8e1cd71db 100644 --- a/src/video/vid_voodoo_texture.c +++ b/src/video/vid_voodoo_texture.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_wy700.c b/src/video/vid_wy700.c index e492523db..9fb5b9ee4 100644 --- a/src/video/vid_wy700.c +++ b/src/video/vid_wy700.c @@ -1,20 +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. + * 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. * - * Wyse-700 emulation. + * Wyse-700 emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/video.c b/src/video/video.c index 096ea89e1..5d5f2f37b 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -1,52 +1,52 @@ /* - * 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. * - * Main video-rendering module. + * Main video-rendering module. * - * Video timing settings - + * Video timing settings - * - * 8-bit - 1mb/sec - * B = 8 ISA clocks - * W = 16 ISA clocks - * L = 32 ISA clocks + * 8-bit - 1mb/sec + * B = 8 ISA clocks + * W = 16 ISA clocks + * L = 32 ISA clocks * - * Slow 16-bit - 2mb/sec - * B = 6 ISA clocks - * W = 8 ISA clocks - * L = 16 ISA clocks + * Slow 16-bit - 2mb/sec + * B = 6 ISA clocks + * W = 8 ISA clocks + * L = 16 ISA clocks * - * Fast 16-bit - 4mb/sec - * B = 3 ISA clocks - * W = 3 ISA clocks - * L = 6 ISA clocks + * Fast 16-bit - 4mb/sec + * B = 3 ISA clocks + * W = 3 ISA clocks + * L = 6 ISA clocks * - * Slow VLB/PCI - 8mb/sec (ish) - * B = 4 bus clocks - * W = 8 bus clocks - * L = 16 bus clocks + * Slow VLB/PCI - 8mb/sec (ish) + * B = 4 bus clocks + * W = 8 bus clocks + * L = 16 bus clocks * - * Mid VLB/PCI - - * B = 4 bus clocks - * W = 5 bus clocks - * L = 10 bus clocks + * Mid VLB/PCI - + * B = 4 bus clocks + * W = 5 bus clocks + * L = 10 bus clocks * - * Fast VLB/PCI - - * B = 3 bus clocks - * W = 3 bus clocks - * L = 4 bus clocks + * Fast VLB/PCI - + * B = 3 bus clocks + * W = 3 bus clocks + * L = 4 bus clocks * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #define PNG_DEBUG 0 diff --git a/src/win/win_icon.c b/src/win/win_icon.c index d23a325ff..64acc44b0 100644 --- a/src/win/win_icon.c +++ b/src/win/win_icon.c @@ -9,6 +9,7 @@ * Implement the application's icon changing system. * * + * * Authors: Laci bá' * * Copyright 2021 Laci bá'. diff --git a/src/win/win_joystick_rawinput.c b/src/win/win_joystick_rawinput.c index efaf76f01..efa7714df 100644 --- a/src/win/win_joystick_rawinput.c +++ b/src/win/win_joystick_rawinput.c @@ -8,6 +8,8 @@ * * RawInput joystick interface. * + * + * * Authors: Sarah Walker, * Miran Grca, * GH Cao, diff --git a/src/win/win_opengl.c b/src/win/win_opengl.c index d9a492927..05d7eb72c 100644 --- a/src/win/win_opengl.c +++ b/src/win/win_opengl.c @@ -15,6 +15,8 @@ * (UI) options * More error handling * + * + * * Authors: Teemu Korhonen * * Copyright 2021 Teemu Korhonen diff --git a/src/win/win_opengl_glslp.c b/src/win/win_opengl_glslp.c index c3d40a56e..47cc755dc 100644 --- a/src/win/win_opengl_glslp.c +++ b/src/win/win_opengl_glslp.c @@ -11,6 +11,8 @@ * * TODO: Read .glslp files for multipass shaders and settings. * + * + * * Authors: Teemu Korhonen * * Copyright 2021 Teemu Korhonen From 1860700eabe7b86c2a9acbf961d941e56e883769 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 6 Jan 2023 15:36:29 -0500 Subject: [PATCH 087/112] Fix some small issues --- CMakeLists.txt | 2 +- README.md | 2 +- debian/changelog | 2 +- src/86box.c | 2 +- src/cdrom/CMakeLists.txt | 2 +- src/chipset/CMakeLists.txt | 2 +- src/chipset/acc2168.c | 2 +- src/chipset/ali1429.c | 4 ++-- src/chipset/ali1489.c | 4 ++-- src/chipset/cs8230.c | 2 +- src/chipset/headland.c | 2 +- src/chipset/scamp.c | 2 +- src/chipset/sis_85c4xx.c | 2 +- src/chipset/via_apollo.c | 2 +- src/chipset/via_pipc.c | 2 +- src/codegen/CMakeLists.txt | 2 +- src/codegen/codegen.h | 2 +- src/codegen/codegen_x86.c | 2 +- src/codegen_new/CMakeLists.txt | 2 +- src/config.c | 4 ++-- src/cpu/386_common.h | 2 +- src/cpu/386_ops.h | 2 +- src/cpu/CMakeLists.txt | 2 +- src/cpu/codegen_timing_k6.c | 2 +- src/cpu/cpu.c | 2 +- src/cpu/cpu.h | 2 +- src/cpu/cpu_table.c | 2 +- src/cpu/fpu.c | 2 +- src/cpu/x86_ops.h | 2 +- src/cpu/x86seg.c | 2 +- src/cpu/x87_ops.h | 2 +- src/cpu/x87_ops_loadstore.h | 2 +- src/device.c | 2 +- src/device/CMakeLists.txt | 2 +- src/device/keyboard.c | 2 +- src/device/keyboard_at.c | 4 ++-- src/device/keyboard_xt.c | 2 +- src/device/phoenix_486_jumper.c | 2 ++ src/device/serial.c | 2 +- src/disk/CMakeLists.txt | 2 +- src/disk/hdc.c | 2 +- src/disk/hdc_esdi_at.c | 2 +- src/disk/hdc_esdi_mca.c | 4 ++-- src/disk/hdc_ide.c | 2 +- src/disk/hdc_ide_sff8038i.c | 2 +- src/disk/hdc_st506_at.c | 2 +- src/disk/hdc_st506_xt.c | 2 +- src/disk/hdc_xta.c | 2 +- src/disk/hdc_xtide.c | 2 +- src/disk/hdd_image.c | 2 +- src/disk/hdd_table.c | 2 +- src/disk/zip.c | 2 +- src/dma.c | 2 +- src/floppy/CMakeLists.txt | 2 +- src/floppy/fdc.c | 2 +- src/floppy/fdd.c | 4 ++-- src/floppy/fdd_fdi.c | 2 +- src/floppy/fdd_img.c | 2 +- src/game/CMakeLists.txt | 2 +- src/game/gameport.c | 2 +- src/game/joystick_ch_flightstick_pro.c | 2 +- src/game/joystick_standard.c | 2 +- src/game/joystick_sw_pad.c | 2 +- src/game/joystick_tm_fcs.c | 2 +- src/include/86box/bswap.h | 2 +- src/include/86box/chipset.h | 2 +- src/include/86box/config.h | 2 +- src/include/86box/device.h | 2 +- src/include/86box/dma.h | 2 +- src/include/86box/fdc.h | 2 +- src/include/86box/fdc_ext.h | 2 +- src/include/86box/fdd.h | 2 +- src/include/86box/fdd_86f.h | 2 +- src/include/86box/fdd_common.h | 2 +- src/include/86box/fdd_fdi.h | 2 +- src/include/86box/fdd_img.h | 2 +- src/include/86box/fdd_json.h | 2 +- src/include/86box/fdd_td0.h | 2 +- src/include/86box/gameport.h | 2 +- src/include/86box/hdc_ide.h | 2 +- src/include/86box/hdc_ide_sff8038i.h | 2 +- src/include/86box/hdd.h | 2 +- src/include/86box/ini.h | 4 ++-- src/include/86box/io.h | 4 ++-- src/include/86box/joystick_ch_flightstick_pro.h | 2 +- src/include/86box/joystick_standard.h | 2 +- src/include/86box/joystick_sw_pad.h | 2 +- src/include/86box/joystick_tm_fcs.h | 2 +- src/include/86box/keyboard.h | 2 +- src/include/86box/language.h | 2 +- src/include/86box/m_amstrad.h | 2 +- src/include/86box/m_at_t3100e.h | 4 ++-- src/include/86box/m_xt_t1000.h | 4 ++-- src/include/86box/machine.h | 2 +- src/include/86box/mem.h | 2 +- src/include/86box/net_ne2000.h | 2 +- src/include/86box/net_wd8003.h | 2 +- src/include/86box/nvr_ps2.h | 4 ++-- src/include/86box/pci.h | 2 +- src/include/86box/pit.h | 2 +- src/include/86box/pit_fast.h | 2 +- src/include/86box/random.h | 2 +- src/include/86box/resource.h | 4 ++-- src/include/86box/rom.h | 3 ++- src/include/86box/scsi.h | 2 +- src/include/86box/scsi_buslogic.h | 2 +- src/include/86box/scsi_cdrom.h | 2 +- src/include/86box/scsi_disk.h | 2 +- src/include/86box/scsi_ncr5380.h | 4 ++-- src/include/86box/scsi_ncr53c8xx.h | 2 +- src/include/86box/scsi_pcscsi.h | 2 +- src/include/86box/scsi_spock.h | 2 +- src/include/86box/scsi_x54x.h | 2 +- src/include/86box/serial.h | 2 +- src/include/86box/snd_ad1848.h | 2 +- src/include/86box/snd_mpu401.h | 2 +- src/include/86box/snd_sb.h | 2 +- src/include/86box/snd_speaker.h | 2 +- src/include/86box/sound.h | 2 +- src/include/86box/vid_cga.h | 2 +- src/include/86box/vid_ddc.h | 2 +- src/include/86box/vid_ega.h | 2 +- src/include/86box/vid_hercules.h | 2 +- src/include/86box/vid_nga.h | 2 +- src/include/86box/vid_ogc.h | 2 +- src/include/86box/vid_svga.h | 2 +- src/include/86box/vid_svga_render.h | 2 +- src/include/86box/vid_vga.h | 2 +- src/include/86box/vid_voodoo_banshee.h | 2 +- src/include/86box/vid_voodoo_banshee_blitter.h | 2 +- src/include/86box/vid_voodoo_blitter.h | 2 +- src/include/86box/vid_voodoo_common.h | 2 +- src/include/86box/vid_voodoo_display.h | 2 +- src/include/86box/vid_voodoo_dither.h | 2 +- src/include/86box/vid_voodoo_fb.h | 2 +- src/include/86box/vid_voodoo_fifo.h | 2 +- src/include/86box/vid_voodoo_reg.h | 2 +- src/include/86box/vid_voodoo_setup.h | 2 +- src/include/86box/vid_voodoo_texture.h | 2 +- src/include/86box/video.h | 2 +- src/include/86box/win.h | 2 +- src/include/86box/win_sdl.h | 4 ++-- src/include/86box/zip.h | 2 +- src/include/minitrace/minitrace.h | 2 +- src/ini.c | 4 ++-- src/io.c | 2 +- src/machine/CMakeLists.txt | 2 +- src/machine/m_amstrad.c | 2 +- src/machine/m_at.c | 2 +- src/machine/m_at_286_386sx.c | 2 +- src/machine/m_at_386dx_486.c | 2 +- src/machine/m_at_commodore.c | 4 ++-- src/machine/m_at_compaq.c | 2 +- src/machine/m_at_socket4.c | 2 +- src/machine/m_at_socket5.c | 2 +- src/machine/m_at_socket7.c | 2 +- src/machine/m_at_socket7_3v.c | 2 +- src/machine/m_at_sockets7.c | 2 +- src/machine/m_at_t3100e.c | 4 ++-- src/machine/m_at_t3100e_vid.c | 2 +- src/machine/m_pcjr.c | 2 +- src/machine/m_ps1.c | 2 +- src/machine/m_ps2_mca.c | 2 +- src/machine/m_tandy.c | 2 +- src/machine/m_xt_compaq.c | 2 +- src/machine/m_xt_olivetti.c | 2 +- src/machine/m_xt_t1000.c | 6 +++--- src/machine/m_xt_t1000_vid.c | 2 +- src/machine/m_xt_zenith.c | 2 +- src/machine/machine.c | 2 +- src/machine/machine_table.c | 2 +- src/mem/CMakeLists.txt | 2 +- src/mem/catalyst_flash.c | 2 +- src/mem/intel_flash.c | 2 +- src/mem/mem.c | 2 +- src/mem/rom.c | 2 +- src/mem/sst_flash.c | 2 +- src/minitrace/minitrace.c | 2 +- src/network/CMakeLists.txt | 2 +- src/network/net_ne2000.c | 2 +- src/network/pcap_if.c | 2 +- src/network/slirp/CMakeLists.txt | 2 +- src/nvr.c | 2 +- src/nvr_at.c | 2 +- src/nvr_ps2.c | 4 ++-- src/pci.c | 2 +- src/printer/CMakeLists.txt | 2 +- src/printer/prt_escp.c | 4 ++-- src/printer/prt_text.c | 2 +- src/qt/qt_cdrom.c | 4 ++-- src/qt/qt_sdl.h | 4 ++-- src/qt/win_dynld.c | 2 +- src/qt/win_joystick_rawinput.c | 2 +- src/scsi/CMakeLists.txt | 2 +- src/scsi/scsi_ncr5380.c | 2 +- src/scsi/scsi_spock.c | 2 +- src/sio/CMakeLists.txt | 2 +- src/sio/sio_acc3221.c | 2 +- src/sio/sio_f82c710.c | 2 +- src/sio/sio_fdc37c6xx.c | 2 +- src/sio/sio_pc87306.c | 2 +- src/sio/sio_pc87307.c | 2 +- src/sio/sio_pc87309.c | 2 +- src/sio/sio_pc87310.c | 2 +- src/sio/sio_pc87332.c | 2 +- src/sio/sio_um8669f.c | 2 +- src/sound/CMakeLists.txt | 2 +- src/sound/midi.c | 2 +- src/sound/openal.c | 2 +- src/sound/resid-fp/CMakeLists.txt | 2 +- src/sound/snd_ad1848.c | 2 +- src/sound/snd_audiopci.c | 2 +- src/sound/snd_mpu401.c | 2 +- src/sound/snd_sb.c | 2 +- src/sound/snd_speaker.c | 2 +- src/sound/snd_wss.c | 2 +- src/sound/sound.c | 2 +- src/unix/assets/86Box.spec | 2 +- src/unix/unix_cdrom.c | 4 ++-- src/video/CMakeLists.txt | 2 +- src/video/vid_ati18800.c | 2 +- src/video/vid_ati28800.c | 2 +- src/video/vid_ati68860_ramdac.c | 2 +- src/video/vid_ati_eeprom.c | 2 +- src/video/vid_ati_mach64.c | 2 +- src/video/vid_att20c49x_ramdac.c | 2 +- src/video/vid_att2xc498_ramdac.c | 2 +- src/video/vid_cga.c | 2 +- src/video/vid_cl54xx.c | 2 +- src/video/vid_colorplus.c | 2 +- src/video/vid_compaq_cga.c | 2 +- src/video/vid_ega.c | 2 +- src/video/vid_ega_render.c | 2 +- src/video/vid_et4000.c | 4 ++-- src/video/vid_et4000w32.c | 2 +- src/video/vid_f82c425.c | 10 +++++----- src/video/vid_genius.c | 2 +- src/video/vid_hercules.c | 2 +- src/video/vid_herculesplus.c | 2 +- src/video/vid_ht216.c | 2 +- src/video/vid_ics2595.c | 2 +- src/video/vid_incolor.c | 2 +- src/video/vid_mda.c | 2 +- src/video/vid_mga.c | 2 +- src/video/vid_nga.c | 4 ++-- src/video/vid_oak_oti.c | 2 +- src/video/vid_ogc.c | 4 ++-- src/video/vid_paradise.c | 2 +- src/video/vid_s3.c | 2 +- src/video/vid_s3_virge.c | 2 +- src/video/vid_sc1502x_ramdac.c | 2 +- src/video/vid_sdac_ramdac.c | 2 +- src/video/vid_stg_ramdac.c | 2 +- src/video/vid_svga.c | 2 +- src/video/vid_svga_render.c | 2 +- src/video/vid_tgui9440.c | 2 +- src/video/vid_ti_cf62011.c | 4 ++-- src/video/vid_tkd8001_ramdac.c | 2 +- src/video/vid_tvga.c | 2 +- src/video/vid_vga.c | 2 +- src/video/vid_voodoo.c | 2 +- src/video/vid_voodoo_banshee.c | 2 +- src/video/vid_voodoo_blitter.c | 2 +- src/video/vid_voodoo_display.c | 2 +- src/video/vid_voodoo_fb.c | 2 +- src/video/vid_voodoo_fifo.c | 2 +- src/video/vid_voodoo_reg.c | 2 +- src/video/vid_voodoo_render.c | 2 +- src/video/vid_voodoo_setup.c | 2 +- src/video/vid_voodoo_texture.c | 2 +- src/video/vid_wy700.c | 2 +- src/video/video.c | 2 +- src/win/win.c | 2 +- src/win/win_cdrom.c | 2 +- src/win/win_devconf.c | 2 +- src/win/win_joystick.cpp | 2 +- src/win/win_joystick_rawinput.c | 2 +- src/win/win_joystick_xinput.c | 2 +- src/win/win_mouse.c | 2 +- src/win/win_opengl.c | 2 +- src/win/win_settings.c | 2 +- src/win/win_thread.c | 2 +- src/win/win_ui.c | 2 +- vcpkg.json | 2 +- 284 files changed, 318 insertions(+), 315 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74b2ad4b2..b067bedbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # cmake_minimum_required(VERSION 3.16) diff --git a/README.md b/README.md index 46a7f08bb..05a2a9ed2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ 86Box ===== -[![Build Status](http://ci.86box.net/job/86Box/badge/icon)](http://ci.86box.net/job/86Box) +[![Build Status](https://ci.86box.net/job/86Box/badge/icon)](https://ci.86box.net/job/86Box/) **86Box** is a low level x86 emulator that runs older operating systems and software designed for IBM PC systems and compatibles from 1981 through fairly recent system designs based on the PCI bus. diff --git a/debian/changelog b/debian/changelog index 0ec15e546..45b701f83 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ 86box (3.11.0-1) UNRELEASED; urgency=medium - * Initial release. + * Bump release. -- Jasmine Iwanek Sun, 18 Nov 2022 23:27:00 -0500 diff --git a/src/86box.c b/src/86box.c index 147233b21..8df527c0d 100644 --- a/src/86box.c +++ b/src/86box.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/cdrom/CMakeLists.txt b/src/cdrom/CMakeLists.txt index c09a040bd..201cee7f6 100644 --- a/src/cdrom/CMakeLists.txt +++ b/src/cdrom/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(cdrom OBJECT cdrom.c cdrom_image_backend.c cdrom_image_viso.c cdrom_image.c cdrom_mitsumi.c) diff --git a/src/chipset/CMakeLists.txt b/src/chipset/CMakeLists.txt index 47b9b30ce..d93f86219 100644 --- a/src/chipset/CMakeLists.txt +++ b/src/chipset/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(chipset OBJECT 82c100.c acc2168.c cs8230.c ali1429.c ali1489.c ali1531.c ali1541.c ali1543.c diff --git a/src/chipset/acc2168.c b/src/chipset/acc2168.c index 7332a28a3..765913672 100644 --- a/src/chipset/acc2168.c +++ b/src/chipset/acc2168.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Tiseno100 * * Copyright 2019 Sarah Walker. diff --git a/src/chipset/ali1429.c b/src/chipset/ali1429.c index 699769fa2..36ac2fdf9 100644 --- a/src/chipset/ali1429.c +++ b/src/chipset/ali1429.c @@ -16,8 +16,8 @@ * Authors: Tiseno100, * Miran Grca, * - * Copyright 2020,2021 Tiseno100. - * Copyright 2021,2021 Miran Grca. + * Copyright 2020-2021 Tiseno100. + * Copyright 2021-2021 Miran Grca. */ /* diff --git a/src/chipset/ali1489.c b/src/chipset/ali1489.c index 8a0cfd89a..70ff509ab 100644 --- a/src/chipset/ali1489.c +++ b/src/chipset/ali1489.c @@ -13,8 +13,8 @@ * Authors: Tiseno100, * Miran Grca, * - * Copyright 2020,2021 Tiseno100. - * Copyright 2020,2021 Miran Grca. + * Copyright 2020-2021 Tiseno100. + * Copyright 2020-2021 Miran Grca. */ #include #include diff --git a/src/chipset/cs8230.c b/src/chipset/cs8230.c index 49e7d71b6..edf4ac8c2 100644 --- a/src/chipset/cs8230.c +++ b/src/chipset/cs8230.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2020 Sarah Walker. */ diff --git a/src/chipset/headland.c b/src/chipset/headland.c index c1881bede..8b8ee1562 100644 --- a/src/chipset/headland.c +++ b/src/chipset/headland.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * Original by GreatPsycho for PCem. * Miran Grca, diff --git a/src/chipset/scamp.c b/src/chipset/scamp.c index ec7381cec..6e61db681 100644 --- a/src/chipset/scamp.c +++ b/src/chipset/scamp.c @@ -15,7 +15,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2020 Sarah Walker. */ diff --git a/src/chipset/sis_85c4xx.c b/src/chipset/sis_85c4xx.c index ade5573f1..670a2cc83 100644 --- a/src/chipset/sis_85c4xx.c +++ b/src/chipset/sis_85c4xx.c @@ -13,7 +13,7 @@ * * Authors: Miran Grca, * - * Copyright 2019,2020 Miran Grca. + * Copyright 2019-2020 Miran Grca. */ #include #include diff --git a/src/chipset/via_apollo.c b/src/chipset/via_apollo.c index 99802b2b5..6ed6f21fe 100644 --- a/src/chipset/via_apollo.c +++ b/src/chipset/via_apollo.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * Tiseno100, diff --git a/src/chipset/via_pipc.c b/src/chipset/via_pipc.c index e6701ebfc..4f640920e 100644 --- a/src/chipset/via_pipc.c +++ b/src/chipset/via_pipc.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * RichardG, diff --git a/src/codegen/CMakeLists.txt b/src/codegen/CMakeLists.txt index 23936959e..3cb9de6ca 100644 --- a/src/codegen/CMakeLists.txt +++ b/src/codegen/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # if(DYNAREC) diff --git a/src/codegen/codegen.h b/src/codegen/codegen.h index af602427d..cb9df495b 100644 --- a/src/codegen/codegen.h +++ b/src/codegen/codegen.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/codegen/codegen_x86.c b/src/codegen/codegen_x86.c index bd9793732..dbf76c2e4 100644 --- a/src/codegen/codegen_x86.c +++ b/src/codegen/codegen_x86.c @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * Miran Grca, * * Copyright 2018 Fred N. van Kempen. diff --git a/src/codegen_new/CMakeLists.txt b/src/codegen_new/CMakeLists.txt index 8c02060e4..038f1edd1 100644 --- a/src/codegen_new/CMakeLists.txt +++ b/src/codegen_new/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # if(DYNAREC) diff --git a/src/config.c b/src/config.c index 8e2b5c292..6942d1af9 100644 --- a/src/config.c +++ b/src/config.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * Overdoze, @@ -19,7 +19,7 @@ * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * * NOTE: Forcing config files to be in Unicode encoding breaks * it on Windows XP, and possibly also Vista. Use the diff --git a/src/cpu/386_common.h b/src/cpu/386_common.h index 6310ae642..f26eb7f98 100644 --- a/src/cpu/386_common.h +++ b/src/cpu/386_common.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/cpu/386_ops.h b/src/cpu/386_ops.h index ec46ba0ae..e345ee8d8 100644 --- a/src/cpu/386_ops.h +++ b/src/cpu/386_ops.h @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * leilei, * Miran Grca, * diff --git a/src/cpu/CMakeLists.txt b/src/cpu/CMakeLists.txt index e61d4bfcf..68baaf293 100644 --- a/src/cpu/CMakeLists.txt +++ b/src/cpu/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(cpu OBJECT cpu.c cpu_table.c fpu.c x86.c 808x.c 386.c 386_common.c diff --git a/src/cpu/codegen_timing_k6.c b/src/cpu/codegen_timing_k6.c index 6bb472144..6a59fc157 100644 --- a/src/cpu/codegen_timing_k6.c +++ b/src/cpu/codegen_timing_k6.c @@ -1,5 +1,5 @@ /*Most of the vector instructions here are a total guess. - Some of the timings are based on http://users.atw.hu/instlatx64/AuthenticAMD0000562_K6_InstLatX86.txt*/ + Some of the timings are based on http://http://web.archive.org/web/20181122095446/http://users.atw.hu/instlatx64/AuthenticAMD0000562_K6_InstLatX86.txt*/ #include #include #include diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 380da450e..d48ebe194 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -8,7 +8,7 @@ * * CPU type handler. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei, * Miran Grca, * Fred N. van Kempen, diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index 307865629..25ff141a7 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei, * Miran Grca, * diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index 70c67f91e..3afaf055e 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei, * Miran Grca, * Fred N. van Kempen, diff --git a/src/cpu/fpu.c b/src/cpu/fpu.c index f75d07231..0af010760 100644 --- a/src/cpu/fpu.c +++ b/src/cpu/fpu.c @@ -8,7 +8,7 @@ * * FPU type handler. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/cpu/x86_ops.h b/src/cpu/x86_ops.h index a5e82d78e..ca4d83d69 100644 --- a/src/cpu/x86_ops.h +++ b/src/cpu/x86_ops.h @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * Miran Grca, * * Copyright 2018 Fred N. van Kempen. diff --git a/src/cpu/x86seg.c b/src/cpu/x86seg.c index c1e9e5b3d..5b0d8b73a 100644 --- a/src/cpu/x86seg.c +++ b/src/cpu/x86seg.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/cpu/x87_ops.h b/src/cpu/x87_ops.h index ce4a4becc..c00cdff16 100644 --- a/src/cpu/x87_ops.h +++ b/src/cpu/x87_ops.h @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * leilei, * Miran Grca, * diff --git a/src/cpu/x87_ops_loadstore.h b/src/cpu/x87_ops_loadstore.h index 8d3c3f700..9cec01490 100644 --- a/src/cpu/x87_ops_loadstore.h +++ b/src/cpu/x87_ops_loadstore.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/device.c b/src/device.c index a13825307..81e19e2dc 100644 --- a/src/device.c +++ b/src/device.c @@ -13,7 +13,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/device/CMakeLists.txt b/src/device/CMakeLists.txt index 7fd0b20d0..ed8464647 100644 --- a/src/device/CMakeLists.txt +++ b/src/device/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(dev OBJECT bugger.c cassette.c cartridge.c hasp.c hwm.c hwm_lm75.c hwm_lm78.c hwm_gl518sm.c diff --git a/src/device/keyboard.c b/src/device/keyboard.c index a5503cc3b..74bf3f67e 100644 --- a/src/device/keyboard.c +++ b/src/device/keyboard.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/device/keyboard_at.c b/src/device/keyboard_at.c index 3f5e8e4be..5b777eaf3 100644 --- a/src/device/keyboard_at.c +++ b/src/device/keyboard_at.c @@ -10,10 +10,10 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, - * EngiNerd + * EngiNerd, * * Copyright 2008-2020 Sarah Walker. * Copyright 2016-2020 Miran Grca. diff --git a/src/device/keyboard_xt.c b/src/device/keyboard_xt.c index 7c484af0d..676f99f54 100644 --- a/src/device/keyboard_xt.c +++ b/src/device/keyboard_xt.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd, diff --git a/src/device/phoenix_486_jumper.c b/src/device/phoenix_486_jumper.c index bb1957690..357240ba7 100644 --- a/src/device/phoenix_486_jumper.c +++ b/src/device/phoenix_486_jumper.c @@ -8,6 +8,8 @@ * * Implementation of the Phoenix 486 Jumper Readout * + * + * * Authors: Tiseno100 * * Copyright 2020 Tiseno100 diff --git a/src/device/serial.c b/src/device/serial.c index 2434ca17c..dad2ed7f5 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/disk/CMakeLists.txt b/src/disk/CMakeLists.txt index 6d3abfc83..7771a0b72 100644 --- a/src/disk/CMakeLists.txt +++ b/src/disk/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(hdd OBJECT hdd.c hdd_image.c hdd_table.c hdc.c hdc_st506_xt.c diff --git a/src/disk/hdc.c b/src/disk/hdc.c index 0e58b6473..bae818b9a 100644 --- a/src/disk/hdc.c +++ b/src/disk/hdc.c @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include #include diff --git a/src/disk/hdc_esdi_at.c b/src/disk/hdc_esdi_at.c index 9df7725f1..66c7a0231 100644 --- a/src/disk/hdc_esdi_at.c +++ b/src/disk/hdc_esdi_at.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/disk/hdc_esdi_mca.c b/src/disk/hdc_esdi_mca.c index 80290c745..f9af1e864 100644 --- a/src/disk/hdc_esdi_mca.c +++ b/src/disk/hdc_esdi_mca.c @@ -54,11 +54,11 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * * Copyright 2008-2018 Sarah Walker. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index 062f0fde5..c2595e3e4 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/disk/hdc_ide_sff8038i.c b/src/disk/hdc_ide_sff8038i.c index 3809359b2..b5c75a756 100644 --- a/src/disk/hdc_ide_sff8038i.c +++ b/src/disk/hdc_ide_sff8038i.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/disk/hdc_st506_at.c b/src/disk/hdc_st506_at.c index d4edc4847..2eee8d294 100644 --- a/src/disk/hdc_st506_at.c +++ b/src/disk/hdc_st506_at.c @@ -14,7 +14,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/disk/hdc_st506_xt.c b/src/disk/hdc_st506_xt.c index c7b62f127..08f1329be 100644 --- a/src/disk/hdc_st506_xt.c +++ b/src/disk/hdc_st506_xt.c @@ -44,7 +44,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2008-2019 Sarah Walker. diff --git a/src/disk/hdc_xta.c b/src/disk/hdc_xta.c index 589ec2789..ca7f01b9d 100644 --- a/src/disk/hdc_xta.c +++ b/src/disk/hdc_xta.c @@ -50,7 +50,7 @@ * * Based on my earlier HD20 driver for the EuroPC. * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/disk/hdc_xtide.c b/src/disk/hdc_xtide.c index 45b8dde54..72ad580ae 100644 --- a/src/disk/hdc_xtide.c +++ b/src/disk/hdc_xtide.c @@ -23,7 +23,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/disk/hdd_image.c b/src/disk/hdd_image.c index 1b59ac570..ba7cf18ba 100644 --- a/src/disk/hdd_image.c +++ b/src/disk/hdd_image.c @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #define _GNU_SOURCE #include diff --git a/src/disk/hdd_table.c b/src/disk/hdd_table.c index d75dc7e8d..12a0040ef 100644 --- a/src/disk/hdd_table.c +++ b/src/disk/hdd_table.c @@ -15,7 +15,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include #include diff --git a/src/disk/zip.c b/src/disk/zip.c index c79f5d3d6..a0107d1ef 100644 --- a/src/disk/zip.c +++ b/src/disk/zip.c @@ -2073,7 +2073,7 @@ zip_phase_data_out(scsi_common_t *sc) dev->buffer[2] = (i >> 8) & 0xff; dev->buffer[3] = i & 0xff; } else if (dev->current_cdb[1] & 4) { - /* CHS are 96,1,2048 (ZIP 100) and 239,1,2048 (ZIP 250) */ + /* CHS are 96, 1, 2048 (ZIP 100) and 239, 1, 2048 (ZIP 250) */ s = (i % 2048); h = ((i - s) / 2048) % 1; c = ((i - s) / 2048) / 1; diff --git a/src/dma.c b/src/dma.c index d8c4ea674..ecdc393ff 100644 --- a/src/dma.c +++ b/src/dma.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/floppy/CMakeLists.txt b/src/floppy/CMakeLists.txt index 70bae154e..89fbbf76f 100644 --- a/src/floppy/CMakeLists.txt +++ b/src/floppy/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(fdd OBJECT fdd.c fdc.c fdc_magitronic.c fdc_monster.c fdc_pii15xb.c diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index 1f81f025e..9981a72a2 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index 06b949ffb..ee43256a4 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -10,13 +10,13 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018-2019 Fred N. van Kempen. */ #include #include diff --git a/src/floppy/fdd_fdi.c b/src/floppy/fdd_fdi.c index 2a1ef5ba4..64279c173 100644 --- a/src/floppy/fdd_fdi.c +++ b/src/floppy/fdd_fdi.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/floppy/fdd_img.c b/src/floppy/fdd_img.c index f7bad2922..a9fc73a24 100644 --- a/src/floppy/fdd_img.c +++ b/src/floppy/fdd_img.c @@ -15,7 +15,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index 5ed136de5..83dcd4836 100644 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(game OBJECT gameport.c joystick_standard.c diff --git a/src/game/gameport.c b/src/game/gameport.c index ab8422070..f3557d158 100644 --- a/src/game/gameport.c +++ b/src/game/gameport.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * RichardG, * * Copyright 2016-2018 Miran Grca. diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index 0741e0360..f5785d6f4 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index 71c354945..55a28acee 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/game/joystick_sw_pad.c b/src/game/joystick_sw_pad.c index 647ca6a74..26e26474b 100644 --- a/src/game/joystick_sw_pad.c +++ b/src/game/joystick_sw_pad.c @@ -32,7 +32,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/game/joystick_tm_fcs.c b/src/game/joystick_tm_fcs.c index 4364a432f..7bcb15742 100644 --- a/src/game/joystick_tm_fcs.c +++ b/src/game/joystick_tm_fcs.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/bswap.h b/src/include/86box/bswap.h index 22d25cf4a..9f3c51917 100644 --- a/src/include/86box/bswap.h +++ b/src/include/86box/bswap.h @@ -13,7 +13,7 @@ * Authors: Fred N. van Kempen, * neozeed, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 neozeed. * * This program is free software; you can redistribute it and/or modify diff --git a/src/include/86box/chipset.h b/src/include/86box/chipset.h index f76028d78..0a3e988f6 100644 --- a/src/include/86box/chipset.h +++ b/src/include/86box/chipset.h @@ -12,7 +12,7 @@ * * Authors: Miran Grca, * - * Copyright 2019,2020 Miran Grca. + * Copyright 2019-2020 Miran Grca. */ #ifndef EMU_CHIPSET_H #define EMU_CHIPSET_H diff --git a/src/include/86box/config.h b/src/include/86box/config.h index dd873d168..9738b049b 100644 --- a/src/include/86box/config.h +++ b/src/include/86box/config.h @@ -16,7 +16,7 @@ * Overdoze, * * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2016-2017 Miran Grca. * Copyright 2017 Fred N. van Kempen. */ #ifndef EMU_CONFIG_H diff --git a/src/include/86box/device.h b/src/include/86box/device.h index 9f0a5f864..79cbf4d2a 100644 --- a/src/include/86box/device.h +++ b/src/include/86box/device.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/include/86box/dma.h b/src/include/86box/dma.h index f7a516a61..904d0b13b 100644 --- a/src/include/86box/dma.h +++ b/src/include/86box/dma.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2020 Miran Grca. diff --git a/src/include/86box/fdc.h b/src/include/86box/fdc.h index ec3136baa..e68c5d463 100644 --- a/src/include/86box/fdc.h +++ b/src/include/86box/fdc.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * 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 3dc518f81..106235658 100644 --- a/src/include/86box/fdc_ext.h +++ b/src/include/86box/fdc_ext.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/fdd.h b/src/include/86box/fdd.h index f612466b3..19a2141d3 100644 --- a/src/include/86box/fdd.h +++ b/src/include/86box/fdd.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/fdd_86f.h b/src/include/86box/fdd_86f.h index e20990b09..cc8035965 100644 --- a/src/include/86box/fdd_86f.h +++ b/src/include/86box/fdd_86f.h @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018-2019 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_86F_H #define EMU_FLOPPY_86F_H diff --git a/src/include/86box/fdd_common.h b/src/include/86box/fdd_common.h index 9c10a4a9a..7673d9684 100644 --- a/src/include/86box/fdd_common.h +++ b/src/include/86box/fdd_common.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef FDD_COMMON_H #define FDD_COMMON_H diff --git a/src/include/86box/fdd_fdi.h b/src/include/86box/fdd_fdi.h index 4d4e551d6..6b9461bad 100644 --- a/src/include/86box/fdd_fdi.h +++ b/src/include/86box/fdd_fdi.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/fdd_img.h b/src/include/86box/fdd_img.h index ec0e9df67..f0a639d88 100644 --- a/src/include/86box/fdd_img.h +++ b/src/include/86box/fdd_img.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/fdd_json.h b/src/include/86box/fdd_json.h index e86aad01a..7f3c9adb4 100644 --- a/src/include/86box/fdd_json.h +++ b/src/include/86box/fdd_json.h @@ -10,7 +10,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/include/86box/fdd_td0.h b/src/include/86box/fdd_td0.h index 06938c66a..add6a07dd 100644 --- a/src/include/86box/fdd_td0.h +++ b/src/include/86box/fdd_td0.h @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_TD0_H #define EMU_FLOPPY_TD0_H diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index 66024867d..905130da0 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * RichardG, * * Copyright 2016-2018 Miran Grca. diff --git a/src/include/86box/hdc_ide.h b/src/include/86box/hdc_ide.h index c1143af5b..e7bd8d7cf 100644 --- a/src/include/86box/hdc_ide.h +++ b/src/include/86box/hdc_ide.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. diff --git a/src/include/86box/hdc_ide_sff8038i.h b/src/include/86box/hdc_ide_sff8038i.h index 277e9b25a..b411ecf5d 100644 --- a/src/include/86box/hdc_ide_sff8038i.h +++ b/src/include/86box/hdc_ide_sff8038i.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/hdd.h b/src/include/86box/hdd.h index c4b3b0328..58fff9ffd 100644 --- a/src/include/86box/hdd.h +++ b/src/include/86box/hdd.h @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef EMU_HDD_H #define EMU_HDD_H diff --git a/src/include/86box/ini.h b/src/include/86box/ini.h index d754d645b..5eca9ab8c 100644 --- a/src/include/86box/ini.h +++ b/src/include/86box/ini.h @@ -10,13 +10,13 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * Overdoze, * * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2016-2017 Miran Grca. * */ #ifndef EMU_INI_H diff --git a/src/include/86box/io.h b/src/include/86box/io.h index 20b493e7f..b80b37a39 100644 --- a/src/include/86box/io.h +++ b/src/include/86box/io.h @@ -10,12 +10,12 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2016-2017 Miran Grca. */ #ifndef EMU_IO_H #define EMU_IO_H diff --git a/src/include/86box/joystick_ch_flightstick_pro.h b/src/include/86box/joystick_ch_flightstick_pro.h index 73e2d7c69..b49800ecb 100644 --- a/src/include/86box/joystick_ch_flightstick_pro.h +++ b/src/include/86box/joystick_ch_flightstick_pro.h @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/joystick_standard.h b/src/include/86box/joystick_standard.h index ac2b7ea3f..c874677ea 100644 --- a/src/include/86box/joystick_standard.h +++ b/src/include/86box/joystick_standard.h @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/joystick_sw_pad.h b/src/include/86box/joystick_sw_pad.h index d22f337a8..a75d802de 100644 --- a/src/include/86box/joystick_sw_pad.h +++ b/src/include/86box/joystick_sw_pad.h @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/joystick_tm_fcs.h b/src/include/86box/joystick_tm_fcs.h index 2e875190e..65e734a40 100644 --- a/src/include/86box/joystick_tm_fcs.h +++ b/src/include/86box/joystick_tm_fcs.h @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/keyboard.h b/src/include/86box/keyboard.h index 0e384b39b..db18ac789 100644 --- a/src/include/86box/keyboard.h +++ b/src/include/86box/keyboard.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/language.h b/src/include/86box/language.h index fbd1f6e2b..8db604efc 100644 --- a/src/include/86box/language.h +++ b/src/include/86box/language.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2022 Jasmine Iwanek. */ diff --git a/src/include/86box/m_amstrad.h b/src/include/86box/m_amstrad.h index 5d0350703..ef4e8b9ea 100644 --- a/src/include/86box/m_amstrad.h +++ b/src/include/86box/m_amstrad.h @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2019 Sarah Walker. */ diff --git a/src/include/86box/m_at_t3100e.h b/src/include/86box/m_at_t3100e.h index aa545fc45..c25d171b9 100644 --- a/src/include/86box/m_at_t3100e.h +++ b/src/include/86box/m_at_t3100e.h @@ -12,9 +12,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/include/86box/m_xt_t1000.h b/src/include/86box/m_xt_t1000.h index 452decc21..d8e8cd56b 100644 --- a/src/include/86box/m_xt_t1000.h +++ b/src/include/86box/m_xt_t1000.h @@ -12,9 +12,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 052e55abd..9137da5d3 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/mem.h b/src/include/86box/mem.h index f6252be09..f109776a6 100644 --- a/src/include/86box/mem.h +++ b/src/include/86box/mem.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * Miran Grca, * diff --git a/src/include/86box/net_ne2000.h b/src/include/86box/net_ne2000.h index 73b5bd67d..350668ccb 100644 --- a/src/include/86box/net_ne2000.h +++ b/src/include/86box/net_ne2000.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * 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 diff --git a/src/include/86box/net_wd8003.h b/src/include/86box/net_wd8003.h index deb4ce7b8..a0ea13287 100644 --- a/src/include/86box/net_wd8003.h +++ b/src/include/86box/net_wd8003.h @@ -18,7 +18,7 @@ * Miran Grca, * Peter Grehan, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Portions Copyright (C) 2002 MandrakeSoft S.A. * diff --git a/src/include/86box/nvr_ps2.h b/src/include/86box/nvr_ps2.h index 9fd0a7897..478d1be44 100644 --- a/src/include/86box/nvr_ps2.h +++ b/src/include/86box/nvr_ps2.h @@ -11,9 +11,9 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2008-2018 Sarah Walker. * * This program is free software; you can redistribute it and/or modify diff --git a/src/include/86box/pci.h b/src/include/86box/pci.h index 5c24bebf2..c16d5a7e8 100644 --- a/src/include/86box/pci.h +++ b/src/include/86box/pci.h @@ -12,7 +12,7 @@ * * Authors: Miran Grca, * Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2020 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. diff --git a/src/include/86box/pit.h b/src/include/86box/pit.h index 292844d4f..d50e45967 100644 --- a/src/include/86box/pit.h +++ b/src/include/86box/pit.h @@ -13,7 +13,7 @@ * * Authors: Miran Grca, * - * Copyright 2019,2020 Miran Grca. + * Copyright 2019-2020 Miran Grca. */ #ifndef EMU_PIT_H diff --git a/src/include/86box/pit_fast.h b/src/include/86box/pit_fast.h index b306e63ec..242fb4207 100644 --- a/src/include/86box/pit_fast.h +++ b/src/include/86box/pit_fast.h @@ -13,7 +13,7 @@ * * Authors: Miran Grca, * - * Copyright 2019,2020 Miran Grca. + * Copyright 2019-2020 Miran Grca. */ #ifndef EMU_PIT_FAST_H diff --git a/src/include/86box/random.h b/src/include/86box/random.h index 1c3124d53..021969a54 100644 --- a/src/include/86box/random.h +++ b/src/include/86box/random.h @@ -13,7 +13,7 @@ * * Authors: Miran Grca, * - * Copyright 2016,2017 Miran Grca. + * Copyright 2016-2017 Miran Grca. */ #ifndef EMU_RANDOM_H diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h index 81c182980..17af95ca4 100644 --- a/src/include/86box/resource.h +++ b/src/include/86box/resource.h @@ -10,14 +10,14 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * David Hrdlička, * * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * Copyright 2021-2022 Jasmine Iwanek. */ diff --git a/src/include/86box/rom.h b/src/include/86box/rom.h index e581e0744..91f813a95 100644 --- a/src/include/86box/rom.h +++ b/src/include/86box/rom.h @@ -11,7 +11,8 @@ * * * Authors: Fred N. van Kempen, - * Copyright 2018,2019 Fred N. van Kempen. + * + * Copyright 2018-2019 Fred N. van Kempen. */ #ifndef EMU_ROM_H diff --git a/src/include/86box/scsi.h b/src/include/86box/scsi.h index ce641712b..d19497101 100644 --- a/src/include/86box/scsi.h +++ b/src/include/86box/scsi.h @@ -16,7 +16,7 @@ * * Copyright 2016-2018 TheCollector1995. * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef EMU_SCSI_H #define EMU_SCSI_H diff --git a/src/include/86box/scsi_buslogic.h b/src/include/86box/scsi_buslogic.h index 021c4fa97..12bff6fdf 100644 --- a/src/include/86box/scsi_buslogic.h +++ b/src/include/86box/scsi_buslogic.h @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef SCSI_BUSLOGIC_H diff --git a/src/include/86box/scsi_cdrom.h b/src/include/86box/scsi_cdrom.h index 97ebb39bc..0acdf1b25 100644 --- a/src/include/86box/scsi_cdrom.h +++ b/src/include/86box/scsi_cdrom.h @@ -13,7 +13,7 @@ * * Authors: Miran Grca, * - * Copyright 2018,2019 Miran Grca. + * Copyright 2018-2019 Miran Grca. */ #ifndef EMU_SCSI_CDROM_H diff --git a/src/include/86box/scsi_disk.h b/src/include/86box/scsi_disk.h index 0ac78f8b5..bff40a396 100644 --- a/src/include/86box/scsi_disk.h +++ b/src/include/86box/scsi_disk.h @@ -10,7 +10,7 @@ * * Authors: Miran Grca, * - * Copyright 2017,2018 Miran Grca. + * Copyright 2017-2018 Miran Grca. */ #ifndef SCSI_DISK_H diff --git a/src/include/86box/scsi_ncr5380.h b/src/include/86box/scsi_ncr5380.h index 314f9d082..ecf5660ef 100644 --- a/src/include/86box/scsi_ncr5380.h +++ b/src/include/86box/scsi_ncr5380.h @@ -12,13 +12,13 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * Fred N. van Kempen, * * Copyright 2017-2018 Sarah Walker. * Copyright 2017-2018 TheCollector1995. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef SCSI_NCR5380_H diff --git a/src/include/86box/scsi_ncr53c8xx.h b/src/include/86box/scsi_ncr53c8xx.h index e495925b0..5149c2203 100644 --- a/src/include/86box/scsi_ncr53c8xx.h +++ b/src/include/86box/scsi_ncr53c8xx.h @@ -19,7 +19,7 @@ * * Copyright 2006-2018 Paul Brook. * Copyright 2009-2018 Artyom Tarasenko. - * Copyright 2017,2018 Miran Grca. + * Copyright 2017-2018 Miran Grca. */ #ifndef SCSI_NCR53C8XX_H diff --git a/src/include/86box/scsi_pcscsi.h b/src/include/86box/scsi_pcscsi.h index 3f56fb19d..0ce353d33 100644 --- a/src/include/86box/scsi_pcscsi.h +++ b/src/include/86box/scsi_pcscsi.h @@ -19,7 +19,7 @@ * * Copyright 2005-2018 Fabrice Bellard. * Copyright 2012-2018 Herve Poussineau. - * Copyright 2017,2018 Miran Grca. + * Copyright 2017-2018 Miran Grca. */ #ifndef SCSI_PCSCSI_H diff --git a/src/include/86box/scsi_spock.h b/src/include/86box/scsi_spock.h index 6dfc87011..bfa579c82 100644 --- a/src/include/86box/scsi_spock.h +++ b/src/include/86box/scsi_spock.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * * Copyright 2020 Sarah Walker. diff --git a/src/include/86box/scsi_x54x.h b/src/include/86box/scsi_x54x.h index e32a9369e..a20f1e788 100644 --- a/src/include/86box/scsi_x54x.h +++ b/src/include/86box/scsi_x54x.h @@ -18,7 +18,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef SCSI_X54X_H diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index 1394a1c53..ae48ee09f 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/snd_ad1848.h b/src/include/86box/snd_ad1848.h index d954eaccb..76fc775db 100644 --- a/src/include/86box/snd_ad1848.h +++ b/src/include/86box/snd_ad1848.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * RichardG, * diff --git a/src/include/86box/snd_mpu401.h b/src/include/86box/snd_mpu401.h index 2fcf31d96..4afbc6b53 100644 --- a/src/include/86box/snd_mpu401.h +++ b/src/include/86box/snd_mpu401.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * DOSBox Team, * Miran Grca, * TheCollector1995, diff --git a/src/include/86box/snd_sb.h b/src/include/86box/snd_sb.h index 577335976..88f2c74f1 100644 --- a/src/include/86box/snd_sb.h +++ b/src/include/86box/snd_sb.h @@ -8,7 +8,7 @@ * * Sound Blaster emulation. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * diff --git a/src/include/86box/snd_speaker.h b/src/include/86box/snd_speaker.h index 433accea8..516d20588 100644 --- a/src/include/86box/snd_speaker.h +++ b/src/include/86box/snd_speaker.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index 10303c3ca..a38d213da 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/vid_cga.h b/src/include/86box/vid_cga.h index 23c7e7b4a..39e1c24ef 100644 --- a/src/include/86box/vid_cga.h +++ b/src/include/86box/vid_cga.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/vid_ddc.h b/src/include/86box/vid_ddc.h index 0846cc32f..144cca406 100644 --- a/src/include/86box/vid_ddc.h +++ b/src/include/86box/vid_ddc.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * RichardG, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_ega.h b/src/include/86box/vid_ega.h index f49ad55b4..784f0c596 100644 --- a/src/include/86box/vid_ega.h +++ b/src/include/86box/vid_ega.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_hercules.h b/src/include/86box/vid_hercules.h index 949e45417..bbb4239aa 100644 --- a/src/include/86box/vid_hercules.h +++ b/src/include/86box/vid_hercules.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Jasmine Iwanek, * diff --git a/src/include/86box/vid_nga.h b/src/include/86box/vid_nga.h index d91d852d7..93786b15e 100644 --- a/src/include/86box/vid_nga.h +++ b/src/include/86box/vid_nga.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd, diff --git a/src/include/86box/vid_ogc.h b/src/include/86box/vid_ogc.h index 45eedf8cf..6b80f5859 100644 --- a/src/include/86box/vid_ogc.h +++ b/src/include/86box/vid_ogc.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd, diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 3781d5530..7f987a2b7 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_svga_render.h b/src/include/86box/vid_svga_render.h index a8369ca42..13ff527e0 100644 --- a/src/include/86box/vid_svga_render.h +++ b/src/include/86box/vid_svga_render.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/vid_vga.h b/src/include/86box/vid_vga.h index 9d9972be0..08a1a2591 100644 --- a/src/include/86box/vid_vga.h +++ b/src/include/86box/vid_vga.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Jasmine Iwanek, * diff --git a/src/include/86box/vid_voodoo_banshee.h b/src/include/86box/vid_voodoo_banshee.h index 4cd26dc2a..56fd47eeb 100644 --- a/src/include/86box/vid_voodoo_banshee.h +++ b/src/include/86box/vid_voodoo_banshee.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/include/86box/vid_voodoo_banshee_blitter.h b/src/include/86box/vid_voodoo_banshee_blitter.h index ec6e214d5..2d36f1566 100644 --- a/src/include/86box/vid_voodoo_banshee_blitter.h +++ b/src/include/86box/vid_voodoo_banshee_blitter.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/include/86box/vid_voodoo_blitter.h b/src/include/86box/vid_voodoo_blitter.h index 2802c7d1e..981c0856d 100644 --- a/src/include/86box/vid_voodoo_blitter.h +++ b/src/include/86box/vid_voodoo_blitter.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/include/86box/vid_voodoo_common.h b/src/include/86box/vid_voodoo_common.h index 6dee9ca8f..0fd4155ef 100644 --- a/src/include/86box/vid_voodoo_common.h +++ b/src/include/86box/vid_voodoo_common.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_voodoo_display.h b/src/include/86box/vid_voodoo_display.h index 53d4076e7..25b3e9b1a 100644 --- a/src/include/86box/vid_voodoo_display.h +++ b/src/include/86box/vid_voodoo_display.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_voodoo_dither.h b/src/include/86box/vid_voodoo_dither.h index dc87b293e..3580cada2 100644 --- a/src/include/86box/vid_voodoo_dither.h +++ b/src/include/86box/vid_voodoo_dither.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_voodoo_fb.h b/src/include/86box/vid_voodoo_fb.h index b954048ff..2138e83da 100644 --- a/src/include/86box/vid_voodoo_fb.h +++ b/src/include/86box/vid_voodoo_fb.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_voodoo_fifo.h b/src/include/86box/vid_voodoo_fifo.h index 088be1dae..0073a295c 100644 --- a/src/include/86box/vid_voodoo_fifo.h +++ b/src/include/86box/vid_voodoo_fifo.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_voodoo_reg.h b/src/include/86box/vid_voodoo_reg.h index 1f1160804..62738a8c5 100644 --- a/src/include/86box/vid_voodoo_reg.h +++ b/src/include/86box/vid_voodoo_reg.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_voodoo_setup.h b/src/include/86box/vid_voodoo_setup.h index 8ff892f71..d8820a7cb 100644 --- a/src/include/86box/vid_voodoo_setup.h +++ b/src/include/86box/vid_voodoo_setup.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_voodoo_texture.h b/src/include/86box/vid_voodoo_texture.h index a0bd4db44..65eec54e4 100644 --- a/src/include/86box/vid_voodoo_texture.h +++ b/src/include/86box/vid_voodoo_texture.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/video.h b/src/include/86box/video.h index abba64574..6f35dc5ee 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/win.h b/src/include/86box/win.h index c72b1e5c4..99620cbeb 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/win_sdl.h b/src/include/86box/win_sdl.h index 72357aa9a..69340e8b6 100644 --- a/src/include/86box/win_sdl.h +++ b/src/include/86box/win_sdl.h @@ -13,8 +13,8 @@ * Authors: Fred N. van Kempen, * Michael Drüing, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Michael Drüing. + * Copyright 2018-2019 Fred N. van Kempen. + * Copyright 2018-2019 Michael Drüing. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/include/86box/zip.h b/src/include/86box/zip.h index 6bff76e36..3981465ce 100644 --- a/src/include/86box/zip.h +++ b/src/include/86box/zip.h @@ -13,7 +13,7 @@ * * Authors: Miran Grca, * - * Copyright 2018,2019 Miran Grca. + * Copyright 2018-2019 Miran Grca. */ #ifndef EMU_ZIP_H diff --git a/src/include/minitrace/minitrace.h b/src/include/minitrace/minitrace.h index 8184f5873..0335c9ac3 100644 --- a/src/include/minitrace/minitrace.h +++ b/src/include/minitrace/minitrace.h @@ -1,7 +1,7 @@ // Minitrace // // Copyright 2014 by Henrik Rydgård -// http://www.github.com/hrydgard/minitrace +// https://www.github.com/hrydgard/minitrace // Released under the MIT license. // // Ultra-light dependency free library for performance tracing C/C++ applications. diff --git a/src/ini.c b/src/ini.c index 59a3dc629..009d21c0b 100644 --- a/src/ini.c +++ b/src/ini.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * Overdoze, @@ -19,7 +19,7 @@ * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * * NOTE: Forcing config files to be in Unicode encoding breaks * it on Windows XP, and possibly also Vista. Use the diff --git a/src/io.c b/src/io.c index cf934b895..0cd7cd87b 100644 --- a/src/io.c +++ b/src/io.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/machine/CMakeLists.txt b/src/machine/CMakeLists.txt index 1f356a91d..e88631044 100644 --- a/src/machine/CMakeLists.txt +++ b/src/machine/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(mch OBJECT machine.c machine_table.c m_xt.c m_xt_compaq.c diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index 98bf26c58..89f8f5670 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -31,7 +31,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * John Elliott, diff --git a/src/machine/m_at.c b/src/machine/m_at.c index ccee2f1e7..92f8c0f5f 100644 --- a/src/machine/m_at.c +++ b/src/machine/m_at.c @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2020 Miran Grca. diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c index ee117fa33..253ce804d 100644 --- a/src/machine/m_at_286_386sx.c +++ b/src/machine/m_at_286_386sx.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * EngiNerd * diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 6a2329dd6..b9583f72e 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2010-2020 Sarah Walker. diff --git a/src/machine/m_at_commodore.c b/src/machine/m_at_commodore.c index 8eeabab19..3587db44a 100644 --- a/src/machine/m_at_commodore.c +++ b/src/machine/m_at_commodore.c @@ -12,9 +12,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/machine/m_at_compaq.c b/src/machine/m_at_compaq.c index 7840eb056..0b3a901b5 100644 --- a/src/machine/m_at_compaq.c +++ b/src/machine/m_at_compaq.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index 7ae87e120..2aa94cce5 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2010-2019 Sarah Walker. diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 1bbeff550..fa562a62c 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2010-2019 Sarah Walker. diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 319c5930e..0ead2972a 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 3973bd8cf..7616d8a4a 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 381940a10..2813e7275 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * diff --git a/src/machine/m_at_t3100e.c b/src/machine/m_at_t3100e.c index 451955ad1..080f22977 100644 --- a/src/machine/m_at_t3100e.c +++ b/src/machine/m_at_t3100e.c @@ -121,9 +121,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/machine/m_at_t3100e_vid.c b/src/machine/m_at_t3100e_vid.c index 30bbc488b..53571c49e 100644 --- a/src/machine/m_at_t3100e_vid.c +++ b/src/machine/m_at_t3100e_vid.c @@ -26,7 +26,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 6446d5852..b03272f3d 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/machine/m_ps1.c b/src/machine/m_ps1.c index 53e6928e8..209b5d7a4 100644 --- a/src/machine/m_ps1.c +++ b/src/machine/m_ps1.c @@ -24,7 +24,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index cfe6ba6bd..f77b6f4a0 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index bd5e22d89..0eddc1e19 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/machine/m_xt_compaq.c b/src/machine/m_xt_compaq.c index 733063306..f5dca48a7 100644 --- a/src/machine/m_xt_compaq.c +++ b/src/machine/m_xt_compaq.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index 4bf24fc1d..bb52c2049 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -11,7 +11,7 @@ * - Supports MM58174 real-time clock emulation (M24) * - Supports MM58274 real-time clock emulation (M240) * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c index f61ce639b..f6f2e5322 100644 --- a/src/machine/m_xt_t1000.c +++ b/src/machine/m_xt_t1000.c @@ -55,7 +55,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2018-2019 Fred N. van Kempen. * Copyright 2018-2019 Miran Grca. @@ -687,8 +687,8 @@ t1000_read_nvram(uint16_t addr, void *priv) tmp = fdc_read(0x03f7, t1000.fdc); tmp = (tmp & 0x80) >> 3; /* Bit 4 is changeline */ - tmp |= (sys->nvr_active & 0xc0); /* Bits 6,7 are r/w mode */ - tmp |= 0x2e; /* Bits 5,3,2,1 always 1 */ + tmp |= (sys->nvr_active & 0xc0); /* Bits 6, 7 are r/w mode */ + tmp |= 0x2e; /* Bits 5, 3, 2, 1 always 1 */ tmp |= (sys->nvr_active & 0x40) >> 6; /* Ready state */ break; } diff --git a/src/machine/m_xt_t1000_vid.c b/src/machine/m_xt_t1000_vid.c index 60fb59082..48c00d3c3 100644 --- a/src/machine/m_xt_t1000_vid.c +++ b/src/machine/m_xt_t1000_vid.c @@ -13,7 +13,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2018-2019 Fred N. van Kempen. * Copyright 2018-2019 Miran Grca. diff --git a/src/machine/m_xt_zenith.c b/src/machine/m_xt_zenith.c index 9e05f3077..e5cebe552 100644 --- a/src/machine/m_xt_zenith.c +++ b/src/machine/m_xt_zenith.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * EngiNerd diff --git a/src/machine/machine.c b/src/machine/machine.c index 6b496b06a..f7970d4f1 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 2807c1060..c2db92654 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13,7 +13,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/mem/CMakeLists.txt b/src/mem/CMakeLists.txt index 1739d4807..6aad80544 100644 --- a/src/mem/CMakeLists.txt +++ b/src/mem/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(mem OBJECT catalyst_flash.c i2c_eeprom.c intel_flash.c mem.c rom.c diff --git a/src/mem/catalyst_flash.c b/src/mem/catalyst_flash.c index 043a24b37..5e473f540 100644 --- a/src/mem/catalyst_flash.c +++ b/src/mem/catalyst_flash.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/mem/intel_flash.c b/src/mem/intel_flash.c index 18b8a4b3d..f06b2426d 100644 --- a/src/mem/intel_flash.c +++ b/src/mem/intel_flash.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/mem/mem.c b/src/mem/mem.c index 4d5a5238b..1af83c844 100644 --- a/src/mem/mem.c +++ b/src/mem/mem.c @@ -8,7 +8,7 @@ * * Memory handling and MMU. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/mem/rom.c b/src/mem/rom.c index 6c964f2c3..25ca1db71 100644 --- a/src/mem/rom.c +++ b/src/mem/rom.c @@ -14,7 +14,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/mem/sst_flash.c b/src/mem/sst_flash.c index 5ad110fa5..a58aa6895 100644 --- a/src/mem/sst_flash.c +++ b/src/mem/sst_flash.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * diff --git a/src/minitrace/minitrace.c b/src/minitrace/minitrace.c index 40388c5f2..0b2208605 100644 --- a/src/minitrace/minitrace.c +++ b/src/minitrace/minitrace.c @@ -1,6 +1,6 @@ // minitrace // Copyright 2014 by Henrik Rydgård -// http://www.github.com/hrydgard/minitrace +// https://www.github.com/hrydgard/minitrace // Released under the MIT license. // See minitrace.h for basic documentation. diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index dc03cb417..e14f979d3 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(net OBJECT network.c net_pcap.c net_slirp.c net_dp8390.c net_3c501.c diff --git a/src/network/net_ne2000.c b/src/network/net_ne2000.c index 66681206b..9a598538d 100644 --- a/src/network/net_ne2000.c +++ b/src/network/net_ne2000.c @@ -22,7 +22,7 @@ * Miran Grca, * Peter Grehan, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Portions Copyright (C) 2002 MandrakeSoft S.A. * diff --git a/src/network/pcap_if.c b/src/network/pcap_if.c index 69110cb34..56fa3eaf1 100644 --- a/src/network/pcap_if.c +++ b/src/network/pcap_if.c @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/network/slirp/CMakeLists.txt b/src/network/slirp/CMakeLists.txt index a2c82e642..29da352e9 100644 --- a/src/network/slirp/CMakeLists.txt +++ b/src/network/slirp/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(slirp STATIC arp_table.c bootp.c cksum.c dnssearch.c if.c diff --git a/src/nvr.c b/src/nvr.c index dccc6be40..4b073c48f 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -12,7 +12,7 @@ * David Hrdlička, * * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/nvr_at.c b/src/nvr_at.c index a881444c2..bd0bbe34e 100644 --- a/src/nvr_at.c +++ b/src/nvr_at.c @@ -194,7 +194,7 @@ * Authors: Fred N. van Kempen, * Miran Grca, * Mahod, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2020 Miran Grca. diff --git a/src/nvr_ps2.c b/src/nvr_ps2.c index b137cb81b..1ab97d8a3 100644 --- a/src/nvr_ps2.c +++ b/src/nvr_ps2.c @@ -11,9 +11,9 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2008-2018 Sarah Walker. * * This program is free software; you can redistribute it and/or modify diff --git a/src/pci.c b/src/pci.c index 7b4464407..f9155e2e3 100644 --- a/src/pci.c +++ b/src/pci.c @@ -12,7 +12,7 @@ * * Authors: Miran Grca, * Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2020 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. diff --git a/src/printer/CMakeLists.txt b/src/printer/CMakeLists.txt index dd07121df..ef7b1d5ec 100644 --- a/src/printer/CMakeLists.txt +++ b/src/printer/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(print OBJECT png.c prt_cpmap.c prt_escp.c prt_text.c prt_ps.c) diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c index e7c9e0442..1cca57da0 100644 --- a/src/printer/prt_escp.c +++ b/src/printer/prt_escp.c @@ -13,8 +13,8 @@ * * Based on code by Frederic Weymann (originally for DosBox.) * - * Copyright 2018,2019 Michael Drüing. - * Copyright 2019,2019 Fred N. van Kempen. + * Copyright 2018-2019 Michael Drüing. + * Copyright 2019 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/printer/prt_text.c b/src/printer/prt_text.c index b67d859b9..506261ccf 100644 --- a/src/printer/prt_text.c +++ b/src/printer/prt_text.c @@ -17,7 +17,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018-2019 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/qt/qt_cdrom.c b/src/qt/qt_cdrom.c index 80310835b..6e28966b0 100644 --- a/src/qt/qt_cdrom.c +++ b/src/qt/qt_cdrom.c @@ -10,12 +10,12 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include diff --git a/src/qt/qt_sdl.h b/src/qt/qt_sdl.h index 8b691c78c..29804c278 100644 --- a/src/qt/qt_sdl.h +++ b/src/qt/qt_sdl.h @@ -13,8 +13,8 @@ * Authors: Fred N. van Kempen, * Michael Drüing, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Michael Drüing. + * Copyright 2018-2019 Fred N. van Kempen. + * Copyright 2018-2019 Michael Drüing. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/qt/win_dynld.c b/src/qt/win_dynld.c index fd0064d7f..88fb632bc 100644 --- a/src/qt/win_dynld.c +++ b/src/qt/win_dynld.c @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen + * Copyright 2017-2018 Fred N. van Kempen */ #include #include diff --git a/src/qt/win_joystick_rawinput.c b/src/qt/win_joystick_rawinput.c index efa7714df..2976a54b9 100644 --- a/src/qt/win_joystick_rawinput.c +++ b/src/qt/win_joystick_rawinput.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * GH Cao, * diff --git a/src/scsi/CMakeLists.txt b/src/scsi/CMakeLists.txt index 467affd5a..addde844e 100644 --- a/src/scsi/CMakeLists.txt +++ b/src/scsi/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(scsi OBJECT scsi.c scsi_device.c scsi_cdrom.c scsi_disk.c diff --git a/src/scsi/scsi_ncr5380.c b/src/scsi/scsi_ncr5380.c index 668f9ea9f..e094f0b1a 100644 --- a/src/scsi/scsi_ncr5380.c +++ b/src/scsi/scsi_ncr5380.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * Fred N. van Kempen, * diff --git a/src/scsi/scsi_spock.c b/src/scsi/scsi_spock.c index acfb1ea27..66fcc20c6 100644 --- a/src/scsi/scsi_spock.c +++ b/src/scsi/scsi_spock.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * * Copyright 2020 Sarah Walker. diff --git a/src/sio/CMakeLists.txt b/src/sio/CMakeLists.txt index bf38efe57..15411d3e6 100644 --- a/src/sio/CMakeLists.txt +++ b/src/sio/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(sio OBJECT sio_acc3221.c sio_ali5123.c sio_f82c710.c sio_82091aa.c diff --git a/src/sio/sio_acc3221.c b/src/sio/sio_acc3221.c index 9aaf802f3..f5c671c3a 100644 --- a/src/sio/sio_acc3221.c +++ b/src/sio/sio_acc3221.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2019 Sarah Walker. */ diff --git a/src/sio/sio_f82c710.c b/src/sio/sio_f82c710.c index 123232d7e..ad347fb03 100644 --- a/src/sio/sio_f82c710.c +++ b/src/sio/sio_f82c710.c @@ -18,7 +18,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Eluan Costa Miranda * Lubomir Rintel * diff --git a/src/sio/sio_fdc37c6xx.c b/src/sio/sio_fdc37c6xx.c index 9484ae680..f9c911402 100644 --- a/src/sio/sio_fdc37c6xx.c +++ b/src/sio/sio_fdc37c6xx.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/sio/sio_pc87306.c b/src/sio/sio_pc87306.c index 68d0383b0..8755775de 100644 --- a/src/sio/sio_pc87306.c +++ b/src/sio/sio_pc87306.c @@ -366,7 +366,7 @@ pc87306_reset(pc87306_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); lpt1_handler(dev); diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index ae376f659..6f773a8e1 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -535,7 +535,7 @@ pc87307_reset(pc87307_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); serial_remove(dev->uart[0]); diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c index db6b78848..70ed57229 100644 --- a/src/sio/sio_pc87309.c +++ b/src/sio/sio_pc87309.c @@ -422,7 +422,7 @@ pc87309_reset(pc87309_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); serial_remove(dev->uart[0]); diff --git a/src/sio/sio_pc87310.c b/src/sio/sio_pc87310.c index f7d5ced71..eacbadf89 100644 --- a/src/sio/sio_pc87310.c +++ b/src/sio/sio_pc87310.c @@ -210,7 +210,7 @@ pc87310_reset(pc87310_t *dev) dev->tries = 0; /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); lpt1_handler(dev); diff --git a/src/sio/sio_pc87332.c b/src/sio/sio_pc87332.c index 1ea0e1255..64dd86665 100644 --- a/src/sio/sio_pc87332.c +++ b/src/sio/sio_pc87332.c @@ -277,7 +277,7 @@ pc87332_reset(pc87332_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); lpt1_handler(dev); diff --git a/src/sio/sio_um8669f.c b/src/sio/sio_um8669f.c index f50832040..bd153a9e4 100644 --- a/src/sio/sio_um8669f.c +++ b/src/sio/sio_um8669f.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * RichardG, * diff --git a/src/sound/CMakeLists.txt b/src/sound/CMakeLists.txt index 66672d547..10b8903bc 100644 --- a/src/sound/CMakeLists.txt +++ b/src/sound/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(snd OBJECT sound.c snd_opl.c snd_opl_nuked.c snd_opl_ymfm.cpp snd_resid.cc diff --git a/src/sound/midi.c b/src/sound/midi.c index 93fa62891..0cc8f2b38 100644 --- a/src/sound/midi.c +++ b/src/sound/midi.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Bit, * DOSBox Team, diff --git a/src/sound/openal.c b/src/sound/openal.c index 2153d4c2b..48e4ee818 100644 --- a/src/sound/openal.c +++ b/src/sound/openal.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/sound/resid-fp/CMakeLists.txt b/src/sound/resid-fp/CMakeLists.txt index 5ec9130d7..699fcae54 100644 --- a/src/sound/resid-fp/CMakeLists.txt +++ b/src/sound/resid-fp/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(resid-fp STATIC convolve-sse.cc convolve.cc envelope.cc extfilt.cc diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index 558024fb5..f9bc337c1 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * RichardG, * diff --git a/src/sound/snd_audiopci.c b/src/sound/snd_audiopci.c index ecac7f05a..7d029a169 100644 --- a/src/sound/snd_audiopci.c +++ b/src/sound/snd_audiopci.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * RichardG, * Miran Grca, * diff --git a/src/sound/snd_mpu401.c b/src/sound/snd_mpu401.c index a31c48a7b..328c3c688 100644 --- a/src/sound/snd_mpu401.c +++ b/src/sound/snd_mpu401.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * DOSBox Team, * Miran Grca, * TheCollector1995, diff --git a/src/sound/snd_sb.c b/src/sound/snd_sb.c index 7660ace90..d67701180 100644 --- a/src/sound/snd_sb.c +++ b/src/sound/snd_sb.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * diff --git a/src/sound/snd_speaker.c b/src/sound/snd_speaker.c index 34d32c110..774e4d650 100644 --- a/src/sound/snd_speaker.c +++ b/src/sound/snd_speaker.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/sound/snd_wss.c b/src/sound/snd_wss.c index 8a325e5c3..9e37dd745 100644 --- a/src/sound/snd_wss.c +++ b/src/sound/snd_wss.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * * Copyright 2012-2018 Sarah Walker. diff --git a/src/sound/sound.c b/src/sound/sound.c index cda851137..ab75af4f0 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/unix/assets/86Box.spec b/src/unix/assets/86Box.spec index 414a38a96..9fac0dde4 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 v3.7 +%global romver v3.11 Name: 86Box Version: 3.11 diff --git a/src/unix/unix_cdrom.c b/src/unix/unix_cdrom.c index bbeed0149..79a649eb5 100644 --- a/src/unix/unix_cdrom.c +++ b/src/unix/unix_cdrom.c @@ -10,12 +10,12 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt index a5ea1059a..b37e81134 100644 --- a/src/video/CMakeLists.txt +++ b/src/video/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(vid OBJECT agpgart.c video.c vid_table.c vid_cga.c vid_cga_comp.c diff --git a/src/video/vid_ati18800.c b/src/video/vid_ati18800.c index c9cd8bfcd..3781ef567 100644 --- a/src/video/vid_ati18800.c +++ b/src/video/vid_ati18800.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c index 1824d7fdc..352ce2f7d 100644 --- a/src/video/vid_ati28800.c +++ b/src/video/vid_ati28800.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * greatpsycho, * diff --git a/src/video/vid_ati68860_ramdac.c b/src/video/vid_ati68860_ramdac.c index 43811ce68..49fad5815 100644 --- a/src/video/vid_ati68860_ramdac.c +++ b/src/video/vid_ati68860_ramdac.c @@ -30,7 +30,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_ati_eeprom.c b/src/video/vid_ati_eeprom.c index c09d03846..f1840a698 100644 --- a/src/video/vid_ati_eeprom.c +++ b/src/video/vid_ati_eeprom.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index 0bd3b3843..d67ff876b 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_att20c49x_ramdac.c b/src/video/vid_att20c49x_ramdac.c index 4269f8b33..1874afce9 100644 --- a/src/video/vid_att20c49x_ramdac.c +++ b/src/video/vid_att20c49x_ramdac.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_att2xc498_ramdac.c b/src/video/vid_att2xc498_ramdac.c index 32a91a490..2dab4b903 100644 --- a/src/video/vid_att2xc498_ramdac.c +++ b/src/video/vid_att2xc498_ramdac.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c index 80bf3bc85..6ed81f616 100644 --- a/src/video/vid_cga.c +++ b/src/video/vid_cga.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index c3fd19e58..e29d95232 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -16,7 +16,7 @@ * TheCollector1995, * * Copyright 2016-2020 Miran Grca. - * Copyright 2020 tonioni. + * Copyright 2020 tonioni. * Copyright 2016-2020 TheCollector1995. */ #include diff --git a/src/video/vid_colorplus.c b/src/video/vid_colorplus.c index b460c15dd..ae24d8ff0 100644 --- a/src/video/vid_colorplus.c +++ b/src/video/vid_colorplus.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_compaq_cga.c b/src/video/vid_compaq_cga.c index e1295d629..68255e746 100644 --- a/src/video/vid_compaq_cga.c +++ b/src/video/vid_compaq_cga.c @@ -11,7 +11,7 @@ * * * Authors: John Elliott, - * Sarah Walker, + * Sarah Walker, * Miran Grca, * * Copyright 2016-2019 John Elliott. diff --git a/src/video/vid_ega.c b/src/video/vid_ega.c index c50c0a7b7..bfac7d503 100644 --- a/src/video/vid_ega.c +++ b/src/video/vid_ega.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_ega_render.c b/src/video/vid_ega_render.c index ac5c65546..b2d5cb5c1 100644 --- a/src/video/vid_ega_render.c +++ b/src/video/vid_ega_render.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c index 5d0691514..4020c0523 100644 --- a/src/video/vid_et4000.c +++ b/src/video/vid_et4000.c @@ -13,9 +13,9 @@ * Authors: Fred N. van Kempen, * Miran Grca, * GreatPsycho, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index eb604f4ea..2f6e6497c 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_f82c425.c b/src/video/vid_f82c425.c index 1fda74630..15f4ce496 100644 --- a/src/video/vid_f82c425.c +++ b/src/video/vid_f82c425.c @@ -24,13 +24,13 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * Lubomir Rintel, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Miran Grca. - * Copyright 2018,2019 Sarah Walker. - * Copyright 2021 Lubomir Rintel. + * Copyright 2018-2019 Fred N. van Kempen. + * Copyright 2018-2019 Miran Grca. + * Copyright 2018-2019 Sarah Walker. + * Copyright 2021 Lubomir Rintel. * * 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 diff --git a/src/video/vid_genius.c b/src/video/vid_genius.c index 9d2cbb947..cbf4eabfe 100644 --- a/src/video/vid_genius.c +++ b/src/video/vid_genius.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_hercules.c b/src/video/vid_hercules.c index e9fab0a16..5920ff27d 100644 --- a/src/video/vid_hercules.c +++ b/src/video/vid_hercules.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_herculesplus.c b/src/video/vid_herculesplus.c index cf762365a..6561f9429 100644 --- a/src/video/vid_herculesplus.c +++ b/src/video/vid_herculesplus.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_ht216.c b/src/video/vid_ht216.c index ad5bf7af0..255a9e8b8 100644 --- a/src/video/vid_ht216.c +++ b/src/video/vid_ht216.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2019 Sarah Walker. diff --git a/src/video/vid_ics2595.c b/src/video/vid_ics2595.c index 157987083..10fc5ba39 100644 --- a/src/video/vid_ics2595.c +++ b/src/video/vid_ics2595.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_incolor.c b/src/video/vid_incolor.c index 652dc79ab..68673c061 100644 --- a/src/video/vid_incolor.c +++ b/src/video/vid_incolor.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_mda.c b/src/video/vid_mda.c index 019dc4885..57e91637c 100644 --- a/src/video/vid_mda.c +++ b/src/video/vid_mda.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_mga.c b/src/video/vid_mga.c index 1532ae116..ef7a2b366 100644 --- a/src/video/vid_mga.c +++ b/src/video/vid_mga.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_nga.c b/src/video/vid_nga.c index 331b0f70b..e2e8fdc9c 100644 --- a/src/video/vid_nga.c +++ b/src/video/vid_nga.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd, @@ -18,7 +18,7 @@ * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2020 EngiNerd. */ #include diff --git a/src/video/vid_oak_oti.c b/src/video/vid_oak_oti.c index 936ef158a..cc07dc0a4 100644 --- a/src/video/vid_oak_oti.c +++ b/src/video/vid_oak_oti.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_ogc.c b/src/video/vid_ogc.c index a3ca21ad9..38d993216 100644 --- a/src/video/vid_ogc.c +++ b/src/video/vid_ogc.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd, @@ -19,7 +19,7 @@ * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2020 EngiNerd. */ #include diff --git a/src/video/vid_paradise.c b/src/video/vid_paradise.c index a60d61eb8..f2ec8aeb2 100644 --- a/src/video/vid_paradise.c +++ b/src/video/vid_paradise.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index b17f0e50b..e6630a6c3 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index 94c0f575c..376abb68c 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_sc1502x_ramdac.c b/src/video/vid_sc1502x_ramdac.c index 625788efe..3a3b3a863 100644 --- a/src/video/vid_sc1502x_ramdac.c +++ b/src/video/vid_sc1502x_ramdac.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_sdac_ramdac.c b/src/video/vid_sdac_ramdac.c index 4c97924bd..45fe714ec 100644 --- a/src/video/vid_sdac_ramdac.c +++ b/src/video/vid_sdac_ramdac.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_stg_ramdac.c b/src/video/vid_stg_ramdac.c index 592cc275e..78a477acb 100644 --- a/src/video/vid_stg_ramdac.c +++ b/src/video/vid_stg_ramdac.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 21d0b50ee..0d493a59e 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -13,7 +13,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_svga_render.c b/src/video/vid_svga_render.c index 36e25771b..ca843ac74 100644 --- a/src/video/vid_svga_render.c +++ b/src/video/vid_svga_render.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_tgui9440.c b/src/video/vid_tgui9440.c index 8b67bb23e..f2475888b 100644 --- a/src/video/vid_tgui9440.c +++ b/src/video/vid_tgui9440.c @@ -49,7 +49,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_ti_cf62011.c b/src/video/vid_ti_cf62011.c index 1ceaf169e..f804a6dde 100644 --- a/src/video/vid_ti_cf62011.c +++ b/src/video/vid_ti_cf62011.c @@ -44,13 +44,13 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * * Copyright 2008-2018 Sarah Walker. * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include #include diff --git a/src/video/vid_tkd8001_ramdac.c b/src/video/vid_tkd8001_ramdac.c index 1d1668d25..66c2ca922 100644 --- a/src/video/vid_tkd8001_ramdac.c +++ b/src/video/vid_tkd8001_ramdac.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_tvga.c b/src/video/vid_tvga.c index 491dc24a9..384770ba4 100644 --- a/src/video/vid_tvga.c +++ b/src/video/vid_tvga.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_vga.c b/src/video/vid_vga.c index de3943ec0..ac26c2b5d 100644 --- a/src/video/vid_vga.c +++ b/src/video/vid_vga.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/vid_voodoo.c b/src/video/vid_voodoo.c index 346e33755..cb5491c03 100644 --- a/src/video/vid_voodoo.c +++ b/src/video/vid_voodoo.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei * * Copyright 2008-2020 Sarah Walker. diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 956176180..f1c1347fe 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_blitter.c b/src/video/vid_voodoo_blitter.c index a0f8109f0..f60d9e184 100644 --- a/src/video/vid_voodoo_blitter.c +++ b/src/video/vid_voodoo_blitter.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_display.c b/src/video/vid_voodoo_display.c index 7ab72dabe..68be3b26d 100644 --- a/src/video/vid_voodoo_display.c +++ b/src/video/vid_voodoo_display.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_fb.c b/src/video/vid_voodoo_fb.c index 267949cde..f4a4edca6 100644 --- a/src/video/vid_voodoo_fb.c +++ b/src/video/vid_voodoo_fb.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_fifo.c b/src/video/vid_voodoo_fifo.c index 5b2ef1bb2..646e5876c 100644 --- a/src/video/vid_voodoo_fifo.c +++ b/src/video/vid_voodoo_fifo.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_reg.c b/src/video/vid_voodoo_reg.c index 1822e3070..51b9568b8 100644 --- a/src/video/vid_voodoo_reg.c +++ b/src/video/vid_voodoo_reg.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_render.c b/src/video/vid_voodoo_render.c index d419d1891..4b09cfadb 100644 --- a/src/video/vid_voodoo_render.c +++ b/src/video/vid_voodoo_render.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_setup.c b/src/video/vid_voodoo_setup.c index 7a09dffcc..40018ddf8 100644 --- a/src/video/vid_voodoo_setup.c +++ b/src/video/vid_voodoo_setup.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_voodoo_texture.c b/src/video/vid_voodoo_texture.c index 8e1cd71db..4f81f6d00 100644 --- a/src/video/vid_voodoo_texture.c +++ b/src/video/vid_voodoo_texture.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/video/vid_wy700.c b/src/video/vid_wy700.c index 9fb5b9ee4..1a4babb99 100644 --- a/src/video/vid_wy700.c +++ b/src/video/vid_wy700.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/video/video.c b/src/video/video.c index 5d5f2f37b..d0e9ebb2c 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -42,7 +42,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/win/win.c b/src/win/win.c index 3d46054a6..3dd41fca9 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/win/win_cdrom.c b/src/win/win_cdrom.c index 00195bcda..bfd62383a 100644 --- a/src/win/win_cdrom.c +++ b/src/win/win_cdrom.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/win/win_devconf.c b/src/win/win_devconf.c index c867dab9f..5a833d5e5 100644 --- a/src/win/win_devconf.c +++ b/src/win/win_devconf.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/win/win_joystick.cpp b/src/win/win_joystick.cpp index ab9a2907e..42ab8bd69 100644 --- a/src/win/win_joystick.cpp +++ b/src/win/win_joystick.cpp @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/win/win_joystick_rawinput.c b/src/win/win_joystick_rawinput.c index efa7714df..2976a54b9 100644 --- a/src/win/win_joystick_rawinput.c +++ b/src/win/win_joystick_rawinput.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * GH Cao, * diff --git a/src/win/win_joystick_xinput.c b/src/win/win_joystick_xinput.c index caf8f3452..2f98e5241 100644 --- a/src/win/win_joystick_xinput.c +++ b/src/win/win_joystick_xinput.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * GH Cao, * diff --git a/src/win/win_mouse.c b/src/win/win_mouse.c index 4490328a9..1a914aa9b 100644 --- a/src/win/win_mouse.c +++ b/src/win/win_mouse.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * GH Cao, * diff --git a/src/win/win_opengl.c b/src/win/win_opengl.c index 05d7eb72c..586632aaa 100644 --- a/src/win/win_opengl.c +++ b/src/win/win_opengl.c @@ -65,7 +65,7 @@ typedef LONG atomic_flag; static const int INIT_WIDTH = 640; static const int INIT_HEIGHT = 400; -static const int BUFFERPIXELS = 4194304; /* Same size as render_buffer, pow(2048+64,2). */ +static const int BUFFERPIXELS = 4194304; /* Same size as render_buffer, pow(2048 + 64, 2). */ static const int BUFFERBYTES = 16777216; /* Pixel is 4 bytes. */ static const int BUFFERCOUNT = 3; /* How many buffers to use for pixel transfer (2-3 is commonly recommended). */ static const int ROW_LENGTH = 2048; /* Source buffer row lenght (including padding) */ diff --git a/src/win/win_settings.c b/src/win/win_settings.c index d6e0c0693..af91fe8d3 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -14,7 +14,7 @@ * David Hrdlička, * * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * Copyright 2021 Laci bá' * Copyright 2021-2022 Jasmine Iwanek. */ diff --git a/src/win/win_thread.c b/src/win/win_thread.c index 97ea3a56c..c110779f2 100644 --- a/src/win/win_thread.c +++ b/src/win/win_thread.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 38d7e161c..6107c0609 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/vcpkg.json b/vcpkg.json index 46ab6bff3..c9fd8eceb 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -2,7 +2,7 @@ "name": "86box", "version-string": "3.11", "homepage": "https://86box.net/", - "documentation": "http://86box.readthedocs.io/", + "documentation": "https://86box.readthedocs.io/", "license": "GPL-2.0-or-later", "dependencies": [ "freetype", From ca0ff1ab89f0e9870ffff74b7a3b0f199f7bebe4 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 6 Jan 2023 16:33:28 -0500 Subject: [PATCH 088/112] crcspeed Compatibility With C++ --- src/crcspeed/crc64speed.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/crcspeed/crc64speed.c b/src/crcspeed/crc64speed.c index b1a7bbb94..e4cccdc69 100644 --- a/src/crcspeed/crc64speed.c +++ b/src/crcspeed/crc64speed.c @@ -124,7 +124,7 @@ static inline uint_fast64_t crc_reflect(uint_fast64_t data, size_t data_len) { * \return The updated crc value. ******************************************************************************/ uint64_t crc64(uint_fast64_t crc, const void *in_data, const uint64_t len) { - const uint8_t *data = in_data; + const uint8_t *data = (uint8_t *) in_data; bool bit; for (uint64_t offset = 0; offset < len; offset++) { @@ -152,7 +152,7 @@ uint64_t crc64(uint_fast64_t crc, const void *in_data, const uint64_t len) { /* Only for testing; doesn't support DUAL */ uint64_t crc64_lookup(uint64_t crc, const void *in_data, const uint64_t len) { - const uint8_t *data = in_data; + const uint8_t *data = (uint8_t *) in_data; for (size_t i = 0; i < len; i++) { crc = crc64_table[0][(uint8_t)crc ^ data[i]] ^ (crc >> 8); } @@ -167,7 +167,7 @@ bool crc64speed_init(void) { #else should_init(crc64_table_little, LITTLE1); #endif - crcspeed64little_init(crc64, dual ? crc64_table_little : crc64_table); + crcspeed64little_init(crc64, dual ? (uint64_t (*)[256]) crc64_table_little : crc64_table); return true; } @@ -178,7 +178,7 @@ bool crc64speed_init_big(void) { #else should_init(crc64_table_big, BIG1); #endif - crcspeed64big_init(crc64, dual ? crc64_table_big : crc64_table); + crcspeed64big_init(crc64, dual ? (uint64_t (*)[256]) crc64_table_big : crc64_table); return true; } @@ -189,7 +189,7 @@ uint64_t crc64speed(uint64_t crc, const void *s, const uint64_t l) { #else check_init(crc64_table_little, LITTLE1); #endif - return crcspeed64little(dual ? crc64_table_little : crc64_table, crc, + return crcspeed64little(dual ? (uint64_t (*)[256]) crc64_table_little : crc64_table, crc, (void *)s, l); } @@ -200,7 +200,7 @@ uint64_t crc64speed_big(uint64_t crc, const void *s, const uint64_t l) { #else check_init(crc64_table_big, BIG1); #endif - return crcspeed64big(dual ? crc64_table_big : crc64_table, crc, (void *)s, + return crcspeed64big(dual ? (uint64_t (*)[256]) crc64_table_big : crc64_table, crc, (void *)s, l); } From 3ba87a5e353834be235f391355c6e3f1bcf79156 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sat, 7 Jan 2023 00:04:47 -0500 Subject: [PATCH 089/112] Update fdi2raw --- src/floppy/fdi2raw.c | 463 +++++++++++++++++++++--------------------- src/include/fdi2raw.h | 64 ++++-- 2 files changed, 281 insertions(+), 246 deletions(-) diff --git a/src/floppy/fdi2raw.c b/src/floppy/fdi2raw.c index 92d299caf..dcda6afc1 100644 --- a/src/floppy/fdi2raw.c +++ b/src/floppy/fdi2raw.c @@ -20,7 +20,7 @@ * * Copyright 2001-2004 Toni Wilen. * Copyright 2001-2004 Vincent Joguin. - * Copyright 2001 Thomas Harte. + * Copyright 2001-2016 Thomas Harte. */ #define STATIC_INLINE #include @@ -65,7 +65,7 @@ fdi2raw_log(const char *fmt, ...) #ifdef ENABLE_FDI2RAW_LOG # ifdef DEBUG static char * -datalog(uae_u8 *src, int len) +datalog(uint8_t *src, int len) { static char buf[1000]; static int offset; @@ -88,7 +88,7 @@ datalog(uae_u8 *src, int len) } # else static char * -datalog(uae_u8 *src, int len) +datalog(uint8_t *src, int len) { return ""; } @@ -130,37 +130,38 @@ fdi_malloc(int size) #define MAX_TRACKS 166 struct fdi_cache { - uae_u32 *avgp, *minp, *maxp; - uae_u8 *idxp; - int avg_free, idx_free, min_free, max_free; - uae_u32 totalavg, pulses, maxidx, indexoffset; - int weakbits; - int lowlevel; + uint32_t *avgp, *minp, *maxp; + uint8_t *idxp; + int avg_free, idx_free, min_free, max_free; + uint32_t totalavg, pulses, maxidx, indexoffset; + int weakbits; + int lowlevel; }; struct fdi { - uae_u8 *track_src_buffer; - uae_u8 *track_src; - int track_src_len; - uae_u8 *track_dst_buffer; - uae_u8 *track_dst; - uae_u16 *track_dst_buffer_timing; - uae_u8 track_len; - uae_u8 track_type; - int current_track; - int last_track; - int last_head; - int rotation_speed; - int bit_rate; - int disk_type; - int write_protect; - int err; - uae_u8 header[2048]; - int track_offsets[MAX_TRACKS]; - FILE *file; - int out; - int mfmsync_offset; - int *mfmsync_buffer; + uint8_t *track_src_buffer; + uint8_t *track_src; + int32_t track_src_len; + uint8_t *track_dst_buffer; + uint8_t *track_dst; + uint16_t *track_dst_buffer_timing; + uint8_t track_len; + uint8_t track_type; + int current_track; + int last_track; + int last_head; + int rotation_speed; + int bit_rate; + int disk_type; + bool write_protect; + int reversed_side; + int err; + uint8_t header[2048]; + int32_t track_offsets[MAX_TRACKS]; + FILE *file; + int out; + int mfmsync_offset; + int *mfmsync_buffer; /* sector described only */ int index_offset; int encoding_type; @@ -172,7 +173,7 @@ struct fdi { #define get_u32(x) ((((x)[0]) << 24) | (((x)[1]) << 16) | (((x)[2]) << 8) | ((x)[3])) #define get_u24(x) ((((x)[0]) << 16) | (((x)[1]) << 8) | ((x)[2])) STATIC_INLINE void -put_u32(uae_u8 *d, uae_u32 v) +put_u32(uint8_t *d, uint32_t v) { d[0] = v >> 24; d[1] = v >> 16; @@ -181,16 +182,16 @@ put_u32(uae_u8 *d, uae_u32 v) } struct node { - uae_u16 v; + uint16_t v; struct node *left; struct node *right; }; typedef struct node NODE; -static uae_u8 temp, temp2; +static uint8_t temp, temp2; -static uae_u8 * -expand_tree(uae_u8 *stream, NODE *node) +static uint8_t * +expand_tree(uint8_t *stream, NODE *node) { if (temp & temp2) { if (node->left) { @@ -208,7 +209,7 @@ expand_tree(uae_u8 *stream, NODE *node) } return stream; } else { - uae_u8 *stream_temp; + uint8_t *stream_temp; temp2 >>= 1; if (!temp2) { temp = *stream++; @@ -223,27 +224,27 @@ expand_tree(uae_u8 *stream, NODE *node) } } -static uae_u8 * -values_tree8(uae_u8 *stream, NODE *node) +static uint8_t * +values_tree8(uint8_t *stream, NODE *node) { if (node->left == 0) { node->v = *stream++; return stream; } else { - uae_u8 *stream_temp = values_tree8(stream, node->left); + uint8_t *stream_temp = values_tree8(stream, node->left); return values_tree8(stream_temp, node->right); } } -static uae_u8 * -values_tree16(uae_u8 *stream, NODE *node) +static uint8_t * +values_tree16(uint8_t *stream, NODE *node) { if (node->left == 0) { - uae_u16 high_8_bits = (*stream++) << 8; - node->v = high_8_bits | (*stream++); + uint16_t high_8_bits = (*stream++) << 8; + node->v = high_8_bits | (*stream++); return stream; } else { - uae_u8 *stream_temp = values_tree16(stream, node->left); + uint8_t *stream_temp = values_tree16(stream, node->left); return values_tree16(stream_temp, node->right); } } @@ -258,16 +259,18 @@ free_nodes(NODE *node) } } -static uae_u32 -sign_extend16(uae_u32 v) +/// @returns the 32-bit sign extended version of the 16-bit value in the low part of @c v. +static uint32_t +sign_extend16(uint32_t v) { if (v & 0x8000) v |= 0xffff0000; return v; } -static uae_u32 -sign_extend8(uae_u32 v) +/// @returns the 32-bit sign extended version of the 8-bit value in the low part of @c v. +static uint32_t +sign_extend8(uint32_t v) { if (v & 0x80) v |= 0xffffff00; @@ -275,12 +278,12 @@ sign_extend8(uae_u32 v) } static void -fdi_decode(uae_u8 *stream, int size, uae_u8 *out) +fdi_decode(uint8_t *stream, int size, uint8_t *out) { - int i; - uae_u8 sign_extend, sixteen_bit, sub_stream_shift; - NODE root; - NODE *current_node; + int i; + uint8_t sign_extend, sixteen_bit, sub_stream_shift; + NODE root; + NODE *current_node; memset(out, 0, size * 4); sub_stream_shift = 1; @@ -308,9 +311,9 @@ fdi_decode(uae_u8 *stream, int size, uae_u8 *out) /* sub-stream data decode */ temp2 = 0; for (i = 0; i < size; i++) { - uae_u32 v; - uae_u8 decode = 1; - current_node = &root; + uint32_t v; + uint8_t decode = 1; + current_node = &root; while (decode) { if (current_node->left == 0) { decode = 0; @@ -326,7 +329,7 @@ fdi_decode(uae_u8 *stream, int size, uae_u8 *out) current_node = current_node->left; } } - v = ((uae_u32 *) out)[i]; + v = ((uint32_t *) out)[i]; if (sign_extend) { if (sixteen_bit) v |= sign_extend16(current_node->v) << sub_stream_shift; @@ -335,7 +338,7 @@ fdi_decode(uae_u8 *stream, int size, uae_u8 *out) } else { v |= current_node->v << sub_stream_shift; } - ((uae_u32 *) out)[i] = v; + ((uint32_t *) out)[i] = v; } free_nodes(root.left); root.left = 0; @@ -457,7 +460,7 @@ bit_dedrop(FDI *fdi) /* add one byte */ static void -byte_add(FDI *fdi, uae_u8 v) +byte_add(FDI *fdi, uint8_t v) { int i; for (i = 7; i >= 0; i--) @@ -465,14 +468,14 @@ byte_add(FDI *fdi, uae_u8 v) } /* add one word */ static void -word_add(FDI *fdi, uae_u16 v) +word_add(FDI *fdi, uint16_t v) { - byte_add(fdi, (uae_u8) (v >> 8)); - byte_add(fdi, (uae_u8) v); + byte_add(fdi, (uint8_t) (v >> 8)); + byte_add(fdi, (uint8_t) v); } /* add one byte and mfm encode it */ static void -byte_mfm_add(FDI *fdi, uae_u8 v) +byte_mfm_add(FDI *fdi, uint8_t v) { int i; for (i = 7; i >= 0; i--) @@ -480,7 +483,7 @@ byte_mfm_add(FDI *fdi, uae_u8 v) } /* add multiple bytes and mfm encode them */ static void -bytes_mfm_add(FDI *fdi, uae_u8 v, int len) +bytes_mfm_add(FDI *fdi, uint8_t v, int len) { int i; for (i = 0; i < len; i++) @@ -488,7 +491,7 @@ bytes_mfm_add(FDI *fdi, uae_u8 v, int len) } /* add one mfm encoded word and re-mfm encode it */ static void -word_post_mfm_add(FDI *fdi, uae_u16 v) +word_post_mfm_add(FDI *fdi, uint16_t v) { int i; for (i = 14; i >= 0; i -= 2) @@ -529,8 +532,8 @@ s04(FDI *fdi) static void s08(FDI *fdi) { - int bytes = *fdi->track_src++; - uae_u8 byte = *fdi->track_src++; + int bytes = *fdi->track_src++; + uint8_t byte = *fdi->track_src++; if (bytes == 0) bytes = 256; fdi2raw_log("s08:len=%d,data=%02.2X", bytes, byte); @@ -541,8 +544,8 @@ s08(FDI *fdi) static void s09(FDI *fdi) { - int bytes = *fdi->track_src++; - uae_u8 byte = *fdi->track_src++; + int bytes = *fdi->track_src++; + uint8_t byte = *fdi->track_src++; if (bytes == 0) bytes = 256; bit_drop_next(fdi); @@ -554,8 +557,8 @@ s09(FDI *fdi) static void s0a(FDI *fdi) { - int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; - uae_u8 b; + int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; + uint8_t b; fdi->track_src += 2; fdi2raw_log("s0a:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { @@ -575,8 +578,8 @@ s0a(FDI *fdi) static void s0b(FDI *fdi) { - int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; - uae_u8 b; + int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; + uint8_t b; fdi->track_src += 2; fdi2raw_log("s0b:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { @@ -596,8 +599,8 @@ s0b(FDI *fdi) static void s0c(FDI *fdi) { - int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; - uae_u8 b; + int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; + uint8_t b; fdi->track_src += 2; bit_drop_next(fdi); fdi2raw_log("s0c:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); @@ -618,8 +621,8 @@ s0c(FDI *fdi) static void s0d(FDI *fdi) { - int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; - uae_u8 b; + int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; + uint8_t b; fdi->track_src += 2; bit_drop_next(fdi); fdi2raw_log("s0d:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); @@ -643,7 +646,7 @@ s0d(FDI *fdi) /* just for testing integrity of Amiga sectors */ -/*static void rotateonebit (uae_u8 *start, uae_u8 *end, int shift) +/*static void rotateonebit (uint8_t *start, uint8_t *end, int shift) { if (shift == 0) return; @@ -654,21 +657,21 @@ s0d(FDI *fdi) } }*/ -/*static uae_u16 getmfmword (uae_u8 *mbuf) +/*static uint16_t getmfmword (uint8_t *mbuf) { - uae_u32 v; + uint32_t v; v = (mbuf[0] << 8) | (mbuf[1] << 0); if (check_offset == 0) - return v; + return (uint16_t)v; v <<= 8; v |= mbuf[2]; v >>= check_offset; - return v; + return (uint16_t)v; }*/ #define MFMMASK 0x55555555 -/*static uae_u32 getmfmlong (uae_u8 * mbuf) +/*static uint32_t getmfmlong (uint8_t * mbuf) { return ((getmfmword (mbuf) << 16) | getmfmword (mbuf + 2)) & MFMMASK; }*/ @@ -680,13 +683,13 @@ static int amiga_check_track (FDI *fdi) int fwlen = fdi->out / 8; int length = 2 * fwlen; int drvsec = 11; - uae_u32 odd, even, chksum, id, dlong; - uae_u8 *secdata; - uae_u8 secbuf[544]; - uae_u8 bigmfmbuf[60000]; - uae_u8 *mbuf, *mbuf2, *mend; + uint32_t odd, even, chksum, id, dlong; + uint8_t *secdata; + uint8_t secbuf[544]; + uint8_t bigmfmbuf[60000]; + uint8_t *mbuf, *mbuf2, *mend; char sectable[22]; - uae_u8 *raw = fdi->track_dst_buffer; + uint8_t *raw = fdi->track_dst_buffer; int slabel, off; int ok = 1; @@ -782,7 +785,7 @@ static int amiga_check_track (FDI *fdi) continue; } fdi2raw_log("sector %d header crc ok\n", trackoffs); - if (((id & 0x00ff0000) >> 16) != (uae_u32)fdi->current_track) { + if (((id & 0x00ff0000) >> 16) != (uint32_t)fdi->current_track) { fdi2raw_log("illegal track number %d <> %d\n",fdi->current_track,(id & 0x00ff0000) >> 16); ok++; mbuf = mbuf2; @@ -798,10 +801,10 @@ static int amiga_check_track (FDI *fdi) even = getmfmlong (mbuf + 256 * 2); mbuf += 2 * 2; dlong = (odd << 1) | even; - *secdata++ = (uae_u8) (dlong >> 24); - *secdata++ = (uae_u8) (dlong >> 16); - *secdata++ = (uae_u8) (dlong >> 8); - *secdata++ = (uae_u8) dlong; + *secdata++ = (uint8_t) (dlong >> 24); + *secdata++ = (uint8_t) (dlong >> 16); + *secdata++ = (uint8_t) (dlong >> 8); + *secdata++ = (uint8_t) dlong; chksum ^= odd ^ even; } mbuf += 256 * 2; @@ -831,10 +834,10 @@ static int amiga_check_track (FDI *fdi) #endif static void -amiga_data_raw(FDI *fdi, uae_u8 *secbuf, uae_u8 *crc, int len) +amiga_data_raw(FDI *fdi, uint8_t *secbuf, uint8_t *crc, int len) { - int i; - uae_u8 crcbuf[4]; + int i; + uint8_t crcbuf[4]; if (!crc) { memset(crcbuf, 0, 4); @@ -848,11 +851,11 @@ amiga_data_raw(FDI *fdi, uae_u8 *secbuf, uae_u8 *crc, int len) } static void -amiga_data(FDI *fdi, uae_u8 *secbuf) +amiga_data(FDI *fdi, uint8_t *secbuf) { - uae_u16 mfmbuf[4 + 512]; - uae_u32 dodd, deven, dck; - int i; + uint16_t mfmbuf[4 + 512]; + uint32_t dodd, deven, dck; + int i; for (i = 0; i < 512; i += 4) { deven = ((secbuf[i + 0] << 24) | (secbuf[i + 1] << 16) @@ -860,10 +863,10 @@ amiga_data(FDI *fdi, uae_u8 *secbuf) dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[(i >> 1) + 4] = (uae_u16) (dodd >> 16); - mfmbuf[(i >> 1) + 5] = (uae_u16) dodd; - mfmbuf[(i >> 1) + 256 + 4] = (uae_u16) (deven >> 16); - mfmbuf[(i >> 1) + 256 + 5] = (uae_u16) deven; + mfmbuf[(i >> 1) + 4] = (uint16_t) (dodd >> 16); + mfmbuf[(i >> 1) + 5] = (uint16_t) dodd; + mfmbuf[(i >> 1) + 256 + 4] = (uint16_t) (deven >> 16); + mfmbuf[(i >> 1) + 256 + 5] = (uint16_t) deven; } dck = 0; for (i = 4; i < 4 + 512; i += 2) @@ -872,22 +875,22 @@ amiga_data(FDI *fdi, uae_u8 *secbuf) dodd >>= 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[0] = (uae_u16) (dodd >> 16); - mfmbuf[1] = (uae_u16) dodd; - mfmbuf[2] = (uae_u16) (deven >> 16); - mfmbuf[3] = (uae_u16) deven; + mfmbuf[0] = (uint16_t) (dodd >> 16); + mfmbuf[1] = (uint16_t) dodd; + mfmbuf[2] = (uint16_t) (deven >> 16); + mfmbuf[3] = (uint16_t) deven; for (i = 0; i < 4 + 512; i++) word_post_mfm_add(fdi, mfmbuf[i]); } static void -amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int untilgap) +amiga_sector_header(FDI *fdi, uint8_t *header, uint8_t *data, int sector, int untilgap) { - uae_u8 headerbuf[4], databuf[16]; - uae_u32 deven, dodd, hck; - uae_u16 mfmbuf[24]; - int i; + uint8_t headerbuf[4], databuf[16]; + uint32_t deven, dodd, hck; + uint16_t mfmbuf[24]; + int i; byte_mfm_add(fdi, 0); byte_mfm_add(fdi, 0); @@ -897,9 +900,9 @@ amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int unti memcpy(headerbuf, header, 4); } else { headerbuf[0] = 0xff; - headerbuf[1] = (uae_u8) fdi->current_track; - headerbuf[2] = (uae_u8) sector; - headerbuf[3] = (uae_u8) untilgap; + headerbuf[1] = (uint8_t) fdi->current_track; + headerbuf[2] = (uint8_t) sector; + headerbuf[3] = (uint8_t) untilgap; } if (data) memcpy(databuf, data, 16); @@ -911,20 +914,20 @@ amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int unti dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[0] = (uae_u16) (dodd >> 16); - mfmbuf[1] = (uae_u16) dodd; - mfmbuf[2] = (uae_u16) (deven >> 16); - mfmbuf[3] = (uae_u16) deven; + mfmbuf[0] = (uint16_t) (dodd >> 16); + mfmbuf[1] = (uint16_t) dodd; + mfmbuf[2] = (uint16_t) (deven >> 16); + mfmbuf[3] = (uint16_t) deven; for (i = 0; i < 16; i += 4) { deven = ((databuf[i] << 24) | (databuf[i + 1] << 16) | (databuf[i + 2] << 8) | (databuf[i + 3])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[(i >> 1) + 0 + 4] = (uae_u16) (dodd >> 16); - mfmbuf[(i >> 1) + 0 + 5] = (uae_u16) dodd; - mfmbuf[(i >> 1) + 8 + 4] = (uae_u16) (deven >> 16); - mfmbuf[(i >> 1) + 8 + 5] = (uae_u16) deven; + mfmbuf[(i >> 1) + 0 + 4] = (uint16_t) (dodd >> 16); + mfmbuf[(i >> 1) + 0 + 5] = (uint16_t) dodd; + mfmbuf[(i >> 1) + 8 + 4] = (uint16_t) (deven >> 16); + mfmbuf[(i >> 1) + 8 + 5] = (uint16_t) deven; } hck = 0; for (i = 0; i < 4 + 16; i += 2) @@ -933,10 +936,10 @@ amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int unti dodd >>= 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[20] = (uae_u16) (dodd >> 16); - mfmbuf[21] = (uae_u16) dodd; - mfmbuf[22] = (uae_u16) (deven >> 16); - mfmbuf[23] = (uae_u16) deven; + mfmbuf[20] = (uint16_t) (dodd >> 16); + mfmbuf[21] = (uint16_t) dodd; + mfmbuf[22] = (uint16_t) (deven >> 16); + mfmbuf[23] = (uint16_t) deven; for (i = 0; i < 4 + 16 + 4; i++) word_post_mfm_add(fdi, mfmbuf[i]); @@ -1018,11 +1021,11 @@ s27(FDI *fdi) /* IBM */ /* *** */ -static uae_u16 -ibm_crc(uae_u8 byte, int reset) +static uint16_t +ibm_crc(uint8_t byte, int reset) { - static uae_u16 crc; - int i; + static uint16_t crc; + int i; if (reset) crc = 0xcdb4; @@ -1042,11 +1045,11 @@ ibm_crc(uae_u8 byte, int reset) } static void -ibm_data(FDI *fdi, uae_u8 *data, uae_u8 *crc, int len) +ibm_data(FDI *fdi, uint8_t *data, uint8_t *crc, int len) { - int i; - uae_u8 crcbuf[2]; - uae_u16 crcv = 0; + int i; + uint8_t crcbuf[2]; + uint16_t crcv = 0; word_add(fdi, 0x4489); word_add(fdi, 0x4489); @@ -1059,20 +1062,20 @@ ibm_data(FDI *fdi, uae_u8 *data, uae_u8 *crc, int len) } if (!crc) { crc = crcbuf; - crc[0] = (uae_u8) (crcv >> 8); - crc[1] = (uae_u8) crcv; + crc[0] = (uint8_t) (crcv >> 8); + crc[1] = (uint8_t) crcv; } byte_mfm_add(fdi, crc[0]); byte_mfm_add(fdi, crc[1]); } static void -ibm_sector_header(FDI *fdi, uae_u8 *data, uae_u8 *crc, int secnum, int pre) +ibm_sector_header(FDI *fdi, uint8_t *data, uint8_t *crc, int secnum, int pre) { - uae_u8 secbuf[5]; - uae_u8 crcbuf[2]; - uae_u16 crcv; - int i; + uint8_t secbuf[5]; + uint8_t crcbuf[2]; + uint16_t crcv; + int i; if (pre) bytes_mfm_add(fdi, 0, 12); @@ -1081,9 +1084,9 @@ ibm_sector_header(FDI *fdi, uae_u8 *data, uae_u8 *crc, int secnum, int pre) word_add(fdi, 0x4489); secbuf[0] = 0xfe; if (secnum >= 0) { - secbuf[1] = (uae_u8) (fdi->current_track / 2); - secbuf[2] = (uae_u8) (fdi->current_track % 2); - secbuf[3] = (uae_u8) secnum; + secbuf[1] = (uint8_t) (fdi->current_track / 2); + secbuf[2] = (uint8_t) (fdi->current_track % 2); + secbuf[3] = (uint8_t) secnum; secbuf[4] = 2; } else { memcpy(secbuf + 1, data, 4); @@ -1096,8 +1099,8 @@ ibm_sector_header(FDI *fdi, uae_u8 *data, uae_u8 *crc, int secnum, int pre) if (crc) { memcpy(crcbuf, crc, 2); } else { - crcbuf[0] = (uae_u8) (crcv >> 8); - crcbuf[1] = (uae_u8) crcv; + crcbuf[0] = (uint8_t) (crcv >> 8); + crcbuf[1] = (uint8_t) crcv; } /* data */ for (i = 0; i < 5; i++) @@ -1276,8 +1279,8 @@ track_amiga(struct fdi *fdi, int first_sector, int max_sector) static void track_atari_st(struct fdi *fdi, int max_sector) { - int i, gap3 = 0; - uae_u8 *p = fdi->track_src; + int i, gap3 = 0; + uint8_t *p = fdi->track_src; switch (max_sector) { case 9: @@ -1301,8 +1304,8 @@ track_atari_st(struct fdi *fdi, int max_sector) static void track_pc(struct fdi *fdi, int max_sector) { - int i, gap3; - uae_u8 *p = fdi->track_src; + int i, gap3; + uint8_t *p = fdi->track_src; switch (max_sector) { case 8: @@ -1331,7 +1334,7 @@ track_pc(struct fdi *fdi, int max_sector) static void track_amiga_dd(struct fdi *fdi) { - uae_u8 *p = fdi->track_src; + uint8_t *p = fdi->track_src; track_amiga(fdi, fdi->track_len >> 4, 11); fdi->track_src = p + (fdi->track_len & 15) * 512; } @@ -1339,7 +1342,7 @@ track_amiga_dd(struct fdi *fdi) static void track_amiga_hd(struct fdi *fdi) { - uae_u8 *p = fdi->track_src; + uint8_t *p = fdi->track_src; track_amiga(fdi, 0, 22); fdi->track_src = p + fdi->track_len * 256; } @@ -1420,8 +1423,8 @@ static int handle_sectors_described_track(FDI *fdi) { #ifdef ENABLE_FDI2RAW_LOG - int oldout; - uae_u8 *start_src = fdi->track_src; + int oldout; + uint8_t *start_src = fdi->track_src; #endif fdi->encoding_type = *fdi->track_src++; fdi->index_offset = get_u32(fdi->track_src); @@ -1454,20 +1457,20 @@ handle_sectors_described_track(FDI *fdi) return fdi->out; } -static uae_u8 * -fdi_decompress(int pulses, uae_u8 *sizep, uae_u8 *src, int *dofree) +static uint8_t * +fdi_decompress(int pulses, uint8_t *sizep, uint8_t *src, int *dofree) { - uae_u32 size = get_u24(sizep); - uae_u32 *dst2; - int len = size & 0x3fffff; - uae_u8 *dst; - int mode = size >> 22, i; + uint32_t size = get_u24(sizep); + uint32_t *dst2; + int len = size & 0x3fffff; + uint8_t *dst; + int mode = size >> 22, i; *dofree = 0; if (mode == 0 && pulses * 2 > len) mode = 1; if (mode == 0) { - dst2 = (uae_u32 *) src; + dst2 = (uint32_t *) src; dst = src; for (i = 0; i < pulses; i++) { *dst2++ = get_u32(src); @@ -1484,7 +1487,7 @@ fdi_decompress(int pulses, uae_u8 *sizep, uae_u8 *src, int *dofree) } static void -dumpstream(int track, uae_u8 *stream, int len) +dumpstream(int track, uint8_t *stream, int len) { #if 0 char name[100]; @@ -1499,8 +1502,8 @@ dumpstream(int track, uae_u8 *stream, int len) static int bitoffset; -STATIC_INLINE void -addbit(uae_u8 *p, int bit) +static inline void +addbit(uint8_t *p, int bit) { int off1 = bitoffset / 8; int off2 = bitoffset % 8; @@ -1517,7 +1520,7 @@ struct pulse_sample { static int pulse_limitval = 15; /* tolerance of 15% */ static struct pulse_sample psarray[FDI_MAX_ARRAY]; static int array_index; -static unsigned long total; +static uint32_t total; static int totaldiv; static void @@ -1536,7 +1539,7 @@ init_array(uint32_t standard_MFM_2_bit_cell_size, int nb_of_bits) #if 0 -static void fdi2_decode (FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 *maxp, uae_u8 *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) +static void fdi2_decode (FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_t *maxp, uint8_t *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) { uint32_t adjust; uint32_t adjusted_pulse; @@ -1544,9 +1547,9 @@ static void fdi2_decode (FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *mi uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; int real_size, i, j, eodat, outstep; int indexoffset = *indexoffsetp; - uae_u8 *d = fdi->track_dst_buffer; - uae_u16 *pt = fdi->track_dst_buffer_timing; - uae_u32 ref_pulse, pulse; + uint8_t *d = fdi->track_dst_buffer; + uint16_t *pt = fdi->track_dst_buffer_timing; + uint32_t ref_pulse, pulse; /* detects a long-enough stable pulse coming just after another stable pulse */ i = 1; @@ -1570,8 +1573,8 @@ static void fdi2_decode (FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *mi while (outstep < 2) { /* calculates the current average bitrate from previous decoded data */ - uae_u32 avg_size = (total << 3) / totaldiv; /* this is the new average size for one MFM bit */ - /* uae_u32 avg_size = (uae_u32)((((float)total)*8.0) / ((float)totaldiv)); */ + uint32_t avg_size = (total << 3) / totaldiv; /* this is the new average size for one MFM bit */ + /* uint32_t avg_size = (uint32_t)((((float)total)*8.0) / ((float)totaldiv)); */ /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { @@ -1641,7 +1644,7 @@ static void fdi2_decode (FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *mi addbit (d, 0); addbit (d, 1); for (j = 0; j < real_size; j++) - *pt++ = (uae_u16)(pulse / real_size); + *pt++ = (uint16_t)(pulse / real_size); } /* prepares for the next pulse */ @@ -1663,18 +1666,18 @@ static void fdi2_decode (FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *mi #else static void -fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 *maxp, uae_u8 *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) +fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_t *maxp, uint8_t *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) { - uint32_t adjust; - uint32_t adjusted_pulse; - uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000; - uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; - int real_size, i, j, nexti, eodat, outstep, randval; - int indexoffset = *indexoffsetp; - uae_u8 *d = fdi->track_dst_buffer; - uae_u16 *pt = fdi->track_dst_buffer_timing; - uae_u32 ref_pulse, pulse; - long jitter; + uint32_t adjust; + uint32_t adjusted_pulse; + uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000; + uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; + int real_size, i, j, nexti, eodat, outstep, randval; + int indexoffset = *indexoffsetp; + uint8_t *d = fdi->track_dst_buffer; + uint16_t *pt = fdi->track_dst_buffer_timing; + uint32_t ref_pulse, pulse; + int32_t jitter; /* detects a long-enough stable pulse coming just after another stable pulse */ i = 1; @@ -1698,8 +1701,8 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * while (outstep < 2) { /* calculates the current average bitrate from previous decoded data */ - uae_u32 avg_size = (total << (2 + mfm)) / totaldiv; /* this is the new average size for one MFM bit */ - /* uae_u32 avg_size = (uae_u32)((((float)total)*((float)(mfm+1))*4.0) / ((float)totaldiv)); */ + uint32_t avg_size = (uint32_t) ((total << (2 + mfm)) / totaldiv); /* this is the new average size for one MFM bit */ + /* uint32_t avg_size = (uint32_t)((((float)total)*((float)(mfm+1))*4.0) / ((float)totaldiv)); */ /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { avg_size = standard_MFM_8_bit_cell_size; @@ -1711,7 +1714,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * /* gets the next long-enough pulse (this may require more than one pulse) */ pulse = 0; while (pulse < ((avg_size / 4) - (avg_size / 16))) { - uae_u32 avg_pulse, min_pulse, max_pulse; + uint32_t avg_pulse, min_pulse, max_pulse; i++; if (i >= pulses) i = 0; @@ -1739,7 +1742,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * randval = rand(); if (randval < (RAND_MAX / 2)) { if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1748,7 +1751,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * } else { randval -= RAND_MAX / 2; if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1774,7 +1777,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * randval = rand(); if (randval < (RAND_MAX / 2)) { if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1783,7 +1786,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * } else { randval -= RAND_MAX / 2; if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1872,7 +1875,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * addbit(d, 0); addbit(d, 1); for (j = 0; j < real_size; j++) - *pt++ = (uae_u16) (pulse / real_size); + *pt++ = (uint16_t) (pulse / real_size); } /* prepares for the next pulse */ @@ -1894,11 +1897,11 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * #endif static void -fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uae_u16 *out) +fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uint16_t *out) { - uae_u16 *pt2, *pt; - double avg_bit_len; - int i; + uint16_t *pt2, *pt; + double avg_bit_len; + int i; avg_bit_len = (double) totalavg / (double) bitoffset; pt2 = fdi->track_dst_buffer_timing; @@ -1906,7 +1909,7 @@ fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uae_u16 *out) for (i = 0; i < bitoffset / 8; i++) { double v = (pt2[0] + pt2[1] + pt2[2] + pt2[3] + pt2[4] + pt2[5] + pt2[6] + pt2[7]) / 8.0; v = 1000.0 * v / avg_bit_len; - *pt++ = (uae_u16) v; + *pt++ = (uint16_t) v; pt2 += 8; } *pt++ = out[0]; @@ -1916,14 +1919,14 @@ fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uae_u16 *out) static int decode_lowlevel_track(FDI *fdi, int track, struct fdi_cache *cache) { - uae_u8 *p1; - uae_u32 *p2; - uae_u32 *avgp, *minp = 0, *maxp = 0; - uae_u8 *idxp = 0; - uae_u32 maxidx, totalavg, weakbits; - int i, j, len, pulses, indexoffset; - int avg_free, min_free = 0, max_free = 0, idx_free; - int idx_off1 = 0, idx_off2 = 0, idx_off3 = 0; + uint8_t *p1; + uint32_t *p2; + uint32_t *avgp, *minp = 0, *maxp = 0; + uint8_t *idxp = 0; + uint32_t maxidx, totalavg, weakbits; + int i, j, len, pulses, indexoffset; + int avg_free, min_free = 0, max_free = 0, idx_free; + int idx_off1 = 0, idx_off2 = 0, idx_off3 = 0; p1 = fdi->track_src; pulses = get_u32(p1); @@ -1931,15 +1934,15 @@ decode_lowlevel_track(FDI *fdi, int track, struct fdi_cache *cache) return -1; p1 += 4; len = 12; - avgp = (uae_u32 *) fdi_decompress(pulses, p1 + 0, p1 + len, &avg_free); - dumpstream(track, (uae_u8 *) avgp, pulses); + avgp = (uint32_t *) fdi_decompress(pulses, p1 + 0, p1 + len, &avg_free); + dumpstream(track, (uint8_t *) avgp, pulses); len += get_u24(p1 + 0) & 0x3fffff; if (!avgp) return -1; if (get_u24(p1 + 3) && get_u24(p1 + 6)) { - minp = (uae_u32 *) fdi_decompress(pulses, p1 + 3, p1 + len, &min_free); + minp = (uint32_t *) fdi_decompress(pulses, p1 + 3, p1 + len, &min_free); len += get_u24(p1 + 3) & 0x3fffff; - maxp = (uae_u32 *) fdi_decompress(pulses, p1 + 6, p1 + len, &max_free); + maxp = (uint32_t *) fdi_decompress(pulses, p1 + 6, p1 + len, &max_free); len += get_u24(p1 + 6) & 0x3fffff; /* Computes the real min and max values */ for (i = 0; i < pulses; i++) { @@ -2048,7 +2051,7 @@ decode_lowlevel_track(FDI *fdi, int track, struct fdi_cache *cache) } static unsigned char fdiid[] = { "Formatted Disk Image file" }; -static int bit_rate_table[16] = { 125, 150, 250, 300, 500, 1000 }; +static int bit_rate_table[16] = { 125, 150, 250, 300, 500, 1000 }; void fdi2raw_header_free(FDI *fdi) @@ -2106,13 +2109,13 @@ fdi2raw_get_bit_rate(FDI *fdi) return fdi->bit_rate; } -int +FDI2RawDiskType fdi2raw_get_type(FDI *fdi) { return fdi->disk_type; } -int +bool fdi2raw_get_write_protect(FDI *fdi) { return fdi->write_protect; @@ -2127,9 +2130,9 @@ fdi2raw_get_tpi(FDI *fdi) FDI * fdi2raw_header(FILE *f) { - int i, offset, oldseek; - uae_u8 type, size; - FDI *fdi; + long i, offset, oldseek; + uint8_t type, size; + FDI *fdi; fdi2raw_log("ALLOC: memory allocated %d\n", fdi_allocated); fdi = fdi_malloc(sizeof(FDI)); @@ -2167,7 +2170,7 @@ fdi2raw_header(FILE *f) fdi->last_head = fdi->header[144]; fdi->disk_type = fdi->header[145]; fdi->rotation_speed = fdi->header[146] + 128; - fdi->write_protect = fdi->header[147] & 1; + fdi->write_protect = !!(fdi->header[147] & 1); fdi2raw_log("FDI version %d.%d\n", fdi->header[140], fdi->header[141]); fdi2raw_log("last_track=%d rotation_speed=%d\n", fdi->last_track, fdi->rotation_speed); @@ -2197,8 +2200,8 @@ fdi2raw_header(FILE *f) return fdi; } -int -fdi2raw_loadrevolution_2(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) +static int +fdi2raw_loadrevolution_2(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) { struct fdi_cache *cache = &fdi->cache[track]; int len, i, idx; @@ -2216,8 +2219,8 @@ fdi2raw_loadrevolution_2(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int tr *tracklength = len; for (i = 0; i < (len + 15) / (2 * 8); i++) { - uae_u8 *data = fdi->track_dst_buffer + i * 2; - *mfmbuf++ = 256 * *data + *(data + 1); + uint8_t *data = fdi->track_dst_buffer + i * 2; + *mfmbuf++ = 256 * *data + *(data + 1); } fdi2_celltiming(fdi, cache->totalavg, len, tracktiming); if (indexoffsetp) @@ -2226,18 +2229,20 @@ fdi2raw_loadrevolution_2(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int tr } int -fdi2raw_loadrevolution(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int mfm) +fdi2raw_loadrevolution(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int mfm) { + track ^= fdi->reversed_side; return fdi2raw_loadrevolution_2(fdi, mfmbuf, tracktiming, track, tracklength, 0, 0, mfm); } int -fdi2raw_loadtrack(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) +fdi2raw_loadtrack(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) { - uae_u8 *p; + uint8_t *p; int outlen, i; struct fdi_cache *cache = &fdi->cache[track]; + track ^= fdi->reversed_side; if (cache->lowlevel) return fdi2raw_loadrevolution_2(fdi, mfmbuf, tracktiming, track, tracklength, indexoffsetp, multirev, mfm); @@ -2305,8 +2310,8 @@ fdi2raw_loadtrack(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, in return fdi2raw_loadrevolution_2(fdi, mfmbuf, tracktiming, track, tracklength, indexoffsetp, multirev, mfm); *tracklength = fdi->out; for (i = 0; i < ((*tracklength) + 15) / (2 * 8); i++) { - uae_u8 *data = fdi->track_dst_buffer + i * 2; - *mfmbuf++ = 256 * *data + *(data + 1); + uint8_t *data = fdi->track_dst_buffer + i * 2; + *mfmbuf++ = 256 * *data + *(data + 1); } } return outlen; diff --git a/src/include/fdi2raw.h b/src/include/fdi2raw.h index cfc1f84c3..b848b26f2 100644 --- a/src/include/fdi2raw.h +++ b/src/include/fdi2raw.h @@ -16,36 +16,66 @@ * * Copyright 2001-2004 Toni Wilen. * Copyright 2001-2004 Vincent Joguin. - * Copyright 2001 Thomas Harte. + * Copyright 2001-2016 Thomas Harte. */ #ifndef __FDI2RAW_H #define __FDI2RAW_H -#define uae_u8 uint8_t -#define uae_u16 uint16_t -#define uae_u32 uint32_t - +#include +#include #include + typedef struct fdi FDI; #ifdef __cplusplus extern "C" { #endif -extern int fdi2raw_loadtrack(FDI *, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffset, int *multirev, int mfm); +/*! + Attempts to parse and return an FDI header from the file @c file. -extern int fdi2raw_loadrevolution(FDI *, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int mfm); + @parameter file the file from which to attempt to read the FDI. + @returns a newly-allocated `FDI` if parsing succeeded; @c NULL otherwise. +*/ +extern FDI *fdi2raw_header(FILE *file); -extern FDI *fdi2raw_header(FILE *f); -extern void fdi2raw_header_free(FDI *); -extern int fdi2raw_get_last_track(FDI *); -extern int fdi2raw_get_num_sector(FDI *); -extern int fdi2raw_get_last_head(FDI *); -extern int fdi2raw_get_type(FDI *); -extern int fdi2raw_get_bit_rate(FDI *); -extern int fdi2raw_get_rotation(FDI *); -extern int fdi2raw_get_write_protect(FDI *); -extern int fdi2raw_get_tpi(FDI *); +/*! + Release all memory associated with @c file. +*/ +extern void fdi2raw_header_free(FDI *file); + +extern int fdi2raw_loadtrack(FDI *, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffset, int *multirev, int mfm); +extern int fdi2raw_loadrevolution(FDI *, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int mfm); + +typedef enum { + FDI2RawDiskType8Inch = 0, + FDI2RawDiskType5_25Inch = 1, + FDI2RawDiskType3_5Inch = 2, + FDI2RawDiskType3Inch = 3, +} FDI2RawDiskType; + +/// @returns the disk type described by @c fdi. +extern FDI2RawDiskType fdi2raw_get_type(FDI *fdi); + +/// @returns the bit rate at which @c fdi is sampled if spinning at the intended rate, in Kbit/s. +extern int fdi2raw_get_bit_rate(FDI *fdi); + +/// @returns the intended rotation speed of @c fdi, in rotations per minute. +extern int fdi2raw_get_rotation(FDI *fdi); + +/// @returns whether the imaged disk was write protected. +extern bool fdi2raw_get_write_protect(FDI *fdi); + +/// @returns the final enumerated track represented in @c fdi. +extern int fdi2raw_get_last_track(FDI *fdi); + +/// @returns the final enumerated head represented in @c fdi. +extern int fdi2raw_get_last_head(FDI *fdi); + +/// @returns @c 22 if track 0 is a standard Amiga high-density; @c 11 otherwise. +extern int fdi2raw_get_num_sector(FDI *fdi); + +extern int fdi2raw_get_tpi(FDI *fdi); #ifdef __cplusplus } From e75e39d95c28fe8966721eb50e638ac734e3be2f Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sat, 7 Jan 2023 13:41:04 -0500 Subject: [PATCH 090/112] Update glad to 0.1.36 --- src/include/glad/glad.h | 2 +- src/win/glad.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/glad/glad.h b/src/include/glad/glad.h index 0b4d36656..5b2fd13f4 100644 --- a/src/include/glad/glad.h +++ b/src/include/glad/glad.h @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.34 on Sat Dec 4 18:46:02 2021. + OpenGL loader generated by glad 0.1.36 on Sat Jan 7 18:24:33 2023. Language/Generator: C/C++ Specification: gl diff --git a/src/win/glad.c b/src/win/glad.c index f3ceb1148..7c282ebee 100644 --- a/src/win/glad.c +++ b/src/win/glad.c @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.34 on Sat Dec 4 18:46:02 2021. + OpenGL loader generated by glad 0.1.36 on Sat Jan 7 18:24:33 2023. Language/Generator: C/C++ Specification: gl @@ -21,10 +21,10 @@ https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.0&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_debug_output&extensions=GL_ARB_sync */ -#include #include #include #include +#include static void *get_proc(const char *namez); From 40bd782aeb1329cb00f4280882d0f4a33fe1fa59 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 7 Jan 2023 23:16:00 +0100 Subject: [PATCH 091/112] Win32 settings dialog secondary display selection fixes. --- src/win/win_settings.c | 57 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/src/win/win_settings.c b/src/win/win_settings.c index d6e0c0693..1853c6b57 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -1103,7 +1103,7 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) settings_enable_window(hdlg, IDC_CONFIGURE_VID, video_card_has_config(e)); // Secondary Video Card - c = 0; + c = d = 0; settings_reset_content(hdlg, IDC_COMBO_VIDEO_2); while (1) { @@ -1118,12 +1118,17 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) if (!device_name[0]) break; + if ((c > 1) && (video_card_get_flags(c) == video_card_get_flags(temp_gfxcard))) { + c++; + continue; + } + if (video_card_available(c) && device_is_valid(video_card_getdevice(c), temp_machine)) { if (c == 0) // "None" settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2104)); else if (c == 1) // "Internal" settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2119)); - else if (video_card_get_flags(c) != video_card_get_flags(gfxcard)) + else settings_add_string(hdlg, IDC_COMBO_VIDEO_2, (LPARAM) device_name); settings_list_to_device[1][d] = c; if ((c == 0) || (c == temp_gfxcard_2)) @@ -1158,6 +1163,49 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) case IDC_COMBO_VIDEO: temp_gfxcard = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_VIDEO)]; settings_enable_window(hdlg, IDC_CONFIGURE_VID, video_card_has_config(temp_gfxcard)); + + // Secondary Video Card + c = d = 0; + settings_reset_content(hdlg, IDC_COMBO_VIDEO_2); + + while (1) { + /* Skip "internal" if machine doesn't have it. */ + if ((c == 1) && !machine_has_flags(temp_machine, MACHINE_VIDEO)) { + c++; + continue; + } + + generate_device_name(video_card_getdevice(c), video_get_internal_name(c), 1); + + if (!device_name[0]) + break; + + if ((c > 1) && (video_card_get_flags(c) == video_card_get_flags(temp_gfxcard))) { + c++; + continue; + } + + if (video_card_available(c) && device_is_valid(video_card_getdevice(c), temp_machine)) { + if (c == 0) // "None" + settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2104)); + else if (c == 1) // "Internal" + settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2119)); + else + settings_add_string(hdlg, IDC_COMBO_VIDEO_2, (LPARAM) device_name); + settings_list_to_device[1][d] = c; + if ((c == 0) || (c == temp_gfxcard_2)) + settings_set_cur_sel(hdlg, IDC_COMBO_VIDEO_2, d); + d++; + } + + c++; + + settings_process_messages(); + } + + settings_enable_window(hdlg, IDC_COMBO_VIDEO_2, !machine_has_flags(temp_machine, MACHINE_VIDEO_ONLY)); + e = settings_list_to_device[1][settings_get_cur_sel(hdlg, IDC_COMBO_VIDEO_2)]; + settings_enable_window(hdlg, IDC_CONFIGURE_VID_2, video_card_has_config(e)); break; case IDC_COMBO_VIDEO_2: @@ -1184,11 +1232,10 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) break; case IDC_BUTTON_XGA: - if (machine_has_bus(temp_machine, MACHINE_BUS_MCA) > 0) { + if (machine_has_bus(temp_machine, MACHINE_BUS_MCA) > 0) temp_deviceconfig |= deviceconfig_open(hdlg, (void *) &xga_device); - } else { + else temp_deviceconfig |= deviceconfig_open(hdlg, (void *) &xga_isa_device); - } break; case IDC_CONFIGURE_VID: From e5496e2638235e5ddff50f5721d17548a9c370c7 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sat, 7 Jan 2023 23:48:45 +0100 Subject: [PATCH 092/112] Overhauled CD-ROM selection for SCSI and ATAPI, including model and vendor specific commands. Fixed the Spock SCSI ID selection. Fixed CD Audio on NCR 5380-based SCSI controllers. Added a proprietary CD-ROM controller selection (not hooked up yet). All on qt only. --- src/86box.c | 4 + src/cdrom/cdrom.c | 535 ++++++++-- src/config.c | 41 +- src/include/86box/cdrom.h | 69 +- src/include/86box/cdrom_interface.h | 31 + src/include/86box/scsi_cdrom.h | 4 + src/include/86box/scsi_device.h | 54 +- src/qt/qt_harddrive_common.cpp | 8 +- src/qt/qt_machinestatus.cpp | 3 + src/qt/qt_mediamenu.cpp | 3 + src/qt/qt_settingsfloppycdrom.cpp | 113 +- src/qt/qt_settingsfloppycdrom.hpp | 3 +- src/qt/qt_settingsfloppycdrom.ui | 29 +- src/qt/qt_settingsstoragecontrollers.cpp | 49 +- src/qt/qt_settingsstoragecontrollers.hpp | 2 + src/qt/qt_settingsstoragecontrollers.ui | 25 +- src/scsi/scsi_cdrom.c | 1236 ++++++++++++++++++---- src/scsi/scsi_ncr5380.c | 55 +- src/scsi/scsi_spock.c | 150 +-- 19 files changed, 1941 insertions(+), 473 deletions(-) create mode 100644 src/include/86box/cdrom_interface.h diff --git a/src/86box.c b/src/86box.c index 147233b21..7beef9333 100644 --- a/src/86box.c +++ b/src/86box.c @@ -1068,6 +1068,10 @@ pc_reset_hard_init(void) /* Reset the Hard Disk Controller module. */ hdc_reset(); + + /* Reset the CD-ROM Controller module. */ + cdrom_interface_reset(); + /* Reset and reconfigure the SCSI layer. */ scsi_card_init(); diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index dd1604801..37795b845 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -23,9 +23,12 @@ #include #define HAVE_STDARG_H #include <86box/86box.h> +#include <86box/device.h> #include <86box/config.h> #include <86box/cdrom.h> #include <86box/cdrom_image.h> +#include <86box/cdrom_interface.h> +#include <86box/cdrom_mitsumi.h> #include <86box/plat.h> #include <86box/scsi.h> #include <86box/scsi_device.h> @@ -43,9 +46,6 @@ #define MIN_SEEK 2000 #define MAX_SEEK 333333 -#define CD_BCD(x) (((x) % 10) | (((x) / 10) << 4)) -#define CD_DCB(x) ((((x) &0xf0) >> 4) * 10 + ((x) &0x0f)) - #pragma pack(push, 1) typedef struct { uint8_t user_data[2048], @@ -94,6 +94,8 @@ static uint8_t extra_buffer[296]; cdrom_t cdrom[CDROM_NUM]; +int cdrom_interface_current; + #ifdef ENABLE_CDROM_LOG int cdrom_do_log = ENABLE_CDROM_LOG; @@ -112,6 +114,145 @@ cdrom_log(const char *fmt, ...) # define cdrom_log(fmt, ...) #endif +static const device_t cdrom_interface_none_device = { + .name = "None", + .internal_name = "none", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +static const struct { + const device_t *device; +} controllers[] = { + // clang-format off + { &cdrom_interface_none_device }, + { NULL } + // clang-format on +}; + +/* Reset the CD-ROM Interface, whichever one that is. */ +void +cdrom_interface_reset(void) +{ + cdrom_log("CD-ROM Interface: reset(current=%d)\n", + cdrom_interface_current); + + /* If we have a valid controller, add its device. */ + if (!controllers[cdrom_interface_current].device) + return; + + device_add(controllers[cdrom_interface_current].device); +} + +char * +cdrom_interface_get_internal_name(int cdinterface) +{ + return device_get_internal_name(controllers[cdinterface].device); +} + +int +cdrom_interface_get_from_internal_name(char *s) +{ + int c = 0; + + while (controllers[c].device != NULL) { + if (!strcmp((char *) controllers[c].device->internal_name, s)) + return c; + c++; + } + + return 0; +} + +const device_t * +cdrom_interface_get_device(int cdinterface) +{ + return (controllers[cdinterface].device); +} + +int +cdrom_interface_has_config(int cdinterface) +{ + const device_t *dev = cdrom_interface_get_device(cdinterface); + + if (dev == NULL) + return (0); + + if (!device_has_config(dev)) + return (0); + + return (1); +} + +int +cdrom_interface_get_flags(int cdinterface) +{ + return (controllers[cdinterface].device->flags); +} + +int +cdrom_interface_available(int cdinterface) +{ + return (device_available(controllers[cdinterface].device)); +} + +char * +cdrom_getname(int type) +{ + return (char *) cdrom_drive_types[type].name; +} + +char * +cdrom_get_internal_name(int type) +{ + return (char *) cdrom_drive_types[type].internal_name; +} + +int +cdrom_get_from_internal_name(char *s) +{ + int c = 0; + + while (strlen(cdrom_drive_types[c].internal_name)) { + if (!strcmp((char *) cdrom_drive_types[c].internal_name, s)) + return c; + c++; + } + + return 0; +} + +void +cdrom_set_type(int model, int type) +{ + cdrom[model].type = type; +} + +int +cdrom_get_type(int model) +{ + return cdrom[model].type; +} + +static __inline int +bin2bcd(int x) +{ + return (x % 10) | ((x / 10) << 4); +} + +static __inline int +bcd2bin(int x) +{ + return (x >> 4) * 10 + (x & 0x0f); +} + int cdrom_lba_to_msf_accurate(int lba) { @@ -258,12 +399,26 @@ cdrom_stop(cdrom_t *dev) } void -cdrom_seek(cdrom_t *dev, uint32_t pos) +cdrom_seek(cdrom_t *dev, uint32_t pos, uint8_t vendor_type) { + int m, s, f; + if (!dev) return; - cdrom_log("CD-ROM %i: Seek to LBA %08X\n", dev->id, pos); + cdrom_log("CD-ROM %i: Seek to LBA %08X, vendor type = %02x.\n", dev->id, pos, vendor_type); + + switch (vendor_type) { + case 0x40: + m = bcd2bin((pos >> 24) & 0xff); + s = bcd2bin((pos >> 16) & 0xff); + f = bcd2bin((pos >> 8) & 0xff); + pos = MSFtoLBA(m, s, f) - 150; + break; + case 0x80: + pos = bcd2bin((pos >> 24) & 0xff); + break; + } dev->seek_pos = pos; cdrom_stop(dev); @@ -323,18 +478,6 @@ cdrom_audio_callback(cdrom_t *dev, int16_t *output, int len) return ret; } -static __inline int -bin2bcd(int x) -{ - return (x % 10) | ((x / 10) << 4); -} - -static __inline int -bcd2bin(int x) -{ - return (x >> 4) * 10 + (x & 0x0f); -} - static void msf_from_bcd(int *m, int *s, int *f) { @@ -365,20 +508,22 @@ cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf) /* Track-relative audio play. */ dev->ops->get_track_info(dev, ismsf & 0xff, 0, &ti); pos += MSFtoLBA(ti.m, ti.s, ti.f) - 150; - } else if (ismsf == 2) { + } else if ((ismsf == 2) || (ismsf == 3)) { dev->ops->get_track_info(dev, pos, 0, &ti); pos = MSFtoLBA(ti.m, ti.s, ti.f) - 150; - /* We have to end at the *end* of the specified track, - not at the beginning. */ - dev->ops->get_track_info(dev, len, 1, &ti); - len = MSFtoLBA(ti.m, ti.s, ti.f) - 150; + if (ismsf == 2) { + /* We have to end at the *end* of the specified track, + not at the beginning. */ + dev->ops->get_track_info(dev, len, 1, &ti); + len = MSFtoLBA(ti.m, ti.s, ti.f) - 150; + } } else if (ismsf == 1) { m = (pos >> 16) & 0xff; s = (pos >> 8) & 0xff; f = pos & 0xff; /* NEC CDR-260 speaks BCD. */ - if ((dev->bus_type == CDROM_BUS_ATAPI) && dev->early) + if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/ msf_from_bcd(&m, &s, &f); if (pos == 0xffffff) { @@ -392,7 +537,7 @@ cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf) f = len & 0xff; /* NEC CDR-260 speaks BCD. */ - if ((dev->bus_type == CDROM_BUS_ATAPI) && dev->early) + if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/ msf_from_bcd(&m, &s, &f); len = MSFtoLBA(m, s, f) - 150; @@ -434,33 +579,41 @@ cdrom_audio_track_search(cdrom_t *dev, uint32_t pos, int type, uint8_t playbit) switch (type) { case 0x00: if (pos == 0xffffffff) { - cdrom_log("CD-ROM %i: Search from current position\n", dev->id); + cdrom_log("CD-ROM %i: (type 0) Search from current position\n", dev->id); pos = dev->seek_pos; } + dev->seek_pos = pos; break; case 0x40: - m = CD_DCB((pos >> 24) & 0xff); - s = CD_DCB((pos >> 16) & 0xff); - f = CD_DCB((pos >> 8) & 0xff); + m = bcd2bin((pos >> 24) & 0xff); + s = bcd2bin((pos >> 16) & 0xff); + f = bcd2bin((pos >> 8) & 0xff); if (pos == 0xffffffff) { - cdrom_log("CD-ROM %i: Search from current position\n", dev->id); + cdrom_log("CD-ROM %i: (type 1) Search from current position\n", dev->id); pos = dev->seek_pos; } else pos = MSFtoLBA(m, s, f) - 150; + + dev->seek_pos = pos; + break; + case 0x80: + if (pos == 0xffffffff) { + cdrom_log("CD-ROM %i: (type 2) Search from current position\n", dev->id); + pos = dev->seek_pos; + } + dev->seek_pos = (pos >> 24) & 0xff; break; } /* Unlike standard commands, if there's a data track on an Audio CD (mixed mode) the playback continues with the audio muted (Toshiba CD-ROM SCSI-2 manual reference). */ - - dev->seek_pos = pos; dev->cd_buflen = 0; dev->cd_status = playbit ? CD_STATUS_PLAYING : CD_STATUS_PAUSED; return 1; } uint8_t -cdrom_toshiba_audio_play(cdrom_t *dev, uint32_t pos, int type) +cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type) { int m = 0, s = 0, f = 0; @@ -468,31 +621,85 @@ cdrom_toshiba_audio_play(cdrom_t *dev, uint32_t pos, int type) return 0; /*Preliminary support, revert if too incomplete*/ - cdrom_log("Toshiba Play Audio: MSF = %06x, cdstatus = %02x\n", pos, dev->cd_status); switch (type) { + case 0x00: + dev->cd_end = pos; + break; case 0x40: - m = CD_DCB((pos >> 24) & 0xff); - s = CD_DCB((pos >> 16) & 0xff); - f = CD_DCB((pos >> 8) & 0xff); + m = bcd2bin((pos >> 24) & 0xff); + s = bcd2bin((pos >> 16) & 0xff); + f = bcd2bin((pos >> 8) & 0xff); pos = MSFtoLBA(m, s, f) - 150; + dev->cd_end = pos; + break; + case 0x80: + dev->cd_end = (pos >> 24) & 0xff; break; case 0xc0: if (pos == 0xffffffff) { cdrom_log("CD-ROM %i: Playing from current position\n", dev->id); pos = dev->cd_end; } + dev->cd_end = pos; break; } + cdrom_log("Toshiba/NEC Play Audio: MSF = %06x, type = %02x, cdstatus = %02x\n", pos, type, dev->cd_status); + /* Unlike standard commands, if there's a data track on an Audio CD (mixed mode) the playback continues with the audio muted (Toshiba CD-ROM SCSI-2 manual reference). */ - dev->cd_end = pos; dev->cd_buflen = 0; dev->cd_status = CD_STATUS_PLAYING; return 1; } +uint8_t +cdrom_audio_scan(cdrom_t *dev, uint32_t pos, int type) +{ + int m = 0, s = 0, f = 0; + + if (dev->cd_status == CD_STATUS_DATA_ONLY) + return 0; + + cdrom_log("Audio Scan: MSF = %06x, type = %02x\n", pos, type); + switch (type) { + case 0x00: + if (pos == 0xffffffff) { + cdrom_log("CD-ROM %i: (type 0) Search from current position\n", dev->id); + pos = dev->seek_pos; + } + dev->seek_pos = pos; + break; + case 0x40: + m = bcd2bin((pos >> 24) & 0xff); + s = bcd2bin((pos >> 16) & 0xff); + f = bcd2bin((pos >> 8) & 0xff); + if (pos == 0xffffffff) { + cdrom_log("CD-ROM %i: (type 1) Search from current position\n", dev->id); + pos = dev->seek_pos; + } else + pos = MSFtoLBA(m, s, f) - 150; + + dev->seek_pos = pos; + break; + case 0x80: + dev->seek_pos = (pos >> 24) & 0xff; + break; + } + + /* Do this at this point, since it's at this point that we know the + actual LBA position to start playing from. */ + if (!(dev->ops->track_type(dev, pos) & CD_TRACK_AUDIO)) { + cdrom_log("CD-ROM %i: LBA %08X not on an audio track\n", dev->id, pos); + cdrom_stop(dev); + return 0; + } + + dev->cd_buflen = 0; + return 1; +} + void cdrom_audio_pause_resume(cdrom_t *dev, uint8_t resume) { @@ -509,7 +716,6 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf) uint32_t dat; dev->ops->get_subchannel(dev, dev->seek_pos, &subc); - cdrom_log("CD-ROM %i: Returned subchannel at %02i:%02i.%02i\n", subc.abs_m, subc.abs_s, subc.abs_f); if (dev->cd_status == CD_STATUS_DATA_ONLY) ret = 0x15; @@ -522,8 +728,12 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf) ret = 0x13; } - if (b[pos] > 1) + cdrom_log("CD-ROM %i: Returned subchannel at %02i:%02i.%02i, ret = %02x, seek pos = %08x, cd_end = %08x.\n", dev->id, subc.abs_m, subc.abs_s, subc.abs_f, ret, dev->seek_pos, dev->cd_end); + + if (b[pos] > 1) { + cdrom_log("B[%i] = %02x, ret = %02x.\n", pos, b[pos], ret); return ret; + } b[pos++] = subc.attr; b[pos++] = subc.track; @@ -533,7 +743,7 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf) b[pos] = 0; /* NEC CDR-260 speaks BCD. */ - if ((dev->bus_type == CDROM_BUS_ATAPI) && dev->early) { + if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/ { m = subc.abs_m; s = subc.abs_s; f = subc.abs_f; @@ -552,7 +762,7 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf) b[pos] = 0; /* NEC CDR-260 speaks BCD. */ - if ((dev->bus_type == CDROM_BUS_ATAPI) && dev->early) { + if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/ { m = subc.rel_m; s = subc.rel_s; f = subc.rel_f; @@ -583,6 +793,78 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf) return ret; } +void +cdrom_get_current_subchannel_sony(cdrom_t *dev, uint8_t *b, int msf) +{ + subchannel_t subc; + int pos = 0, m, s, f; + uint32_t dat; + + dev->ops->get_subchannel(dev, dev->seek_pos, &subc); + + cdrom_log("CD-ROM %i: Returned subchannel at %02i:%02i.%02i, ret = %02x, seek pos = %08x, cd_end = %08x.\n", dev->id, subc.abs_m, subc.abs_s, subc.abs_f, ret, dev->seek_pos, dev->cd_end); + + b[pos++] = subc.attr; + b[pos++] = subc.track; + b[pos++] = subc.index; + + if (msf) { + b[pos++] = subc.rel_m; + b[pos++] = subc.rel_s; + b[pos++] = subc.rel_f; + b[pos++] = subc.abs_m; + b[pos++] = subc.abs_s; + b[pos++] = subc.abs_f; + } else { + dat = MSFtoLBA(subc.rel_m, subc.rel_s, subc.rel_f); + b[pos++] = (dat >> 16) & 0xff; + b[pos++] = (dat >> 8) & 0xff; + b[pos++] = dat & 0xff; + dat = MSFtoLBA(subc.abs_m, subc.abs_s, subc.abs_f) - 150; + b[pos++] = (dat >> 16) & 0xff; + b[pos++] = (dat >> 8) & 0xff; + b[pos++] = dat & 0xff; + } +} + + +uint8_t +cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, int msf) +{ + uint8_t ret; + subchannel_t subc; + int m, s, f; + uint32_t dat; + + dev->ops->get_subchannel(dev, dev->seek_pos, &subc); + + if (dev->cd_status == CD_STATUS_DATA_ONLY) + ret = 0x05; + else { + if (dev->cd_status == CD_STATUS_PLAYING) + ret = dev->sound_on ? 0x00 : 0x02; + else if (dev->cd_status == CD_STATUS_PAUSED) + ret = 0x01; + else + ret = 0x03; + } + + if (msf) { + b[0] = 0; + b[1] = subc.abs_m; + b[2] = subc.abs_s; + b[3] = subc.abs_f; + } else { + dat = MSFtoLBA(subc.abs_m, subc.abs_s, subc.abs_f) - 150; + b[0] = (dat >> 24) & 0xff; + b[1] = (dat >> 16) & 0xff; + b[2] = (dat >> 8) & 0xff; + b[3] = dat & 0xff; + } + + return ret; +} + uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b) { @@ -599,16 +881,14 @@ cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b) ret = (dev->cd_status == CD_STATUS_PLAYING) ? 0x00 : dev->audio_op; b[0] = subc.attr; - b[1] = CD_BCD(subc.track); - b[2] = CD_BCD(subc.index); - b[3] = CD_BCD(subc.rel_m); - b[4] = CD_BCD(subc.rel_s); - b[5] = CD_BCD(subc.rel_f); - b[6] = CD_BCD(subc.abs_m); - b[7] = CD_BCD(subc.abs_s); - b[8] = CD_BCD(subc.abs_f); - cdrom_log("CD-ROM %i: Returned subcode-q at %02i:%02i.%02i, track=%02x\n", dev->id, b[3], b[4], b[5], b[1]); - + b[1] = bin2bcd(subc.track); + b[2] = bin2bcd(subc.index); + b[3] = bin2bcd(subc.rel_m); + b[4] = bin2bcd(subc.rel_s); + b[5] = bin2bcd(subc.rel_f); + b[6] = bin2bcd(subc.abs_m); + b[7] = bin2bcd(subc.abs_s); + b[8] = bin2bcd(subc.abs_f); return ret; } @@ -670,7 +950,7 @@ read_toc_normal(cdrom_t *dev, unsigned char *b, unsigned char start_track, int m b[len++] = 0; /* NEC CDR-260 speaks BCD. */ - if ((dev->bus_type == CDROM_BUS_ATAPI) && dev->early) { + if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) { /*NEC*/ m = ti.m; s = ti.s; f = ti.f; @@ -720,7 +1000,7 @@ read_toc_session(cdrom_t *dev, unsigned char *b, int msf) b[len++] = 0; /* NEC CDR-260 speaks BCD. */ - if ((dev->bus_type == CDROM_BUS_ATAPI) && dev->early) { + if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) { /*NEC*/ m = ti.m; s = ti.s; f = ti.f; @@ -778,6 +1058,75 @@ read_toc_raw(cdrom_t *dev, unsigned char *b) return len; } +static int +read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf) +{ + track_info_t ti; + int i, len = 4; + int m, s, f; + int first_track, last_track; + uint32_t temp; + + cdrom_log("read_toc_sony(%08X, %08X, %02X, %i)\n", dev, b, start_track, msf); + + dev->ops->get_tracks(dev, &first_track, &last_track); + + /* Byte 2 = Number of the first track */ + dev->ops->get_track_info(dev, 1, 0, &ti); + b[2] = ti.number; + cdrom_log(" b[2] = %02X\n", b[2]); + + /* Byte 3 = Number of the last track before the lead-out track */ + dev->ops->get_track_info(dev, last_track, 0, &ti); + b[3] = ti.number; + cdrom_log(" b[3] = %02X\n", b[2]); + + if (start_track == 0x00) + first_track = 0; + else { + first_track = -1; + for (i = 0; i <= last_track; i++) { + dev->ops->get_track_info(dev, i + 1, 0, &ti); + if (ti.number >= start_track) { + first_track = i; + break; + } + } + } + cdrom_log(" first_track = %i, last_track = %i\n", first_track, last_track); + + /* No suitable starting track, return with error. */ + if (first_track == -1) { +#ifdef ENABLE_CDROM_LOG + cdrom_log(" [ERROR] No suitable track found\n"); +#endif + return -1; + } + + for (i = first_track; i <= last_track; i++) { + cdrom_log(" tracks(%i) = %02X, %02X, %i:%02i.%02i\n", i, ti.attr, ti.number, ti.m, ti.s, ti.f); + dev->ops->get_track_info(dev, i + 1, 0, &ti); + + b[len++] = ti.attr; + b[len++] = ti.number; /* track number */ + + if (msf) { + b[len++] = 0; + b[len++] = ti.m; + b[len++] = ti.s; + b[len++] = ti.f; + } else { + temp = MSFtoLBA(ti.m, ti.s, ti.f) - 150; + b[len++] = temp >> 24; + b[len++] = temp >> 16; + b[len++] = temp >> 8; + b[len++] = temp; + } + } + + return len; +} + int cdrom_read_toc(cdrom_t *dev, unsigned char *b, int type, unsigned char start_track, int msf, int max_len) { @@ -806,6 +1155,21 @@ cdrom_read_toc(cdrom_t *dev, unsigned char *b, int type, unsigned char start_tra return len; } +int +cdrom_read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf, int max_len) +{ + int len; + + len = read_toc_sony(dev, b, start_track, msf); + + len = MIN(len, max_len); + + b[0] = (uint8_t) (((len - 2) >> 8) & 0xff); + b[1] = (uint8_t) ((len - 2) & 0xff); + + return len; +} + /* New API calls for Mitsumi CD-ROM. */ void cdrom_get_track_buffer(cdrom_t *dev, uint8_t *buf) @@ -841,7 +1205,7 @@ cdrom_get_q(cdrom_t *dev, uint8_t *buf, int *curtoctrk, uint8_t mode) dev->ops->get_track_info(dev, *curtoctrk, 0, &ti); buf[0] = (ti.attr << 4) & 0xf0; buf[1] = ti.number; - buf[2] = CD_BCD(*curtoctrk + 1); + buf[2] = bin2bcd(*curtoctrk + 1); buf[3] = ti.m; buf[4] = ti.s; buf[5] = ti.f; @@ -888,36 +1252,50 @@ cdrom_mitsumi_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len) return 1; } -void +uint8_t cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, int type) { track_info_t ti; int first_track, last_track; + int m = 0, s = 0, f = 0; dev->ops->get_tracks(dev, &first_track, &last_track); - cdrom_log("Read DISC Info TOC Type = %d.\n", type); + cdrom_log("Read DISC Info TOC Type = %d, track = %d, first_track = %d, last_track = %d.\n", type, track, first_track, last_track); switch (type) { case 0: - b[0] = CD_BCD(first_track); - b[1] = CD_BCD(last_track); + b[0] = bin2bcd(first_track); + b[1] = bin2bcd(last_track); b[2] = 0; b[3] = 0; + cdrom_log("CD-ROM %i: Returned Toshiba/NEC disc information (type 0) at %02i:%02i\n", dev->id, b[0], b[1]); break; case 1: - dev->ops->get_track_info(dev, 0xAA, 0, &ti); - b[0] = CD_BCD(ti.m); - b[1] = CD_BCD(ti.s); - b[2] = CD_BCD(ti.f); + dev->ops->get_track_info(dev, 0xaa, 0, &ti); + m = ti.m; + s = ti.s; + f = ti.f; + msf_to_bcd(&m, &s, &f); + b[0] = m; + b[1] = s; + b[2] = f; b[3] = 0; + cdrom_log("CD-ROM %i: Returned Toshiba/NEC disc information (type 1) at %02i:%02i.%02i, track=%d\n", dev->id, b[0], b[1], b[2], bcd2bin(track)); break; case 2: - dev->ops->get_track_info(dev, CD_DCB(track), 0, &ti); - b[0] = CD_BCD(ti.m); - b[1] = CD_BCD(ti.s); - b[2] = CD_BCD(ti.f); + if (track > bin2bcd(last_track)) + return 0; + + dev->ops->get_track_info(dev, bcd2bin(track), 0, &ti); + m = ti.m; + s = ti.s; + f = ti.f; + msf_to_bcd(&m, &s, &f); + b[0] = m; + b[1] = s; + b[2] = f; b[3] = ti.attr; - cdrom_log("CD-ROM %i: Returned Toshiba disc information at %02i:%02i.%02i, track=%d\n", dev->id, b[0], b[1], b[2], CD_DCB(track)); + cdrom_log("CD-ROM %i: Returned Toshiba/NEC disc information (type 2) at %02i:%02i.%02i, track=%d, m=%02i,s=%02i,f=%02i, tno=%02x.\n", dev->id, b[0], b[1], b[2], bcd2bin(track), m, s, f, ti.attr); break; case 3: b[0] = 0x00; /*TODO: correct it further, mark it as CD-Audio/CD-ROM disc for now*/ @@ -926,6 +1304,8 @@ cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, in b[3] = 0; break; } + + return 1; } static int @@ -1203,7 +1583,7 @@ read_mode2_xa_form2(cdrom_t *dev, int cdrom_sector_flags, uint32_t lba, uint32_t int cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, int cdrom_sector_type, - int cdrom_sector_flags, int *len) + int cdrom_sector_flags, int *len, uint8_t vendor_type) { uint8_t *b, *temp_b; uint32_t msf, lba; @@ -1224,8 +1604,23 @@ cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, int c lba = MSFtoLBA(m, s, f) - 150; msf = sector; } else { - lba = sector; - msf = cdrom_lba_to_msf_accurate(sector); + switch (vendor_type) { + case 0x00: + lba = sector; + msf = cdrom_lba_to_msf_accurate(sector); + break; + case 0x40: + m = bcd2bin((sector >> 24) & 0xff); + s = bcd2bin((sector >> 16) & 0xff); + f = bcd2bin((sector >> 8) & 0xff); + lba = MSFtoLBA(m, s, f) - 150; + msf = sector; + break; + case 0x80: + lba = bcd2bin((sector >> 24) & 0xff); + msf = sector; + break; + } } if (dev->ops->track_type) diff --git a/src/config.c b/src/config.c index 8e2b5c292..a552408c0 100644 --- a/src/config.c +++ b/src/config.c @@ -61,6 +61,7 @@ #include <86box/scsi.h> #include <86box/scsi_device.h> #include <86box/cdrom.h> +#include <86box/cdrom_interface.h> #include <86box/zip.h> #include <86box/mo.h> #include <86box/sound.h> @@ -904,6 +905,15 @@ load_storage_controllers(void) p = NULL; } + p = ini_section_get_string(cat, "cdrom_interface", NULL); + if (p != NULL) + cdrom_interface_current = cdrom_interface_get_from_internal_name(p); + + if (free_p) { + free(p); + p = NULL; + } + ide_ter_enabled = !!ini_section_get_int(cat, "ide_ter", 0); ide_qua_enabled = !!ini_section_get_int(cat, "ide_qua", 0); @@ -1321,8 +1331,13 @@ load_floppy_and_cdrom_drives(void) sprintf(temp, "cdrom_%02i_speed", c + 1); cdrom[c].speed = ini_section_get_int(cat, temp, 8); - sprintf(temp, "cdrom_%02i_early", c + 1); - cdrom[c].early = ini_section_get_int(cat, temp, 0); + + sprintf(temp, "cdrom_%02i_type", c + 1); + p = ini_section_get_string(cat, temp, (c == 1) ? "86BOX_CD-ROM_1.00" : "none"); + cdrom_set_type(c, cdrom_get_from_internal_name(p)); + if (cdrom_get_type(c) > KNOWN_CDROM_DRIVE_TYPES) + cdrom_set_type(c, KNOWN_CDROM_DRIVE_TYPES); + ini_section_delete_var(cat, temp); /* Default values, needed for proper operation of the Settings dialog. */ cdrom[c].ide_channel = cdrom[c].scsi_device_id = c + 2; @@ -2470,6 +2485,12 @@ save_storage_controllers(void) ini_section_set_string(cat, "hdc", hdc_get_internal_name(hdc_current)); + if (cdrom_interface_current == 0) + ini_section_delete_var(cat, "cdrom_interface"); + else + ini_section_set_string(cat, "cdrom_interface", + cdrom_interface_get_internal_name(cdrom_interface_current)); + if (ide_ter_enabled == 0) ini_section_delete_var(cat, "ide_ter"); else @@ -2717,17 +2738,25 @@ save_floppy_and_cdrom_drives(void) ini_section_set_int(cat, temp, cdrom[c].speed); } - sprintf(temp, "cdrom_%02i_early", c + 1); - if ((cdrom[c].bus_type == 0) || (cdrom[c].early == 0)) { + sprintf(temp, "cdrom_%02i_type", c + 1); + if ((cdrom[c].bus_type == 0) || (cdrom[c].bus_type == CDROM_BUS_MITSUMI)) { ini_section_delete_var(cat, temp); } else { - ini_section_set_int(cat, temp, cdrom[c].early); + ini_section_set_string(cat, temp, + cdrom_get_internal_name(cdrom_get_type(c))); } sprintf(temp, "cdrom_%02i_parameters", c + 1); if (cdrom[c].bus_type == 0) { ini_section_delete_var(cat, temp); - } else { + } else { /*In case one wants an ATAPI drive on SCSI and vice-versa.*/ + if (cdrom[c].bus_type == CDROM_BUS_ATAPI) { + if (cdrom_drive_types[cdrom_get_type(c)].bus_type == BUS_TYPE_SCSI) + cdrom[c].bus_type = CDROM_BUS_SCSI; + } else if (cdrom[c].bus_type == CDROM_BUS_SCSI) { + if (cdrom_drive_types[cdrom_get_type(c)].bus_type == BUS_TYPE_IDE) + cdrom[c].bus_type = CDROM_BUS_ATAPI; + } sprintf(tmp2, "%u, %s", cdrom[c].sound_on, hdd_bus_to_string(cdrom[c].bus_type, 1)); ini_section_set_string(cat, temp, tmp2); diff --git a/src/include/86box/cdrom.h b/src/include/86box/cdrom.h index f5bfc9026..ca7bcb2a1 100644 --- a/src/include/86box/cdrom.h +++ b/src/include/86box/cdrom.h @@ -60,6 +60,54 @@ enum { CDROM_BUS_USB }; +#define KNOWN_CDROM_DRIVE_TYPES 30 +#define BUS_TYPE_ALL 0 +#define BUS_TYPE_IDE 1 +#define BUS_TYPE_SCSI 2 + +static const struct +{ + const char vendor[9]; + const char model[17]; + const char revision[5]; + const char *name; + const char *internal_name; + const int bus_type; +} cdrom_drive_types[] = +{ + { "86BOX", "CD-ROM", "1.00", "(ATAPI/SCSI) 86BOX CD-ROM 1.00", "86BOX_CD-ROM_1.00", BUS_TYPE_ALL}, + { "AZT", "CDA46802I", "1.15", "(ATAPI) AZT CDA46802I 1.15", "AZT_CDA46802I_1.15", BUS_TYPE_IDE}, + { "BTC", "CD-ROM BCD36XH", "U1.0", "(ATAPI) BTC CD-ROM BCD36XH U1.0", "BTC_CD-ROM_BCD36XH_U1.0", BUS_TYPE_IDE}, + { "GOLDSTAR", "CRD-8160B", "3.14", "(ATAPI) GOLDSTAR CRD-8160B 3.14", "GOLDSTAR_CRD-8160B_3.14", BUS_TYPE_IDE}, + { "HITACHI", "CDR-8130", "0020", "(ATAPI) HITACHI CDR-8130 0020", "HITACHI_CDR-8130_0020", BUS_TYPE_IDE}, + { "KENWOOD", "CD-ROM UCR-421", "208E", "(ATAPI) KENWOOD CD-ROM UCR-421 208E", "KENWOOD_CD-ROM_UCR-421_208E", BUS_TYPE_IDE}, + { "MATSHITA", "CD-ROM CR-587", "7S13", "(ATAPI) MATSHITA CD-ROM CR-587 7S13", "MATSHITA_CD-ROM_CR-587_7S13", BUS_TYPE_IDE}, + { "MATSHITA", "CD-ROM CR-588", "LS15", "(ATAPI) MATSHITA CD-ROM CR-588 LS15", "MATSHITA_CD-ROM_CR-588_LS15", BUS_TYPE_IDE}, + { "MITSUMI", "CRMC-FX4820T", "D02A", "(ATAPI) MITSUMI CRMC-FX4820T D02A", "MITSUMI_CRMC-FX4820T_D02A", BUS_TYPE_IDE}, + { "NEC", "CD-ROM DRIVE:260", "1.00", "(ATAPI) NEC CD-ROM DRIVE:260 1.00", "NEC_CD-ROM_DRIVE260_1.00", BUS_TYPE_IDE}, + { "NEC", "CD-ROM DRIVE:260", "1.01", "(ATAPI) NEC CD-ROM DRIVE:260 1.01", "NEC_CD-ROM_DRIVE260_1.01", BUS_TYPE_IDE}, + { "NEC", "CDR-1300A", "1.05", "(ATAPI) NEC CDR-1300A 1.05", "NEC_CDR-1300A_1.05", BUS_TYPE_IDE}, + { "PHILIPS", "CD-ROM PCA403CD", "U31P", "(ATAPI) PHILIPS CD-ROM PCA403CD U31P", "PHILIPS_CD-ROM_PCA403CD_U31P", BUS_TYPE_IDE}, + { "SONY", "CD-ROM CDU76", "1.0i", "(ATAPI) SONY CD-ROM CDU76 1.0i", "SONY_CD-ROM_CDU76_1.0i", BUS_TYPE_IDE}, + { "SONY", "CD-ROM CDU311", "3.0h", "(ATAPI) SONY CD-ROM CDU311 3.0h", "SONY_CD-ROM_CDU311_3.0h", BUS_TYPE_IDE}, + { "TOSHIBA", "CD-ROM XM-5702B", "TA70", "(ATAPI) TOSHIBA CD-ROM XM-5702B TA70", "TOSHIBA_CD-ROM_XM-5702B_TA70", BUS_TYPE_IDE}, + { "CHINON", "CD-ROM CDS-431", "H42 ", "(SCSI) CHINON CD-ROM CDS-431 H42", "CHINON_CD-ROM_CDS-431_H42", BUS_TYPE_SCSI}, + { "DEC", "RRD45 (C) DEC", "0436", "(SCSI) DEC RRD45 0436", "DEC_RRD45_0436", BUS_TYPE_SCSI}, + { "MATSHITA", "CD-ROM CR-501", "1.0b", "(SCSI) MATSHITA CD-ROM CR-501 1.0b", "MATSHITA_CD-ROM_CR-501_1.0b", BUS_TYPE_SCSI}, + { "NEC", "CD-ROM DRIVE:74", "1.00", "(SCSI) NEC CD-ROM DRIVE:74 1.00", "NEC_CD-ROM_DRIVE74_1.00", BUS_TYPE_SCSI}, + { "NEC", "CD-ROM DRIVE:464", "1.05", "(SCSI) NEC CD-ROM DRIVE:464 1.05", "NEC_CD-ROM_DRIVE464_1.05", BUS_TYPE_SCSI}, + { "SONY", "CD-ROM CDU-541", "1.0i", "(SCSI) SONY CD-ROM CDU-541 1.0i", "SONY_CD-ROM_CDU-541_1.0i", BUS_TYPE_SCSI}, + { "SONY", "CD-ROM CDU-76S", "1.00", "(SCSI) SONY CD-ROM CDU-76S 1.00", "SONY_CD-ROM_CDU-76S_1.00", BUS_TYPE_SCSI}, + { "PHILIPS", "CDD2600", "1.07", "(SCSI) PHILIPS CDD2600 1.07", "PHILIPS_CDD2600_1.07", BUS_TYPE_SCSI}, + { "PIONEER", "CD-ROM DRM-604X", "2403", "(SCSI) PIONEER CD-ROM DRM-604X 2403", "PIONEER_CD-ROM_DRM-604X_2403", BUS_TYPE_SCSI}, + { "PLEXTOR", "CD-ROM PX-32TS", "1.03", "(SCSI) PLEXTOR CD-ROM PX-32TS 1.03", "PLEXTOR_CD-ROM_PX-32TS_1.03", BUS_TYPE_SCSI}, + { "TEAC", "CD-R55S", "1.0R", "(SCSI) TEAC CD-R55S 1.0R", "TEAC_CD-R55S_1.0R", BUS_TYPE_SCSI}, + { "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "(SCSI) TOSHIBA CD-ROM DRIVE:XM 3433", "TOSHIBA_CD-ROM_DRIVEXM_3433", BUS_TYPE_SCSI}, + { "TOSHIBA", "CD-ROM XM-3301TA", "0272", "(SCSI) TOSHIBA CD-ROM XM-3301TA 0272", "TOSHIBA_CD-ROM_XM-3301TA_0272", BUS_TYPE_SCSI}, + { "TOSHIBA", "CD-ROM XM-5701TA", "3136", "(SCSI) TOSHIBA CD-ROM XM-5701TA 3136", "TOSHIBA_CD-ROM_XM-5701TA_3136", BUS_TYPE_SCSI}, + { "", "", "", "", "", -1}, +}; + /* To shut up the GCC compilers. */ struct cdrom; @@ -113,7 +161,7 @@ typedef struct cdrom { uint32_t sound_on, cdrom_capacity, early, seek_pos, - seek_diff, cd_end; + seek_diff, cd_end, type; int host_drive, prev_host_drive, cd_buflen, audio_op; @@ -132,6 +180,13 @@ typedef struct cdrom { extern cdrom_t cdrom[CDROM_NUM]; +extern char *cdrom_getname(int type); + +extern char *cdrom_get_internal_name(int type); +extern int cdrom_get_from_internal_name(char *s); +extern void cdrom_set_type(int model, int type); +extern int cdrom_get_type(int model); + extern int cdrom_lba_to_msf_accurate(int lba); extern double cdrom_seek_time(cdrom_t *dev); extern void cdrom_stop(cdrom_t *dev); @@ -139,20 +194,24 @@ extern int cdrom_is_pre(cdrom_t *dev, uint32_t lba); extern int cdrom_audio_callback(cdrom_t *dev, int16_t *output, int len); extern uint8_t cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf); extern uint8_t cdrom_audio_track_search(cdrom_t *dev, uint32_t pos, int type, uint8_t playbit); -extern uint8_t cdrom_toshiba_audio_play(cdrom_t *dev, uint32_t pos, int type); +extern uint8_t cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type); extern void cdrom_audio_pause_resume(cdrom_t *dev, uint8_t resume); +extern uint8_t cdrom_audio_scan(cdrom_t *dev, uint32_t pos, int type); +extern uint8_t cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, int msf); extern uint8_t cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf); +extern void cdrom_get_current_subchannel_sony(cdrom_t *dev, uint8_t *b, int msf); extern uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b); extern int cdrom_read_toc(cdrom_t *dev, unsigned char *b, int type, unsigned char start_track, int msf, int max_len); +extern int cdrom_read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf, int max_len); extern void cdrom_get_track_buffer(cdrom_t *dev, uint8_t *buf); extern void cdrom_get_q(cdrom_t *dev, uint8_t *buf, int *curtoctrk, uint8_t mode); extern uint8_t cdrom_mitsumi_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len); extern int cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, - int cdrom_sector_type, int cdrom_sector_flags, int *len); -extern void cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, int type); + int cdrom_sector_type, int cdrom_sector_flags, int *len, uint8_t vendor_type); +extern uint8_t cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, int type); -extern void cdrom_seek(cdrom_t *dev, uint32_t pos); +extern void cdrom_seek(cdrom_t *dev, uint32_t pos, uint8_t vendor_type); extern void cdrom_close_handler(uint8_t id); extern void cdrom_insert(uint8_t id); diff --git a/src/include/86box/cdrom_interface.h b/src/include/86box/cdrom_interface.h new file mode 100644 index 000000000..860a436e0 --- /dev/null +++ b/src/include/86box/cdrom_interface.h @@ -0,0 +1,31 @@ +/* + * 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 common CD-ROM interface controller handler. + * + * + * + * Authors: TheCollector1995 + * + * Copyright 2022 TheCollector1995. + */ +#ifndef EMU_CDROM_INTERFACE_H +#define EMU_CDROM_INTERFACE_H + +extern int cdrom_interface_current; + +extern void cdrom_interface_reset(void); + +extern char *cdrom_interface_get_internal_name(int cdinterface); +extern int cdrom_interface_get_from_internal_name(char *s); +extern int cdrom_interface_has_config(int cdinterface); +extern const device_t *cdrom_interface_get_device(int cdinterface); +extern int cdrom_interface_get_flags(int cdinterface); +extern int cdrom_interface_available(int cdinterface); + +#endif /*EMU_CDROM_INTERFACE_H*/ diff --git a/src/include/86box/scsi_cdrom.h b/src/include/86box/scsi_cdrom.h index e991ccc36..42d4412d1 100644 --- a/src/include/86box/scsi_cdrom.h +++ b/src/include/86box/scsi_cdrom.h @@ -49,6 +49,10 @@ typedef struct { packet_len, pos; double callback; + + mode_sense_pages_t ms_pages_saved_sony; + mode_sense_pages_t ms_drive_status_pages_saved; + int sony_vendor; } scsi_cdrom_t; #endif diff --git a/src/include/86box/scsi_device.h b/src/include/86box/scsi_device.h index 650215cb5..8cb2f3877 100644 --- a/src/include/86box/scsi_device.h +++ b/src/include/86box/scsi_device.h @@ -53,6 +53,8 @@ #define GPCMD_SEEK_6 0x0b #define GPCMD_IOMEGA_SET_PROTECTION_MODE 0x0c #define GPCMD_IOMEGA_EJECT 0x0d /* ATAPI only? */ +#define GPCMD_NO_OPERATION_TOSHIBA 0x0d /* Toshiba Vendor Unique command */ +#define GPCMD_NO_OPERATION_NEC 0x0d /* NEC Vendor Unique command */ #define GPCMD_INQUIRY 0x12 #define GPCMD_VERIFY_6 0x13 #define GPCMD_MODE_SELECT_6 0x15 @@ -64,7 +66,7 @@ #define GPCMD_PREVENT_REMOVAL 0x1e #define GPCMD_READ_FORMAT_CAPACITIES 0x23 #define GPCMD_READ_CDROM_CAPACITY 0x25 -#define GPCMD_CHINON_UNKNOWN 0x26 +#define GPCMD_UNKNOWN_CHINON 0x26 /*Chinon Vendor Unique command*/ #define GPCMD_READ_10 0x28 #define GPCMD_READ_GENERATION 0x29 #define GPCMD_WRITE_10 0x2a @@ -100,23 +102,51 @@ #define GPCMD_PLAY_CD_OLD 0xb4 #define GPCMD_READ_CD_OLD 0xb8 #define GPCMD_READ_CD_MSF 0xb9 -#define GPCMD_SCAN 0xba +#define GPCMD_AUDIO_SCAN 0xba #define GPCMD_SET_SPEED 0xbb #define GPCMD_PLAY_CD 0xbc #define GPCMD_MECHANISM_STATUS 0xbd #define GPCMD_READ_CD 0xbe #define GPCMD_SEND_DVD_STRUCTURE 0xbf /* This is for writing only, irrelevant to 86Box. */ -#define GPCMD_CHINON_EJECT 0xc0 /* Chinon Vendor Unique command */ -#define GPCMD_AUDIO_TRACK_SEARCH 0xc0 /* Toshiba Vendor Unique command */ -#define GPCMD_TOSHIBA_PLAY_AUDIO 0xc1 /* Toshiba Vendor Unique command */ +#define GPCMD_EJECT_CHINON 0xc0 /* Chinon Vendor Unique command */ +#define GPCMD_AUDIO_TRACK_SEARCH_TOSHIBA 0xc0 /* Toshiba Vendor Unique command */ +#define GPCMD_UNKNOWN_SONY 0xc0 /* Sony Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_TOSHIBA 0xc1 /* Toshiba Vendor Unique command */ +#define GPCMD_READ_TOC_SONY 0xc1 /* Sony Vendor Unique command */ #define GPCMD_PAUSE_RESUME_ALT 0xc2 -#define GPCMD_STILL 0xc2 /* Toshiba Vendor Unique command */ -#define GPCMD_CADDY_EJECT 0xc4 /* Toshiba Vendor Unique command */ -#define GPCMD_CHINON_STOP 0xc6 /* Chinon Vendor Unique command */ -#define GPCMD_READ_SUBCODEQ_PLAYING_STATUS 0xc6 /* Toshiba Vendor Unique command */ +#define GPCMD_READ_SUBCHANNEL_MATSUSHITA 0xc2 /* Matsushita Vendor Unique command */ +#define GPCMD_READ_SUBCHANNEL_SONY 0xc2 /* Sony Vendor Unique command */ +#define GPCMD_STILL_TOSHIBA 0xc2 /* Toshiba Vendor Unique command */ +#define GPCMD_READ_TOC_MATSUSHITA 0xc3 /* Matsushita Vendor Unique command */ +#define GPCMD_READ_HEADER_SONY 0xc3 /* Sony Vendor Unique command */ +#define GPCMD_SET_STOP_TIME_TOSHIBA 0xc3 /* Toshiba Vendor Unique command */ +#define GPCMD_READ_HEADER_MATSUSHITA 0xc4 /* Matsushita Vendor Unique command */ +#define GPCMD_PLAYBACK_STATUS_TOSHIBA 0xc4 /* Sony Vendor Unique command */ +#define GPCMD_CADDY_EJECT_TOSHIBA 0xc4 /* Toshiba Vendor Unique command */ +#define GPCMD_PAUSE_SONY 0xc5 /* Sony Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_MATSUSHITA 0xc5 /* Matsushita Vendor Unique command */ +#define GPCMD_STOP_CHINON 0xc6 /* Chinon Vendor Unique command */ +#define GPCMD_PLAT_TRACK_SONY 0xc6 /* Sony Vendor Unique command */ +#define GPCMD_READ_SUBCODEQ_PLAYING_STATUS_TOSHIBA 0xc6 /* Toshiba Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_MSF_MATSUSHITA 0xc7 /* Matsushita Vendor Unique command*/ +#define GPCMD_PLAY_MSF_SONY 0xc7 /* Sony Vendor Unique command*/ #define GPCMD_READ_DISC_INFORMATION_TOSHIBA 0xc7 /* Toshiba Vendor Unique command */ -#define GPCMD_SCAN_ALT 0xcd /* Should be equivalent to 0xba */ +#define GPCMD_PLAY_AUDIO_TRACK_INDEX_MATSUSHITA 0xc8 /* Matsushita Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_SONY 0xc8 /* Sony Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_TRACK_RELATIVE_10_MATSUSHITA 0xc9 /*Matsushita Vendor Unique command */ +#define GPCMD_PLAYBACK_CONTROL_SONY 0xc9 /* Sony Vendor Unique command */ +#define GPCMD_PAUSE_RESUME_MATSUSHITA 0xcb /* Matsushita Vendor Unique command */ +#define GPCMD_SCAN_PIONEER 0xcd /* Should be equivalent to 0xba */ +#define GPCMD_AUDIO_TRACK_SEARCH_NEC 0xd8 /* NEC Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_NEC 0xd9 /* NEC Vendor Unique command */ +#define GPCMD_STILL_NEC 0xda /* NEC Vendor Unique command */ #define GPCMD_SET_SPEED_ALT 0xda /* Should be equivalent to 0xbb */ +#define GPCMD_SET_STOP_TIME_NEC 0xdb /* NEC Vendor Unique command */ +#define GPCMD_CADDY_EJECT_NEC 0xdc /* NEC Vendor Unique command */ +#define GPCMD_READ_SUBCODEQ_PLAYING_STATUS_NEC 0xdd /* NEC Vendor Unique command */ +#define GPCMD_READ_DISC_INFORMATION_NEC 0xde /* NEC Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_12_MATSUSHITA 0xe5 /* Matsushita Vendor Unique command */ +#define GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12_MATSUSHITA 0xe9 /* Matsushita Vendor Unique command */ /* Mode page codes for mode sense/set */ #define GPMODE_R_W_ERROR_PAGE 0x01 @@ -125,6 +155,8 @@ #define GPMODE_RIGID_DISK_PAGE 0x04 /* Rigid disk geometry page */ #define GPMODE_FLEXIBLE_DISK_PAGE 0x05 #define GPMODE_CACHING_PAGE 0x08 +#define GPMODE_CDROM_PAGE_SONY 0x08 +#define GPMODE_CDROM_AUDIO_PAGE_SONY 0x09 #define GPMODE_CDROM_PAGE 0x0d #define GPMODE_CDROM_AUDIO_PAGE 0x0e #define GPMODE_CAPABILITIES_PAGE 0x2a @@ -139,6 +171,8 @@ #define GPMODEP_RIGID_DISK_PAGE 0x0000000000000010LL #define GPMODEP_FLEXIBLE_DISK_PAGE 0x0000000000000020LL #define GPMODEP_CACHING_PAGE 0x0000000000000100LL +#define GPMODEP_CDROM_PAGE_SONY 0x0000000000000200LL +#define GPMODEP_CDROM_AUDIO_PAGE_SONY 0x0000000000000400LL #define GPMODEP_CDROM_PAGE 0x0000000000002000LL #define GPMODEP_CDROM_AUDIO_PAGE 0x0000000000004000LL #define GPMODEP_CAPABILITIES_PAGE 0x0000040000000000LL diff --git a/src/qt/qt_harddrive_common.cpp b/src/qt/qt_harddrive_common.cpp index 7d3beaa2b..2b415f6f4 100644 --- a/src/qt/qt_harddrive_common.cpp +++ b/src/qt/qt_harddrive_common.cpp @@ -20,6 +20,7 @@ extern "C" { #include <86box/hdd.h> +#include <86box/cdrom.h> } #include @@ -48,14 +49,16 @@ void Harddrives::populateRemovableBuses(QAbstractItemModel *model) { model->removeRows(0, model->rowCount()); - model->insertRows(0, 3); + model->insertRows(0, 4); model->setData(model->index(0, 0), QObject::tr("Disabled")); model->setData(model->index(1, 0), QObject::tr("ATAPI")); model->setData(model->index(2, 0), QObject::tr("SCSI")); + model->setData(model->index(3, 0), QObject::tr("Mitsumi")); model->setData(model->index(0, 0), HDD_BUS_DISABLED, Qt::UserRole); model->setData(model->index(1, 0), HDD_BUS_ATAPI, Qt::UserRole); model->setData(model->index(2, 0), HDD_BUS_SCSI, Qt::UserRole); + model->setData(model->index(3, 0), CDROM_BUS_MITSUMI, Qt::UserRole); } void @@ -143,6 +146,9 @@ Harddrives::BusChannelName(uint8_t bus, uint8_t channel) case HDD_BUS_SCSI: busName = QString("SCSI (%1:%2)").arg(channel >> 4).arg(channel & 15, 2, 10, QChar('0')); break; + case CDROM_BUS_MITSUMI: + busName = QString("Mitsumi"); + break; } return busName; diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 23df27150..d095eadb7 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -29,6 +29,7 @@ extern uint64_t tsc; #include <86box/cartridge.h> #include <86box/cassette.h> #include <86box/cdrom.h> +#include <86box/cdrom_interface.h> #include <86box/fdd.h> #include <86box/hdc.h> #include <86box/scsi.h> @@ -300,6 +301,8 @@ MachineStatus::iterateCDROM(const std::function &cb) continue; if ((cdrom[i].bus_type == CDROM_BUS_SCSI) && !hasSCSI() && (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) continue; + if ((cdrom[i].bus_type == CDROM_BUS_MITSUMI) && (cdrom_interface_current == 0)) + continue; if (cdrom[i].bus_type != 0) { cb(i); } diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index e0c145981..f6f091bdc 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -593,6 +593,9 @@ MediaMenu::cdromUpdateMenu(int i) case CDROM_BUS_SCSI: busName = "SCSI"; break; + case CDROM_BUS_MITSUMI: + busName = "Mitsumi"; + break; } // menu->setTitle(tr("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 2eabe80ab..751bb829a 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -20,6 +20,15 @@ #include "ui_qt_settingsfloppycdrom.h" extern "C" { +#include +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> #include <86box/timer.h> #include <86box/fdd.h> #include <86box/cdrom.h> @@ -59,6 +68,7 @@ setCDROMBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint break; case CDROM_BUS_ATAPI: case CDROM_BUS_SCSI: + case CDROM_BUS_MITSUMI: icon = ProgSettings::loadIcon("/cdrom.ico"); break; } @@ -88,6 +98,18 @@ setCDROMEarly(QAbstractItemModel *model, const QModelIndex &idx, bool early) model->setData(i, early, Qt::UserRole); } +static void +setCDROMType(QAbstractItemModel *model, const QModelIndex &idx, int type) +{ + auto i = idx.siblingAtColumn(2); + if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == CDROM_BUS_DISABLED) { + model->setData(i, QCoreApplication::translate("", "None")); + } else if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() != CDROM_BUS_MITSUMI) { + model->setData(i, QObject::tr(cdrom_getname(type))); + } + model->setData(i, type, Qt::UserRole); +} + SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : QWidget(parent) , ui(new Ui::SettingsFloppyCDROM) @@ -134,18 +156,36 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) Models::AddEntry(model, QString("%1x").arg(i + 1), i + 1); } + model = ui->comboBoxCDROMType->model(); + i = 0; + while (true) { + QString name = tr(cdrom_getname(i)); + if (name.isEmpty()) { + break; + } + + Models::AddEntry(model, name, i); + ++i; + } + model = new QStandardItemModel(0, 3, this); ui->tableViewCDROM->setModel(model); model->setHeaderData(0, Qt::Horizontal, tr("Bus")); model->setHeaderData(1, Qt::Horizontal, tr("Speed")); - model->setHeaderData(2, Qt::Horizontal, tr("Earlier drive")); + model->setHeaderData(2, Qt::Horizontal, tr("Type")); model->insertRows(0, CDROM_NUM); for (int i = 0; i < CDROM_NUM; i++) { auto idx = model->index(i, 0); + int type = cdrom_get_type(i); setCDROMBus(model, idx, cdrom[i].bus_type, cdrom[i].res); setCDROMSpeed(model, idx.siblingAtColumn(1), cdrom[i].speed); - setCDROMEarly(model, idx.siblingAtColumn(2), cdrom[i].early); - Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, cdrom[i].bus_type == CDROM_BUS_ATAPI ? cdrom[i].ide_channel : cdrom[i].scsi_device_id); + setCDROMType(model, idx.siblingAtColumn(2), type); + if (cdrom[i].bus_type == CDROM_BUS_ATAPI) + Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, cdrom[i].ide_channel); + else if (cdrom[i].bus_type == CDROM_BUS_SCSI) + Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, cdrom[i].scsi_device_id); + else if (cdrom[i].bus_type == CDROM_BUS_MITSUMI) + Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, 0); } ui->tableViewCDROM->resizeColumnsToContents(); ui->tableViewCDROM->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); @@ -172,18 +212,18 @@ SettingsFloppyCDROM::save() /* Removable devices category */ model = ui->tableViewCDROM->model(); for (int i = 0; i < CDROM_NUM; i++) { - cdrom[i].is_dir = 0; - cdrom[i].priv = NULL; - cdrom[i].ops = NULL; - cdrom[i].image = NULL; - cdrom[i].insert = NULL; - cdrom[i].close = NULL; - cdrom[i].get_volume = NULL; + cdrom[i].is_dir = 0; + cdrom[i].priv = NULL; + cdrom[i].ops = NULL; + cdrom[i].image = NULL; + cdrom[i].insert = NULL; + cdrom[i].close = NULL; + cdrom[i].get_volume = NULL; cdrom[i].get_channel = NULL; - cdrom[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); - cdrom[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); - cdrom[i].speed = model->index(i, 1).data(Qt::UserRole).toUInt(); - cdrom[i].early = model->index(i, 2).data(Qt::UserRole).toUInt(); + cdrom[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); + cdrom[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); + cdrom[i].speed = model->index(i, 1).data(Qt::UserRole).toUInt(); + cdrom_set_type(i, model->index(i, 2).data(Qt::UserRole).toInt()); } } @@ -202,12 +242,12 @@ SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) uint8_t bus = current.siblingAtColumn(0).data(Qt::UserRole).toUInt(); uint8_t channel = current.siblingAtColumn(0).data(Qt::UserRole + 1).toUInt(); uint8_t speed = current.siblingAtColumn(1).data(Qt::UserRole).toUInt(); - bool early = current.siblingAtColumn(2).data(Qt::UserRole).toBool(); + int type = current.siblingAtColumn(2).data(Qt::UserRole).toInt(); ui->comboBoxBus->setCurrentIndex(-1); - auto *model = ui->comboBoxBus->model(); - auto match = model->match(model->index(0, 0), Qt::UserRole, bus); - if (!match.isEmpty()) { + auto* model = ui->comboBoxBus->model(); + auto match = model->match(model->index(0, 0), Qt::UserRole, bus); + if (! match.isEmpty()) { ui->comboBoxBus->setCurrentIndex(match.first().row()); } @@ -218,7 +258,7 @@ SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) } ui->comboBoxSpeed->setCurrentIndex(speed == 0 ? 7 : speed - 1); - ui->checkBoxEarlierDrive->setChecked(early); + ui->comboBoxCDROMType->setCurrentIndex(type); } void @@ -250,9 +290,10 @@ SettingsFloppyCDROM::on_comboBoxBus_currentIndexChanged(int index) int bus = ui->comboBoxBus->currentData().toInt(); bool enabled = (bus != CDROM_BUS_DISABLED); - ui->comboBoxChannel->setEnabled(enabled); - ui->comboBoxSpeed->setEnabled(enabled); - ui->checkBoxEarlierDrive->setEnabled(enabled); + ui->comboBoxChannel->setEnabled((bus == CDROM_BUS_MITSUMI) ? 0 : enabled); + ui->comboBoxSpeed->setEnabled((bus == CDROM_BUS_MITSUMI) ? 0 : enabled); + ui->comboBoxCDROMType->setEnabled((bus == CDROM_BUS_MITSUMI) ? 0 : enabled); + Harddrives::populateBusChannels(ui->comboBoxChannel->model(), bus); } @@ -266,14 +307,26 @@ SettingsFloppyCDROM::on_comboBoxSpeed_activated(int index) void SettingsFloppyCDROM::on_comboBoxBus_activated(int) { - auto i = ui->tableViewCDROM->selectionModel()->currentIndex().siblingAtColumn(0); + auto i = ui->tableViewCDROM->selectionModel()->currentIndex().siblingAtColumn(0); + uint8_t bus_type = ui->comboBoxBus->currentData().toUInt(); + Harddrives::busTrackClass->device_track(0, DEV_CDROM, ui->tableViewCDROM->model()->data(i, Qt::UserRole).toInt(), ui->tableViewCDROM->model()->data(i, Qt::UserRole + 1).toInt()); - ui->comboBoxChannel->setCurrentIndex(ui->comboBoxBus->currentData().toUInt() == CDROM_BUS_ATAPI ? Harddrives::busTrackClass->next_free_ide_channel() : Harddrives::busTrackClass->next_free_scsi_id()); + if (bus_type == CDROM_BUS_ATAPI) + ui->comboBoxChannel->setCurrentIndex(Harddrives::busTrackClass->next_free_ide_channel()); + else if (bus_type == CDROM_BUS_SCSI) + ui->comboBoxChannel->setCurrentIndex(Harddrives::busTrackClass->next_free_scsi_id()); + else if (bus_type == CDROM_BUS_MITSUMI) + ui->comboBoxChannel->setCurrentIndex(0); + setCDROMBus( ui->tableViewCDROM->model(), ui->tableViewCDROM->selectionModel()->currentIndex(), - ui->comboBoxBus->currentData().toUInt(), + bus_type, ui->comboBoxChannel->currentData().toUInt()); + setCDROMType( + ui->tableViewCDROM->model(), + ui->tableViewCDROM->selectionModel()->currentIndex(), + ui->comboBoxCDROMType->currentData().toUInt()); Harddrives::busTrackClass->device_track(1, DEV_CDROM, ui->tableViewCDROM->model()->data(i, Qt::UserRole).toInt(), ui->tableViewCDROM->model()->data(i, Qt::UserRole + 1).toInt()); } @@ -291,8 +344,12 @@ SettingsFloppyCDROM::on_comboBoxChannel_activated(int) } void -SettingsFloppyCDROM::on_checkBoxEarlierDrive_stateChanged(int arg1) +SettingsFloppyCDROM::on_comboBoxCDROMType_activated(int) { - auto idx = ui->tableViewCDROM->selectionModel()->currentIndex(); - setCDROMEarly(ui->tableViewCDROM->model(), idx.siblingAtColumn(2), (arg1 == Qt::Checked) ? true : false); + setCDROMType( + ui->tableViewCDROM->model(), + ui->tableViewCDROM->selectionModel()->currentIndex(), + ui->comboBoxCDROMType->currentData().toUInt()); + ui->tableViewCDROM->resizeColumnsToContents(); + ui->tableViewCDROM->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); } diff --git a/src/qt/qt_settingsfloppycdrom.hpp b/src/qt/qt_settingsfloppycdrom.hpp index 5c2920199..3d6dd0e45 100644 --- a/src/qt/qt_settingsfloppycdrom.hpp +++ b/src/qt/qt_settingsfloppycdrom.hpp @@ -17,6 +17,7 @@ public: void save(); private slots: + void on_comboBoxCDROMType_activated(int index); void on_comboBoxChannel_activated(int index); void on_comboBoxBus_activated(int index); void on_comboBoxSpeed_activated(int index); @@ -27,8 +28,6 @@ private slots: void onFloppyRowChanged(const QModelIndex ¤t); void onCDROMRowChanged(const QModelIndex ¤t); - void on_checkBoxEarlierDrive_stateChanged(int arg1); - private: Ui::SettingsFloppyCDROM *ui; }; diff --git a/src/qt/qt_settingsfloppycdrom.ui b/src/qt/qt_settingsfloppycdrom.ui index 6233e9e7b..30be29153 100644 --- a/src/qt/qt_settingsfloppycdrom.ui +++ b/src/qt/qt_settingsfloppycdrom.ui @@ -115,16 +115,20 @@ + + + + Bus: + + + - + Channel: - - - @@ -132,25 +136,24 @@ - - + + - Bus: + Type: + + + - - - - Earlier drive - - + + diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index 2aecab568..ac406853c 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -25,6 +25,7 @@ extern "C" { #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/fdc_ext.h> +#include <86box/cdrom_interface.h> #include <86box/scsi.h> #include <86box/scsi_device.h> #include <86box/cassette.h> @@ -57,11 +58,12 @@ SettingsStorageControllers::save() auto *cbox = findChild(QString("comboBoxSCSI%1").arg(i + 1)); scsi_card_current[i] = cbox->currentData().toInt(); } - hdc_current = ui->comboBoxHD->currentData().toInt(); - fdc_type = ui->comboBoxFD->currentData().toInt(); - ide_ter_enabled = ui->checkBoxTertiaryIDE->isChecked() ? 1 : 0; - ide_qua_enabled = ui->checkBoxQuaternaryIDE->isChecked() ? 1 : 0; - cassette_enable = ui->checkBoxCassette->isChecked() ? 1 : 0; + hdc_current = ui->comboBoxHD->currentData().toInt(); + fdc_type = ui->comboBoxFD->currentData().toInt(); + cdrom_interface_current = ui->comboBoxCDInterface->currentData().toInt(); + ide_ter_enabled = ui->checkBoxTertiaryIDE->isChecked() ? 1 : 0; + ide_qua_enabled = ui->checkBoxQuaternaryIDE->isChecked() ? 1 : 0; + cassette_enable = ui->checkBoxCassette->isChecked() ? 1 : 0; } void @@ -131,6 +133,35 @@ SettingsStorageControllers::onCurrentMachineChanged(int machineId) ui->comboBoxFD->setCurrentIndex(-1); ui->comboBoxFD->setCurrentIndex(selectedRow); + /*CD interface controller config*/ + model = ui->comboBoxCDInterface->model(); + removeRows = model->rowCount(); + c = 0; + selectedRow = 0; + while (true) { + /* Skip "internal" if machine doesn't have it. */ + QString name = DeviceConfig::DeviceName(cdrom_interface_get_device(c), cdrom_interface_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (cdrom_interface_available(c)) { + auto *cdrom_interface_dev = cdrom_interface_get_device(c); + + if (device_is_valid(cdrom_interface_dev, machineId)) { + int row = Models::AddEntry(model, name, c); + if (c == cdrom_interface_current) { + selectedRow = row - removeRows; + } + } + } + c++; + } + model->removeRows(0, removeRows); + ui->comboBoxCDInterface->setEnabled(model->rowCount() > 0); + ui->comboBoxCDInterface->setCurrentIndex(-1); + ui->comboBoxCDInterface->setCurrentIndex(selectedRow); + for (int i = 0; i < SCSI_BUS_MAX; ++i) { auto *cbox = findChild(QString("comboBoxSCSI%1").arg(i + 1)); model = cbox->model(); @@ -187,6 +218,14 @@ SettingsStorageControllers::on_comboBoxFD_currentIndexChanged(int index) ui->pushButtonFD->setEnabled(hdc_has_config(ui->comboBoxFD->currentData().toInt()) > 0); } +void SettingsStorageControllers::on_comboBoxCDInterface_currentIndexChanged(int index) +{ + if (index < 0) { + return; + } + ui->pushButtonCDInterface->setEnabled(cdrom_interface_has_config(ui->comboBoxCDInterface->currentData().toInt()) > 0); +} + void SettingsStorageControllers::on_checkBoxTertiaryIDE_stateChanged(int arg1) { diff --git a/src/qt/qt_settingsstoragecontrollers.hpp b/src/qt/qt_settingsstoragecontrollers.hpp index 7e9cd9d6c..5641889e4 100644 --- a/src/qt/qt_settingsstoragecontrollers.hpp +++ b/src/qt/qt_settingsstoragecontrollers.hpp @@ -32,10 +32,12 @@ private slots: void on_pushButtonTertiaryIDE_clicked(); void on_pushButtonFD_clicked(); void on_pushButtonHD_clicked(); + void on_pushButtonCDInterface_clicked(); void on_checkBoxQuaternaryIDE_stateChanged(int arg1); void on_checkBoxTertiaryIDE_stateChanged(int arg1); void on_comboBoxFD_currentIndexChanged(int index); void on_comboBoxHD_currentIndexChanged(int index); + void on_comboBoxCDInterface_currentIndexChanged(int index); private: Ui::SettingsStorageControllers *ui; diff --git a/src/qt/qt_settingsstoragecontrollers.ui b/src/qt/qt_settingsstoragecontrollers.ui index 30a59f982..558d4c441 100644 --- a/src/qt/qt_settingsstoragecontrollers.ui +++ b/src/qt/qt_settingsstoragecontrollers.ui @@ -49,6 +49,23 @@ + + + + CD-ROM Controller: + + + + + + + + + + Configure + + + @@ -69,21 +86,21 @@ - + Tertiary IDE Controller - + Quaternary IDE Controller - + false @@ -93,7 +110,7 @@ - + false diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index e736b879d..d2cf4c4e5 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -62,7 +62,7 @@ typedef struct #pragma pack(pop) /* Table of all SCSI commands and their flags, needed for the new disc change / not ready handler. */ -const uint8_t scsi_cdrom_command_flags[0x100] = { +uint8_t scsi_cdrom_command_flags[0x100] = { IMPLEMENTED | CHECK_READY | NONDATA, /* 0x00 */ IMPLEMENTED | ALLOW_UA | NONDATA | SCSI_ONLY, /* 0x01 */ 0, /* 0x02 */ @@ -71,7 +71,9 @@ const uint8_t scsi_cdrom_command_flags[0x100] = { IMPLEMENTED | CHECK_READY, /* 0x08 */ 0, 0, /* 0x09-0x0A */ IMPLEMENTED | CHECK_READY | NONDATA, /* 0x0B */ - 0, 0, 0, 0, 0, 0, /* 0x0C-0x11 */ + 0, /* 0x0C */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0x0D */ + 0, 0, 0, 0, /* 0x0E-0x11 */ IMPLEMENTED | ALLOW_UA, /* 0x12 */ IMPLEMENTED | CHECK_READY | NONDATA | SCSI_ONLY, /* 0x13 */ 0, /* 0x14 */ @@ -81,9 +83,11 @@ const uint8_t scsi_cdrom_command_flags[0x100] = { IMPLEMENTED | CHECK_READY, /* 0x1B */ 0, 0, /* 0x1C-0x1D */ IMPLEMENTED | CHECK_READY, /* 0x1E */ - 0, 0, 0, 0, 0, 0, /* 0x1F-0x24 */ + 0, 0, 0, /* 0x1F-0x21*/ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0x22*/ + 0, 0, /* 0x23-0x24 */ IMPLEMENTED | CHECK_READY, /* 0x25 */ - IMPLEMENTED | CHECK_READY | SCSI_ONLY | EARLY_ONLY, /* 0x26 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0x26 */ 0, /* 0x27 */ IMPLEMENTED | CHECK_READY, /* 0x28 */ 0, 0, /* 0x29-0x2A */ @@ -143,21 +147,94 @@ const uint8_t scsi_cdrom_command_flags[0x100] = { IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC0 */ IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC1 */ IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC2 */ - 0, /* 0xC3 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC3 */ IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC4 */ - 0, /* 0xC5 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC5 */ IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC6 */ IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC7 */ - 0, 0, 0, 0, 0, /* 0xC8-0xCC */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC8 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC9 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xCA */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xCB */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xCC */ IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xCD */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xCE-0xD9 */ - IMPLEMENTED | SCSI_ONLY, /* 0xDA */ - 0, 0, 0, 0, 0, /* 0xDB-0xDF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0-0xEF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xCE-0xD7 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xD8 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xD9 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xDA */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xDB */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xDC */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xDD */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xDE */ + 0, /* 0xDF */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE0 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE1 */ + 0, /* 0xE2 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE3 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE4 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE5 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE6 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE7 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE8 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xE9 */ + 0, /* 0xEA */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xEB */ + 0, /* 0xEC */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xED */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xEE */ + 0, /* 0xEF */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0xF0-0xFF */ }; static uint64_t scsi_cdrom_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE | GPMODEP_DISCONNECT_PAGE | GPMODEP_CDROM_PAGE | GPMODEP_CDROM_AUDIO_PAGE | (1ULL << 0x0fULL) | GPMODEP_CAPABILITIES_PAGE | GPMODEP_ALL_PAGES); +static uint64_t scsi_cdrom_mode_sense_page_flags_sony = (GPMODEP_R_W_ERROR_PAGE | GPMODEP_DISCONNECT_PAGE | GPMODEP_CDROM_PAGE_SONY | GPMODEP_CDROM_AUDIO_PAGE_SONY | (1ULL << 0x0fULL) | GPMODEP_CAPABILITIES_PAGE | GPMODEP_ALL_PAGES); +static uint64_t scsi_cdrom_drive_status_page_flags = ((1ULL << 0x01ULL) | (1ULL << 0x02ULL) | (1ULL << 0x0fULL) | GPMODEP_ALL_PAGES); + +static const mode_sense_pages_t scsi_cdrom_drive_status_pages = { + {{ 0, 0 }, + { 0x01, 0, 2, 0x0f, 0xbf }, /*Drive Status Data Format*/ + { 0x02, 0, 1, 0}, /*Audio Play Status Format*/ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }} +}; static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default = { {{ 0, 0 }, @@ -174,7 +251,7 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default = { { 0, 0 }, { 0, 0 }, { GPMODE_CDROM_PAGE, 6, 0, 1, 0, 60, 0, 75 }, - { 0x8E, 0xE, 4, 0, 0, 0, 0, 75, 1, 255, 2, 255, 0, 0, 0, 0 }, + { GPMODE_CDROM_AUDIO_PAGE | 0x80, 0xE, 4, 0, 0, 0, 0, 75, 1, 255, 2, 255, 0, 0, 0, 0 }, { 0x0F, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0 }, { 0, 0 }, @@ -220,7 +297,53 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default_scsi = { { 0, 0 }, { 0, 0 }, { GPMODE_CDROM_PAGE, 6, 0, 1, 0, 60, 0, 75 }, - { 0x8E, 0xE, 5, 4, 0, 128, 0, 75, 1, 255, 2, 255, 0, 0, 0, 0 }, + { GPMODE_CDROM_AUDIO_PAGE | 0x80, 0xE, 5, 4, 0, 128, 0, 75, 1, 255, 2, 255, 0, 0, 0, 0 }, + { 0x0F, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 1, 0, 0, 0, 2, 0xC2, 1, 0, 0, 0, 2, 0xC2, 0, 0, 0, 0 }} +}; + +static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default_sony_scsi = { + {{ 0, 0 }, + { GPMODE_R_W_ERROR_PAGE, 6, 0, 5, 0, 0, 0, 0 }, + { GPMODE_DISCONNECT_PAGE, 0x0e, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { GPMODE_CDROM_PAGE_SONY, 2, 1, 0 }, + { GPMODE_CDROM_AUDIO_PAGE_SONY | 0x80, 0xE, 5, 0, 0, 0, 0, 0, 1, 255, 2, 255, 0, 0, 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { GPMODE_CDROM_PAGE, 6, 0, 1, 0, 60, 0, 75 }, + { GPMODE_CDROM_AUDIO_PAGE | 0x80, 0xE, 5, 4, 0, 128, 0, 75, 1, 255, 2, 255, 0, 0, 0, 0 }, { 0x0F, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0 }, { 0, 0 }, @@ -266,7 +389,53 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_changeable = { { 0, 0 }, { 0, 0 }, { GPMODE_CDROM_PAGE, 6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, - { 0x8E, 0xE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, + { GPMODE_CDROM_AUDIO_PAGE | 0x80, 0xE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, + { 0x0F, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }} +}; + +static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_changeable_sony = { + {{ 0, 0 }, + { GPMODE_R_W_ERROR_PAGE, 6, 0xFF, 0xFF, 0, 0, 0, 0 }, + { GPMODE_DISCONNECT_PAGE, 0x0E, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { GPMODE_CDROM_PAGE_SONY, 2, 0xFF, 0xFF }, + { GPMODE_CDROM_AUDIO_PAGE_SONY | 0x80, 0xE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { GPMODE_CDROM_PAGE, 6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, + { GPMODE_CDROM_AUDIO_PAGE | 0x80, 0xE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, { 0x0F, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0 }, { 0, 0 }, @@ -303,6 +472,7 @@ static gesn_event_header_t *gesn_event_header; static void scsi_cdrom_command_complete(scsi_cdrom_t *dev); static void scsi_cdrom_mode_sense_load(scsi_cdrom_t *dev); +static void scsi_cdrom_drive_status_load(scsi_cdrom_t *dev); static void scsi_cdrom_init(scsi_cdrom_t *dev); @@ -352,7 +522,7 @@ scsi_cdrom_init(scsi_cdrom_t *dev) dev->sense[0] = 0xf0; dev->sense[7] = 10; - if (dev->early) + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00")) /*NEC only*/ dev->status = READY_STAT | DSC_STAT; else dev->status = 0; @@ -361,6 +531,8 @@ scsi_cdrom_init(scsi_cdrom_t *dev) scsi_cdrom_sense_key = scsi_cdrom_asc = scsi_cdrom_ascq = dev->unit_attention = 0; dev->drv->cur_speed = dev->drv->speed; scsi_cdrom_mode_sense_load(dev); + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) + scsi_cdrom_drive_status_load(dev); } /* Returns: 0 for none, 1 for PIO, 2 for DMA. */ @@ -411,7 +583,11 @@ scsi_cdrom_get_channel(void *p, int channel) if (!dev) return channel + 1; - return dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE][channel ? 10 : 8]; + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) + return dev->ms_pages_saved_sony.pages[dev->sony_vendor ? GPMODE_CDROM_AUDIO_PAGE_SONY : GPMODE_CDROM_AUDIO_PAGE][channel ? 10 : 8]; + else + return dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE][channel ? 10 : 8]; } static uint32_t @@ -421,7 +597,11 @@ scsi_cdrom_get_volume(void *p, int channel) if (!dev) return 255; - return dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE][channel ? 11 : 9]; + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) + return dev->ms_pages_saved_sony.pages[dev->sony_vendor ? GPMODE_CDROM_AUDIO_PAGE_SONY : GPMODE_CDROM_AUDIO_PAGE][channel ? 11 : 9]; + else + return dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE][channel ? 11 : 9]; } static void @@ -430,22 +610,37 @@ scsi_cdrom_mode_sense_load(scsi_cdrom_t *dev) FILE *f; char file_name[512]; - memset(&dev->ms_pages_saved, 0, sizeof(mode_sense_pages_t)); - if (dev->drv->bus_type == CDROM_BUS_SCSI) - memcpy(&dev->ms_pages_saved, &scsi_cdrom_mode_sense_pages_default_scsi, sizeof(mode_sense_pages_t)); - else - memcpy(&dev->ms_pages_saved, &scsi_cdrom_mode_sense_pages_default, sizeof(mode_sense_pages_t)); + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + memset(&dev->ms_pages_saved_sony, 0, sizeof(mode_sense_pages_t)); + memcpy(&dev->ms_pages_saved_sony, &scsi_cdrom_mode_sense_pages_default_sony_scsi, sizeof(mode_sense_pages_t)); - memset(file_name, 0, 512); - if (dev->drv->bus_type == CDROM_BUS_SCSI) - sprintf(file_name, "scsi_cdrom_%02i_mode_sense_bin", dev->id); - else - sprintf(file_name, "cdrom_%02i_mode_sense_bin", dev->id); - f = plat_fopen(nvr_path(file_name), "rb"); - if (f) { - if (fread(dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE], 1, 0x10, f) != 0x10) - fatal("scsi_cdrom_mode_sense_load(): Error reading data\n"); - fclose(f); + memset(file_name, 0, 512); + sprintf(file_name, "scsi_cdrom_%02i_mode_sense_sony_bin", dev->id); + f = plat_fopen(nvr_path(file_name), "rb"); + if (f) { + if (fread(dev->ms_pages_saved_sony.pages[GPMODE_CDROM_AUDIO_PAGE_SONY], 1, 0x10, f) != 0x10) + fatal("scsi_cdrom_mode_sense_load(): Error reading data\n"); + fclose(f); + } + } else { + memset(&dev->ms_pages_saved, 0, sizeof(mode_sense_pages_t)); + if (dev->drv->bus_type == CDROM_BUS_SCSI) + memcpy(&dev->ms_pages_saved, &scsi_cdrom_mode_sense_pages_default_scsi, sizeof(mode_sense_pages_t)); + else + memcpy(&dev->ms_pages_saved, &scsi_cdrom_mode_sense_pages_default, sizeof(mode_sense_pages_t)); + + memset(file_name, 0, 512); + if (dev->drv->bus_type == CDROM_BUS_SCSI) + sprintf(file_name, "scsi_cdrom_%02i_mode_sense_bin", dev->id); + else + sprintf(file_name, "cdrom_%02i_mode_sense_bin", dev->id); + f = plat_fopen(nvr_path(file_name), "rb"); + if (f) { + if (fread(dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE], 1, 0x10, f) != 0x10) + fatal("scsi_cdrom_mode_sense_load(): Error reading data\n"); + fclose(f); + } } } @@ -456,35 +651,116 @@ scsi_cdrom_mode_sense_save(scsi_cdrom_t *dev) char file_name[512]; memset(file_name, 0, 512); - if (dev->drv->bus_type == CDROM_BUS_SCSI) - sprintf(file_name, "scsi_cdrom_%02i_mode_sense_bin", dev->id); - else - sprintf(file_name, "cdrom_%02i_mode_sense_bin", dev->id); - f = plat_fopen(nvr_path(file_name), "wb"); - if (f) { - fwrite(dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE], 1, 0x10, f); - fclose(f); + + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + sprintf(file_name, "scsi_cdrom_%02i_mode_sense_sony_bin", dev->id); + f = plat_fopen(nvr_path(file_name), "wb"); + if (f) { + fwrite(dev->ms_pages_saved_sony.pages[GPMODE_CDROM_AUDIO_PAGE_SONY], 1, 0x10, f); + fclose(f); + } + } else { + if (dev->drv->bus_type == CDROM_BUS_SCSI) + sprintf(file_name, "scsi_cdrom_%02i_mode_sense_bin", dev->id); + else + sprintf(file_name, "cdrom_%02i_mode_sense_bin", dev->id); + f = plat_fopen(nvr_path(file_name), "wb"); + if (f) { + fwrite(dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE], 1, 0x10, f); + fclose(f); + } } } +/*SCSI Drive Status (Pioneer only)*/ +static void +scsi_cdrom_drive_status_load(scsi_cdrom_t *dev) +{ + memset(&dev->ms_drive_status_pages_saved, 0, sizeof(mode_sense_pages_t)); + memcpy(&dev->ms_drive_status_pages_saved, &scsi_cdrom_drive_status_pages, sizeof(mode_sense_pages_t)); +} + +static uint8_t +scsi_cdrom_drive_status_read(scsi_cdrom_t *dev, uint8_t page_control, uint8_t page, uint8_t pos) +{ + return dev->ms_drive_status_pages_saved.pages[page][pos]; +} + +static uint32_t +scsi_cdrom_drive_status(scsi_cdrom_t *dev, uint8_t *buf, uint32_t pos, uint8_t page) +{ + uint8_t page_control = (page >> 6) & 3; + int i = 0, j = 0; + + uint16_t msplen; + + page &= 0x3f; + + for (i = 0; i < 0x40; i++) { + if (page == i) { + if (scsi_cdrom_drive_status_page_flags & (1LL << ((uint64_t) (page & 0x3f)))) { + buf[pos++] = scsi_cdrom_drive_status_read(dev, page_control, i, 0); + msplen = (scsi_cdrom_drive_status_read(dev, page_control, i, 1) << 8); + msplen |= scsi_cdrom_drive_status_read(dev, page_control, i, 2); + buf[pos++] = (msplen >> 8) & 0xff; + buf[pos++] = msplen & 0xff; + scsi_cdrom_log("CD-ROM %i: DRIVE STATUS: Page [%02X] length %i\n", dev->id, i, msplen); + for (j = 0; j < msplen; j++) { + if (i == 0x01) { + buf[pos++] = scsi_cdrom_drive_status_read(dev, page_control, i, 3 + j); + if (!(j & 1)) { /*MSB of Drive Status*/ + if (dev->drv->ops) /*Bit 11 of Drive Status, */ + buf[pos] &= ~0x08; /*Disc is present*/ + else + buf[pos] |= 0x08; /*Disc not present*/ + } + } else if ((i == 0x02) && (j == 0)) { + buf[pos++] = ((dev->drv->cd_status == CD_STATUS_PLAYING) ? 0x01 : 0x00); + } else + buf[pos++] = scsi_cdrom_drive_status_read(dev, page_control, i, 3 + j); + } + } + } + } + + return pos; +} + /*SCSI Mode Sense 6/10*/ static uint8_t scsi_cdrom_mode_sense_read(scsi_cdrom_t *dev, uint8_t page_control, uint8_t page, uint8_t pos) { - switch (page_control) { - case 0: - case 3: - return dev->ms_pages_saved.pages[page][pos]; - break; - case 1: - return scsi_cdrom_mode_sense_pages_changeable.pages[page][pos]; - break; - case 2: - if (dev->drv->bus_type == CDROM_BUS_SCSI) - return scsi_cdrom_mode_sense_pages_default_scsi.pages[page][pos]; - else - return scsi_cdrom_mode_sense_pages_default.pages[page][pos]; - break; + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + switch (page_control) { + case 0: + case 3: + return dev->ms_pages_saved_sony.pages[page][pos]; + break; + case 1: + return scsi_cdrom_mode_sense_pages_changeable_sony.pages[page][pos]; + break; + case 2: + return scsi_cdrom_mode_sense_pages_default_sony_scsi.pages[page][pos]; + break; + } + } else { + switch (page_control) { + case 0: + case 3: + return dev->ms_pages_saved.pages[page][pos]; + break; + case 1: + return scsi_cdrom_mode_sense_pages_changeable.pages[page][pos]; + break; + case 2: + if (dev->drv->bus_type == CDROM_BUS_SCSI) + return scsi_cdrom_mode_sense_pages_default_scsi.pages[page][pos]; + else + return scsi_cdrom_mode_sense_pages_default.pages[page][pos]; + break; + } } return 0; @@ -526,14 +802,25 @@ scsi_cdrom_mode_sense(scsi_cdrom_t *dev, uint8_t *buf, uint32_t pos, uint8_t pag else { if ((i == GPMODE_CAPABILITIES_PAGE) && (j == 4)) { buf[pos] = scsi_cdrom_mode_sense_read(dev, page_control, i, 2 + j) & 0x1f; - /* The early CD-ROM drives we emulate (NEC CDR-260 for ATAPI and Toshiba CDS-431) are + /* The early CD-ROM drives we emulate (NEC CDR-260 for ATAPI and early vendor SCSI CD-ROM models) are caddy drives, the later ones are tray drives. */ - buf[pos++] |= (dev->early ? 0x00 : 0x20); + if (dev->drv->bus_type == CDROM_BUS_SCSI) { + buf[pos++] |= ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "86BOX_CD-ROM_1.00")) ? 0x20 : 0x00); + } else { + buf[pos++] |= ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00")) ? 0x00 : 0x20); + } } else if ((i == GPMODE_CAPABILITIES_PAGE) && (j >= 6) && (j <= 7)) { if (j & 1) buf[pos++] = ((dev->drv->speed * 176) & 0xff); else buf[pos++] = ((dev->drv->speed * 176) >> 8); + } else if ((i == GPMODE_CAPABILITIES_PAGE) && (j >= 8) && (j <= 9) && + (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403"))) { + if (j & 1) + buf[pos++] = ((dev->drv->speed * 176) & 0xff); + else + buf[pos++] = ((dev->drv->speed * 176) >> 8); } else if ((i == GPMODE_CAPABILITIES_PAGE) && (j >= 12) && (j <= 13)) { if (j & 1) buf[pos++] = ((dev->drv->cur_speed * 176) & 0xff); @@ -684,14 +971,44 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev) case 0xb8: case 0xb9: case 0xbe: - case 0xc6: - case 0xc7: if (dev->current_cdb[0] == 0x42) dev->callback += 40.0; /* Account for seek time. */ bytes_per_second = 176.0 * 1024.0; bytes_per_second *= (double) dev->drv->cur_speed; break; + case 0xc6: + case 0xc7: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433"))) { + bytes_per_second = 176.0 * 1024.0; + bytes_per_second *= (double) dev->drv->cur_speed; + } + break; + case 0xc1: + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { + bytes_per_second = 176.0 * 1024.0; + bytes_per_second *= (double) dev->drv->cur_speed; + } + break; + case 0xc2: + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { + dev->callback += 40.0; + bytes_per_second = 176.0 * 1024.0; + bytes_per_second *= (double) dev->drv->cur_speed; + } + break; + case 0xc3: + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + bytes_per_second = 176.0 * 1024.0; + bytes_per_second *= (double) dev->drv->cur_speed; + } + break; + default: bytes_per_second = scsi_cdrom_bus_speed(dev); if (bytes_per_second == 0.0) { @@ -846,9 +1163,9 @@ scsi_cdrom_unit_attention(scsi_cdrom_t *dev) static void scsi_cdrom_buf_alloc(scsi_cdrom_t *dev, uint32_t len) { - scsi_cdrom_log("CD-ROM %i: Allocated buffer length: %i\n", dev->id, len); if (!dev->buffer) dev->buffer = (uint8_t *) malloc(len); + scsi_cdrom_log("CD-ROM %i: Allocated buffer length: %i, buffer = %p\n", dev->id, len, dev->buffer); } static void @@ -955,7 +1272,7 @@ scsi_cdrom_data_phase_error(scsi_cdrom_t *dev) } static int -scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *len) +scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *len, int vendor_type) { int ret = 0, data_pos = 0; int i = 0, temp_len = 0; @@ -992,7 +1309,7 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *l for (i = 0; i < dev->requested_blocks; i++) { ret = cdrom_readsector_raw(dev->drv, dev->buffer + data_pos, - dev->sector_pos + i, msf, type, flags, &temp_len); + dev->sector_pos + i, msf, type, flags, &temp_len, vendor_type); data_pos += temp_len; dev->old_len += temp_len; @@ -1009,7 +1326,7 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *l } static int -scsi_cdrom_read_blocks(scsi_cdrom_t *dev, int32_t *len, int first_batch) +scsi_cdrom_read_blocks(scsi_cdrom_t *dev, int32_t *len, int first_batch, int vendor_type) { int ret = 0, msf = 0; int type = 0, flags = 0; @@ -1032,7 +1349,7 @@ scsi_cdrom_read_blocks(scsi_cdrom_t *dev, int32_t *len, int first_batch) scsi_cdrom_log("Reading %i blocks starting from %i...\n", dev->requested_blocks, dev->sector_pos); - ret = scsi_cdrom_read_data(dev, msf, type, flags, len); + ret = scsi_cdrom_read_data(dev, msf, type, flags, len, vendor_type); scsi_cdrom_log("Read %i bytes of blocks...\n", *len); @@ -1201,12 +1518,6 @@ scsi_cdrom_pre_execution_check(scsi_cdrom_t *dev, uint8_t *cdb) return 0; } - if (!dev->early && (scsi_cdrom_command_flags[cdb[0]] & EARLY_ONLY)) { - scsi_cdrom_log("CD-ROM %i: Attempting to execute SCSI-only command %02X over ATAPI\n", dev->id, cdb[0]); - scsi_cdrom_illegal_opcode(dev); - return 0; - } - if ((dev->drv->bus_type < CDROM_BUS_SCSI) && (scsi_cdrom_command_flags[cdb[0]] & SCSI_ONLY)) { scsi_cdrom_log("CD-ROM %i: Attempting to execute SCSI-only command %02X over ATAPI\n", dev->id, cdb[0]); scsi_cdrom_illegal_opcode(dev); @@ -1281,7 +1592,7 @@ static void scsi_cdrom_rezero(scsi_cdrom_t *dev) { dev->sector_pos = dev->sector_len = 0; - cdrom_seek(dev->drv, 0); + cdrom_seek(dev->drv, 0, 0); } void @@ -1392,10 +1703,8 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) int toc_format, block_desc = 0; int ret, format = 0; int real_pos, track = 0; -#ifdef USE_86BOX_CD - char device_identify[9] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', 0 }; - char device_identify_ex[15] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', ' ', 'v', '1', '.', '0', '0', 0 }; -#endif + char device_identify[9] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', 0 }; + char device_identify_ex[15] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', ' ', 'v', '1', '.', '0', '0', 0 }; int32_t blen = 0, *BufLen; uint8_t *b; uint32_t profiles[2] = { MMC_PROFILE_CD_ROM, MMC_PROFILE_DVD_ROM }; @@ -1413,16 +1722,15 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->packet_len = 0; dev->request_pos = 0; -#ifdef USE_86BOX_CD device_identify[7] = dev->id + 0x30; device_identify_ex[7] = dev->id + 0x30; device_identify_ex[10] = EMU_VERSION_EX[0]; device_identify_ex[12] = EMU_VERSION_EX[2]; device_identify_ex[13] = EMU_VERSION_EX[3]; -#endif memcpy(dev->current_cdb, cdb, 12); + dev->sony_vendor = 0; if (cdb[0] != 0) { scsi_cdrom_log("CD-ROM %i: Command 0x%02X, Sense Key %02X, Asc %02X, Ascq %02X, Unit attention: %i\n", @@ -1443,6 +1751,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) if (scsi_cdrom_pre_execution_check(dev, cdb) == 0) return; +begin: switch (cdb[0]) { case GPCMD_TEST_UNIT_READY: scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); @@ -1453,7 +1762,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_stop(sc); dev->sector_pos = dev->sector_len = 0; dev->drv->seek_diff = dev->drv->seek_pos; - cdrom_seek(dev->drv, 0); + cdrom_seek(dev->drv, 0, 0); scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); break; @@ -1477,8 +1786,16 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_data_command_finish(dev, 18, 18, cdb[4], 0); break; + case 0xDA: /*GPCMD_SPEED_ALT*/ + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE74_1.00") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE464_1.05")) { /*GPCMD_STILL_NEC*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + cdrom_audio_pause_resume(dev->drv, 0x00); + dev->drv->audio_op = 0x01; + scsi_cdrom_command_complete(dev); + break; + } case GPCMD_SET_SPEED: - case GPCMD_SET_SPEED_ALT: dev->drv->cur_speed = (cdb[3] | (cdb[2] << 8)) / 176; if (dev->drv->cur_speed < 1) dev->drv->cur_speed = 1; @@ -1488,6 +1805,24 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_command_complete(dev); break; + case 0xCD: + case GPCMD_AUDIO_SCAN: + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + + if ((dev->drv->host_drive < 1) || (dev->drv->cd_status <= CD_STATUS_DATA_ONLY)) { + scsi_cdrom_illegal_mode(dev); + break; + } + + pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; + ret = cdrom_audio_scan(dev->drv, pos, 0); + + if (ret) + scsi_cdrom_command_complete(dev); + else + scsi_cdrom_illegal_mode(dev); + break; + case GPCMD_MECHANISM_STATUS: scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); len = (cdb[7] << 16) | (cdb[8] << 8) | cdb[9]; @@ -1538,34 +1873,47 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_set_buf_len(dev, BufLen, &len); scsi_cdrom_data_command_finish(dev, len, len, len, 0); - /* scsi_cdrom_log("CD-ROM %i: READ_TOC_PMA_ATIP format %02X, length %i (%i)\n", dev->id, - toc_format, ide->cylinder, dev->buffer[1]); */ return; - case GPCMD_READ_DISC_INFORMATION_TOSHIBA: + case 0xC7: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_PLAY_AUDIO_MSF_MATSUSHITA*/ + cdb[0] = GPCMD_PLAY_AUDIO_MSF; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { /*GPCMD_PLAY_MSF_SONY*/ + cdb[0] = GPCMD_PLAY_AUDIO_MSF; + dev->current_cdb[0] = cdb[0]; + dev->sony_vendor = 1; + goto begin; + break; + } /*GPCMD_READ_DISC_INFORMATION_TOSHIBA*/ + case 0xDE: /*GPCMD_READ_DISC_INFORMATION_NEC*/ scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + scsi_cdrom_buf_alloc(dev, 4); - scsi_cdrom_buf_alloc(dev, 65536); - - if ((!dev->drv->ops) && ((cdb[1] & 3) == 2)) { + if (!dev->drv->ops) { scsi_cdrom_not_ready(dev); return; } - memset(dev->buffer, 0, 4); - - cdrom_read_disc_info_toc(dev->drv, dev->buffer, cdb[2], cdb[1] & 3); - + ret = cdrom_read_disc_info_toc(dev->drv, dev->buffer, cdb[2], cdb[1] & 3); len = 4; - scsi_cdrom_set_buf_len(dev, BufLen, &len); + if (!ret) { + scsi_cdrom_invalid_field(dev); + scsi_cdrom_buf_free(dev); + return; + } + scsi_cdrom_set_buf_len(dev, BufLen, &len); scsi_cdrom_data_command_finish(dev, len, len, len, 0); return; case GPCMD_READ_CD_OLD: /* IMPORTANT: Convert the command to new read CD for pass through purposes. */ - dev->current_cdb[0] = 0xbe; + dev->current_cdb[0] = GPCMD_READ_CD; /*FALLTHROUGH*/ case GPCMD_READ_6: @@ -1665,7 +2013,18 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->drv->seek_diff = ABS((int) (pos - dev->sector_pos)); - ret = scsi_cdrom_read_blocks(dev, &alloc_length, 1); + if ((cdb[0] == GPCMD_READ_10) || (cdb[0] == GPCMD_READ_12)) { + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE74_1.00") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE464_1.05") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-3301TA_0272") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-5701TA_3136")) + ret = scsi_cdrom_read_blocks(dev, &alloc_length, 1, cdb[9] & 0xc0); + else + ret = scsi_cdrom_read_blocks(dev, &alloc_length, 1, 0); + } else + ret = scsi_cdrom_read_blocks(dev, &alloc_length, 1, 0); + if (ret <= 0) { scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); dev->packet_status = PHASE_COMPLETE; @@ -1733,10 +2092,19 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_buf_alloc(dev, 65536); } - if (!(scsi_cdrom_mode_sense_page_flags & (1LL << (uint64_t) (cdb[2] & 0x3f)))) { - scsi_cdrom_invalid_field(dev); - scsi_cdrom_buf_free(dev); - return; + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + if (!(scsi_cdrom_mode_sense_page_flags_sony & (1LL << (uint64_t) (cdb[2] & 0x3f)))) { + scsi_cdrom_invalid_field(dev); + scsi_cdrom_buf_free(dev); + return; + } + } else { + if (!(scsi_cdrom_mode_sense_page_flags & (1LL << (uint64_t) (cdb[2] & 0x3f)))) { + scsi_cdrom_invalid_field(dev); + scsi_cdrom_buf_free(dev); + return; + } } memset(dev->buffer, 0, len); @@ -2031,9 +2399,16 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_data_command_finish(dev, len, len, max_len, 0); break; - /* GPCMD_CHINON_EJECT on Chinon */ - case GPCMD_AUDIO_TRACK_SEARCH: - if (dev->early) { + case 0xC0: /*GPCMD_UNKNOWN_SONY*/ + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + scsi_cdrom_command_complete(dev); + dev->sony_vendor = 1; + break; + } /*GPCMD_AUDIO_TRACK_SEARCH_TOSHIBA and GPCMD_EJECT_CHINON*/ + case 0xD8: /*GPCMD_AUDIO_TRACK_SEARCH_NEC*/ + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42"))) { scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); scsi_cdrom_stop(sc); cdrom_eject(dev->id); @@ -2055,14 +2430,51 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) } break; - case GPCMD_TOSHIBA_PLAY_AUDIO: + case 0xC1: /*GPCMD_READ_TOC_SONY*/ + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { + scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + + if (strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { + dev->sony_vendor = 0; + } else { + msf = dev->ms_pages_saved_sony.pages[GPMODE_CDROM_PAGE_SONY][2] & 0x01; + dev->sony_vendor = 1; + } + + max_len = cdb[7]; + max_len <<= 8; + max_len |= cdb[8]; + + scsi_cdrom_buf_alloc(dev, 65536); + + if (!dev->drv->ops) { + scsi_cdrom_not_ready(dev); + return; + } + + len = cdrom_read_toc_sony(dev->drv, dev->buffer, cdb[5], msf, max_len); + if (len == -1) { + /* If the returned length is -1, this means cdrom_read_toc_sony() has encountered an error. */ + scsi_cdrom_invalid_field(dev); + scsi_cdrom_buf_free(dev); + return; + } + + scsi_cdrom_set_buf_len(dev, BufLen, &len); + + scsi_cdrom_data_command_finish(dev, len, len, len, 0); + return; + } /*GPCMD_PLAY_AUDIO_TOSHIBA*/ + case 0xD9: /*GPCMD_PLAY_AUDIO_NEC*/ scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); if ((dev->drv->host_drive < 1) || (dev->drv->cd_status <= CD_STATUS_DATA_ONLY)) { scsi_cdrom_illegal_mode(dev); break; } pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; - ret = cdrom_toshiba_audio_play(dev->drv, pos, cdb[9] & 0xc0); + ret = cdrom_audio_play_toshiba(dev->drv, pos, cdb[9] & 0xc0); if (ret) scsi_cdrom_command_complete(dev); @@ -2134,6 +2546,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) case GPCMD_READ_SUBCHANNEL: scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + dev->sony_vendor = 0; max_len = cdb[7]; max_len <<= 8; @@ -2191,13 +2604,13 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[1] = 0x11; break; case CD_STATUS_PAUSED: - dev->buffer[1] = ((dev->drv->bus_type == CDROM_BUS_SCSI) && dev->early) ? 0x15 : 0x12; + dev->buffer[1] = ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42"))) ? 0x15 : 0x12; break; case CD_STATUS_DATA_ONLY: - dev->buffer[1] = ((dev->drv->bus_type == CDROM_BUS_SCSI) && dev->early) ? 0x00 : 0x15; + dev->buffer[1] = ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42"))) ? 0x00 : 0x15; break; default: - dev->buffer[1] = ((dev->drv->bus_type == CDROM_BUS_SCSI) && dev->early) ? 0x00 : 0x13; + dev->buffer[1] = ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42"))) ? 0x00 : 0x13; break; } @@ -2210,9 +2623,34 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_data_command_finish(dev, len, len, len, 0); break; - /* GPCMD_CHINON_STOP on Chinon */ - case GPCMD_READ_SUBCODEQ_PLAYING_STATUS: - if (dev->early) { + case 0xC6: + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + dev->sony_vendor = 1; + + msf = 3; + if ((cdb[5] != 1) || (cdb[8] != 1)) { + scsi_cdrom_illegal_mode(dev); + break; + } + pos = cdb[4]; + + if ((dev->drv->host_drive < 1) || (dev->drv->cd_status <= CD_STATUS_DATA_ONLY)) { + scsi_cdrom_illegal_mode(dev); + break; + } + + ret = cdrom_audio_play(dev->drv, pos, len, msf); + + if (ret) + scsi_cdrom_command_complete(dev); + else + scsi_cdrom_illegal_mode(dev); + break; + } /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_TOSHIBA and GPCMD_STOP_CHINON*/ + case 0xDD: /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_NEC*/ + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42"))) { scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); scsi_cdrom_stop(sc); scsi_cdrom_command_complete(dev); @@ -2220,8 +2658,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); alloc_length = cdb[1] & 0x1f; - - scsi_cdrom_buf_alloc(dev, alloc_length); + len = 10; if (!dev->drv->ops) { scsi_cdrom_not_ready(dev); @@ -2230,14 +2667,15 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) if (!alloc_length) { scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); - scsi_cdrom_log("CD-ROM %i: All done - callback set\n", dev->id); + scsi_cdrom_log("CD-ROM %i: Subcode Q All done - callback set\n", dev->id); dev->packet_status = PHASE_COMPLETE; dev->callback = 20.0 * CDROM_TIME; scsi_cdrom_set_callback(dev); break; } - len = alloc_length; + scsi_cdrom_buf_alloc(dev, len); + len = MIN(len, alloc_length); memset(dev->buffer, 0, len); dev->buffer[0] = cdrom_get_current_subcodeq_playstatus(dev->drv, &dev->buffer[1]); @@ -2284,7 +2722,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) } break; - case GPCMD_CHINON_UNKNOWN: + case 0x26: /*GPCMD_UNKNOWN_CHINON*/ scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); scsi_cdrom_stop(sc); scsi_cdrom_command_complete(dev); @@ -2313,7 +2751,43 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_command_complete(dev); break; - case GPCMD_CADDY_EJECT: + case 0xC4: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_READ_HEADER_MATSUSHITA*/ + cdb[0] = GPCMD_READ_HEADER; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { /*GPCMD_PLAYBACK_STATUS_SONY*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + dev->sony_vendor = 1; + + max_len = cdb[7]; + max_len <<= 8; + max_len |= cdb[8]; + msf = dev->ms_pages_saved_sony.pages[GPMODE_CDROM_PAGE_SONY][2] & 0x01; + + scsi_cdrom_buf_alloc(dev, 18); + + len = max_len; + + memset(dev->buffer, 0, 10); + dev->buffer[0] = 0x00; /*Reserved*/ + dev->buffer[1] = 0x00; /*Reserved*/ + dev->buffer[2] = cdb[7]; /*Audio Status data length*/ + dev->buffer[3] = cdb[8]; /*Audio Status data length*/ + dev->buffer[4] = cdrom_get_audio_status_sony(dev->drv, &dev->buffer[6], msf); /*Audio status*/ + dev->buffer[5] = 0x00; + + scsi_cdrom_log("Audio Status = %02x\n", dev->buffer[4]); + + len = MIN(len, max_len); + scsi_cdrom_set_buf_len(dev, BufLen, &len); + + scsi_cdrom_data_command_finish(dev, len, len, len, 0); + break; + } /*GPCMD_CADDY_EJECT_TOSHIBA and GPCMD_CADDY_EJECT_NEC*/ + case 0xDC: scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); scsi_cdrom_stop(sc); cdrom_eject(dev->id); @@ -2333,7 +2807,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) preamble_len = 4; size_idx = 3; - dev->buffer[idx++] = 05; + dev->buffer[idx++] = 5; dev->buffer[idx++] = cdb[2]; dev->buffer[idx++] = 0; @@ -2364,41 +2838,20 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[idx++] = 0x01; dev->buffer[idx++] = 0x00; dev->buffer[idx++] = 68; -#ifdef USE_86BOX_CD - ide_padstr8(dev->buffer + idx, 8, EMU_NAME); /* Vendor */ -#else - if (dev->drv->bus_type == CDROM_BUS_SCSI) { - if (dev->early) - ide_padstr8(dev->buffer + idx, 8, "CHINON"); /* Vendor */ - else - ide_padstr8(dev->buffer + idx, 8, "TOSHIBA"); /* Vendor */ - } else { - if (dev->early) - ide_padstr8(dev->buffer + idx, 8, "NEC"); /* Vendor */ - else if (machine_is_sony()) - ide_padstr8(dev->buffer + idx, 8, "SONY"); /* Vendor */ - else - ide_padstr8(dev->buffer + idx, 8, "HITACHI"); /* Vendor */ - } -#endif + + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "86BOX_CD-ROM_1.00"))) + ide_padstr8(dev->buffer + idx, 8, EMU_NAME); /* Vendor */ + else + ide_padstr8(dev->buffer + idx, 8, cdrom_drive_types[dev->drv->type].vendor); /* Vendor */ + idx += 8; -#ifdef USE_86BOX_CD - ide_padstr8(dev->buffer + idx, 40, device_identify_ex); /* Product */ -#else - if (dev->drv->bus_type == CDROM_BUS_SCSI) { - if (dev->early) - ide_padstr8(dev->buffer + idx, 40, "CD-ROM CDS-431"); /* Product */ - else - ide_padstr8(dev->buffer + idx, 40, "CD-ROM DRIVE:XM"); /* Product */ - } else { - if (dev->early) - ide_padstr8(dev->buffer + idx, 40, "CD-ROM DRIVE:260"); /* Product */ - else if (machine_is_sony()) - ide_padstr8(dev->buffer + idx, 40, "CD-ROM CDU76"); /* Product */ - else - ide_padstr8(dev->buffer + idx, 40, "CDR-8130"); /* Product */ - } -#endif + + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "86BOX_CD-ROM_1.00"))) + ide_padstr8(dev->buffer + idx, 40, device_identify_ex); /* Product */ + else + ide_padstr8(dev->buffer + idx, 40, cdrom_drive_types[dev->drv->type].model); /* Product */ + + idx += 40; ide_padstr8(dev->buffer + idx, 20, "53R141"); /* Serial */ idx += 20; @@ -2419,8 +2872,37 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[1] = 0x80; /*Removable*/ if (dev->drv->bus_type == CDROM_BUS_SCSI) { - dev->buffer[2] = 0x02; dev->buffer[3] = 0x02; + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "86BOX_CD-ROM_1.00"))) { + dev->buffer[2] = 0x05; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433"))) { + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-3301TA_0272"))) { + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-5701TA_3136"))) { + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42"))) { + dev->buffer[3] = 0x01; + dev->buffer[2] = 0x02; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i")) { + dev->buffer[3] = 0x01; + dev->buffer[2] = 0x02; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + dev->buffer[3] = 0x01; + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { + dev->buffer[3] = 0x01; + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE74_1.00"))) { + dev->buffer[3] = 0x01; + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "DEC_RRD45_0436"))) { + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE464_1.05"))) { + dev->buffer[2] = 0x02; + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403"))) { + dev->buffer[2] = 0x02; + } } else { dev->buffer[2] = 0x00; dev->buffer[3] = 0x21; @@ -2428,47 +2910,57 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[4] = 31; if (dev->drv->bus_type == CDROM_BUS_SCSI) { - dev->buffer[6] = 1; /* 16-bit transfers supported */ - dev->buffer[7] = 0x20; /* Wide bus supported */ + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "86BOX_CD-ROM_1.00"))) { + dev->buffer[6] = 0x01; /* 16-bit transfers supported */ + dev->buffer[7] = 0x20; /* Wide bus supported */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PLEXTOR_CD-ROM_PX-32TS_1.03"))) { + dev->buffer[6] = 0x01; /* 16-bit transfers supported */ + dev->buffer[7] = 0x20; /* Wide bus supported */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TEAC_CD-R55S_1.0R"))) { + dev->buffer[6] = 0x01; /* 16-bit transfers supported */ + dev->buffer[7] = 0x20; /* Wide bus supported */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "DEC_RRD45_0436"))) { + dev->buffer[7] = 0x98; /* Linked Command and Relative Addressing supported */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433"))) { + dev->buffer[4] = 91; /* Always 91 on Toshiba SCSI-2 CD-ROM drives from 1990*/ + dev->buffer[7] = 0x88; /* Linked Command and Relative Addressing supported */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-3301TA_0272"))) { + dev->buffer[4] = 91; /* Always 91 on Toshiba SCSI-2 CD-ROM drives from 1990*/ + dev->buffer[7] = 0x88; /* Linked Command and Relative Addressing supported */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-5701TA_3136"))) { + dev->buffer[4] = 91; /* Always 91 on Toshiba SCSI-2 CD-ROM drives from 1990*/ + dev->buffer[7] = 0x88; /* Linked Command and Relative Addressing supported */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403"))) { + dev->buffer[4] = 42; + } } -#ifdef USE_86BOX_CD - ide_padstr8(dev->buffer + 8, 8, EMU_NAME); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, device_identify); /* Product */ - ide_padstr8(dev->buffer + 32, 4, EMU_VERSION_EX); /* Revision */ -#else - if (dev->drv->bus_type == CDROM_BUS_SCSI) { - if (dev->early) { - ide_padstr8(dev->buffer + 8, 8, "CHINON"); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, "CD-ROM CDS-431"); /* Product */ - ide_padstr8(dev->buffer + 32, 4, "H42"); /* Revision */ - } else { - ide_padstr8(dev->buffer + 8, 8, "TOSHIBA"); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, "CD-ROM DRIVE:XM"); /* Product */ - ide_padstr8(dev->buffer + 32, 4, "3433"); /* Revision */ - } + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "86BOX_CD-ROM_1.00"))) { + ide_padstr8(dev->buffer + 8, 8, EMU_NAME); /* Vendor */ + ide_padstr8(dev->buffer + 16, 16, device_identify); /* Product */ + ide_padstr8(dev->buffer + 32, 4, EMU_VERSION_EX); /* Revision */ } else { - if (dev->early) { - ide_padstr8(dev->buffer + 8, 8, "NEC"); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, "CD-ROM DRIVE:260"); /* Product */ - ide_padstr8(dev->buffer + 32, 4, "1.01"); /* Revision */ - } else if (machine_is_sony()) { - ide_padstr8(dev->buffer + 8, 8, "SONY"); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, "CD-ROM CDU76"); /* Product */ - ide_padstr8(dev->buffer + 32, 4, "1.0i"); /* Revision */ - } else { - ide_padstr8(dev->buffer + 8, 8, "HITACHI"); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, "CDR-8130"); /* Product */ - ide_padstr8(dev->buffer + 32, 4, "0020"); /* Revision */ + ide_padstr8(dev->buffer + 8, 8, cdrom_drive_types[dev->drv->type].vendor); /* Vendor */ + ide_padstr8(dev->buffer + 16, 16, cdrom_drive_types[dev->drv->type].model); /* Product */ + ide_padstr8(dev->buffer + 32, 4, cdrom_drive_types[dev->drv->type].revision); /* Revision */ + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403"))) { + dev->buffer[36] = 0x20; + ide_padstr8(dev->buffer + 37, 10, "1993/01/01"); /* Date */ } } -#endif idx = 36; - - if (max_len == 96) { - dev->buffer[4] = 91; - idx = 96; + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-3301TA_0272") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-5701TA_3136")) /*Toshiba only*/ + idx = 96; + else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) /*Pioneer only*/ + idx = 47; + else { + if (max_len == 96) { + dev->buffer[4] = 91; + idx = 96; + } } } @@ -2477,19 +2969,23 @@ atapi_out: len = idx; len = MIN(len, max_len); + scsi_cdrom_set_buf_len(dev, BufLen, &len); + scsi_cdrom_log("Inquiry = %d, max = %d, BufLen = %d.\n", len, max_len, *BufLen); scsi_cdrom_data_command_finish(dev, len, len, max_len, 0); break; + case 0x0D: /*GPCMD_NO_OPERATION_TOSHIBA and GPCMD_NO_OPERATION_NEC*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + scsi_cdrom_command_complete(dev); + break; + case GPCMD_PREVENT_REMOVAL: scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); scsi_cdrom_command_complete(dev); break; -#if 0 - case GPCMD_PAUSE_RESUME_ALT: -#endif case GPCMD_PAUSE_RESUME: scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); cdrom_audio_pause_resume(dev->drv, cdb[8] & 0x01); @@ -2497,7 +2993,81 @@ atapi_out: scsi_cdrom_command_complete(dev); break; - case GPCMD_STILL: + case 0xC3: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_READ_TOC_MATSUSHITA*/ + cdb[0] = GPCMD_READ_TOC_PMA_ATIP; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { /*GPCMD_READ_HEADER_SONY*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + dev->sony_vendor = 1; + + alloc_length = ((cdb[7] << 8) | cdb[8]); + scsi_cdrom_buf_alloc(dev, 4); + + dev->sector_len = 1; + dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; + real_pos = cdrom_lba_to_msf_accurate(dev->sector_pos); + dev->buffer[0] = ((real_pos >> 16) & 0xff); + dev->buffer[1] = ((real_pos >> 8) & 0xff); + dev->buffer[2] = real_pos & 0xff; + dev->buffer[3] = 1; /*2048 bytes user data*/ + + len = 4; + len = MIN(len, alloc_length); + + scsi_cdrom_set_buf_len(dev, BufLen, &len); + + scsi_cdrom_data_command_finish(dev, len, len, len, 0); + return; + } /*GPCMD_SET_STOP_TIME_TOSHIBA and GPCMD_SET_STOP_TIME_NEC*/ + case 0xDB: + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + scsi_cdrom_command_complete(dev); + break; + + case 0xC2: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_READ_SUBCHANNEL_MATSUSHITA*/ + cdb[0] = GPCMD_READ_SUBCHANNEL; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { /*GPCMD_READ_SUBCHANNEL_SONY*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + + dev->sony_vendor = !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403") ? 0 : 1; + + max_len = cdb[7]; + max_len <<= 8; + max_len |= cdb[8]; + if (strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) + msf = dev->ms_pages_saved_sony.pages[GPMODE_CDROM_PAGE_SONY][2] & 0x01; + + scsi_cdrom_buf_alloc(dev, 32); + + scsi_cdrom_log("CD-ROM %i: Getting sub-channel type (%s)\n", dev->id, msf ? "MSF" : "LBA"); + + if (!(cdb[2] & 0x40)) + alloc_length = 4; + else + alloc_length = 24; + + len = alloc_length; + + memset(dev->buffer, 0, 24); + cdrom_get_current_subchannel_sony(dev->drv, dev->buffer, msf); + + len = MIN(len, max_len); + scsi_cdrom_set_buf_len(dev, BufLen, &len); + + scsi_cdrom_data_command_finish(dev, len, len, len, 0); + break; + } + /*GPCMD_STILL_TOSHIBA*/ scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); cdrom_audio_pause_resume(dev->drv, 0x00); dev->drv->audio_op = 0x01; @@ -2517,7 +3087,18 @@ atapi_out: break; } dev->drv->seek_diff = ABS((int) (pos - dev->drv->seek_pos)); - cdrom_seek(dev->drv, pos); + if (cdb[0] == GPCMD_SEEK_10) { + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE74_1.00") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE464_1.05") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-3301TA_0272") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-5701TA_3136")) + cdrom_seek(dev->drv, pos, cdb[9] & 0xc0); + else + cdrom_seek(dev->drv, pos, 0); + } else + cdrom_seek(dev->drv, pos, 0); + scsi_cdrom_command_complete(dev); break; @@ -2552,6 +3133,143 @@ atapi_out: scsi_cdrom_command_complete(dev); break; + case 0xC5: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_PLAY_AUDIO_MATSUSHITA*/ + cdb[0] = GPCMD_PLAY_AUDIO_10; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { /*GPCMD_PAUSE_SONY*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + dev->sony_vendor = 1; + cdrom_audio_pause_resume(dev->drv, !(cdb[1] & 0x10)); + scsi_cdrom_command_complete(dev); + break; + } + case 0xC8: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_PLAY_AUDIO_TRACK_INDEX_MATSUSHITA*/ + cdb[0] = GPCMD_PLAY_AUDIO_TRACK_INDEX; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { /*GPCMD_PLAY_AUDIO_SONY*/ + cdb[0] = GPCMD_PLAY_AUDIO_10; + dev->current_cdb[0] = cdb[0]; + dev->sony_vendor = 1; + goto begin; + break; + } + case 0xC9: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_PLAY_AUDIO_TRACK_RELATIVE_10_MATSUSHITA*/ + cdb[0] = GPCMD_PLAY_AUDIO_TRACK_RELATIVE_10; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } else if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { /*GPCMD_PLAYBACK_CONTROL_SONY*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_OUT); + dev->sony_vendor = 1; + + len = (cdb[7] << 8) | cdb[8]; + scsi_cdrom_buf_alloc(dev, 65536); + + scsi_cdrom_set_buf_len(dev, BufLen, &len); + scsi_cdrom_data_command_finish(dev, len, len, len, 1); + break; + } + case 0xCA: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403"))) { /*GPCMD_PAUSE_PIONEER*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + cdrom_audio_pause_resume(dev->drv, !(cdb[1] & 0x10)); + scsi_cdrom_command_complete(dev); + break; + } + case 0xCB: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_PAUSE_RESUME_MATSUSHITA*/ + cdb[0] = GPCMD_PAUSE_RESUME; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } + case 0xCC: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403"))) { + scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + + max_len = cdb[7]; + max_len <<= 8; + max_len |= cdb[8]; + + scsi_cdrom_buf_alloc(dev, 18); + + len = max_len; + + memset(dev->buffer, 0, 10); + dev->buffer[0] = 0x00; /*Reserved*/ + dev->buffer[1] = 0x00; /*Reserved*/ + dev->buffer[2] = cdb[7]; /*Audio Status data length*/ + dev->buffer[3] = cdb[8]; /*Audio Status data length*/ + dev->buffer[4] = cdrom_get_audio_status_sony(dev->drv, &dev->buffer[6], msf); /*Audio status*/ + dev->buffer[5] = 0x00; + + scsi_cdrom_log("Audio Status = %02x\n", dev->buffer[4]); + + len = MIN(len, max_len); + scsi_cdrom_set_buf_len(dev, BufLen, &len); + + scsi_cdrom_data_command_finish(dev, len, len, len, 0); + break; + } + case 0xE0: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403"))) { /*GPCMD_DRIVE_STATUS_PIONEER*/ + scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); + + len = (cdb[9] | (cdb[8] << 8)); + scsi_cdrom_buf_alloc(dev, 65536); + + if (!(scsi_cdrom_drive_status_page_flags & (1LL << (uint64_t) (cdb[2] & 0x3f)))) { + scsi_cdrom_invalid_field(dev); + scsi_cdrom_buf_free(dev); + return; + } + + if (!len) { + scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); + scsi_cdrom_log("CD-ROM %i: Drive Status All done - callback set\n", dev->id); + dev->packet_status = PHASE_COMPLETE; + dev->callback = 20.0 * CDROM_TIME; + scsi_cdrom_set_callback(dev); + break; + } + + memset(dev->buffer, 0, len); + alloc_length = len; + + len = scsi_cdrom_drive_status(dev, dev->buffer, 0, cdb[2]); + len = MIN(len, alloc_length); + + scsi_cdrom_set_buf_len(dev, BufLen, &len); + + scsi_cdrom_log("CD-ROM %i: Reading drive status page: %02X...\n", dev->id, cdb[2]); + + scsi_cdrom_data_command_finish(dev, len, len, alloc_length, 0); + return; + } + case 0xE5: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_PLAY_AUDIO_12_MATSUSHITA*/ + cdb[0] = GPCMD_PLAY_AUDIO_12; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } + case 0xE9: + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b"))) { /*GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12_MATSUSHITA*/ + cdb[0] = GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12; + dev->current_cdb[0] = cdb[0]; + goto begin; + break; + } default: scsi_cdrom_illegal_opcode(dev); break; @@ -2623,20 +3341,42 @@ scsi_cdrom_phase_data_out(scsi_common_t *sc) pos += 2; - if (!(scsi_cdrom_mode_sense_page_flags & (1LL << ((uint64_t) page)))) { - scsi_cdrom_log("CD-ROM %i: Unimplemented page %02X\n", dev->id, page); - error |= 1; + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + if (!(scsi_cdrom_mode_sense_page_flags_sony & (1LL << ((uint64_t) page)))) { + scsi_cdrom_log("CD-ROM %i: Unimplemented page %02X\n", dev->id, page); + error |= 1; + } else { + for (i = 0; i < page_len; i++) { + ch = scsi_cdrom_mode_sense_pages_changeable_sony.pages[page][i + 2]; + val = dev->buffer[pos + i]; + old_val = dev->ms_pages_saved_sony.pages[page][i + 2]; + if (val != old_val) { + if (ch) + dev->ms_pages_saved_sony.pages[page][i + 2] = val; + else { + scsi_cdrom_log("CD-ROM %i: Unchangeable value on position %02X on page %02X\n", dev->id, i + 2, page); + error |= 1; + } + } + } + } } else { - for (i = 0; i < page_len; i++) { - ch = scsi_cdrom_mode_sense_pages_changeable.pages[page][i + 2]; - val = dev->buffer[pos + i]; - old_val = dev->ms_pages_saved.pages[page][i + 2]; - if (val != old_val) { - if (ch) - dev->ms_pages_saved.pages[page][i + 2] = val; - else { - scsi_cdrom_log("CD-ROM %i: Unchangeable value on position %02X on page %02X\n", dev->id, i + 2, page); - error |= 1; + if (!(scsi_cdrom_mode_sense_page_flags & (1LL << ((uint64_t) page)))) { + scsi_cdrom_log("CD-ROM %i: Unimplemented page %02X\n", dev->id, page); + error |= 1; + } else { + for (i = 0; i < page_len; i++) { + ch = scsi_cdrom_mode_sense_pages_changeable.pages[page][i + 2]; + val = dev->buffer[pos + i]; + old_val = dev->ms_pages_saved.pages[page][i + 2]; + if (val != old_val) { + if (ch) + dev->ms_pages_saved.pages[page][i + 2] = val; + else { + scsi_cdrom_log("CD-ROM %i: Unchangeable value on position %02X on page %02X\n", dev->id, i + 2, page); + error |= 1; + } } } } @@ -2644,7 +3384,10 @@ scsi_cdrom_phase_data_out(scsi_common_t *sc) pos += page_len; - if (dev->drv->bus_type == CDROM_BUS_SCSI) + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) + val = scsi_cdrom_mode_sense_pages_default_sony_scsi.pages[page][0] & 0x80; + else if (dev->drv->bus_type == CDROM_BUS_SCSI) val = scsi_cdrom_mode_sense_pages_default_scsi.pages[page][0] & 0x80; else val = scsi_cdrom_mode_sense_pages_default.pages[page][0] & 0x80; @@ -2662,6 +3405,14 @@ scsi_cdrom_phase_data_out(scsi_common_t *sc) return 0; } break; + case 0xC9: + if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") || + !strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) { + for (i = 0; i < 18; i++) { + dev->ms_pages_saved_sony.pages[GPMODE_CDROM_AUDIO_PAGE_SONY][i] = dev->buffer[i]; + } + } + break; } scsi_cdrom_command_stop((scsi_common_t *) dev); @@ -2732,43 +3483,72 @@ scsi_cdrom_get_timings(int ide_has_dma, int type) static void scsi_cdrom_identify(ide_t *ide, int ide_has_dma) { -#ifdef USE_86BOX_CD scsi_cdrom_t *dev; - char device_identify[9] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', 0 }; + char device_identify[9] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', 0 }; dev = (scsi_cdrom_t *) ide->sc; device_identify[7] = dev->id + 0x30; scsi_cdrom_log("ATAPI Identify: %s\n", device_identify); -#else - scsi_cdrom_t *dev = (scsi_cdrom_t *) ide->sc; -#endif - if (dev->early) + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01")) || (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC only*/ ide->buffer[0] = 0x8000 | (5 << 8) | 0x80 | (1 << 5); /* ATAPI device, CD-ROM drive, removable media, interrupt DRQ */ else ide->buffer[0] = 0x8000 | (5 << 8) | 0x80 | (2 << 5); /* ATAPI device, CD-ROM drive, removable media, accelerated DRQ */ - ide_padstr((char *) (ide->buffer + 10), "", 20); /* Serial Number */ -#ifdef USE_86BOX_CD - ide_padstr((char *) (ide->buffer + 23), EMU_VERSION_EX, 8); /* Firmware */ - ide_padstr((char *) (ide->buffer + 27), device_identify, 40); /* Model */ -#else - if (dev->early) { -# ifdef WRONG - ide_padstr((char *) (ide->buffer + 23), "1.01 ", 8); /* Firmware */ - ide_padstr((char *) (ide->buffer + 27), "NEC CD-ROM DRIVE:260 ", 40); /* Model */ -# else - ide_padstr((char *) (ide->buffer + 23), ".110 ", 8); /* Firmware */ - ide_padstr((char *) (ide->buffer + 27), "EN C DCR-MOD IREV2:06 ", 40); /* Model */ -# endif - } else if (machine_is_sony()) { - ide_padstr((char *) (ide->buffer + 23), "1.0i ", 8); /* Firmware */ - ide_padstr((char *) (ide->buffer + 27), "CD-ROM CDU76 ", 40); /* Model */ + ide_padstr((char *) (ide->buffer + 10), "", 20); /* Serial Number */ + + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "86BOX_CD-ROM_1.00"))) { + ide_padstr((char *) (ide->buffer + 23), EMU_VERSION_EX, 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), device_identify, 40); /* Model */ } else { - ide_padstr((char *) (ide->buffer + 23), "0020 ", 8); /* Firmware */ - ide_padstr((char *) (ide->buffer + 27), "HITACHI CDR-8130 ", 40); /* Model */ + if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01"))) { + ide_padstr((char *) (ide->buffer + 23), ".110 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "EN C DCR-MOD IREV2:06 ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) { + ide_padstr((char *) (ide->buffer + 23), ".100 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "EN C DCR-MOD IREV2:06 ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "AZT_CDA46802I_1.15"))) { + ide_padstr((char *) (ide->buffer + 23), "1.15 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "AZT CDA46802I ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "HITACHI_CDR-8130_0020"))) { + ide_padstr((char *) (ide->buffer + 23), "0020 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "HITACHI CDR-8130 ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU76_1.0i"))) { + ide_padstr((char *) (ide->buffer + 23), "1.0i ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "SONY CD-ROM CDU76 ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU311_3.0h"))) { + ide_padstr((char *) (ide->buffer + 23), "3.0h ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "SONY CD-ROM CDU311 ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CDR-1300A_1.05"))) { + ide_padstr((char *) (ide->buffer + 23), "1.05 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "NEC CDR-1300A ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-5702B_TA70"))) { + ide_padstr((char *) (ide->buffer + 23), "TA70 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "TOSHIBA CD-ROM XM-5702B ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "GOLDSTAR_CRD-8160B_3.14"))) { + ide_padstr((char *) (ide->buffer + 23), "3.14 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "GOLDSTAR CRD-8160B ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-587_7S13"))) { + ide_padstr((char *) (ide->buffer + 23), "7S13 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "MATSHITA CD-ROM CR-587 ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-588_LS15"))) { + ide_padstr((char *) (ide->buffer + 23), "LS15 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "MATSHITA CD-ROM CR-588 ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MITSUMI_CRMC-FX4820T_D02A"))) { + ide_padstr((char *) (ide->buffer + 23), "D02A ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "MITSUMI CRMC-FX4820T ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PHILIPS_CD-ROM_PCA403CD_U31P"))) { + ide_padstr((char *) (ide->buffer + 23), "U31P ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "PHILIPS CD-ROM PCA403CD ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "BTC_CD-ROM_BCD36XH_U1.0"))) { + ide_padstr((char *) (ide->buffer + 23), "U1.0 ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "BTC CD-ROM BCD36XH ", 40); /* Model */ + } else if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "KENWOOD_CD-ROM_UCR-421_208E"))) { + ide_padstr((char *) (ide->buffer + 23), "208E ", 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), "KENWOOD CD-ROM UCR-421 ", 40); /* Model */ + } } -#endif + ide->buffer[49] = 0x200; /* LBA supported */ ide->buffer[126] = 0xfffe; /* Interpret zero byte count limit as maximum length */ @@ -2815,7 +3595,6 @@ scsi_cdrom_drive_reset(int c) dev->drv = drv; dev->cur_lun = SCSI_LUN_USE_CDB; - dev->early = dev->drv->early; drv->insert = scsi_cdrom_insert; drv->get_volume = scsi_cdrom_get_volume; @@ -2854,7 +3633,8 @@ scsi_cdrom_drive_reset(int c) id->phase_data_out = scsi_cdrom_phase_data_out; id->command_stop = scsi_cdrom_command_stop; id->bus_master_error = scsi_cdrom_bus_master_error; - id->interrupt_drq = dev->early; + id->interrupt_drq = (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || + (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))); ide_atapi_attach(id); } diff --git a/src/scsi/scsi_ncr5380.c b/src/scsi/scsi_ncr5380.c index 668f9ea9f..54875963d 100644 --- a/src/scsi/scsi_ncr5380.c +++ b/src/scsi/scsi_ncr5380.c @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the NCR 5380 series of SCSI Host Adapters - * made by NCR. These controllers were designed for the ISA bus. + * Implementation of the NCR 5380 series of SCSI Host Adapters + * made by NCR. These controllers were designed for the ISA bus. * * * - * Authors: Sarah Walker, - * TheCollector1995, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * TheCollector1995, + * Fred N. van Kempen, * - * Copyright 2017-2019 Sarah Walker. - * Copyright 2017-2019 TheCollector1995. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2017-2019 Sarah Walker. + * Copyright 2017-2019 TheCollector1995. + * Copyright 2017-2019 Fred N. van Kempen. */ #include #include @@ -598,7 +598,7 @@ ncr_write(uint16_t port, uint8_t val, void *priv) break; case 2: /* Mode register */ - ncr_log("Write: Mode register, val=%02x\n", val & MODE_DMA); + ncr_log("Write: Mode register, val=%02x.\n", val); if ((val & MODE_ARBITRATE) && !(ncr->mode & MODE_ARBITRATE)) { ncr->icr &= ~ICR_ARB_LOST; ncr->icr |= ICR_ARB_IN_PROGRESS; @@ -741,12 +741,7 @@ ncr_read(uint16_t port, void *priv) break; case 2: /* Mode register */ - if (((ncr->mode & 0x30) == 0x30) && ((ncr_dev->type == 1) && (ncr_dev->bios_ver == 1))) - ncr->mode = 0; - if (((ncr->mode & 0x20) == 0x20) && (ncr_dev->type == 0)) - ncr->mode = 0; - - ncr_log("Read: Mode register\n"); + ncr_log("Read: Mode register = %02x.\n", ncr->mode); ret = ncr->mode; break; @@ -761,10 +756,10 @@ ncr_read(uint16_t port, void *priv) ncr_bus_read(ncr_dev); ncr_log("NCR cur bus stat=%02x\n", ncr->cur_bus & 0xff); ret |= (ncr->cur_bus & 0xff); - if ((ncr->icr & ICR_SEL) && ((ncr_dev->type == 1) && (ncr_dev->bios_ver == 1))) - ret |= 0x02; - if ((ncr->icr & ICR_BSY) && ((ncr_dev->type == 1) && (ncr_dev->bios_ver == 1))) - ret |= 0x40; + if (ncr->icr & ICR_SEL) + ret |= BUS_SEL; + if (ncr->icr & ICR_BSY) + ret |= BUS_BSY; break; case 5: /* Bus and Status register */ @@ -783,9 +778,9 @@ ncr_read(uint16_t port, void *priv) ncr_bus_read(ncr_dev); bus = ncr->cur_bus; - if ((bus & BUS_ACK) || ((ncr->icr & ICR_ACK) && ((ncr_dev->type == 1) && (ncr_dev->bios_ver == 1)))) + if ((bus & BUS_ACK) || (ncr->icr & ICR_ACK)) ret |= STATUS_ACK; - if ((bus & BUS_ATN) || ((ncr->icr & ICR_ATN) && ((ncr_dev->type == 1) && (ncr_dev->bios_ver == 1)))) + if ((bus & BUS_ATN) || (ncr->icr & ICR_ATN)) ret |= 0x02; if ((bus & BUS_REQ) && (ncr->mode & MODE_DMA)) { @@ -885,6 +880,13 @@ memio_read(uint32_t addr, void *priv) ncr_log("NCR status ctrl read=%02x\n", ncr_dev->status_ctrl & STATUS_BUFFER_NOT_READY); if (!ncr_dev->ncr_busy) ret |= STATUS_53C80_ACCESSIBLE; + if (ncr->mode & 0x30) { /*Parity bits*/ + if (!(ncr->mode & MODE_DMA)) { /*This is to avoid RTBios 8.10R BIOS problems with the hard disk and detection.*/ + ret |= 0x01; /*If the parity bits are set, bit 0 of the 53c400 status port should be set as well.*/ + ncr->mode = 0; /*Required by RTASPI10.SYS otherwise it won't initialize.*/ + } + } + ncr_log("NCR 53c400 status = %02x.\n", ret); break; case 0x3981: /* block counter register*/ @@ -948,6 +950,7 @@ memio_write(uint32_t addr, uint8_t val, void *priv) case 0x3980: switch (addr) { case 0x3980: /* Control */ + ncr_log("NCR 53c400 control = %02x, mode = %02x.\n", val, ncr->mode); if ((val & CTRL_DATA_DIR) && !(ncr_dev->status_ctrl & CTRL_DATA_DIR)) { ncr_dev->buffer_host_pos = MIN(128, dev->buffer_length); ncr_dev->status_ctrl |= STATUS_BUFFER_NOT_READY; diff --git a/src/scsi/scsi_spock.c b/src/scsi/scsi_spock.c index ab970f17a..af37d63a4 100644 --- a/src/scsi/scsi_spock.c +++ b/src/scsi/scsi_spock.c @@ -1,21 +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. + * 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. * - * Implementation of the IBM PS/2 SCSI controller with - * cache for MCA only. + * Implementation of the IBM PS/2 SCSI controller with + * cache for MCA only. * * * - * Authors: Sarah Walker, - * TheCollector1995, + * Authors: Sarah Walker, + * TheCollector1995, * - * Copyright 2020 Sarah Walker. - * Copyright 2020 TheCollector1995. + * Copyright 2020 Sarah Walker. + * Copyright 2020 TheCollector1995. */ #include #include @@ -126,9 +126,10 @@ typedef struct { get_pos_info_t get_pos_info; scb_t scb; - int adapter_reset; int scb_id; int adapter_id; + int assign; + int present[8]; int cmd_status; int cir_status; @@ -380,7 +381,7 @@ spock_read(uint16_t port, void *p) break; } - spock_log("spock_read: port=%04x val=%02x %04x(%05x):%04x %02x\n", port, temp, CS, cs, cpu_state.pc, BH); + spock_log("spock_read: port=%04x val=%02x %04x(%05x):%04x.\n", port, temp, CS, cs, cpu_state.pc); return temp; } @@ -436,11 +437,14 @@ spock_get_len(spock_t *scsi, scb_t *scb) static void spock_process_imm_cmd(spock_t *scsi) { - int i; + int i, j = 0; int adapter_id, phys_id, lun_id; + scsi->assign = 0; + switch (scsi->command & CMD_MASK) { case CMD_ASSIGN: + scsi->assign = 1; adapter_id = (scsi->command >> 16) & 15; phys_id = (scsi->command >> 20) & 7; lun_id = (scsi->command >> 24) & 7; @@ -458,10 +462,10 @@ spock_process_imm_cmd(spock_t *scsi) if (phys_id != scsi->adapter_id) { scsi->dev_id[adapter_id].phys_id = phys_id; scsi->dev_id[adapter_id].lun_id = lun_id; - spock_log("Assign: adapter dev=%x scsi ID=%i LUN=%i\n", adapter_id, scsi->dev_id[adapter_id].phys_id, scsi->dev_id[adapter_id].lun_id); + spock_log("Assign: adapter dev=%x scsi ID=%i LUN=%i.\n", adapter_id, scsi->dev_id[adapter_id].phys_id, scsi->dev_id[adapter_id].lun_id); spock_set_irq(scsi, scsi->attention & 0x0f, IRQ_TYPE_IMM_CMD_COMPLETE); } else { /*Can not assign adapter*/ - spock_log("Assign: PUN=%d, cannot assign adapter\n", phys_id); + spock_log("Assign: PUN=%d, cannot assign adapter.\n", phys_id); spock_set_irq(scsi, scsi->attention & 0x0f, IRQ_TYPE_COMMAND_FAIL); } } @@ -481,18 +485,25 @@ spock_process_imm_cmd(spock_t *scsi) spock_set_irq(scsi, scsi->attention & 0x0f, IRQ_TYPE_IMM_CMD_COMPLETE); break; case CMD_RESET: - spock_log("Reset Command\n"); + spock_log("Reset Command, attention = %d.\n", scsi->attention & 0x0f); if ((scsi->attention & 0x0f) == 0x0f) { /*Adapter reset*/ - for (i = 0; i < 8; i++) + for (i = 0; i < 8; i++) { scsi_device_reset(&scsi_devices[scsi->bus][i]); - spock_log("Adapter Reset\n"); + } - if (!scsi->adapter_reset) /*The early 1990 bios must have its boot drive - set to ID 6 according https://www.ardent-tool.com/IBM_SCSI/SCSI-A.html */ - scsi->adapter_reset = 1; + for (i = 6; i > -1; i--) { + if (scsi_device_present(&scsi_devices[scsi->bus][i])) { + spock_log("Adapter Reset, SCSI reset present devices=%d, phys ID=%d, type=%04x.\n", j, scsi->dev_id[i].phys_id, scsi_devices[scsi->bus][i].type); + scsi->present[j] = i; + j++; + } else { + spock_log("Adapter Reset, SCSI reset not present devices=%d, phys ID=%d, type=%04x.\n", j, scsi->dev_id[i].phys_id, scsi_devices[scsi->bus][i].type); + } + } scsi->scb_state = 0; } + spock_set_irq(scsi, scsi->attention & 0x0f, IRQ_TYPE_IMM_CMD_COMPLETE); break; @@ -505,7 +516,7 @@ spock_process_imm_cmd(spock_t *scsi) static void spock_execute_cmd(spock_t *scsi, scb_t *scb) { - int c; + int c, j; int old_scb_state; if (scsi->in_reset) { @@ -519,9 +530,9 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) if (scsi->in_reset == 1) { scsi->basic_ctrl |= CTRL_IRQ_ENA; - spock_set_irq(scsi, 0x0f, IRQ_TYPE_RESET_COMPLETE); - } else - spock_set_irq(scsi, 0x0f, IRQ_TYPE_RESET_COMPLETE); + } + + spock_set_irq(scsi, 0x0f, IRQ_TYPE_RESET_COMPLETE); /*Reset device mappings*/ for (c = 0; c < 7; c++) { @@ -532,6 +543,16 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) scsi->dev_id[c].phys_id = -1; scsi->in_reset = 0; + + for (c = 6; c > -1; c--) { + if (scsi_device_present(&scsi_devices[scsi->bus][c])) { + spock_log("Reset, SCSI reset present devices=%d, phys ID=%d, type=%04x.\n", j, scsi->dev_id[c].phys_id, scsi_devices[scsi->bus][c].type); + scsi->present[j] = c; + j++; + } else { + spock_log("Reset, SCSI reset not present devices=%d, phys ID=%d, type=%04x.\n", j, scsi->dev_id[c].phys_id, scsi_devices[scsi->bus][c].type); + } + } return; } @@ -584,11 +605,11 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) " SCB chain address = %08x\n" " Block count = %04x\n" " Block length = %04x\n" - " SCB id = %d, Phys id = %d\n", + " SCB id = %d, Phys id = %d, Spock CMD = %08x, CMD Mask = %02x.\n", scb->command, scb->enable, scb->lba_addr, scb->sge.sys_buf_addr, scb->sge.sys_buf_byte_count, scb->term_status_block_addr, scb->scb_chain_addr, - scb->block_count, scb->block_length, scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id); + scb->block_count, scb->block_length, scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id, scsi->command, scb->command & 0xc0); switch (scb->command & CMD_MASK) { case CMD_GET_COMPLETE_STATUS: @@ -662,10 +683,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) break; case CMD_DEVICE_INQUIRY: - if (scb->command != CMD_DEVICE_INQUIRY) - scsi->cdb_id = scsi->scb_id; - else - scsi->cdb_id = scsi->dev_id[scsi->scb_id].phys_id; + scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id]; spock_log("Device Inquiry, ID=%d\n", scsi->cdb_id); scsi->cdb[0] = GPCMD_INQUIRY; scsi->cdb[1] = scsi->dev_id[scsi->scb_id].lun_id << 5; /*LUN*/ @@ -681,12 +699,9 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) return; case CMD_SEND_OTHER_SCSI: - if (scb->command != CMD_SEND_OTHER_SCSI) - scsi->cdb_id = scsi->scb_id; - else - scsi->cdb_id = scsi->dev_id[scsi->scb_id].phys_id; - spock_log("Send Other SCSI, SCB ID=%d, PHYS ID=%d, reset=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id, scsi->adapter_reset); + scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id]; dma_bm_read(scsi->scb_addr + 0x18, scsi->cdb, 12, 2); + spock_log("Send Other SCSI, SCB ID=%d, PHYS ID=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id); scsi->cdb[1] = (scsi->cdb[1] & 0x1f) | (scsi->dev_id[scsi->scb_id].lun_id << 5); /*Patch correct LUN into command*/ scsi->cdb_len = (scb->lba_addr & 0xff) ? (scb->lba_addr & 0xff) : 6; scsi->scsi_state = SCSI_STATE_SELECT; @@ -694,11 +709,8 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) return; case CMD_READ_DEVICE_CAPACITY: - if (scb->command != CMD_READ_DEVICE_CAPACITY) - scsi->cdb_id = scsi->scb_id; - else - scsi->cdb_id = scsi->dev_id[scsi->scb_id].phys_id; - spock_log("Device Capacity, SCB ID=%d, PHYS ID=%d, reset=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id, scsi->adapter_reset); + scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id]; + spock_log("Device Capacity, SCB ID=%d, PHYS ID=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id); scsi->cdb[0] = GPCMD_READ_CDROM_CAPACITY; scsi->cdb[1] = scsi->dev_id[scsi->scb_id].lun_id << 5; /*LUN*/ scsi->cdb[2] = 0; /*LBA*/ @@ -715,11 +727,8 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) return; case CMD_READ_DATA: - if (scb->command != CMD_READ_DATA) - scsi->cdb_id = scsi->scb_id; - else - scsi->cdb_id = scsi->dev_id[scsi->scb_id].phys_id; - spock_log("Device Read Data, SCB ID=%d, PHYS ID=%d, reset=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id, scsi->adapter_reset); + scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id]; + spock_log("Device Read Data, SCB ID=%d, PHYS ID=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id); scsi->cdb[0] = GPCMD_READ_10; scsi->cdb[1] = scsi->dev_id[scsi->scb_id].lun_id << 5; /*LUN*/ scsi->cdb[2] = (scb->lba_addr >> 24) & 0xff; /*LBA*/ @@ -736,10 +745,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) return; case CMD_WRITE_DATA: - if (scb->command != CMD_WRITE_DATA) - scsi->cdb_id = scsi->scb_id; - else - scsi->cdb_id = scsi->dev_id[scsi->scb_id].phys_id; + scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id]; spock_log("Device Write Data\n"); scsi->cdb[0] = GPCMD_WRITE_10; scsi->cdb[1] = scsi->dev_id[scsi->scb_id].lun_id << 5; /*LUN*/ @@ -757,10 +763,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) return; case CMD_VERIFY: - if (scb->command != CMD_VERIFY) - scsi->cdb_id = scsi->scb_id; - else - scsi->cdb_id = scsi->dev_id[scsi->scb_id].phys_id; + scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id]; spock_log("Device Verify\n"); scsi->cdb[0] = GPCMD_VERIFY_10; scsi->cdb[1] = scsi->dev_id[scsi->scb_id].lun_id << 5; /*LUN*/ @@ -779,10 +782,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) return; case CMD_REQUEST_SENSE: - if (scb->command != CMD_REQUEST_SENSE) - scsi->cdb_id = scsi->scb_id; - else - scsi->cdb_id = scsi->dev_id[scsi->scb_id].phys_id; + scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id]; spock_log("Device Request Sense, ID=%d\n", scsi->cdb_id); scsi->cdb[0] = GPCMD_REQUEST_SENSE; scsi->cdb[1] = scsi->dev_id[scsi->scb_id].lun_id << 5; /*LUN*/ @@ -802,7 +802,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) if (scsi_device_present(&scsi_devices[scsi->bus][scsi->cdb_id])) { if (scsi->last_status == SCSI_STATUS_OK) { scsi->scb_state = 3; - spock_log("Status is Good on device ID %d, reset = %d\n", scsi->scb_id, scsi->adapter_reset); + spock_log("Status is Good on device ID %d, cdb id = %d.\n", scsi->scb_id, scsi->cdb_id); } else if (scsi->last_status == SCSI_STATUS_CHECK_CONDITION) { uint16_t term_stat_block_addr7 = (0xc << 8) | 2; uint16_t term_stat_block_addr8 = 0x20; @@ -811,7 +811,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) spock_set_irq(scsi, scsi->scb_id, IRQ_TYPE_COMMAND_FAIL); scsi->scb_state = 0; - spock_log("Status Check Condition on device ID %d, reset = %d\n", scsi->scb_id, scsi->adapter_reset); + spock_log("Status Check Condition on device ID %d, cdb id = %d.\n", scsi->attention & 0x0f, scsi->cdb_id); dma_bm_write(scb->term_status_block_addr + 0x7 * 2, (uint8_t *) &term_stat_block_addr7, 2, 2); dma_bm_write(scb->term_status_block_addr + 0x8 * 2, (uint8_t *) &term_stat_block_addr8, 2, 2); dma_bm_write(scb->term_status_block_addr + 0xb * 2, (uint8_t *) &term_stat_block_addrb, 2, 2); @@ -822,7 +822,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) uint16_t term_stat_block_addr8 = 0x10; spock_set_irq(scsi, scsi->scb_id, IRQ_TYPE_COMMAND_FAIL); scsi->scb_state = 0; - spock_log("Status Check Condition on device ID %d on no device, reset = %d\n", scsi->scb_id, scsi->adapter_reset); + spock_log("Status Check Condition on device ID %d on no device\n", scsi->scb_id); dma_bm_write(scb->term_status_block_addr + 0x7 * 2, (uint8_t *) &term_stat_block_addr7, 2, 2); dma_bm_write(scb->term_status_block_addr + 0x8 * 2, (uint8_t *) &term_stat_block_addr8, 2, 2); } @@ -837,7 +837,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb) } else { spock_set_irq(scsi, scsi->scb_id, IRQ_TYPE_SCB_COMPLETE); scsi->scb_state = 0; - spock_log("Complete SCB\n"); + spock_log("Complete SCB ID = %d.\n", scsi->attention & 0x0f); } break; } @@ -856,12 +856,12 @@ spock_process_scsi(spock_t *scsi, scb_t *scb) break; case SCSI_STATE_SELECT: - spock_log("Selecting ID %d\n", scsi->cdb_id); + spock_log("Selecting ID %d, SCB ID %d, LUN %d, adapter id = %d.\n", scsi->cdb_id, scsi->scb_id, scsi->dev_id[scsi->scb_id].lun_id, scsi->attention); if ((scsi->cdb_id != (uint8_t) -1) && scsi_device_present(&scsi_devices[scsi->bus][scsi->cdb_id])) { scsi->scsi_state = SCSI_STATE_SEND_COMMAND; - spock_log("Device selected at ID %i\n", scsi->cdb_id); + spock_log("Device selected at ID %i.\n", scsi->cdb_id); } else { - spock_log("Device selection failed at ID %i\n", scsi->cdb_id); + spock_log("Device selection failed at ID %i.\n", scsi->cdb_id); scsi->scsi_state = SCSI_STATE_IDLE; if (!scsi->cmd_timer) { spock_log("Callback to reset\n"); @@ -985,6 +985,7 @@ spock_callback(void *priv) scsi->cir[3] = scsi->cir_pending[3]; scsi->cir_status = 0; + spock_log("SCSI attention = %02x.\n", scsi->attention_pending); switch (scsi->attention >> 4) { case 1: /*Immediate command*/ scsi->cmd_status = 0x0a; @@ -1007,7 +1008,7 @@ spock_callback(void *priv) scsi->scb_addr = scsi->cir[0] | (scsi->cir[1] << 8) | (scsi->cir[2] << 16) | (scsi->cir[3] << 24); scsi->scb_id = scsi->attention & 0x0f; scsi->cmd_timer = SPOCK_TIME * 2; - spock_log("Start SCB at ID = %d\n", scsi->scb_id); + spock_log("Start SCB at ID = %d, attention = %02x\n", scsi->scb_id, scsi->attention >> 4); scsi->scb_state = 1; break; @@ -1019,7 +1020,7 @@ spock_callback(void *priv) case 0x0e: /*EOI*/ scsi->irq_status = 0; - spock_clear_irq(scsi, scsi->attention & 0xf); + spock_clear_irq(scsi, scsi->attention & 0x0f); break; } } @@ -1049,10 +1050,9 @@ spock_mca_write(int port, uint8_t val, void *priv) if (scsi->pos_regs[2] & 1) { io_sethandler((((scsi->pos_regs[2] >> 1) & 7) * 8) + 0x3540, 0x0008, spock_read, spock_readw, NULL, spock_write, spock_writew, NULL, scsi); - if ((scsi->pos_regs[2] >> 4) == 0x0f) - mem_mapping_disable(&scsi->bios_rom.mapping); - else { + if ((scsi->pos_regs[2] & 0xf0) != 0xf0) { mem_mapping_set_addr(&scsi->bios_rom.mapping, ((scsi->pos_regs[2] >> 4) * 0x2000) + 0xc0000, 0x8000); + mem_mapping_enable(&scsi->bios_rom.mapping); } } } @@ -1089,10 +1089,10 @@ spock_mca_reset(void *priv) scsi->basic_ctrl = 0; /* Reset all devices on controller reset. */ - for (i = 0; i < 8; i++) + for (i = 0; i < 8; i++) { scsi_device_reset(&scsi_devices[scsi->bus][i]); - - scsi->adapter_reset = 0; + scsi->present[i] = 0; + } } static void * @@ -1175,7 +1175,7 @@ static const device_config_t spock_rom_config[] = { }, }, { .name = "", .description = "", .type = CONFIG_END } - // clang-format on +// clang-format on }; const device_t spock_device = { From 5c0fa85d87e50387e95d1e501795fd82b30cad99 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sun, 8 Jan 2023 00:05:58 +0100 Subject: [PATCH 093/112] QT: Fix compile. --- src/qt/qt_settingsstoragecontrollers.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index ac406853c..14b0fb1dc 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -250,6 +250,12 @@ SettingsStorageControllers::on_pushButtonFD_clicked() DeviceConfig::ConfigureDevice(fdc_card_getdevice(ui->comboBoxFD->currentData().toInt()), 0, qobject_cast(Settings::settings)); } +void +SettingsStorageControllers::on_pushButtonCDInterface_clicked() +{ + DeviceConfig::ConfigureDevice(cdrom_interface_get_device(ui->comboBoxCDInterface->currentData().toInt()), 0, qobject_cast(Settings::settings)); +} + void SettingsStorageControllers::on_pushButtonTertiaryIDE_clicked() { From c4ce53c91f793f2fff87ad7ebe1890d351857f1f Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sun, 8 Jan 2023 14:19:28 +0100 Subject: [PATCH 094/112] Fix compile again for github. --- src/86box.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/86box.c b/src/86box.c index 7beef9333..c3b66db05 100644 --- a/src/86box.c +++ b/src/86box.c @@ -80,6 +80,7 @@ #include <86box/scsi.h> #include <86box/scsi_device.h> #include <86box/cdrom.h> +#include <86box/cdrom_interface.h> #include <86box/zip.h> #include <86box/mo.h> #include <86box/scsi_disk.h> From 1064c697e29525264f4418d0dce0b31f7c9ffc2a Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sun, 8 Jan 2023 14:25:18 +0100 Subject: [PATCH 095/112] Darn git. --- .ci/AppImageBuilder.yml | 28 +- .ci/Jenkinsfile | 16 +- .ci/build.sh | 16 +- .ci/static2dll.sh | 16 +- CMakeLists.txt | 2 +- README.md | 2 +- bumpversion.sh | 16 +- cmake/flags-gcc-aarch64.cmake | 20 +- cmake/flags-gcc-armv7.cmake | 20 +- cmake/flags-gcc-i686.cmake | 18 +- cmake/flags-gcc-x86_64.cmake | 18 +- cmake/flags-gcc.cmake | 16 +- cmake/llvm-macos-aarch64.cmake | 24 +- cmake/llvm-win32-aarch64.cmake | 18 +- cmake/llvm-win32-arm.cmake | 16 +- cmake/llvm-win32-i686.cmake | 18 +- cmake/llvm-win32-x86_64.cmake | 18 +- debian/changelog | 2 +- src/86box.c | 2 +- src/Makefile.local | 64 +- src/cdrom/CMakeLists.txt | 2 +- src/chipset/CMakeLists.txt | 2 +- src/chipset/acc2168.c | 2 +- src/chipset/ali1429.c | 4 +- src/chipset/ali1489.c | 4 +- src/chipset/cs8230.c | 2 +- src/chipset/headland.c | 2 +- src/chipset/scamp.c | 2 +- src/chipset/sis_85c4xx.c | 2 +- src/chipset/via_apollo.c | 2 +- src/chipset/via_pipc.c | 2 +- src/codegen/CMakeLists.txt | 2 +- src/codegen/codegen.h | 2 +- src/codegen/codegen_ops_x86-64.h | 2 +- src/codegen/codegen_x86.c | 2 +- src/codegen_new/CMakeLists.txt | 2 +- src/codegen_new/codegen_backend_arm_uops.c | 8 +- src/config.c | 4 +- src/cpu/386_common.h | 2 +- src/cpu/386_ops.h | 2 +- src/cpu/CMakeLists.txt | 2 +- src/cpu/codegen_timing_686.c | 6 +- src/cpu/codegen_timing_k6.c | 2 +- src/cpu/codegen_timing_p6.c | 54 +- src/cpu/cpu.c | 2 +- src/cpu/cpu.h | 2 +- src/cpu/cpu_table.c | 1999 ++++++++--------- src/cpu/fpu.c | 2 +- src/cpu/x86_ops.h | 2 +- src/cpu/x86seg.c | 2 +- src/cpu/x87_ops.h | 2 +- src/cpu/x87_ops_loadstore.h | 2 +- src/crcspeed/crc64speed.c | 12 +- src/device.c | 2 +- src/device/CMakeLists.txt | 2 +- src/device/keyboard.c | 2 +- src/device/keyboard_at.c | 8 +- src/device/keyboard_xt.c | 216 +- src/device/mouse_bus.c | 14 +- src/device/mouse_ps2.c | 2 +- src/device/phoenix_486_jumper.c | 2 + src/device/serial.c | 2 +- src/disk/CMakeLists.txt | 2 +- src/disk/hdc.c | 2 +- src/disk/hdc_esdi_at.c | 2 +- src/disk/hdc_esdi_mca.c | 4 +- src/disk/hdc_ide.c | 16 +- src/disk/hdc_ide_sff8038i.c | 2 +- src/disk/hdc_st506_at.c | 2 +- src/disk/hdc_st506_xt.c | 74 +- src/disk/hdc_xta.c | 2 +- src/disk/hdc_xtide.c | 2 +- src/disk/hdd_image.c | 2 +- src/disk/hdd_table.c | 2 +- src/disk/zip.c | 5 +- src/dma.c | 2 +- src/floppy/CMakeLists.txt | 2 +- src/floppy/fdc.c | 10 +- src/floppy/fdd.c | 56 +- src/floppy/fdd_86f.c | 50 +- src/floppy/fdd_common.c | 501 +++-- src/floppy/fdd_fdi.c | 4 +- src/floppy/fdd_img.c | 447 ++-- src/floppy/fdd_td0.c | 14 +- src/floppy/fdi2raw.c | 957 ++++---- src/game/CMakeLists.txt | 2 +- src/game/gameport.c | 2 +- src/game/joystick_ch_flightstick_pro.c | 2 +- src/game/joystick_standard.c | 2 +- src/game/joystick_sw_pad.c | 2 +- src/game/joystick_tm_fcs.c | 2 +- src/include/86box/apm.h | 16 +- src/include/86box/bswap.h | 2 +- src/include/86box/bugger.h | 28 +- src/include/86box/cartridge.h | 16 +- src/include/86box/cdrom.h | 16 +- src/include/86box/cdrom_image.h | 22 +- src/include/86box/cdrom_image_backend.h | 26 +- src/include/86box/cdrom_mitsumi.h | 16 +- src/include/86box/chipset.h | 2 +- src/include/86box/clock.h | 16 +- src/include/86box/config.h | 2 +- src/include/86box/ddma.h | 16 +- src/include/86box/device.h | 2 +- src/include/86box/discord.h | 16 +- src/include/86box/dma.h | 2 +- src/include/86box/fdc.h | 2 +- src/include/86box/fdc_ext.h | 26 +- src/include/86box/fdd.h | 2 +- src/include/86box/fdd_86f.h | 20 +- src/include/86box/fdd_common.h | 16 +- src/include/86box/fdd_fdi.h | 26 +- src/include/86box/fdd_imd.h | 20 +- src/include/86box/fdd_img.h | 26 +- src/include/86box/fdd_json.h | 2 +- src/include/86box/fdd_mfm.h | 16 +- src/include/86box/fdd_td0.h | 20 +- src/include/86box/gameport.h | 24 +- src/include/86box/hdc_ide.h | 22 +- src/include/86box/hdc_ide_sff8038i.h | 21 +- src/include/86box/hdd.h | 21 +- src/include/86box/i2c.h | 16 +- src/include/86box/i8080.h | 18 +- src/include/86box/ibm_5161.h | 17 +- src/include/86box/ini.h | 4 +- src/include/86box/io.h | 22 +- src/include/86box/isapnp.h | 16 +- .../86box/joystick_ch_flightstick_pro.h | 20 +- src/include/86box/joystick_standard.h | 2 +- src/include/86box/joystick_sw_pad.h | 4 +- src/include/86box/joystick_tm_fcs.h | 4 +- src/include/86box/keyboard.h | 2 +- src/include/86box/language.h | 20 +- src/include/86box/log.h | 20 +- src/include/86box/lpt.h | 8 +- src/include/86box/m_amstrad.h | 20 +- src/include/86box/m_at_t3100e.h | 4 +- src/include/86box/m_xt_t1000.h | 4 +- src/include/86box/machine.h | 2 +- src/include/86box/mem.h | 2 +- src/include/86box/mo.h | 20 +- src/include/86box/mouse.h | 20 +- src/include/86box/net_3c501.h | 21 +- src/include/86box/net_3c503.h | 43 + src/include/86box/net_dp8390.h | 22 +- src/include/86box/net_ne2000.h | 2 +- src/include/86box/net_pcnet.h | 22 +- src/include/86box/net_plip.h | 17 +- src/include/86box/net_wd8003.h | 32 +- src/include/86box/nvr_ps2.h | 4 +- src/include/86box/pci.h | 2 +- src/include/86box/pic.h | 22 +- src/include/86box/pit.h | 19 +- src/include/86box/pit_fast.h | 19 +- src/include/86box/plat_dir.h | 17 +- src/include/86box/plat_dynld.h | 17 +- src/include/86box/port_6x.h | 18 +- src/include/86box/port_92.h | 18 +- src/include/86box/postcard.h | 16 +- src/include/86box/random.h | 19 +- src/include/86box/resource.h | 28 +- src/include/86box/rom.h | 17 +- src/include/86box/scsi.h | 24 +- src/include/86box/scsi_buslogic.h | 23 +- src/include/86box/scsi_cdrom.h | 18 +- src/include/86box/scsi_device.h | 20 +- src/include/86box/scsi_disk.h | 15 +- src/include/86box/scsi_ncr5380.h | 28 +- src/include/86box/scsi_ncr53c8xx.h | 30 +- src/include/86box/scsi_pcscsi.h | 28 +- src/include/86box/scsi_spock.h | 22 +- src/include/86box/scsi_x54x.h | 28 +- src/include/86box/serial.h | 2 +- src/include/86box/smram.h | 16 +- src/include/86box/snd_ac97.h | 16 +- src/include/86box/snd_ad1848.h | 24 +- src/include/86box/snd_mpu401.h | 29 +- src/include/86box/snd_opl.h | 20 +- src/include/86box/snd_opl_nuked.h | 22 +- src/include/86box/snd_sb.h | 2 +- src/include/86box/snd_speaker.h | 20 +- src/include/86box/sound.h | 2 +- src/include/86box/ui.h | 20 +- src/include/86box/usb.h | 16 +- src/include/86box/vid_8514a.h | 18 +- src/include/86box/vid_cga.h | 21 +- src/include/86box/vid_cga_comp.h | 23 +- src/include/86box/vid_ddc.h | 20 +- src/include/86box/vid_ega.h | 22 +- src/include/86box/vid_hercules.h | 24 +- src/include/86box/vid_nga.h | 30 +- src/include/86box/vid_ogc.h | 30 +- src/include/86box/vid_pgc.h | 20 +- src/include/86box/vid_pgc_palette.h | 20 +- src/include/86box/vid_svga.h | 2 +- src/include/86box/vid_svga_render.h | 21 +- src/include/86box/vid_vga.h | 24 +- src/include/86box/vid_voodoo_banshee.h | 16 +- .../86box/vid_voodoo_banshee_blitter.h | 16 +- src/include/86box/vid_voodoo_blitter.h | 2 +- src/include/86box/vid_voodoo_common.h | 18 +- src/include/86box/vid_voodoo_display.h | 18 +- src/include/86box/vid_voodoo_dither.h | 18 +- src/include/86box/vid_voodoo_fb.h | 18 +- src/include/86box/vid_voodoo_fifo.h | 18 +- src/include/86box/vid_voodoo_reg.h | 18 +- src/include/86box/vid_voodoo_setup.h | 18 +- src/include/86box/vid_voodoo_texture.h | 18 +- src/include/86box/video.h | 2 +- src/include/86box/vnc.h | 16 +- src/include/86box/win.h | 26 +- src/include/86box/win_opengl.h | 16 +- src/include/86box/win_opengl_glslp.h | 16 +- src/include/86box/win_sdl.h | 48 +- src/include/86box/zip.h | 18 +- src/include/fdi2raw.h | 86 +- src/include/glad/glad.h | 2 +- src/include/minitrace/minitrace.h | 82 +- src/ini.c | 4 +- src/io.c | 2 +- src/mac/CMakeLists.txt | 4 +- src/machine/CMakeLists.txt | 2 +- src/machine/m_amstrad.c | 158 +- src/machine/m_at.c | 2 +- src/machine/m_at_286_386sx.c | 2 +- src/machine/m_at_386dx_486.c | 187 +- src/machine/m_at_commodore.c | 4 +- src/machine/m_at_compaq.c | 10 +- src/machine/m_at_slot1.c | 2 +- src/machine/m_at_socket370.c | 32 +- src/machine/m_at_socket4.c | 106 +- src/machine/m_at_socket5.c | 78 +- src/machine/m_at_socket7.c | 234 +- src/machine/m_at_socket7_3v.c | 139 +- src/machine/m_at_socket8.c | 80 +- src/machine/m_at_sockets7.c | 2 +- src/machine/m_at_t3100e.c | 8 +- src/machine/m_at_t3100e_vid.c | 2 +- src/machine/m_elt.c | 2 - src/machine/m_europc.c | 86 +- src/machine/m_pcjr.c | 2 +- src/machine/m_ps1.c | 2 +- src/machine/m_ps2_mca.c | 2 +- src/machine/m_tandy.c | 216 +- src/machine/m_xt_compaq.c | 2 +- src/machine/m_xt_olivetti.c | 430 ++-- src/machine/m_xt_t1000.c | 6 +- src/machine/m_xt_t1000_vid.c | 2 +- src/machine/m_xt_zenith.c | 2 +- src/machine/machine.c | 2 +- src/machine/machine_table.c | 2 +- src/mem/CMakeLists.txt | 2 +- src/mem/catalyst_flash.c | 2 +- src/mem/intel_flash.c | 2 +- src/mem/mem.c | 2 +- src/mem/rom.c | 2 +- src/mem/sst_flash.c | 2 +- src/minitrace/minitrace.c | 629 +++--- src/network/CMakeLists.txt | 2 +- src/network/net_3c501.c | 23 +- src/network/net_3c503.c | 9 +- src/network/net_dp8390.c | 4 +- src/network/net_ne2000.c | 2 +- src/network/pcap_if.c | 2 +- src/network/slirp/CMakeLists.txt | 2 +- src/nvr.c | 2 +- src/nvr_at.c | 2 +- src/nvr_ps2.c | 4 +- src/pci.c | 2 +- src/printer/CMakeLists.txt | 2 +- src/printer/prt_escp.c | 4 +- src/printer/prt_text.c | 2 +- src/qt/evdev_mouse.cpp | 16 +- src/qt/qt.c | 14 +- src/qt/qt_cdrom.c | 22 +- src/qt/qt_deviceconfig.cpp | 18 +- src/qt/qt_filefield.cpp | 18 +- src/qt/qt_harddiskdialog.cpp | 18 +- src/qt/qt_harddrive_common.cpp | 16 +- src/qt/qt_hardwarerenderer.cpp | 20 +- src/qt/qt_joystickconfiguration.cpp | 16 +- src/qt/qt_machinestatus.cpp | 18 +- src/qt/qt_main.cpp | 20 +- src/qt/qt_mainwindow.cpp | 22 +- src/qt/qt_mediahistorymanager.cpp | 16 +- src/qt/qt_mediahistorymanager.hpp | 16 +- src/qt/qt_mediamenu.cpp | 20 +- src/qt/qt_models_common.cpp | 16 +- src/qt/qt_newfloppydialog.cpp | 20 +- src/qt/qt_opengloptions.cpp | 19 +- src/qt/qt_opengloptions.hpp | 19 +- src/qt/qt_opengloptionsdialog.cpp | 19 +- src/qt/qt_opengloptionsdialog.hpp | 17 +- src/qt/qt_openglrenderer.cpp | 19 +- src/qt/qt_openglrenderer.hpp | 19 +- src/qt/qt_platform.cpp | 21 +- src/qt/qt_progsettings.cpp | 14 +- src/qt/qt_renderercommon.cpp | 14 +- src/qt/qt_rendererstack.cpp | 18 +- src/qt/qt_sdl.c | 54 +- src/qt/qt_sdl.h | 48 +- src/qt/qt_settings.cpp | 16 +- src/qt/qt_settings_bus_tracking.cpp | 16 +- src/qt/qt_settingsdisplay.cpp | 16 +- src/qt/qt_settingsfloppycdrom.cpp | 18 +- src/qt/qt_settingsharddisks.cpp | 18 +- src/qt/qt_settingsinput.cpp | 16 +- src/qt/qt_settingsmachine.cpp | 16 +- src/qt/qt_settingsnetwork.cpp | 16 +- src/qt/qt_settingsotherperipherals.cpp | 16 +- src/qt/qt_settingsotherremovable.cpp | 18 +- src/qt/qt_settingsports.cpp | 20 +- src/qt/qt_settingssound.cpp | 16 +- src/qt/qt_settingsstoragecontrollers.cpp | 16 +- src/qt/qt_softwarerenderer.cpp | 20 +- src/qt/qt_soundgain.cpp | 16 +- src/qt/qt_specifydimensions.cpp | 16 +- src/qt/qt_styleoverride.cpp | 16 +- src/qt/qt_ui.cpp | 18 +- src/qt/qt_unixmanagerfilter.cpp | 23 +- src/qt/qt_unixmanagerfilter.hpp | 21 +- src/qt/qt_util.cpp | 16 +- src/qt/qt_winmanagerfilter.cpp | 19 +- src/qt/qt_winmanagerfilter.hpp | 19 +- src/qt/qt_winrawinputfilter.cpp | 23 +- src/qt/qt_winrawinputfilter.hpp | 19 +- src/qt/win_dynld.c | 16 +- src/qt/win_joystick_rawinput.c | 26 +- src/qt/wl_mouse.cpp | 16 +- src/qt/xinput2_mouse.cpp | 16 +- src/scsi/CMakeLists.txt | 2 +- src/scsi/scsi_aha154x.c | 18 +- src/scsi/scsi_buslogic.c | 2 +- src/scsi/scsi_cdrom.c | 8 +- src/scsi/scsi_spock.c | 12 +- src/scsi/scsi_x54x.c | 16 +- src/sio/CMakeLists.txt | 2 +- src/sio/sio_82091aa.c | 17 +- src/sio/sio_acc3221.c | 204 +- src/sio/sio_ali5123.c | 17 +- src/sio/sio_detect.c | 16 +- src/sio/sio_f82c710.c | 38 +- src/sio/sio_fdc37c669.c | 17 +- src/sio/sio_fdc37c67x.c | 25 +- src/sio/sio_fdc37c6xx.c | 2 +- src/sio/sio_fdc37c93x.c | 19 +- src/sio/sio_fdc37m60x.c | 19 +- src/sio/sio_it8661f.c | 18 +- src/sio/sio_pc87306.c | 19 +- src/sio/sio_pc87307.c | 19 +- src/sio/sio_pc87309.c | 19 +- src/sio/sio_pc87310.c | 26 +- src/sio/sio_pc87311.c | 19 +- src/sio/sio_pc87332.c | 19 +- src/sio/sio_prime3b.c | 19 +- src/sio/sio_prime3c.c | 19 +- src/sio/sio_um8669f.c | 56 +- src/sio/sio_vt82c686.c | 16 +- src/sio/sio_w83787f.c | 20 +- src/sio/sio_w83877f.c | 20 +- src/sio/sio_w83977f.c | 20 +- src/sound/CMakeLists.txt | 2 +- src/sound/midi.c | 2 +- src/sound/openal.c | 2 +- src/sound/resid-fp/CMakeLists.txt | 2 +- src/sound/snd_ad1848.c | 2 +- src/sound/snd_audiopci.c | 2 +- src/sound/snd_mpu401.c | 2 +- src/sound/snd_sb.c | 2 +- src/sound/snd_speaker.c | 2 +- src/sound/snd_wss.c | 2 +- src/sound/sound.c | 2 +- src/unix/assets/86Box.spec | 2 +- src/unix/unix_cdrom.c | 4 +- src/video/CMakeLists.txt | 2 +- src/video/agpgart.c | 16 +- src/video/vid_8514a.c | 18 +- src/video/vid_ati18800.c | 20 +- src/video/vid_ati28800.c | 24 +- src/video/vid_ati68860_ramdac.c | 52 +- src/video/vid_ati_eeprom.c | 20 +- src/video/vid_ati_mach64.c | 20 +- src/video/vid_att20c49x_ramdac.c | 20 +- src/video/vid_att2xc498_ramdac.c | 20 +- src/video/vid_av9194.c | 18 +- src/video/vid_bt48x_ramdac.c | 22 +- src/video/vid_cga.c | 20 +- src/video/vid_cga_comp.c | 22 +- src/video/vid_cl54xx.c | 2 +- src/video/vid_colorplus.c | 20 +- src/video/vid_compaq_cga.c | 24 +- src/video/vid_ddc.c | 16 +- src/video/vid_ega.c | 22 +- src/video/vid_ega_render.c | 20 +- src/video/vid_et3000.c | 18 +- src/video/vid_et4000.c | 4 +- src/video/vid_et4000w32.c | 2 +- src/video/vid_f82c425.c | 48 +- src/video/vid_genius.c | 20 +- src/video/vid_hercules.c | 20 +- src/video/vid_herculesplus.c | 20 +- src/video/vid_ht216.c | 20 +- src/video/vid_ibm_rgb528_ramdac.c | 16 +- src/video/vid_icd2061.c | 26 +- src/video/vid_ics2494.c | 18 +- src/video/vid_ics2595.c | 20 +- src/video/vid_im1024.c | 64 +- src/video/vid_incolor.c | 20 +- src/video/vid_mda.c | 20 +- src/video/vid_mga.c | 17 +- src/video/vid_nga.c | 28 +- src/video/vid_oak_oti.c | 20 +- src/video/vid_ogc.c | 30 +- src/video/vid_paradise.c | 24 +- src/video/vid_pgc.c | 74 +- src/video/vid_rtg310x.c | 16 +- src/video/vid_s3.c | 2 +- src/video/vid_s3_virge.c | 20 +- src/video/vid_sc1148x_ramdac.c | 18 +- src/video/vid_sc1502x_ramdac.c | 22 +- src/video/vid_sdac_ramdac.c | 20 +- src/video/vid_sigma.c | 16 +- src/video/vid_stg_ramdac.c | 20 +- src/video/vid_svga.c | 2 +- src/video/vid_svga_render.c | 20 +- src/video/vid_tgui9440.c | 84 +- src/video/vid_ti_cf62011.c | 82 +- src/video/vid_tkd8001_ramdac.c | 20 +- src/video/vid_tvga.c | 20 +- src/video/vid_tvp3026_ramdac.c | 20 +- src/video/vid_vga.c | 20 +- src/video/vid_voodoo.c | 18 +- src/video/vid_voodoo_banshee.c | 16 +- src/video/vid_voodoo_blitter.c | 16 +- src/video/vid_voodoo_display.c | 16 +- src/video/vid_voodoo_fb.c | 16 +- src/video/vid_voodoo_fifo.c | 16 +- src/video/vid_voodoo_reg.c | 16 +- src/video/vid_voodoo_render.c | 16 +- src/video/vid_voodoo_setup.c | 16 +- src/video/vid_voodoo_texture.c | 16 +- src/video/vid_wy700.c | 20 +- src/video/video.c | 70 +- src/win/glad.c | 4 +- src/win/win.c | 2 +- src/win/win_cdrom.c | 2 +- src/win/win_devconf.c | 2 +- src/win/win_icon.c | 1 + src/win/win_joystick.cpp | 2 +- src/win/win_joystick_rawinput.c | 4 +- src/win/win_joystick_xinput.c | 2 +- src/win/win_mouse.c | 2 +- src/win/win_opengl.c | 4 +- src/win/win_opengl_glslp.c | 2 + src/win/win_settings.c | 59 +- src/win/win_thread.c | 2 +- src/win/win_ui.c | 2 +- vcpkg.json | 2 +- 458 files changed, 6746 insertions(+), 6505 deletions(-) diff --git a/.ci/AppImageBuilder.yml b/.ci/AppImageBuilder.yml index 05a7b8fcb..69376b511 100644 --- a/.ci/AppImageBuilder.yml +++ b/.ci/AppImageBuilder.yml @@ -1,26 +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. # -# Recipe file for appimage-builder. +# Recipe file for appimage-builder. # -# build.sh processes conditional comments based on CMakeCache -# options at the end of each line. For example, a line ending in: +# build.sh processes conditional comments based on CMakeCache +# options at the end of each line. For example, a line ending in: # -# # if QT:BOOL=ON +# # if QT:BOOL=ON # -# will be removed from the dynamically-generated copy of this -# file if "QT" is not a boolean option set to ON, either through -# a -D definition or the option's default value in CMakeLists. +# will be removed from the dynamically-generated copy of this +# file if "QT" is not a boolean option set to ON, either through +# a -D definition or the option's default value in CMakeLists. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2022 RichardG. +# Copyright 2022 RichardG. # version: 1 diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index d7b2f94aa..6ab63ea30 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -1,18 +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. * - * Jenkins build pipeline definition. + * Jenkins build pipeline definition. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2021-2022 RichardG. + * Copyright 2021-2022 RichardG. */ /* ['main builds', 'branch builds'] */ diff --git a/.ci/build.sh b/.ci/build.sh index f0d91fe18..b2ff8cd83 100644 --- a/.ci/build.sh +++ b/.ci/build.sh @@ -1,18 +1,18 @@ #!/bin/sh # -# 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. # -# Jenkins build script. +# Jenkins build script. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2021-2022 RichardG. +# Copyright 2021-2022 RichardG. # # diff --git a/.ci/static2dll.sh b/.ci/static2dll.sh index f6e5b63b9..030898752 100644 --- a/.ci/static2dll.sh +++ b/.ci/static2dll.sh @@ -1,18 +1,18 @@ #!/bin/sh # -# 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. # -# Script for converting MinGW static libraries into a DLL. +# Script for converting MinGW static libraries into a DLL. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2021 RichardG. +# Copyright 2021 RichardG. # def_file="static2dll.def" diff --git a/CMakeLists.txt b/CMakeLists.txt index 74b2ad4b2..b067bedbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # cmake_minimum_required(VERSION 3.16) diff --git a/README.md b/README.md index 46a7f08bb..05a2a9ed2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ 86Box ===== -[![Build Status](http://ci.86box.net/job/86Box/badge/icon)](http://ci.86box.net/job/86Box) +[![Build Status](https://ci.86box.net/job/86Box/badge/icon)](https://ci.86box.net/job/86Box/) **86Box** is a low level x86 emulator that runs older operating systems and software designed for IBM PC systems and compatibles from 1981 through fairly recent system designs based on the PCI bus. diff --git a/bumpversion.sh b/bumpversion.sh index ce3b7c4c8..87728603c 100644 --- a/bumpversion.sh +++ b/bumpversion.sh @@ -1,18 +1,18 @@ #!/bin/sh # -# 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. # -# Convenience script for changing the emulator's version. +# Convenience script for changing the emulator's version. # # -# Authors: RichardG, +# Authors: RichardG, # -# Copyright 2022 RichardG. +# Copyright 2022 RichardG. # # Parse arguments. diff --git a/cmake/flags-gcc-aarch64.cmake b/cmake/flags-gcc-aarch64.cmake index 34ddaf3e6..4344e2c81 100644 --- a/cmake/flags-gcc-aarch64.cmake +++ b/cmake/flags-gcc-aarch64.cmake @@ -1,20 +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. +# 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. # -# CMake toolchain file defining GCC compiler flags -# for AArch64 (ARM64) targets. +# CMake toolchain file defining GCC compiler flags +# for AArch64 (ARM64) targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -march=armv8-a") string(APPEND CMAKE_CXX_FLAGS_INIT " -march=armv8-a") -include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) diff --git a/cmake/flags-gcc-armv7.cmake b/cmake/flags-gcc-armv7.cmake index e73f55edd..828fb1a21 100644 --- a/cmake/flags-gcc-armv7.cmake +++ b/cmake/flags-gcc-armv7.cmake @@ -1,20 +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. +# 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. # -# CMake toolchain file defining GCC compiler flags -# for ARMv7 targets. +# CMake toolchain file defining GCC compiler flags +# for ARMv7 targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -march=armv7-a -mfloat-abi=hard") string(APPEND CMAKE_CXX_FLAGS_INIT " -march=armv7-a -mfloat-abi=hard") -include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) diff --git a/cmake/flags-gcc-i686.cmake b/cmake/flags-gcc-i686.cmake index 2d12b7937..3b3d72a16 100644 --- a/cmake/flags-gcc-i686.cmake +++ b/cmake/flags-gcc-i686.cmake @@ -1,17 +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. # -# CMake toolchain file defining GCC compiler flags -# for 32-bit x86 targets. +# CMake toolchain file defining GCC compiler flags +# for 32-bit x86 targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -m32 -march=i686 -msse2 -mfpmath=sse -mstackrealign") diff --git a/cmake/flags-gcc-x86_64.cmake b/cmake/flags-gcc-x86_64.cmake index f9f39eb97..47928df42 100644 --- a/cmake/flags-gcc-x86_64.cmake +++ b/cmake/flags-gcc-x86_64.cmake @@ -1,17 +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. # -# CMake toolchain file defining GCC compiler flags -# for 64-bit x86 targets. +# CMake toolchain file defining GCC compiler flags +# for 64-bit x86 targets. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # string(APPEND CMAKE_C_FLAGS_INIT " -m64 -march=x86-64 -msse2 -mfpmath=sse -mstackrealign") diff --git a/cmake/flags-gcc.cmake b/cmake/flags-gcc.cmake index e1bf3650e..885353b87 100644 --- a/cmake/flags-gcc.cmake +++ b/cmake/flags-gcc.cmake @@ -1,16 +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. # -# CMake toolchain file defining GCC compiler flags. +# CMake toolchain file defining GCC compiler flags. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # # Define our flags diff --git a/cmake/llvm-macos-aarch64.cmake b/cmake/llvm-macos-aarch64.cmake index da9ccb449..df67ad45b 100644 --- a/cmake/llvm-macos-aarch64.cmake +++ b/cmake/llvm-macos-aarch64.cmake @@ -1,22 +1,22 @@ # -# 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. # -# CMake toolchain file defining Clang compiler flags -# for AArch64 (ARM64)-based Apple Silicon targets. +# CMake toolchain file defining Clang compiler flags +# for AArch64 (ARM64)-based Apple Silicon targets. # -# Authors: David Hrdlička, -# dob205 +# Authors: David Hrdlička, +# dob205 # -# Copyright 2021 David Hrdlička. -# Copyright 2022 dob205. +# Copyright 2021 David Hrdlička. +# Copyright 2022 dob205. # string(APPEND CMAKE_C_FLAGS_INIT " -march=armv8.5-a+simd") string(APPEND CMAKE_CXX_FLAGS_INIT " -march=armv8.5-a+simd") -include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) diff --git a/cmake/llvm-win32-aarch64.cmake b/cmake/llvm-win32-aarch64.cmake index 4aacb248f..015a0dad0 100644 --- a/cmake/llvm-win32-aarch64.cmake +++ b/cmake/llvm-win32-aarch64.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (ARM64 target). +# CMake toolchain file for Clang on Windows builds (ARM64 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-aarch64.cmake) @@ -27,4 +27,4 @@ set(CMAKE_CXX_COMPILER_TARGET aarch64-pc-windows-msvc) set(CMAKE_SYSTEM_PROCESSOR ARM64) -# TODO: set the vcpkg target triplet perhaps? \ No newline at end of file +# TODO: set the vcpkg target triplet perhaps? diff --git a/cmake/llvm-win32-arm.cmake b/cmake/llvm-win32-arm.cmake index 9d3488124..30c9877d4 100644 --- a/cmake/llvm-win32-arm.cmake +++ b/cmake/llvm-win32-arm.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (ARM64 target). +# CMake toolchain file for Clang on Windows builds (ARM64 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-armv7.cmake) diff --git a/cmake/llvm-win32-i686.cmake b/cmake/llvm-win32-i686.cmake index 8221f8bc2..b69771407 100644 --- a/cmake/llvm-win32-i686.cmake +++ b/cmake/llvm-win32-i686.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (x86 target). +# CMake toolchain file for Clang on Windows builds (x86 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-i686.cmake) @@ -27,4 +27,4 @@ set(CMAKE_CXX_COMPILER_TARGET i686-pc-windows-msvc) set(CMAKE_SYSTEM_PROCESSOR X86) -# TODO: set the vcpkg target triplet perhaps? \ No newline at end of file +# TODO: set the vcpkg target triplet perhaps? diff --git a/cmake/llvm-win32-x86_64.cmake b/cmake/llvm-win32-x86_64.cmake index 7caeb7836..da0cfd3f2 100644 --- a/cmake/llvm-win32-x86_64.cmake +++ b/cmake/llvm-win32-x86_64.cmake @@ -1,16 +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. # -# CMake toolchain file for Clang on Windows builds (x64/AMD64 target). +# CMake toolchain file for Clang on Windows builds (x64/AMD64 target). # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2021 David Hrdlička. +# Copyright 2021 David Hrdlička. # include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-x86_64.cmake) @@ -27,4 +27,4 @@ set(CMAKE_CXX_COMPILER_TARGET x86_64-pc-windows-msvc) set(CMAKE_SYSTEM_PROCESSOR AMD64) -# TODO: set the vcpkg target triplet perhaps? \ No newline at end of file +# TODO: set the vcpkg target triplet perhaps? diff --git a/debian/changelog b/debian/changelog index 0ec15e546..45b701f83 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ 86box (3.11.0-1) UNRELEASED; urgency=medium - * Initial release. + * Bump release. -- Jasmine Iwanek Sun, 18 Nov 2022 23:27:00 -0500 diff --git a/src/86box.c b/src/86box.c index c3b66db05..075727387 100644 --- a/src/86box.c +++ b/src/86box.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/Makefile.local b/src/Makefile.local index 4c6830afd..fdb2dcab3 100644 --- a/src/Makefile.local +++ b/src/Makefile.local @@ -1,32 +1,32 @@ # -# 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. # -# Prefix for localizing the general Makefile.mingw for local -# settings, so we can avoid changing the main one for all of -# our local setups. +# Prefix for localizing the general Makefile.mingw for local +# settings, so we can avoid changing the main one for all of +# our local setups. # -# Author: Fred N. van Kempen, +# Authors: Fred N. van Kempen, # ######################################################################### -# Anything here will override defaults in Makefile.MinGW. # +# Anything here will override defaults in Makefile.MinGW. # ######################################################################### # Name of the executable. -#PROG := yourexe +#PROG := 86box.exe # Various compile-time options. # -DROM_TRACE=0xc800 traces ROM access from segment C800 # -DIO_TRACE=0x66 traces I/O on port 0x66 # -DIO_CATCH enables I/O range catch logs -STUFF := +STUFF := # Add feature selections here. # -DANSI_CFG forces the config file to ANSI encoding. @@ -168,31 +168,31 @@ STUFF := # -DENABLE_JOYSTICK_LOG=N sets logging level at N. # -DENABLE_SDL_LOG=N sets logging level at N. # -DENABLE_SETTINGS_LOG=N sets logging level at N. -EXTRAS := +EXTRAS := -AUTODEP := n -DEBUG := n -OPTIM := n -X64 := n -RELEASE := n -USB := n -VNC := n -RDP := n -DEV_BUILD := n -DEV_BRANCH := n -CIRRUS := n -NE1000 := n -NV_RIVA := n -OPENAL := y -FLUIDSYNTH := y -MUNT := y -PAS16 := n -DYNAREC := y +AUTODEP := n +DEBUG := n +OPTIM := n +X64 := n +RELEASE := n +USB := n +VNC := n +RDP := n +DEV_BUILD := n +DEV_BRANCH := n +CIRRUS := n +NE1000 := n +NV_RIVA := n +OPENAL := y +FLUIDSYNTH := y +MUNT := y +PAS16 := n +DYNAREC := y ######################################################################### -# Include the master Makefile.MinGW for the rest. # +# Include the master Makefile.MinGW for the rest. # ######################################################################### include win/Makefile.mingw diff --git a/src/cdrom/CMakeLists.txt b/src/cdrom/CMakeLists.txt index c09a040bd..201cee7f6 100644 --- a/src/cdrom/CMakeLists.txt +++ b/src/cdrom/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(cdrom OBJECT cdrom.c cdrom_image_backend.c cdrom_image_viso.c cdrom_image.c cdrom_mitsumi.c) diff --git a/src/chipset/CMakeLists.txt b/src/chipset/CMakeLists.txt index 47b9b30ce..d93f86219 100644 --- a/src/chipset/CMakeLists.txt +++ b/src/chipset/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(chipset OBJECT 82c100.c acc2168.c cs8230.c ali1429.c ali1489.c ali1531.c ali1541.c ali1543.c diff --git a/src/chipset/acc2168.c b/src/chipset/acc2168.c index 7332a28a3..765913672 100644 --- a/src/chipset/acc2168.c +++ b/src/chipset/acc2168.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Tiseno100 * * Copyright 2019 Sarah Walker. diff --git a/src/chipset/ali1429.c b/src/chipset/ali1429.c index 699769fa2..36ac2fdf9 100644 --- a/src/chipset/ali1429.c +++ b/src/chipset/ali1429.c @@ -16,8 +16,8 @@ * Authors: Tiseno100, * Miran Grca, * - * Copyright 2020,2021 Tiseno100. - * Copyright 2021,2021 Miran Grca. + * Copyright 2020-2021 Tiseno100. + * Copyright 2021-2021 Miran Grca. */ /* diff --git a/src/chipset/ali1489.c b/src/chipset/ali1489.c index 8a0cfd89a..70ff509ab 100644 --- a/src/chipset/ali1489.c +++ b/src/chipset/ali1489.c @@ -13,8 +13,8 @@ * Authors: Tiseno100, * Miran Grca, * - * Copyright 2020,2021 Tiseno100. - * Copyright 2020,2021 Miran Grca. + * Copyright 2020-2021 Tiseno100. + * Copyright 2020-2021 Miran Grca. */ #include #include diff --git a/src/chipset/cs8230.c b/src/chipset/cs8230.c index 49e7d71b6..edf4ac8c2 100644 --- a/src/chipset/cs8230.c +++ b/src/chipset/cs8230.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2020 Sarah Walker. */ diff --git a/src/chipset/headland.c b/src/chipset/headland.c index c1881bede..8b8ee1562 100644 --- a/src/chipset/headland.c +++ b/src/chipset/headland.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * Original by GreatPsycho for PCem. * Miran Grca, diff --git a/src/chipset/scamp.c b/src/chipset/scamp.c index ec7381cec..6e61db681 100644 --- a/src/chipset/scamp.c +++ b/src/chipset/scamp.c @@ -15,7 +15,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2020 Sarah Walker. */ diff --git a/src/chipset/sis_85c4xx.c b/src/chipset/sis_85c4xx.c index ade5573f1..670a2cc83 100644 --- a/src/chipset/sis_85c4xx.c +++ b/src/chipset/sis_85c4xx.c @@ -13,7 +13,7 @@ * * Authors: Miran Grca, * - * Copyright 2019,2020 Miran Grca. + * Copyright 2019-2020 Miran Grca. */ #include #include diff --git a/src/chipset/via_apollo.c b/src/chipset/via_apollo.c index 99802b2b5..6ed6f21fe 100644 --- a/src/chipset/via_apollo.c +++ b/src/chipset/via_apollo.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * Tiseno100, diff --git a/src/chipset/via_pipc.c b/src/chipset/via_pipc.c index e6701ebfc..4f640920e 100644 --- a/src/chipset/via_pipc.c +++ b/src/chipset/via_pipc.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * RichardG, diff --git a/src/codegen/CMakeLists.txt b/src/codegen/CMakeLists.txt index 23936959e..3cb9de6ca 100644 --- a/src/codegen/CMakeLists.txt +++ b/src/codegen/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # if(DYNAREC) diff --git a/src/codegen/codegen.h b/src/codegen/codegen.h index af602427d..cb9df495b 100644 --- a/src/codegen/codegen.h +++ b/src/codegen/codegen.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/codegen/codegen_ops_x86-64.h b/src/codegen/codegen_ops_x86-64.h index 00518d9ba..77f7c02ab 100644 --- a/src/codegen/codegen_ops_x86-64.h +++ b/src/codegen/codegen_ops_x86-64.h @@ -82,7 +82,7 @@ load_param_1_reg_32(int reg) #if 0 static __inline void load_param_1_64(codeblock_t *block, uint64_t param) { - addbyte(0x48); + addbyte(0x48); # if _WIN64 addbyte(0xb9); /*MOVL $fetchdat,%ecx*/ # else diff --git a/src/codegen/codegen_x86.c b/src/codegen/codegen_x86.c index bd9793732..dbf76c2e4 100644 --- a/src/codegen/codegen_x86.c +++ b/src/codegen/codegen_x86.c @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * Miran Grca, * * Copyright 2018 Fred N. van Kempen. diff --git a/src/codegen_new/CMakeLists.txt b/src/codegen_new/CMakeLists.txt index 8c02060e4..038f1edd1 100644 --- a/src/codegen_new/CMakeLists.txt +++ b/src/codegen_new/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # if(DYNAREC) diff --git a/src/codegen_new/codegen_backend_arm_uops.c b/src/codegen_new/codegen_backend_arm_uops.c index 4cc0ff38d..d0b8b86c1 100644 --- a/src/codegen_new/codegen_backend_arm_uops.c +++ b/src/codegen_new/codegen_backend_arm_uops.c @@ -119,8 +119,8 @@ codegen_ADD(codeblock_t *block, uop_t *uop) static int codegen_ADD_IMM(codeblock_t *block, uop_t *uop) { - // host_arm_ADD_IMM(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->imm_data); - // return 0; +// host_arm_ADD_IMM(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->imm_data); +// return 0; int dest_reg = HOST_REG_GET(uop->dest_reg_a_real), src_reg = HOST_REG_GET(uop->src_reg_a_real); int dest_size = IREG_GET_SIZE(uop->dest_reg_a_real), src_size = IREG_GET_SIZE(uop->src_reg_a_real); @@ -2597,8 +2597,8 @@ codegen_SUB(codeblock_t *block, uop_t *uop) return 0; - // host_arm_SUB_REG_LSL(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->src_reg_b_real, 0); - // return 0; +// host_arm_SUB_REG_LSL(block, uop->dest_reg_a_real, uop->src_reg_a_real, uop->src_reg_b_real, 0); +// return 0; } static int codegen_SUB_IMM(codeblock_t *block, uop_t *uop) diff --git a/src/config.c b/src/config.c index a552408c0..cbccf115f 100644 --- a/src/config.c +++ b/src/config.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * Overdoze, @@ -19,7 +19,7 @@ * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * * NOTE: Forcing config files to be in Unicode encoding breaks * it on Windows XP, and possibly also Vista. Use the diff --git a/src/cpu/386_common.h b/src/cpu/386_common.h index 6310ae642..f26eb7f98 100644 --- a/src/cpu/386_common.h +++ b/src/cpu/386_common.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/cpu/386_ops.h b/src/cpu/386_ops.h index ec46ba0ae..e345ee8d8 100644 --- a/src/cpu/386_ops.h +++ b/src/cpu/386_ops.h @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * leilei, * Miran Grca, * diff --git a/src/cpu/CMakeLists.txt b/src/cpu/CMakeLists.txt index e61d4bfcf..68baaf293 100644 --- a/src/cpu/CMakeLists.txt +++ b/src/cpu/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(cpu OBJECT cpu.c cpu_table.c fpu.c x86.c 808x.c 386.c 386_common.c diff --git a/src/cpu/codegen_timing_686.c b/src/cpu/codegen_timing_686.c index 9752b24c4..7d7f4042d 100644 --- a/src/cpu/codegen_timing_686.c +++ b/src/cpu/codegen_timing_686.c @@ -949,7 +949,7 @@ void codegen_timing_686_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uin if (regmask & IMPL_ESP) regmask |= SRCDEP_ESP | DSTDEP_ESP; - agi_stall = check_agi(prev_deps, prev_opcode, prev_fetchdat, prev_op_32); + agi_stall = check_agi(prev_deps, prev_opcode, prev_fetchdat, prev_op_32); /*Second instruction in the pair*/ if ((timings[opcode] & PAIR_MASK) == PAIR_NP) @@ -992,7 +992,7 @@ void codegen_timing_686_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uin if (!t_pair) fatal("Pairable 0 cycles! %02x %02x\n", opcode, prev_opcode); - agi_stall = check_agi(deps, opcode, fetchdat, op_32); + agi_stall = check_agi(deps, opcode, fetchdat, op_32); codegen_block_cycles += t_pair + agi_stall; decode_delay = (-t_pair) + 1 + agi_stall; @@ -1012,7 +1012,7 @@ void codegen_timing_686_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uin /*Instruction not pairable*/ int agi_stall = 0; - agi_stall = check_agi(deps, opcode, fetchdat, op_32); + agi_stall = check_agi(deps, opcode, fetchdat, op_32); codegen_block_cycles += COUNT(timings[opcode], op_32) + decode_delay + agi_stall; decode_delay = (-COUNT(timings[opcode], op_32)) + 1 + agi_stall; diff --git a/src/cpu/codegen_timing_k6.c b/src/cpu/codegen_timing_k6.c index 6bb472144..6a59fc157 100644 --- a/src/cpu/codegen_timing_k6.c +++ b/src/cpu/codegen_timing_k6.c @@ -1,5 +1,5 @@ /*Most of the vector instructions here are a total guess. - Some of the timings are based on http://users.atw.hu/instlatx64/AuthenticAMD0000562_K6_InstLatX86.txt*/ + Some of the timings are based on http://http://web.archive.org/web/20181122095446/http://users.atw.hu/instlatx64/AuthenticAMD0000562_K6_InstLatX86.txt*/ #include #include #include diff --git a/src/cpu/codegen_timing_p6.c b/src/cpu/codegen_timing_p6.c index 19fa07de1..cf40e084e 100644 --- a/src/cpu/codegen_timing_p6.c +++ b/src/cpu/codegen_timing_p6.c @@ -23,10 +23,10 @@ typedef enum uop_type_t UOP_ALUP0, /*Executes in Port 0 ALU unit*/ UOP_LOAD, /*Executes in Load unit*/ UOP_STORED, /*Executes in Data Store unit*/ - UOP_STOREA, /*Executes in Address Store unit*/ + UOP_STOREA, /*Executes in Address Store unit*/ UOP_FLOAD, /*Executes in Load unit*/ UOP_FSTORED, /*Executes in Data Store unit*/ - UOP_FSTOREA, /*Executes in Address Store unit*/ + UOP_FSTOREA, /*Executes in Address Store unit*/ UOP_MLOAD, /*Executes in Load unit*/ UOP_MSTORED, /*Executes in Data Store unit*/ UOP_MSTOREA, /*Executes in Address Store unit*/ @@ -93,7 +93,7 @@ static const macro_op_t alu_store_op = .uop[1] = {.type = UOP_ALU, .latency = 1}, .uop[2] = {.type = UOP_STORED, .latency = 1}, .uop[3] = {.type = UOP_STOREA, .latency = 1} - }; +}; static const macro_op_t alup0_store_op = { .nr_uops = 4, @@ -162,8 +162,8 @@ static const macro_op_t loop_op = .decode_type = DECODE_COMPLEX, .uop[0] = {.type = UOP_ALU, .latency = 1}, .uop[1] = {.type = UOP_ALU, .latency = 1}, - .uop[2] = {.type = UOP_ALU, .latency = 1}, - .uop[3] = {.type = UOP_ALU, .latency = 1}, + .uop[2] = {.type = UOP_ALU, .latency = 1}, + .uop[3] = {.type = UOP_ALU, .latency = 1}, .uop[4] = {.type = UOP_BRANCH, .latency = 1} }; static const macro_op_t mov_reg_seg_op = @@ -219,7 +219,7 @@ static const macro_op_t push_seg_op = .uop[0] = {.type = UOP_LOAD, .latency = 1}, .uop[1] = {.type = UOP_STORED, .latency = 1}, .uop[2] = {.type = UOP_STOREA, .latency = 1}, - .uop[3] = {.type = UOP_ALU, .latency = 1} + .uop[3] = {.type = UOP_ALU, .latency = 1} }; static const macro_op_t stos_op = { @@ -1607,24 +1607,24 @@ static p6_unit_t *units; /*Pentium Pro has no MMX*/ static p6_unit_t ppro_units[] = { - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT)}, /*Port 0*/ - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Port 1*/ - {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Port 2*/ - {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Port 3*/ - {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Port 4*/ + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT)}, /*Port 0*/ + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Port 1*/ + {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Port 2*/ + {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Port 3*/ + {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Port 4*/ }; #define NR_PPRO_UNITS (sizeof(ppro_units) / sizeof(p6_unit_t)) /*Pentium II/Celeron assigns the multiplier to port 0, the shifter to port 1, and shares the MMX ALU*/ static p6_unit_t p2_units[] = { - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT) | /*Port 0*/ - (1 << UOP_MMX) | (1 << UOP_MMX_MUL)}, - {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Port 1*/ - (1 << UOP_MMX) | (1 << UOP_MMX_SHIFT)}, - {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Port 2*/ - {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Port 3*/ - {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Port 4*/ + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT) | /*Port 0*/ + (1 << UOP_MMX) | (1 << UOP_MMX_MUL)}, + {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Port 1*/ + (1 << UOP_MMX) | (1 << UOP_MMX_SHIFT)}, + {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Port 2*/ + {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Port 3*/ + {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Port 4*/ }; #define NR_P2_UNITS (sizeof(p2_units) / sizeof(p6_unit_t)) @@ -1790,7 +1790,7 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe uint32_t regmask_required; uint32_t regmask_modified; int c; - int d = 0; /*Complex decoder uOPs*/ + int d = 0; /*Complex decoder uOPs*/ int earliest_start = 0; decode_type_t decode_type = ins->decode_type; int instr_length = codegen_timing_instr_length(deps, fetchdat, op_32); @@ -1839,7 +1839,7 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe decode_buffer.uops[decode_buffer.nr_uops] = &ins->uop[0]; decode_buffer.earliest_start[decode_buffer.nr_uops] = earliest_start; decode_buffer.nr_uops = 2+d; - if (d) + if (d) decode_flush_p6(); } else if (decode_buffer.nr_uops) @@ -1869,7 +1869,7 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe decode_buffer.earliest_start[d] = earliest_start; else decode_buffer.earliest_start[d] = -1; - d++; + d++; if ((d == 3) && (ins->nr_uops > 4)) /*Ins. with >4 uOPs require the use of special units only present on 3 translate PLAs*/ { @@ -1878,10 +1878,10 @@ static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fe decode_flush_p6(); /*The other two decoders are halted to preserve in-order issue*/ } } - if (d) - { - decode_buffer.nr_uops = d; - } + if (d) + { + decode_buffer.nr_uops = d; + } break; } @@ -1982,8 +1982,8 @@ void codegen_timing_p6_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uint switch (last_prefix) { case 0x0f: - ins_table = mod3 ? opcode_timings_0f_mod3 : opcode_timings_0f; - deps = mod3 ? opcode_deps_0f_mod3 : opcode_deps_0f; + ins_table = mod3 ? opcode_timings_0f_mod3 : opcode_timings_0f; + deps = mod3 ? opcode_deps_0f_mod3 : opcode_deps_0f; break; case 0xd8: diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 380da450e..d48ebe194 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -8,7 +8,7 @@ * * CPU type handler. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei, * Miran Grca, * Fred N. van Kempen, diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index 307865629..25ff141a7 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei, * Miran Grca, * diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index f9e86541c..3afaf055e 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * leilei, * Miran Grca, * Fred N. van Kempen, @@ -21,8 +21,8 @@ * Copyright 2016-2019 leilei. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2020 RichardG. - * Copyright 2021 dob205. + * Copyright 2020 RichardG. + * Copyright 2021 dob205. */ #include #include @@ -71,1089 +71,1086 @@ FPU fpus_internal[] = { const cpu_family_t cpu_families[] = { // clang-format off { - .package = CPU_PKG_8088, - .manufacturer = "Intel", - .name = "8088", - .internal_name = "8088", - .cpus = (const CPU[]) { - {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"8", CPU_8088, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, -// {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"10", CPU_8088, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_8088, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_8088, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"", 0} - } + .package = CPU_PKG_8088, + .manufacturer = "Intel", + .name = "8088", + .internal_name = "8088", + .cpus = (const CPU[]) { + {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"8", CPU_8088, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, +// {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"10", CPU_8088, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_8088, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_8088, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"", 0} + } }, { - .package = CPU_PKG_8088_EUROPC, - .manufacturer = "Intel", - .name = "8088", - .internal_name = "8088_europc", - .cpus = (const CPU[]) { - {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"", 0} - } + .package = CPU_PKG_8088_EUROPC, + .manufacturer = "Intel", + .name = "8088", + .internal_name = "8088_europc", + .cpus = (const CPU[]) { + {"4.77", CPU_8088, fpus_8088, 4772728, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"7.16", CPU_8088, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"9.54", CPU_8088, fpus_8088, 9545456, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"", 0} + } }, { - .package = CPU_PKG_8086, - .manufacturer = "Intel", - .name = "8086", - .internal_name = "8086", - .cpus = (const CPU[]) { - {"7.16", CPU_8086, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"8", CPU_8086, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"9.54", CPU_8086, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"10", CPU_8086, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_8086, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_8086, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"", 0} - } + .package = CPU_PKG_8086, + .manufacturer = "Intel", + .name = "8086", + .internal_name = "8086", + .cpus = (const CPU[]) { + {"7.16", CPU_8086, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"8", CPU_8086, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"9.54", CPU_8086, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"10", CPU_8086, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_8086, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_8086, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"", 0} + } }, { - .package = CPU_PKG_188, - .manufacturer = "Intel", - .name = "80188", - .internal_name = "80188", - .cpus = (const CPU[]) { - {"6", CPU_188, fpus_8088, 6000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_188, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"8", CPU_188, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"9.54", CPU_188, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"10", CPU_188, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_188, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_188, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"20", CPU_188, fpus_8088, 20000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, - {"25", CPU_188, fpus_8088, 25000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, - {"", 0} - } + .package = CPU_PKG_188, + .manufacturer = "Intel", + .name = "80188", + .internal_name = "80188", + .cpus = (const CPU[]) { + {"6", CPU_188, fpus_8088, 6000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_188, fpus_8088, 7159092, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"8", CPU_188, fpus_8088, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"9.54", CPU_188, fpus_8088, 9545456, 1, 5000, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"10", CPU_188, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_188, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_188, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"20", CPU_188, fpus_8088, 20000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, + {"25", CPU_188, fpus_8088, 25000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 3}, + {"", 0} + } }, { - .package = CPU_PKG_8088, - .manufacturer = "NEC", - .name = "V20", - .internal_name = "necv20", - .cpus = (const CPU[]) { - {"4.77", CPU_V20, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_V20, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"10", CPU_V20, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_V20, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_V20, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"", 0} - } + .package = CPU_PKG_8088, + .manufacturer = "NEC", + .name = "V20", + .internal_name = "necv20", + .cpus = (const CPU[]) { + {"4.77", CPU_V20, fpus_8088, 4772728, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_V20, fpus_8088, 7159092, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"10", CPU_V20, fpus_8088, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_V20, fpus_8088, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_V20, fpus_8088, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"", 0} + } }, { - .package = CPU_PKG_186, - .manufacturer = "Intel", - .name = "80186", - .internal_name = "80186", - .cpus = (const CPU[]) { - {"6", CPU_186, fpus_80186, 6000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"7.16", CPU_186, fpus_80186, 7159092, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"8", CPU_186, fpus_80186, 8000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"9.54", CPU_186, fpus_80186, 9545456, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, - {"10", CPU_186, fpus_80186, 10000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_186, fpus_80186, 12000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_186, fpus_80186, 16000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 2}, - {"20", CPU_186, fpus_80186, 20000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, - {"25", CPU_186, fpus_80186, 25000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, - {"", 0} - } + .package = CPU_PKG_186, + .manufacturer = "Intel", + .name = "80186", + .internal_name = "80186", + .cpus = (const CPU[]) { + {"6", CPU_186, fpus_80186, 6000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"7.16", CPU_186, fpus_80186, 7159092, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"8", CPU_186, fpus_80186, 8000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"9.54", CPU_186, fpus_80186, 9545456, 1, 0, 0, 0, 0, CPU_ALTERNATE_XTAL, 0,0,0,0, 1}, + {"10", CPU_186, fpus_80186, 10000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_186, fpus_80186, 12000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_186, fpus_80186, 16000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 2}, + {"20", CPU_186, fpus_80186, 20000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, + {"25", CPU_186, fpus_80186, 25000000, 1, 0, 0, 0, 0, 0, 0,0,0,0, 3}, + {"", 0} + } }, { - .package = CPU_PKG_8086, - .manufacturer = "NEC", - .name = "V30", - .internal_name = "necv30", - .cpus = (const CPU[]) { - {"5", CPU_V30, fpus_80186, 5000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"8", CPU_V30, fpus_80186, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"10", CPU_V30, fpus_80186, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"12", CPU_V30, fpus_80186, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, - {"16", CPU_V30, fpus_80186, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, - {"", 0} - } + .package = CPU_PKG_8086, + .manufacturer = "NEC", + .name = "V30", + .internal_name = "necv30", + .cpus = (const CPU[]) { + {"5", CPU_V30, fpus_80186, 5000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"8", CPU_V30, fpus_80186, 8000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"10", CPU_V30, fpus_80186, 10000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"12", CPU_V30, fpus_80186, 12000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 1}, + {"16", CPU_V30, fpus_80186, 16000000, 1, 5000, 0, 0, 0, 0, 0,0,0,0, 2}, + {"", 0} + } }, { - .package = CPU_PKG_286, - .manufacturer = "Intel", - .name = "80286", - .internal_name = "286", - .cpus = (const CPU[]) { - {"6", CPU_286, fpus_80286, 6000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, - {"8", CPU_286, fpus_80286, 8000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, - {"10", CPU_286, fpus_80286, 10000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, - {"12", CPU_286, fpus_80286, 12500000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, - {"16", CPU_286, fpus_80286, 16000000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_286, fpus_80286, 20000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, - {"25", CPU_286, fpus_80286, 25000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, - {"", 0} - } + .package = CPU_PKG_286, + .manufacturer = "Intel", + .name = "80286", + .internal_name = "286", + .cpus = (const CPU[]) { + {"6", CPU_286, fpus_80286, 6000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, + {"8", CPU_286, fpus_80286, 8000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, + {"10", CPU_286, fpus_80286, 10000000, 1, 5000, 0, 0, 0, 0, 2,2,2,2, 1}, + {"12", CPU_286, fpus_80286, 12500000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, + {"16", CPU_286, fpus_80286, 16000000, 1, 5000, 0, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_286, fpus_80286, 20000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, + {"25", CPU_286, fpus_80286, 25000000, 1, 5000, 0, 0, 0, 0, 4,4,4,4, 3}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "Intel", - .name = "i386SX", - .internal_name = "i386sx", - .cpus = (const CPU[]) { - {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "Intel", + .name = "i386SX", + .internal_name = "i386sx", + .cpus = (const CPU[]) { + {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "AMD", - .name = "Am386SX", - .internal_name = "am386sx", - .cpus = (const CPU[]) { - {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "AMD", + .name = "Am386SX", + .internal_name = "am386sx", + .cpus = (const CPU[]) { + {"16", CPU_386SX, fpus_80386, 16000000, 1, 5000, 0x2308, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_386SX, fpus_80386, 20000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_386SX, fpus_80386, 25000000, 1, 5000, 0x2308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386SX, fpus_80386, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386SX, fpus_80386, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Intel", - .name = "i386DX", - .internal_name = "i386dx", - .cpus = (const CPU[]) { - {"16", CPU_386DX, fpus_80386, 16000000, 1, 5000, 0x0308, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_386DX, fpus_80386, 20000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Intel", + .name = "i386DX", + .internal_name = "i386dx", + .cpus = (const CPU[]) { + {"16", CPU_386DX, fpus_80386, 16000000, 1, 5000, 0x0308, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_386DX, fpus_80386, 20000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Intel", - .name = "RapidCAD", - .internal_name = "rapidcad", - .cpus = (const CPU[]) { - {"25", CPU_RAPIDCAD, fpus_internal, 25000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 4,4,3,3, 3}, - {"33", CPU_RAPIDCAD, fpus_internal, 33333333, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 6,6,3,3, 4}, - {"40", CPU_RAPIDCAD, fpus_internal, 40000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 7,7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Intel", + .name = "RapidCAD", + .internal_name = "rapidcad", + .cpus = (const CPU[]) { + {"25", CPU_RAPIDCAD, fpus_internal, 25000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 4,4,3,3, 3}, + {"33", CPU_RAPIDCAD, fpus_internal, 33333333, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 6,6,3,3, 4}, + {"40", CPU_RAPIDCAD, fpus_internal, 40000000, 1, 5000, 0x0340, 0, 0, CPU_SUPPORTS_DYNAREC, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "AMD", - .name = "Am386DX", - .internal_name = "am386dx", - .cpus = (const CPU[]) { - {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, - {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } - }, - { - .package = CPU_PKG_M6117, - .manufacturer = "ALi", - .name = "M6117", - .internal_name = "m6117", - .cpus = (const CPU[]) { /* All timings and edx_reset values assumed. */ - {"33", CPU_386SX, fpus_none, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, - {"40", CPU_386SX, fpus_none, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, - {"", 0} - } - }, - { - .package = CPU_PKG_386SLC_IBM, - .manufacturer = "IBM", - .name = "386SLC", - .internal_name = "ibm386slc", - .cpus = (const CPU[]) { - {"16", CPU_IBM386SLC, fpus_80386, 16000000, 1, 5000, 0xA301, 0, 0, 0, 3,3,3,3, 2}, - {"20", CPU_IBM386SLC, fpus_80386, 20000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, - {"25", CPU_IBM386SLC, fpus_80386, 25000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "AMD", + .name = "Am386DX", + .internal_name = "am386dx", + .cpus = (const CPU[]) { + {"25", CPU_386DX, fpus_80386, 25000000, 1, 5000, 0x0308, 0, 0, 0, 4,4,3,3, 3}, + {"33", CPU_386DX, fpus_80386, 33333333, 1, 5000, 0x0308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386DX, fpus_80386, 40000000, 1, 5000, 0x0308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "Cyrix", - .name = "Cx486SLC", - .internal_name = "cx486slc", - .cpus = (const CPU[]) { - {"20", CPU_486SLC, fpus_80386, 20000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, - {"25", CPU_486SLC, fpus_80386, 25000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, - {"33", CPU_486SLC, fpus_80386, 33333333, 1, 5000, 0x400, 0, 0x0000, 0, 6,6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_M6117, + .manufacturer = "ALi", + .name = "M6117", + .internal_name = "m6117", + .cpus = (const CPU[]) { /* All timings and edx_reset values assumed. */ + {"33", CPU_386SX, fpus_none, 33333333, 1, 5000, 0x2308, 0, 0, 0, 6,6,3,3, 4}, + {"40", CPU_386SX, fpus_none, 40000000, 1, 5000, 0x2308, 0, 0, 0, 7,7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_386SX, - .manufacturer = "Cyrix", - .name = "Cx486SRx2", - .internal_name = "cx486srx2", - .cpus = (const CPU[]) { - {"32", CPU_486SLC, fpus_80386, 32000000, 2, 5000, 0x406, 0, 0x0006, 0, 6,6,6,6, 4}, - {"40", CPU_486SLC, fpus_80386, 40000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, - {"50", CPU_486SLC, fpus_80386, 50000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, - {"", 0} - } + .package = CPU_PKG_386SLC_IBM, + .manufacturer = "IBM", + .name = "386SLC", + .internal_name = "ibm386slc", + .cpus = (const CPU[]) { + {"16", CPU_IBM386SLC, fpus_80386, 16000000, 1, 5000, 0xA301, 0, 0, 0, 3,3,3,3, 2}, + {"20", CPU_IBM386SLC, fpus_80386, 20000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, + {"25", CPU_IBM386SLC, fpus_80386, 25000000, 1, 5000, 0xA301, 0, 0, 0, 4,4,3,3, 3}, + {"", 0} + } }, { - .package = CPU_PKG_486SLC_IBM, - .manufacturer = "IBM", - .name = "486SLC", - .internal_name = "ibm486slc", - .cpus = (const CPU[]) { - {"33", CPU_IBM486SLC, fpus_80386, 33333333, 1, 5000, 0xA401, 0, 0, 0, 6,6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "Cyrix", + .name = "Cx486SLC", + .internal_name = "cx486slc", + .cpus = (const CPU[]) { + {"20", CPU_486SLC, fpus_80386, 20000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, + {"25", CPU_486SLC, fpus_80386, 25000000, 1, 5000, 0x400, 0, 0x0000, 0, 4,4,3,3, 3}, + {"33", CPU_486SLC, fpus_80386, 33333333, 1, 5000, 0x400, 0, 0x0000, 0, 6,6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_486SLC_IBM, - .manufacturer = "IBM", - .name = "486SLC2", - .internal_name = "ibm486slc2", - .cpus = (const CPU[]) { - {"40", CPU_IBM486SLC, fpus_80386, 40000000, 2, 5000, 0xA421, 0, 0, 0, 7,7,6,6, 5}, - {"50", CPU_IBM486SLC, fpus_80386, 50000000, 2, 5000, 0xA421, 0, 0, 0, 8,8,6,6, 6}, - {"66", CPU_IBM486SLC, fpus_80386, 66666666, 2, 5000, 0xA421, 0, 0, 0, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_386SX, + .manufacturer = "Cyrix", + .name = "Cx486SRx2", + .internal_name = "cx486srx2", + .cpus = (const CPU[]) { + {"32", CPU_486SLC, fpus_80386, 32000000, 2, 5000, 0x406, 0, 0x0006, 0, 6,6,6,6, 4}, + {"40", CPU_486SLC, fpus_80386, 40000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, + {"50", CPU_486SLC, fpus_80386, 50000000, 2, 5000, 0x406, 0, 0x0006, 0, 8,8,6,6, 6}, + {"", 0} + } }, { - .package = CPU_PKG_486SLC_IBM, - .manufacturer = "IBM", - .name = "486SLC3", - .internal_name = "ibm486slc3", - .cpus = (const CPU[]) { - {"60", CPU_IBM486SLC, fpus_80386, 60000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 7}, - {"75", CPU_IBM486SLC, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, - {"100", CPU_IBM486SLC, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, - {"", 0} - } + .package = CPU_PKG_486SLC_IBM, + .manufacturer = "IBM", + .name = "486SLC", + .internal_name = "ibm486slc", + .cpus = (const CPU[]) { + {"33", CPU_IBM486SLC, fpus_80386, 33333333, 1, 5000, 0xA401, 0, 0, 0, 6,6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_486BL, - .manufacturer = "IBM", - .name = "486BL2", - .internal_name = "ibm486bl2", - .cpus = (const CPU[]) { - {"50", CPU_IBM486BL, fpus_80386, 50000000, 2, 5000, 0xA439, 0, 0, 0, 8,8,6,6, 6}, - {"66", CPU_IBM486BL, fpus_80386, 66666666, 2, 5000, 0xA439, 0, 0, 0, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_486SLC_IBM, + .manufacturer = "IBM", + .name = "486SLC2", + .internal_name = "ibm486slc2", + .cpus = (const CPU[]) { + {"40", CPU_IBM486SLC, fpus_80386, 40000000, 2, 5000, 0xA421, 0, 0, 0, 7,7,6,6, 5}, + {"50", CPU_IBM486SLC, fpus_80386, 50000000, 2, 5000, 0xA421, 0, 0, 0, 8,8,6,6, 6}, + {"66", CPU_IBM486SLC, fpus_80386, 66666666, 2, 5000, 0xA421, 0, 0, 0, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_486BL, - .manufacturer = "IBM", - .name = "486BL3", - .internal_name = "ibm486bl3", - .cpus = (const CPU[]) { - {"75", CPU_IBM486BL, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, - {"100", CPU_IBM486BL, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, - {"", 0} - } + .package = CPU_PKG_486SLC_IBM, + .manufacturer = "IBM", + .name = "486SLC3", + .internal_name = "ibm486slc3", + .cpus = (const CPU[]) { + {"60", CPU_IBM486SLC, fpus_80386, 60000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 7}, + {"75", CPU_IBM486SLC, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, + {"100", CPU_IBM486SLC, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Cyrix", - .name = "Cx486DLC", - .internal_name = "cx486dlc", - .cpus = (const CPU[]) { - {"25", CPU_486DLC, fpus_80386, 25000000, 1, 5000, 0x401, 0, 0x0001, 0, 4, 4,3,3, 3}, - {"33", CPU_486DLC, fpus_80386, 33333333, 1, 5000, 0x401, 0, 0x0001, 0, 6, 6,3,3, 4}, - {"40", CPU_486DLC, fpus_80386, 40000000, 1, 5000, 0x401, 0, 0x0001, 0, 7, 7,3,3, 5}, - {"", 0} - } + .package = CPU_PKG_486BL, + .manufacturer = "IBM", + .name = "486BL2", + .internal_name = "ibm486bl2", + .cpus = (const CPU[]) { + {"50", CPU_IBM486BL, fpus_80386, 50000000, 2, 5000, 0xA439, 0, 0, 0, 8,8,6,6, 6}, + {"66", CPU_IBM486BL, fpus_80386, 66666666, 2, 5000, 0xA439, 0, 0, 0, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_386DX, - .manufacturer = "Cyrix", - .name = "Cx486DRx2", - .internal_name = "cx486drx2", - .cpus = (const CPU[]) { - {"32", CPU_486DLC, fpus_80386, 32000000, 2, 5000, 0x407, 0, 0x0007, 0, 6, 6,6,6, 4}, - {"40", CPU_486DLC, fpus_80386, 40000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, - {"50", CPU_486DLC, fpus_80386, 50000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, - {"66", CPU_486DLC, fpus_80386, 66666666, 2, 5000, 0x407, 0, 0x0007, 0, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_486BL, + .manufacturer = "IBM", + .name = "486BL3", + .internal_name = "ibm486bl3", + .cpus = (const CPU[]) { + {"75", CPU_IBM486BL, fpus_80386, 75000000, 3, 5000, 0xA439, 0, 0, 0, 12,12,9,9, 9}, + {"100", CPU_IBM486BL, fpus_80386, 100000000, 3, 5000, 0xA439, 0, 0, 0, 18,18,9,9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486SX", - .internal_name = "i486sx", - .cpus = (const CPU[]) { - {"16", CPU_i486SX, fpus_486sx, 16000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 3, 3,3,3, 2}, - {"20", CPU_i486SX, fpus_486sx, 20000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"25", CPU_i486SX, fpus_486sx, 25000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"33", CPU_i486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Cyrix", + .name = "Cx486DLC", + .internal_name = "cx486dlc", + .cpus = (const CPU[]) { + {"25", CPU_486DLC, fpus_80386, 25000000, 1, 5000, 0x401, 0, 0x0001, 0, 4, 4,3,3, 3}, + {"33", CPU_486DLC, fpus_80386, 33333333, 1, 5000, 0x401, 0, 0x0001, 0, 6, 6,3,3, 4}, + {"40", CPU_486DLC, fpus_80386, 40000000, 1, 5000, 0x401, 0, 0x0001, 0, 7, 7,3,3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486SX (SL-Enhanced)", - .internal_name = "i486sx_slenh", - .cpus = (const CPU[]) { - {"25", CPU_i486SX_SLENH, fpus_486sx, 25000000, 1, 5000, 0x423, 0x423, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"33", CPU_i486SX_SLENH, fpus_486sx, 33333333, 1, 5000, 0x42a, 0x42a, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"", 0} - } + .package = CPU_PKG_386DX, + .manufacturer = "Cyrix", + .name = "Cx486DRx2", + .internal_name = "cx486drx2", + .cpus = (const CPU[]) { + {"32", CPU_486DLC, fpus_80386, 32000000, 2, 5000, 0x407, 0, 0x0007, 0, 6, 6,6,6, 4}, + {"40", CPU_486DLC, fpus_80386, 40000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, + {"50", CPU_486DLC, fpus_80386, 50000000, 2, 5000, 0x407, 0, 0x0007, 0, 8, 8,6,6, 6}, + {"66", CPU_486DLC, fpus_80386, 66666666, 2, 5000, 0x407, 0, 0x0007, 0, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486SX2", - .internal_name = "i486sx2", - .cpus = (const CPU[]) { - {"50", CPU_i486SX_SLENH, fpus_486sx, 50000000, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66 (Q0569)", CPU_i486SX_SLENH, fpus_486sx, 66666666, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486SX", + .internal_name = "i486sx", + .cpus = (const CPU[]) { + {"16", CPU_i486SX, fpus_486sx, 16000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 3, 3,3,3, 2}, + {"20", CPU_i486SX, fpus_486sx, 20000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"25", CPU_i486SX, fpus_486sx, 25000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"33", CPU_i486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX", - .internal_name = "i486dx", - .cpus = (const CPU[]) { - {"25", CPU_i486DX, fpus_internal, 25000000, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, - {"33", CPU_i486DX, fpus_internal, 33333333, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"50", CPU_i486DX, fpus_internal, 50000000, 1, 5000, 0x411, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486SX (SL-Enhanced)", + .internal_name = "i486sx_slenh", + .cpus = (const CPU[]) { + {"25", CPU_i486SX_SLENH, fpus_486sx, 25000000, 1, 5000, 0x423, 0x423, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"33", CPU_i486SX_SLENH, fpus_486sx, 33333333, 1, 5000, 0x42a, 0x42a, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX (SL-Enhanced)", - .internal_name = "i486dx_slenh", - .cpus = (const CPU[]) { - {"33", CPU_i486DX_SLENH, fpus_internal, 33333333, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, - {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486SX2", + .internal_name = "i486sx2", + .cpus = (const CPU[]) { + {"50", CPU_i486SX_SLENH, fpus_486sx, 50000000, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66 (Q0569)", CPU_i486SX_SLENH, fpus_486sx, 66666666, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX2", - .internal_name = "i486dx2", - .cpus = (const CPU[]) { - {"40", CPU_i486DX, fpus_internal, 40000000, 2, 5000, 0x430, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, - {"50", CPU_i486DX, fpus_internal, 50000000, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66", CPU_i486DX, fpus_internal, 66666666, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX", + .internal_name = "i486dx", + .cpus = (const CPU[]) { + {"25", CPU_i486DX, fpus_internal, 25000000, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3}, + {"33", CPU_i486DX, fpus_internal, 33333333, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"50", CPU_i486DX, fpus_internal, 50000000, 1, 5000, 0x411, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Intel", - .name = "i486DX2 (SL-Enhanced)", - .internal_name = "i486dx2_slenh", - .cpus = (const CPU[]) { - {"40", CPU_i486DX_SLENH, fpus_internal, 40000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, - {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX (SL-Enhanced)", + .internal_name = "i486dx_slenh", + .cpus = (const CPU[]) { + {"33", CPU_i486DX_SLENH, fpus_internal, 33333333, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4}, + {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3_PC330, - .manufacturer = "Intel", - .name = "i486DX2", - .internal_name = "i486dx2_pc330", - .cpus = (const CPU[]) { - {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX2", + .internal_name = "i486dx2", + .cpus = (const CPU[]) { + {"40", CPU_i486DX, fpus_internal, 40000000, 2, 5000, 0x430, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, + {"50", CPU_i486DX, fpus_internal, 50000000, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66", CPU_i486DX, fpus_internal, 66666666, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1 | CPU_PKG_SOCKET3_PC330, /*OEM versions are 3.3V, Retail versions are 3.3V with a 5V regulator for installation in older boards. They are functionally identical*/ - .manufacturer = "Intel", - .name = "iDX4", - .internal_name = "idx4", - .cpus = (const CPU[]) { - {"75", CPU_i486DX_SLENH, fpus_internal, 75000000, 3.0, 5000, 0x480, 0x480, 0x0000, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"100", CPU_i486DX_SLENH, fpus_internal, 100000000, 3.0, 5000, 0x483, 0x483, 0x0000, CPU_SUPPORTS_DYNAREC, 18,18, 9, 9, 12}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Intel", + .name = "i486DX2 (SL-Enhanced)", + .internal_name = "i486dx2_slenh", + .cpus = (const CPU[]) { + {"40", CPU_i486DX_SLENH, fpus_internal, 40000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5}, + {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3 | CPU_PKG_SOCKET3_PC330, - .manufacturer = "Intel", - .name = "Pentium OverDrive", - .internal_name = "pentium_p24t", - .cpus = (const CPU[]) { - {"63", CPU_P24T, fpus_internal, 62500000, 2.5, 5000, 0x1531, 0x1531, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,7,7, 15/2}, - {"83", CPU_P24T, fpus_internal, 83333333, 2.5, 5000, 0x1532, 0x1532, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,8,8, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET3_PC330, + .manufacturer = "Intel", + .name = "i486DX2", + .internal_name = "i486dx2_pc330", + .cpus = (const CPU[]) { + {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486SX", - .internal_name = "am486sx", - .cpus = (const CPU[]) { - {"33", CPU_Am486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Am486SX, fpus_486sx, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1 | CPU_PKG_SOCKET3_PC330, /*OEM versions are 3.3V, Retail versions are 3.3V with a 5V regulator for installation in older boards. They are functionally identical*/ + .manufacturer = "Intel", + .name = "iDX4", + .internal_name = "idx4", + .cpus = (const CPU[]) { + {"75", CPU_i486DX_SLENH, fpus_internal, 75000000, 3.0, 5000, 0x480, 0x480, 0x0000, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"100", CPU_i486DX_SLENH, fpus_internal, 100000000, 3.0, 5000, 0x483, 0x483, 0x0000, CPU_SUPPORTS_DYNAREC, 18,18, 9, 9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486SX2", - .internal_name = "am486sx2", - .cpus = (const CPU[]) { - {"50", CPU_Am486SX, fpus_486sx, 50000000, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Am486SX, fpus_486sx, 66666666, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET3 | CPU_PKG_SOCKET3_PC330, + .manufacturer = "Intel", + .name = "Pentium OverDrive", + .internal_name = "pentium_p24t", + .cpus = (const CPU[]) { + {"63", CPU_P24T, fpus_internal, 62500000, 2.5, 5000, 0x1531, 0x1531, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,7,7, 15/2}, + {"83", CPU_P24T, fpus_internal, 83333333, 2.5, 5000, 0x1532, 0x1532, 0x0000, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,8,8, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DX", - .internal_name = "am486dx", - .cpus = (const CPU[]) { - {"33", CPU_Am486DX, fpus_internal, 33333333, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Am486DX, fpus_internal, 40000000, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486SX", + .internal_name = "am486sx", + .cpus = (const CPU[]) { + {"33", CPU_Am486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Am486SX, fpus_486sx, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DX2", - .internal_name = "am486dx2", - .cpus = (const CPU[]) { - {"50", CPU_Am486DX, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Am486DX, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_Am486DX, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486SX2", + .internal_name = "am486sx2", + .cpus = (const CPU[]) { + {"50", CPU_Am486SX, fpus_486sx, 50000000, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Am486SX, fpus_486sx, 66666666, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DXL", - .internal_name = "am486dxl", - .cpus = (const CPU[]) { - {"33", CPU_Am486DXL, fpus_internal, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Am486DXL, fpus_internal, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DX", + .internal_name = "am486dx", + .cpus = (const CPU[]) { + {"33", CPU_Am486DX, fpus_internal, 33333333, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Am486DX, fpus_internal, 40000000, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "AMD", - .name = "Am486DXL2", - .internal_name = "am486dxl2", - .cpus = (const CPU[]) { - {"50", CPU_Am486DXL, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Am486DXL, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_Am486DXL, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } - }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am486DX4", - .internal_name = "am486dx4", - .cpus = (const CPU[]) { - {"75", CPU_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"90", CPU_Am486DX, fpus_internal, 90000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"100", CPU_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"120", CPU_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, - {"", 0} - } - }, - { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am486DX2 (Enhanced)", - .internal_name = "am486dx2_slenh", - .cpus = (const CPU[]) { - {"66", CPU_ENH_Am486DX, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_ENH_Am486DX, fpus_internal, 80000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DX2", + .internal_name = "am486dx2", + .cpus = (const CPU[]) { + {"50", CPU_Am486DX, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Am486DX, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_Am486DX, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am486DX4 (Enhanced)", - .internal_name = "am486dx4_slenh", - .cpus = (const CPU[]) { - {"75", CPU_ENH_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"100", CPU_ENH_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"120", CPU_ENH_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DXL", + .internal_name = "am486dxl", + .cpus = (const CPU[]) { + {"33", CPU_Am486DXL, fpus_internal, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Am486DXL, fpus_internal, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "AMD", - .name = "Am5x86", - .internal_name = "am5x86", - .cpus = (const CPU[]) { - {"P75", CPU_ENH_Am486DX, fpus_internal, 133333333, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, - {"P75+", CPU_ENH_Am486DX, fpus_internal, 150000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*The rare P75+ was indeed a triple-clocked 150 MHz according to research*/ - {"P90", CPU_ENH_Am486DX, fpus_internal, 160000000, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*160 MHz on a 40 MHz bus was a common overclock and "5x86/P90" was used by a number of BIOSes to refer to that configuration*/ - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "AMD", + .name = "Am486DXL2", + .internal_name = "am486dxl2", + .cpus = (const CPU[]) { + {"50", CPU_Am486DXL, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Am486DXL, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_Am486DXL, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Cyrix", - .name = "Cx486S", - .internal_name = "cx486s", - .cpus = (const CPU[]) { - {"25", CPU_Cx486S, fpus_486sx, 25000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 4, 4, 3, 3, 3}, - {"33", CPU_Cx486S, fpus_486sx, 33333333, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Cx486S, fpus_486sx, 40000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am486DX4", + .internal_name = "am486dx4", + .cpus = (const CPU[]) { + {"75", CPU_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"90", CPU_Am486DX, fpus_internal, 90000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"100", CPU_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"120", CPU_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Cyrix", - .name = "Cx486DX", - .internal_name = "cx486dx", - .cpus = (const CPU[]) { - {"33", CPU_Cx486DX, fpus_internal, 33333333, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, - {"40", CPU_Cx486DX, fpus_internal, 40000000, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am486DX2 (Enhanced)", + .internal_name = "am486dx2_slenh", + .cpus = (const CPU[]) { + {"66", CPU_ENH_Am486DX, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_ENH_Am486DX, fpus_internal, 80000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET1, - .manufacturer = "Cyrix", - .name = "Cx486DX2", - .internal_name = "cx486dx2", - .cpus = (const CPU[]) { - {"50", CPU_Cx486DX, fpus_internal, 50000000, 2.0, 5000, 0x430, 0, 0x081b, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, - {"66", CPU_Cx486DX, fpus_internal, 66666666, 2.0, 5000, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, - {"80", CPU_Cx486DX, fpus_internal, 80000000, 2.0, 5000, 0x430, 0, 0x311b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am486DX4 (Enhanced)", + .internal_name = "am486dx4_slenh", + .cpus = (const CPU[]) { + {"75", CPU_ENH_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"100", CPU_ENH_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"120", CPU_ENH_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "Cyrix", - .name = "Cx486DX4", - .internal_name = "cx486dx4", - .cpus = (const CPU[]) { - {"75", CPU_Cx486DX, fpus_internal, 75000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, - {"100", CPU_Cx486DX, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "AMD", + .name = "Am5x86", + .internal_name = "am5x86", + .cpus = (const CPU[]) { + {"P75", CPU_ENH_Am486DX, fpus_internal, 133333333, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, + {"P75+", CPU_ENH_Am486DX, fpus_internal, 150000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*The rare P75+ was indeed a triple-clocked 150 MHz according to research*/ + {"P90", CPU_ENH_Am486DX, fpus_internal, 160000000, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*160 MHz on a 40 MHz bus was a common overclock and "5x86/P90" was used by a number of BIOSes to refer to that configuration*/ + {"", 0} + } }, { - .package = CPU_PKG_SOCKET3, - .manufacturer = "Cyrix", - .name = "Cx5x86", - .internal_name = "cx5x86", - .cpus = (const CPU[]) { - {"80", CPU_Cx5x86, fpus_internal, 80000000, 2.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, /*If we're including the Pentium 50, might as well include this*/ - {"100", CPU_Cx5x86, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, - {"120", CPU_Cx5x86, fpus_internal, 120000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, - {"133", CPU_Cx5x86, fpus_internal, 133333333, 4.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Cyrix", + .name = "Cx486S", + .internal_name = "cx486s", + .cpus = (const CPU[]) { + {"25", CPU_Cx486S, fpus_486sx, 25000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 4, 4, 3, 3, 3}, + {"33", CPU_Cx486S, fpus_486sx, 33333333, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Cx486S, fpus_486sx, 40000000, 1.0, 5000, 0x420, 0, 0x0010, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_STPC, - .manufacturer = "ST", - .name = "STPC-DX", - .internal_name = "stpc_dx", - .cpus = (const CPU[]) { - {"66", CPU_STPC, fpus_internal, 66666666, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"75", CPU_STPC, fpus_internal, 75000000, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Cyrix", + .name = "Cx486DX", + .internal_name = "cx486dx", + .cpus = (const CPU[]) { + {"33", CPU_Cx486DX, fpus_internal, 33333333, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4}, + {"40", CPU_Cx486DX, fpus_internal, 40000000, 1.0, 5000, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_STPC, - .manufacturer = "ST", - .name = "STPC-DX2", - .internal_name = "stpc_dx2", - .cpus = (const CPU[]) { - {"133", CPU_STPC, fpus_internal, 133333333, 2.0, 3300, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, - {"", 0} - } + .package = CPU_PKG_SOCKET1, + .manufacturer = "Cyrix", + .name = "Cx486DX2", + .internal_name = "cx486dx2", + .cpus = (const CPU[]) { + {"50", CPU_Cx486DX, fpus_internal, 50000000, 2.0, 5000, 0x430, 0, 0x081b, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, + {"66", CPU_Cx486DX, fpus_internal, 66666666, 2.0, 5000, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, + {"80", CPU_Cx486DX, fpus_internal, 80000000, 2.0, 5000, 0x430, 0, 0x311b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET4, - .manufacturer = "Intel", - .name = "Pentium", - .internal_name = "pentium_p5", - .cpus = (const CPU[]) { - {"50 (Q0399)", CPU_PENTIUM, fpus_internal, 50000000, 1, 5000, 0x513, 0x513, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 4, 4,3,3, 6}, - {"60", CPU_PENTIUM, fpus_internal, 60000000, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 7}, - {"66", CPU_PENTIUM, fpus_internal, 66666666, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 8}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "Cyrix", + .name = "Cx486DX4", + .internal_name = "cx486dx4", + .cpus = (const CPU[]) { + {"75", CPU_Cx486DX, fpus_internal, 75000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, + {"100", CPU_Cx486DX, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET4, - .manufacturer = "Intel", - .name = "Pentium OverDrive", - .internal_name = "pentium_p54c_od5v", - .cpus = (const CPU[]) { - {"100", CPU_PENTIUM, fpus_internal, 100000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8,6,6, 12}, - {"120", CPU_PENTIUM, fpus_internal, 120000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 14}, - {"133", CPU_PENTIUM, fpus_internal, 133333333, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 16}, - {"", 0} - } + .package = CPU_PKG_SOCKET3, + .manufacturer = "Cyrix", + .name = "Cx5x86", + .internal_name = "cx5x86", + .cpus = (const CPU[]) { + {"80", CPU_Cx5x86, fpus_internal, 80000000, 2.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, /*If we're including the Pentium 50, might as well include this*/ + {"100", CPU_Cx5x86, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12}, + {"120", CPU_Cx5x86, fpus_internal, 120000000, 3.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15}, + {"133", CPU_Cx5x86, fpus_internal, 133333333, 4.0, 5000, 0x480, 0, 0x002f, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium", - .internal_name = "pentium_p54c", - .cpus = (const CPU[]) { - {"75", CPU_PENTIUM, fpus_internal, 75000000, 1.5, 3520, 0x522, 0x522, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, - {"90", CPU_PENTIUM, fpus_internal, 90000000, 1.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, - {"100/50", CPU_PENTIUM, fpus_internal, 100000000, 2.0, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,6,6, 12}, - {"100/66", CPU_PENTIUM, fpus_internal, 100000000, 1.5, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, - {"120", CPU_PENTIUM, fpus_internal, 120000000, 2.0, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, - {"133", CPU_PENTIUM, fpus_internal, 133333333, 2.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, - {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, - {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_PENTIUM, fpus_internal, 200000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"", 0} - } + .package = CPU_PKG_STPC, + .manufacturer = "ST", + .name = "STPC-DX", + .internal_name = "stpc_dx", + .cpus = (const CPU[]) { + {"66", CPU_STPC, fpus_internal, 66666666, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"75", CPU_STPC, fpus_internal, 75000000, 1.0, 3300, 0x430, 0, 0x051a, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium MMX", - .internal_name = "pentium_p55c", - .cpus = (const CPU[]) { - {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"", 0} - } + .package = CPU_PKG_STPC, + .manufacturer = "ST", + .name = "STPC-DX2", + .internal_name = "stpc_dx2", + .cpus = (const CPU[]) { + {"133", CPU_STPC, fpus_internal, 133333333, 2.0, 3300, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Mobile Pentium MMX", - .internal_name = "pentium_tillamook", - .cpus = (const CPU[]) { - {"120", CPU_PENTIUMMMX, fpus_internal, 120000000, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, - {"133", CPU_PENTIUMMMX, fpus_internal, 133333333, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"150", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, - {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"266", CPU_PENTIUMMMX, fpus_internal, 266666666, 4.0, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_PENTIUMMMX, fpus_internal, 300000000, 4.5, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, - {"", 0} - } + .package = CPU_PKG_SOCKET4, + .manufacturer = "Intel", + .name = "Pentium", + .internal_name = "pentium_p5", + .cpus = (const CPU[]) { + {"50 (Q0399)", CPU_PENTIUM, fpus_internal, 50000000, 1, 5000, 0x513, 0x513, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 4, 4,3,3, 6}, + {"60", CPU_PENTIUM, fpus_internal, 60000000, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 7}, + {"66", CPU_PENTIUM, fpus_internal, 66666666, 1, 5000, 0x517, 0x517, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6,3,3, 8}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium OverDrive", - .internal_name = "pentium_p54c_od3v", - .cpus = (const CPU[]) { - {"125", CPU_PENTIUM, fpus_internal, 125000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, - {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, - {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, - {"", 0} - } + .package = CPU_PKG_SOCKET4, + .manufacturer = "Intel", + .name = "Pentium OverDrive", + .internal_name = "pentium_p54c_od5v", + .cpus = (const CPU[]) { + {"100", CPU_PENTIUM, fpus_internal, 100000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8,6,6, 12}, + {"120", CPU_PENTIUM, fpus_internal, 120000000, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 14}, + {"133", CPU_PENTIUM, fpus_internal, 133333333, 2, 5000, 0x51A, 0x51A, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,6,6, 16}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Intel", - .name = "Pentium OverDrive MMX", - .internal_name = "pentium_p55c_od", - .cpus = (const CPU[]) { - {"75", CPU_PENTIUMMMX, fpus_internal, 75000000, 1.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 7, 7,4,4, 9}, - {"125", CPU_PENTIUMMMX, fpus_internal, 125000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, - {"150/60", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, - {"166", CPU_PENTIUMMMX, fpus_internal, 166000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, - {"180", CPU_PENTIUMMMX, fpus_internal, 180000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 21}, - {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 24}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium", + .internal_name = "pentium_p54c", + .cpus = (const CPU[]) { + {"75", CPU_PENTIUM, fpus_internal, 75000000, 1.5, 3520, 0x522, 0x522, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, + {"90", CPU_PENTIUM, fpus_internal, 90000000, 1.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, + {"100/50", CPU_PENTIUM, fpus_internal, 100000000, 2.0, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10,6,6, 12}, + {"100/66", CPU_PENTIUM, fpus_internal, 100000000, 1.5, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, + {"120", CPU_PENTIUM, fpus_internal, 120000000, 2.0, 3520, 0x526, 0x526, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, + {"133", CPU_PENTIUM, fpus_internal, 133333333, 2.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, + {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, + {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_PENTIUM, fpus_internal, 200000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "IDT", - .name = "WinChip", - .internal_name = "winchip", - .cpus = (const CPU[]) { - {"75", CPU_WINCHIP, fpus_internal, 75000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 4, 4, 9}, - {"90", CPU_WINCHIP, fpus_internal, 90000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 21/2}, - {"100", CPU_WINCHIP, fpus_internal, 100000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 12}, - {"120", CPU_WINCHIP, fpus_internal, 120000000, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 14}, - {"133", CPU_WINCHIP, fpus_internal, 133333333, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 16}, - {"150", CPU_WINCHIP, fpus_internal, 150000000, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 35/2}, - {"166", CPU_WINCHIP, fpus_internal, 166666666, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 40}, - {"180", CPU_WINCHIP, fpus_internal, 180000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 21}, - {"200", CPU_WINCHIP, fpus_internal, 200000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 24}, - {"225", CPU_WINCHIP, fpus_internal, 225000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 27}, - {"240", CPU_WINCHIP, fpus_internal, 240000000, 4.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 28}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium MMX", + .internal_name = "pentium_p55c", + .cpus = (const CPU[]) { + {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "IDT", - .name = "WinChip 2", - .internal_name = "winchip2", - .cpus = (const CPU[]) { - {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, - {"225", CPU_WINCHIP2, fpus_internal, 225000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*9}, - {"240", CPU_WINCHIP2, fpus_internal, 240000000, 4.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, - {"250", CPU_WINCHIP2, fpus_internal, 250000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Mobile Pentium MMX", + .internal_name = "pentium_tillamook", + .cpus = (const CPU[]) { + {"120", CPU_PENTIUMMMX, fpus_internal, 120000000, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, + {"133", CPU_PENTIUMMMX, fpus_internal, 133333333, 2.0, 2800, 0x543, 0x543, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"150", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, + {"166", CPU_PENTIUMMMX, fpus_internal, 166666666, 2.5, 2800, 0x544, 0x544, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_PENTIUMMMX, fpus_internal, 233333333, 3.5, 2800, 0x581, 0x581, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"266", CPU_PENTIUMMMX, fpus_internal, 266666666, 4.0, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_PENTIUMMMX, fpus_internal, 300000000, 4.5, 2800, 0x582, 0x582, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "IDT", - .name = "WinChip 2A", - .internal_name = "winchip2a", - .cpus = (const CPU[]) { - {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, - {"233", CPU_WINCHIP2, fpus_internal, 233333333, 3.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 9, 9, (7*8)/2}, - {"266", CPU_WINCHIP2, fpus_internal, 233333333, 7.0/3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 7, 7, 28}, - {"300", CPU_WINCHIP2, fpus_internal, 250000000, 2.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 8, 8, 30}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium OverDrive", + .internal_name = "pentium_p54c_od3v", + .cpus = (const CPU[]) { + {"125", CPU_PENTIUM, fpus_internal, 125000000, 3.0, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, + {"150", CPU_PENTIUM, fpus_internal, 150000000, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, + {"166", CPU_PENTIUM, fpus_internal, 166666666, 2.5, 3520, 0x52c, 0x52c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Intel", + .name = "Pentium OverDrive MMX", + .internal_name = "pentium_p55c_od", + .cpus = (const CPU[]) { + {"75", CPU_PENTIUMMMX, fpus_internal, 75000000, 1.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 7, 7,4,4, 9}, + {"125", CPU_PENTIUMMMX, fpus_internal, 125000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12,7,7, 15}, + {"150/60", CPU_PENTIUMMMX, fpus_internal, 150000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 35/2}, + {"166", CPU_PENTIUMMMX, fpus_internal, 166000000, 2.5, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15,7,7, 20}, + {"180", CPU_PENTIUMMMX, fpus_internal, 180000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 21}, + {"200", CPU_PENTIUMMMX, fpus_internal, 200000000, 3.0, 3520, 0x1542, 0x1542, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18,9,9, 24}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "IDT", + .name = "WinChip", + .internal_name = "winchip", + .cpus = (const CPU[]) { + {"75", CPU_WINCHIP, fpus_internal, 75000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 4, 4, 9}, + {"90", CPU_WINCHIP, fpus_internal, 90000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 21/2}, + {"100", CPU_WINCHIP, fpus_internal, 100000000, 1.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 9, 9, 4, 4, 12}, + {"120", CPU_WINCHIP, fpus_internal, 120000000, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 14}, + {"133", CPU_WINCHIP, fpus_internal, 133333333, 2.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 12, 12, 6, 6, 16}, + {"150", CPU_WINCHIP, fpus_internal, 150000000, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 35/2}, + {"166", CPU_WINCHIP, fpus_internal, 166666666, 2.5, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 15, 15, 7, 7, 40}, + {"180", CPU_WINCHIP, fpus_internal, 180000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 21}, + {"200", CPU_WINCHIP, fpus_internal, 200000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 24}, + {"225", CPU_WINCHIP, fpus_internal, 225000000, 3.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 27}, + {"240", CPU_WINCHIP, fpus_internal, 240000000, 4.0, 3520, 0x540, 0x540, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 28}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "IDT", + .name = "WinChip 2", + .internal_name = "winchip2", + .cpus = (const CPU[]) { + {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, + {"225", CPU_WINCHIP2, fpus_internal, 225000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*9}, + {"240", CPU_WINCHIP2, fpus_internal, 240000000, 4.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, + {"250", CPU_WINCHIP2, fpus_internal, 250000000, 3.0, 3520, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 12, 12, 30}, + {"", 0} + } + }, { + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "IDT", + .name = "WinChip 2A", + .internal_name = "winchip2a", + .cpus = (const CPU[]) { + {"200", CPU_WINCHIP2, fpus_internal, 200000000, 3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 18, 18, 9, 9, 3*8}, + {"233", CPU_WINCHIP2, fpus_internal, 233333333, 3.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 9, 9, (7*8)/2}, + {"266", CPU_WINCHIP2, fpus_internal, 233333333, 7.0/3.0, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 21, 21, 7, 7, 28}, + {"300", CPU_WINCHIP2, fpus_internal, 250000000, 2.5, 3520, 0x587, 0x587, 0, CPU_SUPPORTS_DYNAREC, 24, 24, 8, 8, 30}, + {"", 0} + } }, #if defined(DEV_BRANCH) && defined(USE_AMD_K5) { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K5 (5k86)", - .internal_name = "k5_5k86", - .cpus = (const CPU[]) { - {"75 (P75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, - {"90 (P90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, - {"100 (P100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, - {"90 (PR120)", CPU_5K86, fpus_internal, 120000000, 2.0, 3520, 0x511, 0x511, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, - {"100 (PR133)", CPU_5K86, fpus_internal, 133333333, 2.0, 3520, 0x514, 0x514, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, - {"105 (PR150)", CPU_5K86, fpus_internal, 150000000, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 35/2}, - {"116.5 (PR166)", CPU_5K86, fpus_internal, 166666666, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 20}, - {"133 (PR200)", CPU_5K86, fpus_internal, 200000000, 3.0, 3520, 0x534, 0x534, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,9,9, 24}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K5 (5k86)", + .internal_name = "k5_5k86", + .cpus = (const CPU[]) { + {"75 (P75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, + {"90 (P90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, + {"100 (P100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x500, 0x500, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, + {"90 (PR120)", CPU_5K86, fpus_internal, 120000000, 2.0, 3520, 0x511, 0x511, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 14}, + {"100 (PR133)", CPU_5K86, fpus_internal, 133333333, 2.0, 3520, 0x514, 0x514, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,6,6, 16}, + {"105 (PR150)", CPU_5K86, fpus_internal, 150000000, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 35/2}, + {"116.5 (PR166)", CPU_5K86, fpus_internal, 166666666, 2.5, 3520, 0x524, 0x524, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,7,7, 20}, + {"133 (PR200)", CPU_5K86, fpus_internal, 200000000, 3.0, 3520, 0x534, 0x534, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,9,9, 24}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K5 (SSA/5)", - .internal_name = "k5_ssa5", - .cpus = (const CPU[]) { - {"75 (PR75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, - {"90 (PR90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, - {"100 (PR100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K5 (SSA/5)", + .internal_name = "k5_ssa5", + .cpus = (const CPU[]) { + {"75 (PR75)", CPU_K5, fpus_internal, 75000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7,4,4, 9}, + {"90 (PR90)", CPU_K5, fpus_internal, 90000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 21/2}, + {"100 (PR100)", CPU_K5, fpus_internal, 100000000, 1.5, 3520, 0x501, 0x501, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9,4,4, 12}, + {"", 0} + } }, #endif { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6 (Model 6)", - .internal_name = "k6_m6", - .cpus = (const CPU[]) { - {"66", CPU_K6, fpus_internal, 66666666, 1.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_K6, fpus_internal, 233333333, 3.5, 3200, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6 (Model 6)", + .internal_name = "k6_m6", + .cpus = (const CPU[]) { + {"66", CPU_K6, fpus_internal, 66666666, 1.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2900, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_K6, fpus_internal, 233333333, 3.5, 3200, 0x561, 0x561, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6 (Model 7)", - .internal_name = "k6_m7", - .cpus = (const CPU[]) { - {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"233", CPU_K6, fpus_internal, 233333333, 3.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"266", CPU_K6, fpus_internal, 266666666, 4.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_K6, fpus_internal, 300000000, 4.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6 (Model 7)", + .internal_name = "k6_m7", + .cpus = (const CPU[]) { + {"100", CPU_K6, fpus_internal, 100000000, 1.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6, fpus_internal, 133333333, 2.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6, fpus_internal, 166666666, 2.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6, fpus_internal, 200000000, 3.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"233", CPU_K6, fpus_internal, 233333333, 3.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"266", CPU_K6, fpus_internal, 266666666, 4.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_K6, fpus_internal, 300000000, 4.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-2", - .internal_name = "k6_2", - .cpus = (const CPU[]) { - {"100", CPU_K6_2, fpus_internal, 100000000, 1.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6_2, fpus_internal, 133333333, 2.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_2, fpus_internal, 166666666, 2.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_2, fpus_internal, 200000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_2, fpus_internal, 233333333, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, - {"266", CPU_K6_2, fpus_internal, 266666666, 4.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, - {"300", CPU_K6_2, fpus_internal, 300000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, - {"333", CPU_K6_2, fpus_internal, 332500000, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, - {"350", CPU_K6_2C, fpus_internal, 350000000, 3.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, - {"366", CPU_K6_2C, fpus_internal, 366666666, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, - {"380", CPU_K6_2C, fpus_internal, 380000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, - {"400/66", CPU_K6_2C, fpus_internal, 400000000, 6.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"400/100", CPU_K6_2C, fpus_internal, 400000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"450", CPU_K6_2C, fpus_internal, 450000000, 4.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"475", CPU_K6_2C, fpus_internal, 475000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, - {"500", CPU_K6_2C, fpus_internal, 500000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, - {"533", CPU_K6_2C, fpus_internal, 533333333, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, - {"550", CPU_K6_2C, fpus_internal, 550000000, 5.5, 2300, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-2", + .internal_name = "k6_2", + .cpus = (const CPU[]) { + {"100", CPU_K6_2, fpus_internal, 100000000, 1.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6_2, fpus_internal, 133333333, 2.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_2, fpus_internal, 166666666, 2.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_2, fpus_internal, 200000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_2, fpus_internal, 233333333, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, + {"266", CPU_K6_2, fpus_internal, 266666666, 4.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, + {"300", CPU_K6_2, fpus_internal, 300000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, + {"333", CPU_K6_2, fpus_internal, 332500000, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, + {"350", CPU_K6_2C, fpus_internal, 350000000, 3.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, + {"366", CPU_K6_2C, fpus_internal, 366666666, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, + {"380", CPU_K6_2C, fpus_internal, 380000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, + {"400/66", CPU_K6_2C, fpus_internal, 400000000, 6.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"400/100", CPU_K6_2C, fpus_internal, 400000000, 4.0, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"450", CPU_K6_2C, fpus_internal, 450000000, 4.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"475", CPU_K6_2C, fpus_internal, 475000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, + {"500", CPU_K6_2C, fpus_internal, 500000000, 5.0, 2400, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, + {"533", CPU_K6_2C, fpus_internal, 533333333, 5.5, 2200, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, + {"550", CPU_K6_2C, fpus_internal, 550000000, 5.5, 2300, 0x58c, 0x58c, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-2+", - .internal_name = "k6_2p", - .cpus = (const CPU[]) { - {"100", CPU_K6_2P, fpus_internal, 100000000, 1.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6_2P, fpus_internal, 133333333, 2.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_2P, fpus_internal, 166666666, 2.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_2P, fpus_internal, 200000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_2P, fpus_internal, 233333333, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ - {"266", CPU_K6_2P, fpus_internal, 266666666, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ - {"300", CPU_K6_2P, fpus_internal, 300000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ - {"333", CPU_K6_2P, fpus_internal, 332500000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ - {"350", CPU_K6_2P, fpus_internal, 350000000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ - {"366", CPU_K6_2P, fpus_internal, 366666666, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ - {"380", CPU_K6_2P, fpus_internal, 380000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ - {"400/66", CPU_K6_2P, fpus_internal, 400000000, 6.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ - {"400/100", CPU_K6_2P, fpus_internal, 400000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ - {"450", CPU_K6_2P, fpus_internal, 450000000, 4.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"475", CPU_K6_2P, fpus_internal, 475000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, - {"500", CPU_K6_2P, fpus_internal, 500000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, - {"533", CPU_K6_2P, fpus_internal, 533333333, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, - {"550", CPU_K6_2P, fpus_internal, 550000000, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-2+", + .internal_name = "k6_2p", + .cpus = (const CPU[]) { + {"100", CPU_K6_2P, fpus_internal, 100000000, 1.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6_2P, fpus_internal, 133333333, 2.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_2P, fpus_internal, 166666666, 2.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_2P, fpus_internal, 200000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_2P, fpus_internal, 233333333, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ + {"266", CPU_K6_2P, fpus_internal, 266666666, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ + {"300", CPU_K6_2P, fpus_internal, 300000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ + {"333", CPU_K6_2P, fpus_internal, 332500000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ + {"350", CPU_K6_2P, fpus_internal, 350000000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ + {"366", CPU_K6_2P, fpus_internal, 366666666, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ + {"380", CPU_K6_2P, fpus_internal, 380000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ + {"400/66", CPU_K6_2P, fpus_internal, 400000000, 6.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ + {"400/100", CPU_K6_2P, fpus_internal, 400000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */ + {"450", CPU_K6_2P, fpus_internal, 450000000, 4.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"475", CPU_K6_2P, fpus_internal, 475000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, + {"500", CPU_K6_2P, fpus_internal, 500000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, + {"533", CPU_K6_2P, fpus_internal, 533333333, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64}, + {"550", CPU_K6_2P, fpus_internal, 550000000, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-III", - .internal_name = "k6_3", - .cpus = (const CPU[]) { - {"100", CPU_K6_3, fpus_internal, 100000000, 1.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_K6_3, fpus_internal, 133333333, 2.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_3, fpus_internal, 166666666, 2.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_3, fpus_internal, 200000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_3, fpus_internal, 233333333, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ - {"266", CPU_K6_3, fpus_internal, 266666666, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ - {"300", CPU_K6_3, fpus_internal, 300000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ - {"333", CPU_K6_3, fpus_internal, 332500000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ - {"350", CPU_K6_3, fpus_internal, 350000000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ - {"366", CPU_K6_3, fpus_internal, 366666666, 5.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ - {"380", CPU_K6_3, fpus_internal, 380000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ - {"400", CPU_K6_3, fpus_internal, 400000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"450", CPU_K6_3, fpus_internal, 450000000, 4.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-III", + .internal_name = "k6_3", + .cpus = (const CPU[]) { + {"100", CPU_K6_3, fpus_internal, 100000000, 1.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_K6_3, fpus_internal, 133333333, 2.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_3, fpus_internal, 166666666, 2.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_3, fpus_internal, 200000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_3, fpus_internal, 233333333, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ + {"266", CPU_K6_3, fpus_internal, 266666666, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ + {"300", CPU_K6_3, fpus_internal, 300000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ + {"333", CPU_K6_3, fpus_internal, 332500000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ + {"350", CPU_K6_3, fpus_internal, 350000000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ + {"366", CPU_K6_3, fpus_internal, 366666666, 5.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ + {"380", CPU_K6_3, fpus_internal, 380000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ + {"400", CPU_K6_3, fpus_internal, 400000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"450", CPU_K6_3, fpus_internal, 450000000, 4.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "AMD", - .name = "K6-III+", - .internal_name = "k6_3p", - .cpus = (const CPU[]) { - {"100", CPU_K6_3P, fpus_internal, 100000000, 1.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7, 4, 4, 9}, /* out of spec */ - {"133", CPU_K6_3P, fpus_internal, 133333333, 2.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ - {"166", CPU_K6_3P, fpus_internal, 166666666, 2.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ - {"200", CPU_K6_3P, fpus_internal, 200000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ - {"233", CPU_K6_3P, fpus_internal, 233333333, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ - {"266", CPU_K6_3P, fpus_internal, 266666666, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ - {"300", CPU_K6_3P, fpus_internal, 300000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ - {"333", CPU_K6_3P, fpus_internal, 332500000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ - {"350", CPU_K6_3P, fpus_internal, 350000000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ - {"366", CPU_K6_3P, fpus_internal, 366666666, 5.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ - {"380", CPU_K6_3P, fpus_internal, 380000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ - {"400", CPU_K6_3P, fpus_internal, 400000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, - {"450", CPU_K6_3P, fpus_internal, 450000000, 4.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, - {"475", CPU_K6_3P, fpus_internal, 475000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, - {"500", CPU_K6_3P, fpus_internal, 500000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "AMD", + .name = "K6-III+", + .internal_name = "k6_3p", + .cpus = (const CPU[]) { + {"100", CPU_K6_3P, fpus_internal, 100000000, 1.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7, 4, 4, 9}, /* out of spec */ + {"133", CPU_K6_3P, fpus_internal, 133333333, 2.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */ + {"166", CPU_K6_3P, fpus_internal, 166666666, 2.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */ + {"200", CPU_K6_3P, fpus_internal, 200000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */ + {"233", CPU_K6_3P, fpus_internal, 233333333, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */ + {"266", CPU_K6_3P, fpus_internal, 266666666, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */ + {"300", CPU_K6_3P, fpus_internal, 300000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */ + {"333", CPU_K6_3P, fpus_internal, 332500000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */ + {"350", CPU_K6_3P, fpus_internal, 350000000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */ + {"366", CPU_K6_3P, fpus_internal, 366666666, 5.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */ + {"380", CPU_K6_3P, fpus_internal, 380000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */ + {"400", CPU_K6_3P, fpus_internal, 400000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, + {"450", CPU_K6_3P, fpus_internal, 450000000, 4.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54}, + {"475", CPU_K6_3P, fpus_internal, 475000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57}, + {"500", CPU_K6_3P, fpus_internal, 500000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60}, + {"", 0} + } }, #if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86) { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "Cx6x86", - .internal_name = "cx6x86", - .cpus = (const CPU[]) { - {"P90", CPU_Cx6x86, fpus_internal, 80000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 8, 8, 6, 6, 10}, - {"PR120+", CPU_Cx6x86, fpus_internal, 100000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 12}, - {"PR133+", CPU_Cx6x86, fpus_internal, 110000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, - {"PR150+", CPU_Cx6x86, fpus_internal, 120000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, - {"PR166+", CPU_Cx6x86, fpus_internal, 133333333, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"PR200+", CPU_Cx6x86, fpus_internal, 150000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "Cx6x86", + .internal_name = "cx6x86", + .cpus = (const CPU[]) { + {"P90", CPU_Cx6x86, fpus_internal, 80000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 8, 8, 6, 6, 10}, + {"PR120+", CPU_Cx6x86, fpus_internal, 100000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 12}, + {"PR133+", CPU_Cx6x86, fpus_internal, 110000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, + {"PR150+", CPU_Cx6x86, fpus_internal, 120000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, + {"PR166+", CPU_Cx6x86, fpus_internal, 133333333, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"PR200+", CPU_Cx6x86, fpus_internal, 150000000, 2.0, 3520, 0x520, 0x520, 0x1731, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "Cx6x86L", - .internal_name = "cx6x86l", - .cpus = (const CPU[]) { - {"PR133+", CPU_Cx6x86L, fpus_internal, 110000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, - {"PR150+", CPU_Cx6x86L, fpus_internal, 120000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, - {"PR166+", CPU_Cx6x86L, fpus_internal, 133333333, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"PR200+", CPU_Cx6x86L, fpus_internal, 150000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "Cx6x86L", + .internal_name = "cx6x86l", + .cpus = (const CPU[]) { + {"PR133+", CPU_Cx6x86L, fpus_internal, 110000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 14}, + {"PR150+", CPU_Cx6x86L, fpus_internal, 120000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 14}, + {"PR166+", CPU_Cx6x86L, fpus_internal, 133333333, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"PR200+", CPU_Cx6x86L, fpus_internal, 150000000, 2.0, 2800, 0x540, 0x540, 0x2231, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 18}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "Cx6x86MX", - .internal_name = "cx6x86mx", - .cpus = (const CPU[]) { - {"PR166", CPU_Cx6x86MX, fpus_internal, 133333333, 2.0, 2900, 0x600, 0x600, 0x0451, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, - {"PR200", CPU_Cx6x86MX, fpus_internal, 166666666, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"PR233", CPU_Cx6x86MX, fpus_internal, 187500000, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 45/2}, - {"PR266", CPU_Cx6x86MX, fpus_internal, 208333333, 2.5, 2700, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 17,17, 7, 7, 25}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "Cx6x86MX", + .internal_name = "cx6x86mx", + .cpus = (const CPU[]) { + {"PR166", CPU_Cx6x86MX, fpus_internal, 133333333, 2.0, 2900, 0x600, 0x600, 0x0451, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, + {"PR200", CPU_Cx6x86MX, fpus_internal, 166666666, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"PR233", CPU_Cx6x86MX, fpus_internal, 187500000, 2.5, 2900, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 45/2}, + {"PR266", CPU_Cx6x86MX, fpus_internal, 208333333, 2.5, 2700, 0x600, 0x600, 0x0452, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 17,17, 7, 7, 25}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET5_7, - .manufacturer = "Cyrix", - .name = "MII", - .internal_name = "mii", - .cpus = (const CPU[]) { - {"PR300", CPU_Cx6x86MX, fpus_internal, 233333333, 3.5, 2900, 0x601, 0x601, 0x0852, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, - {"PR333", CPU_Cx6x86MX, fpus_internal, 250000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 9, 9, 30}, - {"PR366", CPU_Cx6x86MX, fpus_internal, 250000000, 2.5, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 7, 7, 30}, - {"PR400", CPU_Cx6x86MX, fpus_internal, 285000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 34}, - {"PR433", CPU_Cx6x86MX, fpus_internal, 300000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, - {"", 0} - } + .package = CPU_PKG_SOCKET5_7, + .manufacturer = "Cyrix", + .name = "MII", + .internal_name = "mii", + .cpus = (const CPU[]) { + {"PR300", CPU_Cx6x86MX, fpus_internal, 233333333, 3.5, 2900, 0x601, 0x601, 0x0852, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, + {"PR333", CPU_Cx6x86MX, fpus_internal, 250000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 9, 9, 30}, + {"PR366", CPU_Cx6x86MX, fpus_internal, 250000000, 2.5, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 23,23, 7, 7, 30}, + {"PR400", CPU_Cx6x86MX, fpus_internal, 285000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 34}, + {"PR433", CPU_Cx6x86MX, fpus_internal, 300000000, 3.0, 2900, 0x601, 0x601, 0x0853, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, + {"", 0} + } }, #endif { - .package = CPU_PKG_SOCKET8, - .manufacturer = "Intel", - .name = "Pentium Pro", - .internal_name = "pentiumpro", - .cpus = (const CPU[]) { - {"60", CPU_PENTIUMPRO, fpus_internal, 60000000, 1.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 7}, /* out of spec */ - {"66", CPU_PENTIUMPRO, fpus_internal, 66666666, 1.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 8}, /* out of spec */ - {"90", CPU_PENTIUMPRO, fpus_internal, 90000000, 1.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 11}, /* out of spec */ - {"100", CPU_PENTIUMPRO, fpus_internal, 100000000, 1.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ - {"120", CPU_PENTIUMPRO, fpus_internal, 120000000, 2.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 14}, /* out of spec */ - {"133", CPU_PENTIUMPRO, fpus_internal, 133333333, 2.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 16}, /* out of spec */ - {"150", CPU_PENTIUMPRO, fpus_internal, 150000000, 2.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, - {"166", CPU_PENTIUMPRO, fpus_internal, 166666666, 2.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, - {"180", CPU_PENTIUMPRO, fpus_internal, 180000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 21}, - {"200", CPU_PENTIUMPRO, fpus_internal, 200000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, - {"", 0} - } + .package = CPU_PKG_SOCKET8, + .manufacturer = "Intel", + .name = "Pentium Pro", + .internal_name = "pentiumpro", + .cpus = (const CPU[]) { + {"60", CPU_PENTIUMPRO, fpus_internal, 60000000, 1.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 7}, /* out of spec */ + {"66", CPU_PENTIUMPRO, fpus_internal, 66666666, 1.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 1, 1, 8}, /* out of spec */ + {"90", CPU_PENTIUMPRO, fpus_internal, 90000000, 1.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 11}, /* out of spec */ + {"100", CPU_PENTIUMPRO, fpus_internal, 100000000, 1.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ + {"120", CPU_PENTIUMPRO, fpus_internal, 120000000, 2.0, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 14}, /* out of spec */ + {"133", CPU_PENTIUMPRO, fpus_internal, 133333333, 2.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 5, 5, 16}, /* out of spec */ + {"150", CPU_PENTIUMPRO, fpus_internal, 150000000, 2.5, 3100, 0x612, 0x612, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 35/2}, + {"166", CPU_PENTIUMPRO, fpus_internal, 166666666, 2.5, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, + {"180", CPU_PENTIUMPRO, fpus_internal, 180000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 21}, + {"200", CPU_PENTIUMPRO, fpus_internal, 200000000, 3.0, 3300, 0x617, 0x617, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET8, - .manufacturer = "Intel", - .name = "Pentium II OverDrive", - .internal_name = "pentium2_od", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18, 9, 9, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 21,21,10,10, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 24,24,12,12, 32}, /* out of spec */ - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 36}, - {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, - {"", 0} - } + .package = CPU_PKG_SOCKET8, + .manufacturer = "Intel", + .name = "Pentium II OverDrive", + .internal_name = "pentium2_od", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 18,18, 9, 9, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 21,21,10,10, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 24,24,12,12, 32}, /* out of spec */ + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 36}, + {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 3300, 0x1632, 0x1632, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT1, - .manufacturer = "Intel", - .name = "Pentium II (Klamath)", - .internal_name = "pentium2_klamath", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2, fpus_internal, 66666666, 1.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2, fpus_internal, 100000000, 1.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ - {"133", CPU_PENTIUM2, fpus_internal, 133333333, 2.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_PENTIUM2, fpus_internal, 166666666, 2.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2, fpus_internal, 200000000, 3.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ - {"233", CPU_PENTIUM2, fpus_internal, 233333333, 3.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, - {"266", CPU_PENTIUM2, fpus_internal, 266666666, 4.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_PENTIUM2, fpus_internal, 300000000, 4.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, - {"", 0} - } + .package = CPU_PKG_SLOT1, + .manufacturer = "Intel", + .name = "Pentium II (Klamath)", + .internal_name = "pentium2_klamath", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2, fpus_internal, 66666666, 1.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2, fpus_internal, 100000000, 1.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */ + {"133", CPU_PENTIUM2, fpus_internal, 133333333, 2.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_PENTIUM2, fpus_internal, 166666666, 2.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2, fpus_internal, 200000000, 3.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ + {"233", CPU_PENTIUM2, fpus_internal, 233333333, 3.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28}, + {"266", CPU_PENTIUM2, fpus_internal, 266666666, 4.0, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_PENTIUM2, fpus_internal, 300000000, 4.5, 2800, 0x634, 0x634, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT1, - .manufacturer = "Intel", - .name = "Pentium II (Deschutes)", - .internal_name = "pentium2_deschutes", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 5, 5, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, - {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 40}, - {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,11,11, 42}, - {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, - {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, - {"", 0} - } + .package = CPU_PKG_SLOT1, + .manufacturer = "Intel", + .name = "Pentium II (Deschutes)", + .internal_name = "pentium2_deschutes", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 5, 5, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,11,11, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32}, + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36}, + {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 40}, + {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,11,11, 42}, + {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, + {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT1, - .manufacturer = "Intel", - .name = "Celeron (Covington)", - .internal_name = "celeron_covington", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 6, 6, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 9, 9, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,12,12, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,15,15, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,18,18, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,21,21, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,24,24, 32}, - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,25,25, 36}, - {"", 0} - } + .package = CPU_PKG_SLOT1, + .manufacturer = "Intel", + .name = "Celeron (Covington)", + .internal_name = "celeron_covington", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 6, 6, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 9, 9, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12,12,12, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15,15,15, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18,18,18, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,21,21, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x650, 0x650, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,24,24, 32}, + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,25,25, 36}, + {"", 0} + } }, { - .package = CPU_PKG_SLOT2, - .manufacturer = "Intel", - .name = "Pentium II Xeon", - .internal_name = "pentium2_xeon", - .cpus = (const CPU[]) { - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ - {"150", CPU_PENTIUM2D, fpus_internal, 150000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 14,14, 4, 4, 18}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 6, 6, 24}, /* out of spec */ - {"250", CPU_PENTIUM2D, fpus_internal, 250000000, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 22,22, 7, 7, 30}, /* out of spec */ - {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, /* out of spec */ - {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,10,10, 42}, /* out of spec */ - {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, - {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, - {"", 0} - } + .package = CPU_PKG_SLOT2, + .manufacturer = "Intel", + .name = "Pentium II Xeon", + .internal_name = "pentium2_xeon", + .cpus = (const CPU[]) { + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 3, 3, 12}, /* out of spec */ + {"150", CPU_PENTIUM2D, fpus_internal, 150000000, 1.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 14,14, 4, 4, 18}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 2.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 6, 6, 24}, /* out of spec */ + {"250", CPU_PENTIUM2D, fpus_internal, 250000000, 2.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 22,22, 7, 7, 30}, /* out of spec */ + {"300", CPU_PENTIUM2D, fpus_internal, 300000000, 3.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27, 9, 9, 36}, /* out of spec */ + {"350", CPU_PENTIUM2D, fpus_internal, 350000000, 3.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,10,10, 42}, /* out of spec */ + {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 4.0, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48}, + {"450", CPU_PENTIUM2D, fpus_internal, 450000000, 4.5, 2050, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET370, - .manufacturer = "Intel", - .name = "Celeron (Mendocino)", - .internal_name = "celeron_mendocino", - .cpus = (const CPU[]) { - {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ - {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8, 4, 4, 12}, /* out of spec */ - {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 11,11, 5, 5, 16}, /* out of spec */ - {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 14,14, 7, 7, 20}, /* out of spec */ - {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 17,17, 8, 8, 24}, /* out of spec */ - {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 19,19, 9, 9, 28}, /* out of spec */ - {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 22,22,11,11, 32}, /* out of spec */ - {"300A", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 25,25,12,12, 36}, - {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, - {"366", CPU_PENTIUM2D, fpus_internal, 366666666, 5.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 33,33,17,17, 44}, - {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 6.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 36,36,12,12, 48}, - {"433", CPU_PENTIUM2D, fpus_internal, 433333333, 6.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 39,39,13,13, 51}, - {"466", CPU_PENTIUM2D, fpus_internal, 466666666, 7.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 42,42,14,14, 56}, - {"500", CPU_PENTIUM2D, fpus_internal, 500000000, 7.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 45,45,15,15, 60}, - {"533", CPU_PENTIUM2D, fpus_internal, 533333333, 8.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 48,48,17,17, 64}, - {"", 0} - } + .package = CPU_PKG_SOCKET370, + .manufacturer = "Intel", + .name = "Celeron (Mendocino)", + .internal_name = "celeron_mendocino", + .cpus = (const CPU[]) { + {"66", CPU_PENTIUM2D, fpus_internal, 66666666, 1.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of spec */ + {"100", CPU_PENTIUM2D, fpus_internal, 100000000, 1.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 8, 8, 4, 4, 12}, /* out of spec */ + {"133", CPU_PENTIUM2D, fpus_internal, 133333333, 2.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 11,11, 5, 5, 16}, /* out of spec */ + {"166", CPU_PENTIUM2D, fpus_internal, 166666666, 2.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 14,14, 7, 7, 20}, /* out of spec */ + {"200", CPU_PENTIUM2D, fpus_internal, 200000000, 3.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 17,17, 8, 8, 24}, /* out of spec */ + {"233", CPU_PENTIUM2D, fpus_internal, 233333333, 3.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 19,19, 9, 9, 28}, /* out of spec */ + {"266", CPU_PENTIUM2D, fpus_internal, 266666666, 4.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 22,22,11,11, 32}, /* out of spec */ + {"300A", CPU_PENTIUM2D, fpus_internal, 300000000, 4.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 25,25,12,12, 36}, + {"333", CPU_PENTIUM2D, fpus_internal, 333333333, 5.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 27,27,13,13, 40}, + {"366", CPU_PENTIUM2D, fpus_internal, 366666666, 5.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 33,33,17,17, 44}, + {"400", CPU_PENTIUM2D, fpus_internal, 400000000, 6.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 36,36,12,12, 48}, + {"433", CPU_PENTIUM2D, fpus_internal, 433333333, 6.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 39,39,13,13, 51}, + {"466", CPU_PENTIUM2D, fpus_internal, 466666666, 7.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 42,42,14,14, 56}, + {"500", CPU_PENTIUM2D, fpus_internal, 500000000, 7.5, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 45,45,15,15, 60}, + {"533", CPU_PENTIUM2D, fpus_internal, 533333333, 8.0, 2050, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC | CPU_FIXED_MULTIPLIER, 48,48,17,17, 64}, + {"", 0} + } }, { - .package = CPU_PKG_SOCKET370, - .manufacturer = "VIA", - .name = "Cyrix III", - .internal_name = "c3_samuel", - .cpus = (const CPU[]) { - {"66", CPU_CYRIX3S, fpus_internal, 66666666, 1.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of multiplier range */ - {"100", CPU_CYRIX3S, fpus_internal, 100000000, 1.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of multiplier range */ - {"133", CPU_CYRIX3S, fpus_internal, 133333333, 2.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 12, 12, 6, 6, 16}, /* out of multiplier range */ - {"166", CPU_CYRIX3S, fpus_internal, 166666666, 2.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 15, 15, 7, 7, 20}, /* out of multiplier range */ - {"200", CPU_CYRIX3S, fpus_internal, 200000000, 3.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 18, 18, 8, 8, 24}, /* out of multiplier range */ - {"233", CPU_CYRIX3S, fpus_internal, 233333333, 3.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 21, 21, 9, 9, 28}, /* out of multiplier range */ - {"266", CPU_CYRIX3S, fpus_internal, 266666666, 4.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 24, 24, 12, 12, 32}, /* out of multiplier range */ - {"300", CPU_CYRIX3S, fpus_internal, 300000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 27, 27, 13, 13, 36}, /* out of spec */ - {"333", CPU_CYRIX3S, fpus_internal, 333333333, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 30, 30, 15, 15, 40}, /* out of spec */ - {"366", CPU_CYRIX3S, fpus_internal, 366666666, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 33, 33, 16, 16, 44}, /* out of spec */ - {"400", CPU_CYRIX3S, fpus_internal, 400000000, 6.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 36, 36, 17, 17, 48}, - {"433", CPU_CYRIX3S, fpus_internal, 433333333, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 39, 39, 18, 18, 52}, /* out of spec */ - {"450", CPU_CYRIX3S, fpus_internal, 450000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 41, 41, 14, 14, 54}, - {"466", CPU_CYRIX3S, fpus_internal, 466666666, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 42, 42, 14, 14, 56}, /* out of spec */ - {"500", CPU_CYRIX3S, fpus_internal, 500000000, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 45, 45, 15, 15, 60}, - {"533", CPU_CYRIX3S, fpus_internal, 533333333, 8.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 48, 48, 15, 15, 64}, /* out of spec */ - {"550", CPU_CYRIX3S, fpus_internal, 550000000, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 50, 50, 17, 17, 66}, - {"600/100", CPU_CYRIX3S, fpus_internal, 600000000, 6.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 18, 18, 72}, - {"600/133", CPU_CYRIX3S, fpus_internal, 600000000, 4.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 13, 13, 72}, - {"650", CPU_CYRIX3S, fpus_internal, 650000000, 6.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 58, 58, 20, 20, 78}, - {"667", CPU_CYRIX3S, fpus_internal, 666666667, 5.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 60, 60, 16, 16, 80}, - {"700", CPU_CYRIX3S, fpus_internal, 700000000, 7.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 63, 63, 21, 21, 84}, - {"733", CPU_CYRIX3S, fpus_internal, 733333333, 5.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 66, 66, 18, 18, 88}, - {"", 0} - } + .package = CPU_PKG_SOCKET370, + .manufacturer = "VIA", + .name = "Cyrix III", + .internal_name = "c3_samuel", + .cpus = (const CPU[]) { + {"66", CPU_CYRIX3S, fpus_internal, 66666666, 1.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 6, 6, 3, 3, 8}, /* out of multiplier range */ + {"100", CPU_CYRIX3S, fpus_internal, 100000000, 1.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 9, 9, 4, 4, 12}, /* out of multiplier range */ + {"133", CPU_CYRIX3S, fpus_internal, 133333333, 2.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 12, 12, 6, 6, 16}, /* out of multiplier range */ + {"166", CPU_CYRIX3S, fpus_internal, 166666666, 2.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 15, 15, 7, 7, 20}, /* out of multiplier range */ + {"200", CPU_CYRIX3S, fpus_internal, 200000000, 3.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 18, 18, 8, 8, 24}, /* out of multiplier range */ + {"233", CPU_CYRIX3S, fpus_internal, 233333333, 3.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 21, 21, 9, 9, 28}, /* out of multiplier range */ + {"266", CPU_CYRIX3S, fpus_internal, 266666666, 4.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 24, 24, 12, 12, 32}, /* out of multiplier range */ + {"300", CPU_CYRIX3S, fpus_internal, 300000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 27, 27, 13, 13, 36}, /* out of spec */ + {"333", CPU_CYRIX3S, fpus_internal, 333333333, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 30, 30, 15, 15, 40}, /* out of spec */ + {"366", CPU_CYRIX3S, fpus_internal, 366666666, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 33, 33, 16, 16, 44}, /* out of spec */ + {"400", CPU_CYRIX3S, fpus_internal, 400000000, 6.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 36, 36, 17, 17, 48}, + {"433", CPU_CYRIX3S, fpus_internal, 433333333, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 39, 39, 18, 18, 52}, /* out of spec */ + {"450", CPU_CYRIX3S, fpus_internal, 450000000, 4.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 41, 41, 14, 14, 54}, + {"466", CPU_CYRIX3S, fpus_internal, 466666666, 6.5, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 42, 42, 14, 14, 56}, /* out of spec */ + {"500", CPU_CYRIX3S, fpus_internal, 500000000, 5.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 45, 45, 15, 15, 60}, + {"533", CPU_CYRIX3S, fpus_internal, 533333333, 8.0, 2050, 0x660, 0x660, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 48, 48, 15, 15, 64}, /* out of spec */ + {"550", CPU_CYRIX3S, fpus_internal, 550000000, 5.5, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 50, 50, 17, 17, 66}, + {"600/100", CPU_CYRIX3S, fpus_internal, 600000000, 6.0, 2050, 0x662, 0x662, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 18, 18, 72}, + {"600/133", CPU_CYRIX3S, fpus_internal, 600000000, 4.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 54, 54, 13, 13, 72}, + {"650", CPU_CYRIX3S, fpus_internal, 650000000, 6.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 58, 58, 20, 20, 78}, + {"667", CPU_CYRIX3S, fpus_internal, 666666667, 5.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 60, 60, 16, 16, 80}, + {"700", CPU_CYRIX3S, fpus_internal, 700000000, 7.0, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 63, 63, 21, 21, 84}, + {"733", CPU_CYRIX3S, fpus_internal, 733333333, 5.5, 2050, 0x663, 0x663, 0, CPU_SUPPORTS_DYNAREC | CPU_FIXED_MULTIPLIER, 66, 66, 18, 18, 88}, + {"", 0} + } }, { - .package = 0, + .package = 0, } // clang-format on }; diff --git a/src/cpu/fpu.c b/src/cpu/fpu.c index f75d07231..0af010760 100644 --- a/src/cpu/fpu.c +++ b/src/cpu/fpu.c @@ -8,7 +8,7 @@ * * FPU type handler. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/cpu/x86_ops.h b/src/cpu/x86_ops.h index a5e82d78e..ca4d83d69 100644 --- a/src/cpu/x86_ops.h +++ b/src/cpu/x86_ops.h @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * Miran Grca, * * Copyright 2018 Fred N. van Kempen. diff --git a/src/cpu/x86seg.c b/src/cpu/x86seg.c index c1e9e5b3d..5b0d8b73a 100644 --- a/src/cpu/x86seg.c +++ b/src/cpu/x86seg.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/cpu/x87_ops.h b/src/cpu/x87_ops.h index ce4a4becc..c00cdff16 100644 --- a/src/cpu/x87_ops.h +++ b/src/cpu/x87_ops.h @@ -11,7 +11,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * leilei, * Miran Grca, * diff --git a/src/cpu/x87_ops_loadstore.h b/src/cpu/x87_ops_loadstore.h index 8d3c3f700..9cec01490 100644 --- a/src/cpu/x87_ops_loadstore.h +++ b/src/cpu/x87_ops_loadstore.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/crcspeed/crc64speed.c b/src/crcspeed/crc64speed.c index b1a7bbb94..e4cccdc69 100644 --- a/src/crcspeed/crc64speed.c +++ b/src/crcspeed/crc64speed.c @@ -124,7 +124,7 @@ static inline uint_fast64_t crc_reflect(uint_fast64_t data, size_t data_len) { * \return The updated crc value. ******************************************************************************/ uint64_t crc64(uint_fast64_t crc, const void *in_data, const uint64_t len) { - const uint8_t *data = in_data; + const uint8_t *data = (uint8_t *) in_data; bool bit; for (uint64_t offset = 0; offset < len; offset++) { @@ -152,7 +152,7 @@ uint64_t crc64(uint_fast64_t crc, const void *in_data, const uint64_t len) { /* Only for testing; doesn't support DUAL */ uint64_t crc64_lookup(uint64_t crc, const void *in_data, const uint64_t len) { - const uint8_t *data = in_data; + const uint8_t *data = (uint8_t *) in_data; for (size_t i = 0; i < len; i++) { crc = crc64_table[0][(uint8_t)crc ^ data[i]] ^ (crc >> 8); } @@ -167,7 +167,7 @@ bool crc64speed_init(void) { #else should_init(crc64_table_little, LITTLE1); #endif - crcspeed64little_init(crc64, dual ? crc64_table_little : crc64_table); + crcspeed64little_init(crc64, dual ? (uint64_t (*)[256]) crc64_table_little : crc64_table); return true; } @@ -178,7 +178,7 @@ bool crc64speed_init_big(void) { #else should_init(crc64_table_big, BIG1); #endif - crcspeed64big_init(crc64, dual ? crc64_table_big : crc64_table); + crcspeed64big_init(crc64, dual ? (uint64_t (*)[256]) crc64_table_big : crc64_table); return true; } @@ -189,7 +189,7 @@ uint64_t crc64speed(uint64_t crc, const void *s, const uint64_t l) { #else check_init(crc64_table_little, LITTLE1); #endif - return crcspeed64little(dual ? crc64_table_little : crc64_table, crc, + return crcspeed64little(dual ? (uint64_t (*)[256]) crc64_table_little : crc64_table, crc, (void *)s, l); } @@ -200,7 +200,7 @@ uint64_t crc64speed_big(uint64_t crc, const void *s, const uint64_t l) { #else check_init(crc64_table_big, BIG1); #endif - return crcspeed64big(dual ? crc64_table_big : crc64_table, crc, (void *)s, + return crcspeed64big(dual ? (uint64_t (*)[256]) crc64_table_big : crc64_table, crc, (void *)s, l); } diff --git a/src/device.c b/src/device.c index a13825307..81e19e2dc 100644 --- a/src/device.c +++ b/src/device.c @@ -13,7 +13,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/device/CMakeLists.txt b/src/device/CMakeLists.txt index 7fd0b20d0..ed8464647 100644 --- a/src/device/CMakeLists.txt +++ b/src/device/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(dev OBJECT bugger.c cassette.c cartridge.c hasp.c hwm.c hwm_lm75.c hwm_lm78.c hwm_gl518sm.c diff --git a/src/device/keyboard.c b/src/device/keyboard.c index a5503cc3b..74bf3f67e 100644 --- a/src/device/keyboard.c +++ b/src/device/keyboard.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/device/keyboard_at.c b/src/device/keyboard_at.c index 542be0a24..5b777eaf3 100644 --- a/src/device/keyboard_at.c +++ b/src/device/keyboard_at.c @@ -10,10 +10,10 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, - * EngiNerd + * EngiNerd, * * Copyright 2008-2020 Sarah Walker. * Copyright 2016-2020 Miran Grca. @@ -1291,8 +1291,8 @@ write64_generic(void *priv, uint8_t val) } else { if (((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) && ((dev->flags & KBC_VEN_MASK) != KBC_VEN_INTEL_AMI)) #if 0 - add_to_kbc_queue_front(dev, (dev->input_port | fixed_bits) & - (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0xeb : 0xef), 0, 0x00); + add_to_kbc_queue_front(dev, (dev->input_port | fixed_bits) & + (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0xeb : 0xef), 0, 0x00); #else add_to_kbc_queue_front(dev, ((dev->input_port | fixed_bits) & 0xf0) | (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0x08 : 0x0c), 0, 0x00); #endif diff --git a/src/device/keyboard_xt.c b/src/device/keyboard_xt.c index f6d02a4d4..676f99f54 100644 --- a/src/device/keyboard_xt.c +++ b/src/device/keyboard_xt.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd, @@ -126,219 +126,219 @@ const scancode scancode_xt[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*054*/ + { {0}, {0} }, { {0}, {0} }, /*054*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x1c, 0}, {0x9c, 0} }, { {0x1d, 0}, {0x9d, 0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x35, 0}, {0xb5, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x38, 0}, {0xb8, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ { {0x48, 0}, {0xc8, 0} }, { {0x49, 0}, {0xc9, 0} }, - { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ + { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ { {0}, {0} }, { {0x4d, 0}, {0xcd, 0} }, - { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ + { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, - { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ + { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*158*/ + { {0}, {0} }, { {0}, {0} }, /*158*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*15c*/ + { {0}, {0} }, { {0}, {0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*88*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; diff --git a/src/device/mouse_bus.c b/src/device/mouse_bus.c index 802ae6d45..73104cc4a 100644 --- a/src/device/mouse_bus.c +++ b/src/device/mouse_bus.c @@ -317,14 +317,14 @@ lt_write(uint16_t port, uint8_t val, void *priv) * This indicates the mode of operation of D7: * 1 = Mode set, 0 = Bit set/reset * D6,D5 = Mode selection (port A) - * 00 = Mode 0 = Basic I/O - * 01 = Mode 1 = Strobed I/O - * 10 = Mode 2 = Bi-dir bus + * 00 = Mode 0 = Basic I/O + * 01 = Mode 1 = Strobed I/O + * 10 = Mode 2 = Bi-dir bus * D4 = Port A direction (1 = input) * D3 = Port C (upper 4 bits) direction. (1 = input) * D2 = Mode selection (port B & C) - * 0 = Mode 0 = Basic I/O - * 1 = Mode 1 = Strobed I/O + * 0 = Mode 0 = Basic I/O + * 1 = Mode 1 = Strobed I/O * D1 = Port B direction (1 = input) * D0 = Port C (lower 4 bits) direction. (1 = input) * @@ -333,8 +333,8 @@ lt_write(uint16_t port, uint8_t val, void *priv) * being an output port and lower 4 bits an input port, and * enable the sucker. Courtesy Intel 8255 databook. Lars * - * 1001 1011 9B 1111 Default state - * 1001 0001 91 1001 Driver-initialized state + * 1001 1011 9B 1111 Default state + * 1001 0001 91 1001 Driver-initialized state * The only difference is - port C upper and port B go from * input to output. */ diff --git a/src/device/mouse_ps2.c b/src/device/mouse_ps2.c index e7670b2fc..42e2211b9 100644 --- a/src/device/mouse_ps2.c +++ b/src/device/mouse_ps2.c @@ -270,7 +270,7 @@ ps2_poll(int x, int y, int z, int b, void *priv) #if 0 if (!(dev->flags & FLAG_ENABLED)) - return(0xff); + return(0xff); #endif if (!mouse_scan) diff --git a/src/device/phoenix_486_jumper.c b/src/device/phoenix_486_jumper.c index bb1957690..357240ba7 100644 --- a/src/device/phoenix_486_jumper.c +++ b/src/device/phoenix_486_jumper.c @@ -8,6 +8,8 @@ * * Implementation of the Phoenix 486 Jumper Readout * + * + * * Authors: Tiseno100 * * Copyright 2020 Tiseno100 diff --git a/src/device/serial.c b/src/device/serial.c index 2434ca17c..dad2ed7f5 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/disk/CMakeLists.txt b/src/disk/CMakeLists.txt index 6d3abfc83..7771a0b72 100644 --- a/src/disk/CMakeLists.txt +++ b/src/disk/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(hdd OBJECT hdd.c hdd_image.c hdd_table.c hdc.c hdc_st506_xt.c diff --git a/src/disk/hdc.c b/src/disk/hdc.c index 0e58b6473..bae818b9a 100644 --- a/src/disk/hdc.c +++ b/src/disk/hdc.c @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include #include diff --git a/src/disk/hdc_esdi_at.c b/src/disk/hdc_esdi_at.c index 9df7725f1..66c7a0231 100644 --- a/src/disk/hdc_esdi_at.c +++ b/src/disk/hdc_esdi_at.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/disk/hdc_esdi_mca.c b/src/disk/hdc_esdi_mca.c index 80290c745..f9af1e864 100644 --- a/src/disk/hdc_esdi_mca.c +++ b/src/disk/hdc_esdi_mca.c @@ -54,11 +54,11 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * * Copyright 2008-2018 Sarah Walker. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index 2f544cfb9..c2595e3e4 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. @@ -537,7 +537,7 @@ ide_hd_identify(ide_t *ide) /* Bit 0 = The fields reported in words 54-58 are valid; Bit 1 = The fields reported in words 64-70 are valid; - Bit 2 = The fields reported in word 88 are valid. */ + Bit 2 = The fields reported in word 88 are valid. */ ide->buffer[53] = 1; if (ide->cfg_spt != 0) { @@ -1946,12 +1946,12 @@ ide_readb(uint16_t addr, void *priv) Direction: To device if set; From device if clear. - IO DRQ CoD - 0 1 1 Ready to accept command packet - 1 1 1 Message - ready to send message to host - 1 1 0 Data to host - 0 1 0 Data from host - 1 0 1 Status. */ + IO DRQ CoD + 0 1 1 Ready to accept command packet + 1 1 1 Message - ready to send message to host + 1 1 0 Data to host + 0 1 0 Data from host + 1 0 1 Status. */ case 0x2: /* Sector count */ if (ide->type == IDE_ATAPI) temp = ide->sc->phase; diff --git a/src/disk/hdc_ide_sff8038i.c b/src/disk/hdc_ide_sff8038i.c index 3809359b2..b5c75a756 100644 --- a/src/disk/hdc_ide_sff8038i.c +++ b/src/disk/hdc_ide_sff8038i.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/disk/hdc_st506_at.c b/src/disk/hdc_st506_at.c index d4edc4847..2eee8d294 100644 --- a/src/disk/hdc_st506_at.c +++ b/src/disk/hdc_st506_at.c @@ -14,7 +14,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/disk/hdc_st506_xt.c b/src/disk/hdc_st506_xt.c index 88bf8c2c9..08f1329be 100644 --- a/src/disk/hdc_st506_xt.c +++ b/src/disk/hdc_st506_xt.c @@ -44,7 +44,7 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2008-2019 Sarah Walker. @@ -180,28 +180,28 @@ #define ERR_CRC_FAIL 0x32 /* CRC circuit failed test */ /* Controller commands. */ -#define CMD_TEST_DRIVE_READY 0x00 -#define CMD_RECALIBRATE 0x01 -/* reserved 0x02 */ -#define CMD_STATUS 0x03 -#define CMD_FORMAT_DRIVE 0x04 -#define CMD_VERIFY 0x05 -#define CMD_FORMAT_TRACK 0x06 -#define CMD_FORMAT_BAD_TRACK 0x07 -#define CMD_READ 0x08 -#define CMD_REASSIGN 0x09 -#define CMD_WRITE 0x0a -#define CMD_SEEK 0x0b -#define CMD_SPECIFY 0x0c -#define CMD_READ_ECC_BURST_LEN 0x0d -#define CMD_READ_BUFFER 0x0e -#define CMD_WRITE_BUFFER 0x0f -#define CMD_ALT_TRACK 0x11 -#define CMD_INQUIRY_ST11 0x12 /* ST-11 BIOS */ -#define CMD_V86P_POWEROFF 0x1a /* Victor V86P */ -#define CMD_RAM_DIAGNOSTIC 0xe0 -/* reserved 0xe1 */ -/* reserved 0xe2 */ +#define CMD_TEST_DRIVE_READY 0x00 +#define CMD_RECALIBRATE 0x01 +/* reserved 0x02 */ +#define CMD_STATUS 0x03 +#define CMD_FORMAT_DRIVE 0x04 +#define CMD_VERIFY 0x05 +#define CMD_FORMAT_TRACK 0x06 +#define CMD_FORMAT_BAD_TRACK 0x07 +#define CMD_READ 0x08 +#define CMD_REASSIGN 0x09 +#define CMD_WRITE 0x0a +#define CMD_SEEK 0x0b +#define CMD_SPECIFY 0x0c +#define CMD_READ_ECC_BURST_LEN 0x0d +#define CMD_READ_BUFFER 0x0e +#define CMD_WRITE_BUFFER 0x0f +#define CMD_ALT_TRACK 0x11 +#define CMD_INQUIRY_ST11 0x12 /* ST-11 BIOS */ +#define CMD_V86P_POWEROFF 0x1a /* Victor V86P */ +#define CMD_RAM_DIAGNOSTIC 0xe0 +/* reserved 0xe1 */ +/* reserved 0xe2 */ #define CMD_DRIVE_DIAGNOSTIC 0xe3 #define CMD_CTRLR_DIAGNOSTIC 0xe4 #define CMD_READ_LONG 0xe5 @@ -295,19 +295,19 @@ typedef struct { hd_type_t hd_types[4] = { // clang-format off - { 306, 4, MFM_SECTORS}, /* type 0 */ - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 615, 4, MFM_SECTORS}, /* type 2 */ - { 306, 8, MFM_SECTORS} /* type 13 */ + { 306, 4, MFM_SECTORS}, /* type 0 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 615, 4, MFM_SECTORS}, /* type 2 */ + { 306, 8, MFM_SECTORS} /* type 13 */ // clang-format on }; hd_type_t hd_types_olivetti[16] = { // clang-format off { 697, 5, MFM_SECTORS}, - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 306, 4, MFM_SECTORS}, /* type 0 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 306, 4, MFM_SECTORS}, /* type 0 */ { 612, 8, MFM_SECTORS}, { 820, 6, MFM_SECTORS}, { 820, 6, MFM_SECTORS}, @@ -317,8 +317,8 @@ hd_type_t hd_types_olivetti[16] = { {1024, 8, MFM_SECTORS}, {1024, 9, MFM_SECTORS}, { 872, 5, MFM_SECTORS}, - { 612, 4, MFM_SECTORS}, /* type 16 */ - { 612, 4, MFM_SECTORS}, /* type 16 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ + { 612, 4, MFM_SECTORS}, /* type 16 */ { 306, 4, MFM_SECTORS} /* "not present" with the second hard disk */ // clang-format on }; @@ -375,10 +375,10 @@ get_sector(hdc_t *dev, drive_t *drive, off64_t *addr) #if 0 if (drive->cylinder != dev->cylinder) { # ifdef ENABLE_ST506_XT_LOG - st506_xt_log("ST506: get_sector: wrong cylinder\n"); + st506_xt_log("ST506: get_sector: wrong cylinder\n"); # endif - dev->error = ERR_ILLEGAL_ADDR; - return(0); + dev->error = ERR_ILLEGAL_ADDR; + return(0); } #endif @@ -653,7 +653,7 @@ st506_callback(void *priv) } case CMD_READ: #if 0 - case CMD_READ_LONG: + case CMD_READ_LONG: #endif switch (dev->state) { case STATE_START_COMMAND: @@ -749,7 +749,7 @@ st506_callback(void *priv) } case CMD_WRITE: #if 0 - case CMD_WRITE_LONG: + case CMD_WRITE_LONG: #endif switch (dev->state) { case STATE_START_COMMAND: diff --git a/src/disk/hdc_xta.c b/src/disk/hdc_xta.c index 589ec2789..ca7f01b9d 100644 --- a/src/disk/hdc_xta.c +++ b/src/disk/hdc_xta.c @@ -50,7 +50,7 @@ * * Based on my earlier HD20 driver for the EuroPC. * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/disk/hdc_xtide.c b/src/disk/hdc_xtide.c index 45b8dde54..72ad580ae 100644 --- a/src/disk/hdc_xtide.c +++ b/src/disk/hdc_xtide.c @@ -23,7 +23,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/disk/hdd_image.c b/src/disk/hdd_image.c index 1b59ac570..ba7cf18ba 100644 --- a/src/disk/hdd_image.c +++ b/src/disk/hdd_image.c @@ -14,7 +14,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #define _GNU_SOURCE #include diff --git a/src/disk/hdd_table.c b/src/disk/hdd_table.c index d75dc7e8d..12a0040ef 100644 --- a/src/disk/hdd_table.c +++ b/src/disk/hdd_table.c @@ -15,7 +15,7 @@ * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include #include diff --git a/src/disk/zip.c b/src/disk/zip.c index 959a5fbbe..a0107d1ef 100644 --- a/src/disk/zip.c +++ b/src/disk/zip.c @@ -199,7 +199,8 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_default = { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, { 0, 0 }, + { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, @@ -2072,7 +2073,7 @@ zip_phase_data_out(scsi_common_t *sc) dev->buffer[2] = (i >> 8) & 0xff; dev->buffer[3] = i & 0xff; } else if (dev->current_cdb[1] & 4) { - /* CHS are 96,1,2048 (ZIP 100) and 239,1,2048 (ZIP 250) */ + /* CHS are 96, 1, 2048 (ZIP 100) and 239, 1, 2048 (ZIP 250) */ s = (i % 2048); h = ((i - s) / 2048) % 1; c = ((i - s) / 2048) / 1; diff --git a/src/dma.c b/src/dma.c index d8c4ea674..ecdc393ff 100644 --- a/src/dma.c +++ b/src/dma.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/floppy/CMakeLists.txt b/src/floppy/CMakeLists.txt index 70bae154e..89fbbf76f 100644 --- a/src/floppy/CMakeLists.txt +++ b/src/floppy/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(fdd OBJECT fdd.c fdc.c fdc_magitronic.c fdc_monster.c fdc_pii15xb.c diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index 2abc4a8f5..9981a72a2 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. @@ -637,7 +637,7 @@ fdc_io_command_phase1(fdc_t *fdc, int out) pclog_toggle_suppr(); pclog("%02X ", fdc->processed_cmd); for (i = 0; i < fdc->pnum; i++) - pclog("%02X ", fdc->params[i]); + pclog("%02X ", fdc->params[i]); pclog("\n"); pclog_toggle_suppr(); #endif @@ -1329,9 +1329,9 @@ fdc_read(uint16_t addr, void *priv) * fdc_t on one of the motherboard's support chips. * * Confirmed: 00=1.44M 3.5 - * 10=2.88M 3.5 - * 20=1.2M 5.25 - * 30=1.2M 5.25 + * 10=2.88M 3.5 + * 20=1.2M 5.25 + * 30=1.2M 5.25 * * as reported by Configur.exe. */ diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index a6ccb6da5..ee43256a4 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -10,13 +10,13 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018-2019 Fred N. van Kempen. */ #include #include @@ -40,17 +40,17 @@ #include <86box/fdc.h> /* Flags: - Bit 0: 300 rpm supported; - Bit 1: 360 rpm supported; - Bit 2: size (0 = 3.5", 1 = 5.25"); - Bit 3: sides (0 = 1, 1 = 2); - Bit 4: double density supported; - Bit 5: high density supported; - Bit 6: extended density supported; - Bit 7: double step for 40-track media; - Bit 8: invert DENSEL polarity; - Bit 9: ignore DENSEL; - Bit 10: drive is a PS/2 drive; + Bit 0: 300 rpm supported; + Bit 1: 360 rpm supported; + Bit 2: size (0 = 3.5", 1 = 5.25"); + Bit 3: sides (0 = 1, 1 = 2); + Bit 4: double density supported; + Bit 5: high density supported; + Bit 6: extended density supported; + Bit 7: double step for 40-track media; + Bit 8: invert DENSEL polarity; + Bit 9: ignore DENSEL; + Bit 10: drive is a PS/2 drive; */ #define FLAG_RPM_300 1 #define FLAG_RPM_360 2 @@ -146,49 +146,49 @@ static const struct } drive_types[] = { { /*None*/ - 0, 0, "None", "none" + 0, 0, "None", "none" }, { /*5.25" 1DD*/ - 43, FLAG_RPM_300 | FLAG_525 | FLAG_HOLE0, "5.25\" 180k", "525_1dd" + 43, FLAG_RPM_300 | FLAG_525 | FLAG_HOLE0, "5.25\" 180k", "525_1dd" }, { /*5.25" DD*/ - 43, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0, "5.25\" 360k", "525_2dd" + 43, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0, "5.25\" 360k", "525_2dd" }, { /*5.25" QD*/ - 86, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "5.25\" 720k", "525_2qd" + 86, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "5.25\" 720k", "525_2qd" }, { /*5.25" HD PS/2*/ - 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "5.25\" 1.2M PS/2", "525_2hd_ps2" + 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "5.25\" 1.2M PS/2", "525_2hd_ps2" }, { /*5.25" HD*/ - 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M", "525_2hd" + 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M", "525_2hd" }, { /*5.25" HD Dual RPM*/ - 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M 300/360 RPM", "525_2hd_dualrpm" + 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M 300/360 RPM", "525_2hd_dualrpm" }, { /*3.5" 1DD*/ - 86, FLAG_RPM_300 | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 360k", "35_1dd" + 86, FLAG_RPM_300 | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 360k", "35_1dd" }, { /*3.5" DD*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 720k", "35_2dd" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 720k", "35_2dd" }, { /*3.5" HD PS/2*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "3.5\" 1.44M PS/2", "35_2hd_ps2" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL | FLAG_PS2, "3.5\" 1.44M PS/2", "35_2hd_ps2" }, { /*3.5" HD*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M", "35_2hd" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M", "35_2hd" }, { /*3.5" HD PC-98*/ - 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL, "3.5\" 1.25M PC-98", "35_2hd_nec" + 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP | FLAG_INVERT_DENSEL, "3.5\" 1.25M PC-98", "35_2hd_nec" }, { /*3.5" HD 3-Mode*/ - 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M 300/360 RPM", "35_2hd_3mode" + 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M 300/360 RPM", "35_2hd_3mode" }, { /*3.5" ED*/ - 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2 | FLAG_DOUBLE_STEP, "3.5\" 2.88M", "35_2ed" + 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2 | FLAG_DOUBLE_STEP, "3.5\" 2.88M", "35_2ed" }, { /*End of list*/ - -1, -1, "", "" + -1, -1, "", "" } }; diff --git a/src/floppy/fdd_86f.c b/src/floppy/fdd_86f.c index 7509dd3a5..0267cfe81 100644 --- a/src/floppy/fdd_86f.c +++ b/src/floppy/fdd_86f.c @@ -155,23 +155,23 @@ typedef struct { } sector_t; /* Disk flags: - * Bit 0 Has surface data (1 = yes, 0 = no) - * Bits 2, 1 Hole (3 = ED + 2000 kbps, 2 = ED, 1 = HD, 0 = DD) - * Bit 3 Sides (1 = 2 sides, 0 = 1 side) - * Bit 4 Write protect (1 = yes, 0 = no) - * Bits 6, 5 RPM slowdown (3 = 2%, 2 = 1.5%, 1 = 1%, 0 = 0%) - * Bit 7 Bitcell mode (1 = Extra bitcells count specified after - * disk flags, 0 = No extra bitcells) - * The maximum number of extra bitcells is 1024 (which - * after decoding translates to 64 bytes) - * Bit 8 Disk type (1 = Zoned, 0 = Fixed RPM) - * Bits 10, 9 Zone type (3 = Commodore 64 zoned, 2 = Apple zoned, - * 1 = Pre-Apple zoned #2, 0 = Pre-Apple zoned #1) - * Bit 11 Data and surface bits are stored in reverse byte endianness - * Bit 12 If bits 6, 5 are not 0, they specify % of speedup instead - * of slowdown; - * If bits 6, 5 are 0, and bit 7 is 1, the extra bitcell count - * specifies the entire bitcell count + * Bit 0 Has surface data (1 = yes, 0 = no) + * Bits 2, 1 Hole (3 = ED + 2000 kbps, 2 = ED, 1 = HD, 0 = DD) + * Bit 3 Sides (1 = 2 sides, 0 = 1 side) + * Bit 4 Write protect (1 = yes, 0 = no) + * Bits 6, 5 RPM slowdown (3 = 2%, 2 = 1.5%, 1 = 1%, 0 = 0%) + * Bit 7 Bitcell mode (1 = Extra bitcells count specified after + * disk flags, 0 = No extra bitcells) + * The maximum number of extra bitcells is 1024 (which + * after decoding translates to 64 bytes) + * Bit 8 Disk type (1 = Zoned, 0 = Fixed RPM) + * Bits 10, 9 Zone type (3 = Commodore 64 zoned, 2 = Apple zoned, + * 1 = Pre-Apple zoned #2, 0 = Pre-Apple zoned #1) + * Bit 11 Data and surface bits are stored in reverse byte endianness + * Bit 12 If bits 6, 5 are not 0, they specify % of speedup instead + * of slowdown; + * If bits 6, 5 are 0, and bit 7 is 1, the extra bitcell count + * specifies the entire bitcell count */ typedef struct { FILE *f; @@ -2732,14 +2732,14 @@ d86f_prepare_sector(int drive, int side, int prev_pos, uint8_t *id_buf, uint8_t * ((track << 1) + 1); * * - Any bits that differ are treated as thus: - * - Both are regular but contents differ -> Output is fuzzy; - * - One is regular and one is fuzzy -> Output is fuzzy; - * - Both are fuzzy -> Output is fuzzy; - * - Both are physical holes -> Output is a physical hole; - * - One is regular and one is a physical hole -> Output is fuzzy, - * the hole half is handled appropriately on writeback; - * - One is fuzzy and one is a physical hole -> Output is fuzzy, - * the hole half is handled appropriately on writeback; + * - Both are regular but contents differ -> Output is fuzzy; + * - One is regular and one is fuzzy -> Output is fuzzy; + * - Both are fuzzy -> Output is fuzzy; + * - Both are physical holes -> Output is a physical hole; + * - One is regular and one is a physical hole -> Output is fuzzy, + * the hole half is handled appropriately on writeback; + * - One is fuzzy and one is a physical hole -> Output is fuzzy, + * the hole half is handled appropriately on writeback; * - On write back, apart from the above notes, the final two tracks * are written; * - Destination ALWAYS has surface data even if the image does not. diff --git a/src/floppy/fdd_common.c b/src/floppy/fdd_common.c index 28dea0735..9c1f98c39 100644 --- a/src/floppy/fdd_common.c +++ b/src/floppy/fdd_common.c @@ -48,14 +48,14 @@ const double fdd_bit_rates_300[6] = { * single-RPM drive by setting the rate to 300 kbps. */ const uint8_t fdd_max_sectors[8][6] = { - { 26, 31, 38, 53, 64, 118 }, /* 128 */ - { 15, 19, 23, 32, 38, 73 }, /* 256 */ - { 7, 10, 12, 17, 22, 41 }, /* 512 */ - { 3, 5, 6, 9, 11, 22 }, /* 1024 */ - { 2, 2, 3, 4, 5, 11 }, /* 2048 */ - { 1, 1, 1, 2, 2, 5 }, /* 4096 */ - { 0, 0, 0, 1, 1, 3 }, /* 8192 */ - { 0, 0, 0, 0, 0, 1 } /* 16384 */ + { 26, 31, 38, 53, 64, 118 }, /* 128 */ + { 15, 19, 23, 32, 38, 73 }, /* 256 */ + { 7, 10, 12, 17, 22, 41 }, /* 512 */ + { 3, 5, 6, 9, 11, 22 }, /* 1024 */ + { 2, 2, 3, 4, 5, 11 }, /* 2048 */ + { 1, 1, 1, 2, 2, 5 }, /* 4096 */ + { 0, 0, 0, 1, 1, 3 }, /* 8192 */ + { 0, 0, 0, 0, 0, 1 } /* 16384 */ }; const uint8_t fdd_dmf_r[21] = { @@ -63,285 +63,290 @@ const uint8_t fdd_dmf_r[21] = { }; static const uint8_t fdd_gap3_sizes[5][8][48] = { - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][1] */ - 0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][1] */ + 0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][2] */ - 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][2] */ + 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x83,0x26,0x00,0x00,0x00,0x00, /* [0][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x83,0x26,0x00,0x00,0x00,0x00, /* [0][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][1] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][1] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x54,0x1C,0x0E,0x00,0x00, /* [1][2] */ - 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x54,0x1C,0x0E,0x00,0x00, /* [1][2] */ + 0x00,0x00,0x6C,0x48,0x2A,0x08,0x02,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x06, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x06, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [1][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x32,0x0C,0x00,0x00,0x00,0x36, /* [2][1] */ - 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x32,0x0C,0x00,0x00,0x00,0x36, /* [2][1] */ + 0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x58,0x50,0x2E,0x00,0x00,0x00,0x00,0x00, /* [2][2] */ - 0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x58,0x50,0x2E,0x00,0x00,0x00,0x00,0x00, /* [2][2] */ + 0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0xF0,0x74,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0xF0,0x74,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [2][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][1] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][1] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][2] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x53,0x4E,0x3D,0x2C, - 0x1C,0x0D,0x02,0x00,0x00,0x00,0x01,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][2] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x53,0x4E,0x3D,0x2C, + 0x1C,0x0D,0x02,0x00,0x00,0x00,0x01,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][3] */ - 0x00,0x00,0xF7,0xAF,0x6F,0x55,0x1F,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][3] */ + 0x00,0x00,0xF7,0xAF,0x6F,0x55,0x1F,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [3][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, - { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][0] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][0] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][1] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][1] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x54, /* [4][2] */ - 0x38,0x23,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x54, /* [4][2] */ + 0x38,0x23,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x74,0x24,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][3] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x74,0x24,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][3] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][4] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][4] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][5] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][5] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][6] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][6] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][7] */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [4][7] */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } } }; diff --git a/src/floppy/fdd_fdi.c b/src/floppy/fdd_fdi.c index 5d09d8df2..64279c173 100644 --- a/src/floppy/fdd_fdi.c +++ b/src/floppy/fdd_fdi.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * @@ -298,7 +298,7 @@ fdi_seek(int drive, int track) #if 0 if (track > dev->lasttrack) - track = dev->lasttrack - 1; + track = dev->lasttrack - 1; #endif dev->track = track; diff --git a/src/floppy/fdd_img.c b/src/floppy/fdd_img.c index e0847c010..a9fc73a24 100644 --- a/src/floppy/fdd_img.c +++ b/src/floppy/fdd_img.c @@ -15,7 +15,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * @@ -66,21 +66,21 @@ typedef struct { } img_t; -static img_t *img[FDD_NUM]; -static fdc_t *img_fdc; +static img_t *img[FDD_NUM]; +static fdc_t *img_fdc; -static double bit_rate_300; -static char *ext; -static uint8_t first_byte, - second_byte, - third_byte, - fourth_byte; -static uint8_t fdf_suppress_final_byte = 0; /* This is hard-coded to 0 - - * if you really need to read - * those NT 3.1 Beta floppy - * images, change this to 1 - * and recompile. - */ +static double bit_rate_300; +static char *ext; +static uint8_t first_byte, + second_byte, + third_byte, + fourth_byte; +static uint8_t fdf_suppress_final_byte = 0; /* This is hard-coded to 0 - + * if you really need to read + * those NT 3.1 Beta floppy + * images, change this to 1 + * and recompile. + */ const uint8_t dmf_r[21] = { 12, 2, 13, 3, 14, 4, 15, 5, 16, 6, 17, 7, 18, 8, 19, 9, 20, 10, 21, 11, 1 }; @@ -90,197 +90,230 @@ const uint8_t xdf_gap3_sizes[2][2] = { { 60, 69 }, { 60, 50 } }; const uint16_t xdf_trackx_spos[2][8] = { { 0xA7F, 0xF02, 0x11B7, 0xB66, 0xE1B, 0x129E }, { 0x302, 0x7E2, 0xA52, 0x12DA, 0x572, 0xDFA, 0x106A, 0x154A } }; /* XDF: Layout of the sectors in the image. */ -const xdf_sector_t xdf_img_layout[2][2][46] = { { { {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, - {0x8101}, {0x8201}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, {0x0500}, {0x0600}, - {0x0700}, {0x0800}, { 0}, - {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, {0x8A01}, - {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, {0x9001}, { 0}, { 0}, - { 0}, { 0}, { 0} }, - { {0x8300}, {0x8600}, {0x8201}, {0x8200}, {0x8601}, {0x8301} } - }, /* 5.25" 2HD */ - { { {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, - {0x8900}, {0x8A00}, {0x8B00}, {0x8101}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, - {0x0500}, {0x0600}, {0x0700}, {0x0800}, { 0}, { 0}, { 0}, - {0x8201}, {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, - {0x8A01}, {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, { 0}, { 0}, - { 0}, { 0}, { 0}, {0x9001}, {0x9101}, {0x9201}, {0x9301} }, - { {0x8300}, {0x8400}, {0x8601}, {0x8200}, {0x8201}, {0x8600}, {0x8401}, {0x8301} } - } /* 3.5" 2HD */ - }; +const xdf_sector_t xdf_img_layout[2][2][46] = { + { + { + {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, + {0x8101}, {0x8201}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, {0x0500}, {0x0600}, + {0x0700}, {0x0800}, { 0}, + {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, {0x8A01}, + {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, {0x9001}, { 0}, { 0}, + { 0}, { 0}, { 0} + }, + { {0x8300}, {0x8600}, {0x8201}, {0x8200}, {0x8601}, {0x8301} } + }, /* 5.25" 2HD */ + { + { + {0x8100}, {0x8200}, {0x8300}, {0x8400}, {0x8500}, {0x8600}, {0x8700}, {0x8800}, + {0x8900}, {0x8A00}, {0x8B00}, {0x8101}, {0x0100}, {0x0200}, {0x0300}, {0x0400}, + {0x0500}, {0x0600}, {0x0700}, {0x0800}, { 0}, { 0}, { 0}, + {0x8201}, {0x8301}, {0x8401}, {0x8501}, {0x8601}, {0x8701}, {0x8801}, {0x8901}, + {0x8A01}, {0x8B01}, {0x8C01}, {0x8D01}, {0x8E01}, {0x8F01}, { 0}, { 0}, + { 0}, { 0}, { 0}, {0x9001}, {0x9101}, {0x9201}, {0x9301} + }, + { {0x8300}, {0x8400}, {0x8601}, {0x8200}, {0x8201}, {0x8600}, {0x8401}, {0x8301} } + } /* 3.5" 2HD */ +}; /* XDF: Layout of the sectors on the disk's track. */ -const xdf_sector_t xdf_disk_layout[2][2][38] = { { { {0x0100}, {0x0200}, {0x8100}, {0x8800}, {0x8200}, {0x0300}, {0x8300}, {0x0400}, - {0x8400}, {0x0500}, {0x8500}, {0x0600}, {0x8600}, {0x0700}, {0x8700}, {0x0800}, - {0x8D01}, {0x8501}, {0x8E01}, {0x8601}, {0x8F01}, {0x8701}, {0x9001}, {0x8801}, - {0x8101}, {0x8901}, {0x8201}, {0x8A01}, {0x8301}, {0x8B01}, {0x8401}, {0x8C01} }, - { {0x8300}, {0x8200}, {0x8600}, {0x8201}, {0x8301}, {0x8601} } - }, /* 5.25" 2HD */ - { { {0x0100}, {0x8A00}, {0x8100}, {0x8B00}, {0x8200}, {0x0200}, {0x8300}, {0x0300}, - {0x8400}, {0x0400}, {0x8500}, {0x0500}, {0x8600}, {0x0600}, {0x8700}, {0x0700}, - {0x8800}, {0x0800}, {0x8900}, - {0x9001}, {0x8701}, {0x9101}, {0x8801}, {0x9201}, {0x8901}, {0x9301}, {0x8A01}, - {0x8101}, {0x8B01}, {0x8201}, {0x8C01}, {0x8301}, {0x8D01}, {0x8401}, {0x8E01}, - {0x8501}, {0x8F01}, {0x8601} }, - { {0x8300}, {0x8200}, {0x8400}, {0x8600}, {0x8401}, {0x8201}, {0x8301}, {0x8601} }, - }, /* 3.5" 2HD */ - }; +const xdf_sector_t xdf_disk_layout[2][2][38] = { + { + { + {0x0100}, {0x0200}, {0x8100}, {0x8800}, {0x8200}, {0x0300}, {0x8300}, {0x0400}, + {0x8400}, {0x0500}, {0x8500}, {0x0600}, {0x8600}, {0x0700}, {0x8700}, {0x0800}, + {0x8D01}, {0x8501}, {0x8E01}, {0x8601}, {0x8F01}, {0x8701}, {0x9001}, {0x8801}, + {0x8101}, {0x8901}, {0x8201}, {0x8A01}, {0x8301}, {0x8B01}, {0x8401}, {0x8C01} + }, + { {0x8300}, {0x8200}, {0x8600}, {0x8201}, {0x8301}, {0x8601} } + }, /* 5.25" 2HD */ + { + { + {0x0100}, {0x8A00}, {0x8100}, {0x8B00}, {0x8200}, {0x0200}, {0x8300}, {0x0300}, + {0x8400}, {0x0400}, {0x8500}, {0x0500}, {0x8600}, {0x0600}, {0x8700}, {0x0700}, + {0x8800}, {0x0800}, {0x8900}, + {0x9001}, {0x8701}, {0x9101}, {0x8801}, {0x9201}, {0x8901}, {0x9301}, {0x8A01}, + {0x8101}, {0x8B01}, {0x8201}, {0x8C01}, {0x8301}, {0x8D01}, {0x8401}, {0x8E01}, + {0x8501}, {0x8F01}, {0x8601} + }, + { {0x8300}, {0x8200}, {0x8400}, {0x8600}, {0x8401}, {0x8201}, {0x8301}, {0x8601} }, + }, /* 3.5" 2HD */ +}; /* First dimension is possible sector sizes (0 = 128, 7 = 16384), second is possible bit rates (250/360, 250, 300, 500/360, 500, 1000). */ /* Disks formatted at 250 kbps @ 360 RPM can be read with a 360 RPM single-RPM 5.25" drive by setting the rate to 250 kbps. Disks formatted at 300 kbps @ 300 RPM can be read with any 300 RPM single-RPM drive by setting the rate rate to 300 kbps. */ -static const uint8_t maximum_sectors[8][6] = { { 26, 31, 38, 53, 64, 118 }, /* 128 */ - { 15, 19, 23, 32, 38, 73 }, /* 256 */ - { 7, 10, 12, 17, 22, 41 }, /* 512 */ - { 3, 5, 6, 9, 11, 22 }, /* 1024 */ - { 2, 2, 3, 4, 5, 11 }, /* 2048 */ - { 1, 1, 1, 2, 2, 5 }, /* 4096 */ - { 0, 0, 0, 1, 1, 3 }, /* 8192 */ - { 0, 0, 0, 0, 0, 1 } }; /* 16384 */ +static const uint8_t maximum_sectors[8][6] = { + { 26, 31, 38, 53, 64, 118 }, /* 128 */ + { 15, 19, 23, 32, 38, 73 }, /* 256 */ + { 7, 10, 12, 17, 22, 41 }, /* 512 */ + { 3, 5, 6, 9, 11, 22 }, /* 1024 */ + { 2, 2, 3, 4, 5, 11 }, /* 2048 */ + { 1, 1, 1, 2, 2, 5 }, /* 4096 */ + { 0, 0, 0, 1, 1, 3 }, /* 8192 */ + { 0, 0, 0, 0, 0, 1 } /* 16384 */ +}; -static const uint8_t xdf_sectors[8][6] = { { 0, 0, 0, 0, 0, 0 }, /* 128 */ - { 0, 0, 0, 0, 0, 0 }, /* 256 */ - { 0, 0, 0, 19, 23, 0 }, /* 512 */ - { 0, 0, 0, 0, 0, 0 }, /* 1024 */ - { 0, 0, 0, 0, 0, 0 }, /* 2048 */ - { 0, 0, 0, 0, 0, 0 }, /* 4096 */ - { 0, 0, 0, 0, 0, 0 }, /* 8192 */ - { 0, 0, 0, 0, 0, 0 } }; /* 16384 */ +static const uint8_t xdf_sectors[8][6] = { + { 0, 0, 0, 0, 0, 0 }, /* 128 */ + { 0, 0, 0, 0, 0, 0 }, /* 256 */ + { 0, 0, 0, 19, 23, 0 }, /* 512 */ + { 0, 0, 0, 0, 0, 0 }, /* 1024 */ + { 0, 0, 0, 0, 0, 0 }, /* 2048 */ + { 0, 0, 0, 0, 0, 0 }, /* 4096 */ + { 0, 0, 0, 0, 0, 0 }, /* 8192 */ + { 0, 0, 0, 0, 0, 0 } /* 16384 */ +}; -static const uint8_t xdf_types[8][6] = { { 0, 0, 0, 0, 0, 0 }, /* 128 */ - { 0, 0, 0, 0, 0, 0 }, /* 256 */ - { 0, 0, 0, 1, 2, 0 }, /* 512 */ - { 0, 0, 0, 0, 0, 0 }, /* 1024 */ - { 0, 0, 0, 0, 0, 0 }, /* 2048 */ - { 0, 0, 0, 0, 0, 0 }, /* 4096 */ - { 0, 0, 0, 0, 0, 0 }, /* 8192 */ - { 0, 0, 0, 0, 0, 0 } }; /* 16384 */ +static const uint8_t xdf_types[8][6] = { + { 0, 0, 0, 0, 0, 0 }, /* 128 */ + { 0, 0, 0, 0, 0, 0 }, /* 256 */ + { 0, 0, 0, 1, 2, 0 }, /* 512 */ + { 0, 0, 0, 0, 0, 0 }, /* 1024 */ + { 0, 0, 0, 0, 0, 0 }, /* 2048 */ + { 0, 0, 0, 0, 0, 0 }, /* 4096 */ + { 0, 0, 0, 0, 0, 0 }, /* 8192 */ + { 0, 0, 0, 0, 0, 0 } /* 16384 */ +}; -static const double bit_rates_300[6] = { (250.0 * 300.0) / 360.0, 250.0, 300.0, (500.0 * 300.0) / 360.0, 500.0, 1000.0 }; +static const double bit_rates_300[6] = { (250.0 * 300.0) / 360.0, 250.0, 300.0, (500.0 * 300.0) / 360.0, 500.0, 1000.0 }; -static const uint8_t rates[6] = { 2, 2, 1, 4, 0, 3 }; +static const uint8_t rates[6] = { 2, 2, 1, 4, 0, 3 }; -static const uint8_t holes[6] = { 0, 0, 0, 1, 1, 2 }; +static const uint8_t holes[6] = { 0, 0, 0, 1, 1, 2 }; -const int gap3_sizes[5][8][48] = { { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][1] */ - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][2] */ - 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x26, 0x00, 0x00, 0x00, 0x00, /* [0][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][1] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x1C, 0x0E, 0x00, 0x00, /* [1][2] */ - 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0C, 0x00, 0x00, 0x00, 0x36, /* [2][1] */ - 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x50, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][2] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0xF0, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][1] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][2] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x53, 0x4E, 0x3D, 0x2C, 0x1C, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][3] */ - 0x00, 0x00, 0xF7, 0xAF, 0x6F, 0x55, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][0] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][1] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x54, /* [4][2] */ - 0x38, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][3] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][4] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][5] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][6] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][7] */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }; +const int gap3_sizes[5][8][48] = { + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][1] */ + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][2] */ + 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x26, 0x00, 0x00, 0x00, 0x00, /* [0][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [0][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][1] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x1C, 0x0E, 0x00, 0x00, /* [1][2] */ + 0x00, 0x00, 0x6C, 0x48, 0x2A, 0x08, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [1][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0C, 0x00, 0x00, 0x00, 0x36, /* [2][1] */ + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x50, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][2] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0xF0, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [2][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][1] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][2] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x4E, 0x3D, 0x2C, 0x1C, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][3] */ + 0x00, 0x00, 0xF7, 0xAF, 0x6F, 0x55, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [3][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][0] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][1] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x54, /* [4][2] */ + 0x38, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][3] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][4] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][5] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][6] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* [4][7] */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + } +}; #ifdef ENABLE_IMG_LOG int img_do_log = ENABLE_IMG_LOG; @@ -856,8 +889,8 @@ img_load(int drive, char *fn) fseek(dev->f, 0x03, SEEK_SET); (void) !fread(&bpb_bps, 1, 2, dev->f); #if 0 - fseek(dev->f, 0x0B, SEEK_SET); - (void) !fread(&bpb_total, 1, 2, dev->f); + fseek(dev->f, 0x0B, SEEK_SET); + (void) !fread(&bpb_total, 1, 2, dev->f); #endif fseek(dev->f, 0x10, SEEK_SET); bpb_sectors = fgetc(dev->f); @@ -958,13 +991,13 @@ jump_if_fdf: img_log("BPB reports %i sides and %i bytes per sector (%i sectors total)\n", bpb_sides, bpb_bps, bpb_total); - /* Invalid conditions: */ - guess = (bpb_sides < 1); /* Sides < 1; */ - guess = guess || (bpb_sides > 2); /* Sides > 2; */ - guess = guess || !bps_is_valid(bpb_bps); /* Invalid number of bytes per sector; */ - guess = guess || !first_byte_is_valid(first_byte); /* Invalid first bytes; */ - guess = guess || !is_divisible(bpb_total, bpb_sectors); /* Total sectors not divisible by sectors per track; */ - guess = guess || !is_divisible(bpb_total, bpb_sides); /* Total sectors not divisible by sides. */ + /* Invalid conditions: */ + guess = (bpb_sides < 1); /* Sides < 1; */ + guess = guess || (bpb_sides > 2); /* Sides > 2; */ + guess = guess || !bps_is_valid(bpb_bps); /* Invalid number of bytes per sector; */ + guess = guess || !first_byte_is_valid(first_byte); /* Invalid first bytes; */ + guess = guess || !is_divisible(bpb_total, bpb_sectors); /* Total sectors not divisible by sectors per track; */ + guess = guess || !is_divisible(bpb_total, bpb_sides); /* Total sectors not divisible by sides. */ guess = guess || !fdd_get_check_bpb(drive); guess = guess && !fdi; guess = guess && !cqm; @@ -1069,10 +1102,10 @@ jump_if_fdf: dev->sectors = 42; dev->tracks = 80; #if 0 - } else if (size <= 3440640) { /*HD 1024 sector*/ - dev->sectors = 21; - dev->tracks = 80; - dev->sector_size = 3; + } else if (size <= 3440640) { /*HD 1024 sector*/ + dev->sectors = 21; + dev->tracks = 80; + dev->sector_size = 3; #endif } else if (size <= 3604480) { /*HD 1024 sector*/ dev->sectors = 22; diff --git a/src/floppy/fdd_td0.c b/src/floppy/fdd_td0.c index 4b478baba..bf2b643ff 100644 --- a/src/floppy/fdd_td0.c +++ b/src/floppy/fdd_td0.c @@ -668,27 +668,27 @@ td0_initialize(int drive) * from the CMOS. */ switch (header[6]) { - case 0: /* 5.25" 360k in 1.2M drive: 360 rpm + case 0: /* 5.25" 360k in 1.2M drive: 360 rpm CMOS Drive type: None, value probably reused by Teledisk */ - case 2: /* 5.25" 1.2M 360 rpm */ - case 5: /* 8"/5.25"/3.5" 1.25M 360 rpm */ + case 2: /* 5.25" 1.2M: 360 rpm */ + case 5: /* 8"/5.25"/3.5" 1.25M: 360 rpm */ dev->default_track_flags = (density == 1) ? 0x20 : 0x21; dev->max_sector_size = (density == 1) ? 6 : 5; /* 8192 or 4096 bytes. */ break; - case 1: /* 5.25" 360k: 300 rpm */ - case 3: /* 3.5" 720k: 300 rpm */ + case 1: /* 5.25" 360k: 300 rpm */ + case 3: /* 3.5" 720k: 300 rpm */ dev->default_track_flags = 0x02; dev->max_sector_size = 5; /* 4096 bytes. */ break; - case 4: /* 3.5" 1.44M: 300 rpm */ + case 4: /* 3.5" 1.44M: 300 rpm */ dev->default_track_flags = (density == 1) ? 0x00 : 0x02; dev->max_sector_size = (density == 1) ? 6 : 5; /* 8192 or 4096 bytes. */ break; - case 6: /* 3.5" 2.88M: 300 rpm */ + case 6: /* 3.5" 2.88M: 300 rpm */ dev->default_track_flags = (density == 1) ? 0x00 : ((density == 2) ? 0x03 : 0x02); dev->max_sector_size = (density == 1) ? 6 : ((density == 2) ? 7 : 5); /* 16384, 8192, or 4096 bytes. */ break; diff --git a/src/floppy/fdi2raw.c b/src/floppy/fdi2raw.c index b367db5c1..dcda6afc1 100644 --- a/src/floppy/fdi2raw.c +++ b/src/floppy/fdi2raw.c @@ -20,7 +20,7 @@ * * Copyright 2001-2004 Toni Wilen. * Copyright 2001-2004 Vincent Joguin. - * Copyright 2001 Thomas Harte. + * Copyright 2001-2016 Thomas Harte. */ #define STATIC_INLINE #include @@ -65,7 +65,7 @@ fdi2raw_log(const char *fmt, ...) #ifdef ENABLE_FDI2RAW_LOG # ifdef DEBUG static char * -datalog(uae_u8 *src, int len) +datalog(uint8_t *src, int len) { static char buf[1000]; static int offset; @@ -88,7 +88,7 @@ datalog(uae_u8 *src, int len) } # else static char * -datalog(uae_u8 *src, int len) +datalog(uint8_t *src, int len) { return ""; } @@ -130,37 +130,38 @@ fdi_malloc(int size) #define MAX_TRACKS 166 struct fdi_cache { - uae_u32 *avgp, *minp, *maxp; - uae_u8 *idxp; - int avg_free, idx_free, min_free, max_free; - uae_u32 totalavg, pulses, maxidx, indexoffset; - int weakbits; - int lowlevel; + uint32_t *avgp, *minp, *maxp; + uint8_t *idxp; + int avg_free, idx_free, min_free, max_free; + uint32_t totalavg, pulses, maxidx, indexoffset; + int weakbits; + int lowlevel; }; struct fdi { - uae_u8 *track_src_buffer; - uae_u8 *track_src; - int track_src_len; - uae_u8 *track_dst_buffer; - uae_u8 *track_dst; - uae_u16 *track_dst_buffer_timing; - uae_u8 track_len; - uae_u8 track_type; - int current_track; - int last_track; - int last_head; - int rotation_speed; - int bit_rate; - int disk_type; - int write_protect; - int err; - uae_u8 header[2048]; - int track_offsets[MAX_TRACKS]; - FILE *file; - int out; - int mfmsync_offset; - int *mfmsync_buffer; + uint8_t *track_src_buffer; + uint8_t *track_src; + int32_t track_src_len; + uint8_t *track_dst_buffer; + uint8_t *track_dst; + uint16_t *track_dst_buffer_timing; + uint8_t track_len; + uint8_t track_type; + int current_track; + int last_track; + int last_head; + int rotation_speed; + int bit_rate; + int disk_type; + bool write_protect; + int reversed_side; + int err; + uint8_t header[2048]; + int32_t track_offsets[MAX_TRACKS]; + FILE *file; + int out; + int mfmsync_offset; + int *mfmsync_buffer; /* sector described only */ int index_offset; int encoding_type; @@ -172,7 +173,7 @@ struct fdi { #define get_u32(x) ((((x)[0]) << 24) | (((x)[1]) << 16) | (((x)[2]) << 8) | ((x)[3])) #define get_u24(x) ((((x)[0]) << 16) | (((x)[1]) << 8) | ((x)[2])) STATIC_INLINE void -put_u32(uae_u8 *d, uae_u32 v) +put_u32(uint8_t *d, uint32_t v) { d[0] = v >> 24; d[1] = v >> 16; @@ -181,16 +182,16 @@ put_u32(uae_u8 *d, uae_u32 v) } struct node { - uae_u16 v; + uint16_t v; struct node *left; struct node *right; }; typedef struct node NODE; -static uae_u8 temp, temp2; +static uint8_t temp, temp2; -static uae_u8 * -expand_tree(uae_u8 *stream, NODE *node) +static uint8_t * +expand_tree(uint8_t *stream, NODE *node) { if (temp & temp2) { if (node->left) { @@ -208,7 +209,7 @@ expand_tree(uae_u8 *stream, NODE *node) } return stream; } else { - uae_u8 *stream_temp; + uint8_t *stream_temp; temp2 >>= 1; if (!temp2) { temp = *stream++; @@ -223,27 +224,27 @@ expand_tree(uae_u8 *stream, NODE *node) } } -static uae_u8 * -values_tree8(uae_u8 *stream, NODE *node) +static uint8_t * +values_tree8(uint8_t *stream, NODE *node) { if (node->left == 0) { node->v = *stream++; return stream; } else { - uae_u8 *stream_temp = values_tree8(stream, node->left); + uint8_t *stream_temp = values_tree8(stream, node->left); return values_tree8(stream_temp, node->right); } } -static uae_u8 * -values_tree16(uae_u8 *stream, NODE *node) +static uint8_t * +values_tree16(uint8_t *stream, NODE *node) { if (node->left == 0) { - uae_u16 high_8_bits = (*stream++) << 8; - node->v = high_8_bits | (*stream++); + uint16_t high_8_bits = (*stream++) << 8; + node->v = high_8_bits | (*stream++); return stream; } else { - uae_u8 *stream_temp = values_tree16(stream, node->left); + uint8_t *stream_temp = values_tree16(stream, node->left); return values_tree16(stream_temp, node->right); } } @@ -258,16 +259,18 @@ free_nodes(NODE *node) } } -static uae_u32 -sign_extend16(uae_u32 v) +/// @returns the 32-bit sign extended version of the 16-bit value in the low part of @c v. +static uint32_t +sign_extend16(uint32_t v) { if (v & 0x8000) v |= 0xffff0000; return v; } -static uae_u32 -sign_extend8(uae_u32 v) +/// @returns the 32-bit sign extended version of the 8-bit value in the low part of @c v. +static uint32_t +sign_extend8(uint32_t v) { if (v & 0x80) v |= 0xffffff00; @@ -275,12 +278,12 @@ sign_extend8(uae_u32 v) } static void -fdi_decode(uae_u8 *stream, int size, uae_u8 *out) +fdi_decode(uint8_t *stream, int size, uint8_t *out) { - int i; - uae_u8 sign_extend, sixteen_bit, sub_stream_shift; - NODE root; - NODE *current_node; + int i; + uint8_t sign_extend, sixteen_bit, sub_stream_shift; + NODE root; + NODE *current_node; memset(out, 0, size * 4); sub_stream_shift = 1; @@ -308,9 +311,9 @@ fdi_decode(uae_u8 *stream, int size, uae_u8 *out) /* sub-stream data decode */ temp2 = 0; for (i = 0; i < size; i++) { - uae_u32 v; - uae_u8 decode = 1; - current_node = &root; + uint32_t v; + uint8_t decode = 1; + current_node = &root; while (decode) { if (current_node->left == 0) { decode = 0; @@ -326,7 +329,7 @@ fdi_decode(uae_u8 *stream, int size, uae_u8 *out) current_node = current_node->left; } } - v = ((uae_u32 *) out)[i]; + v = ((uint32_t *) out)[i]; if (sign_extend) { if (sixteen_bit) v |= sign_extend16(current_node->v) << sub_stream_shift; @@ -335,7 +338,7 @@ fdi_decode(uae_u8 *stream, int size, uae_u8 *out) } else { v |= current_node->v << sub_stream_shift; } - ((uae_u32 *) out)[i] = v; + ((uint32_t *) out)[i] = v; } free_nodes(root.left); root.left = 0; @@ -363,7 +366,7 @@ zxx(FDI *fdi) #if 0 static void zyy (FDI *fdi) { - fdi2raw_log("track %d: unsupported track type 0x%02.2X\n", fdi->current_track, fdi->track_type); + fdi2raw_log("track %d: unsupported track type 0x%02.2X\n", fdi->current_track, fdi->track_type); } #endif /* empty track */ @@ -457,7 +460,7 @@ bit_dedrop(FDI *fdi) /* add one byte */ static void -byte_add(FDI *fdi, uae_u8 v) +byte_add(FDI *fdi, uint8_t v) { int i; for (i = 7; i >= 0; i--) @@ -465,14 +468,14 @@ byte_add(FDI *fdi, uae_u8 v) } /* add one word */ static void -word_add(FDI *fdi, uae_u16 v) +word_add(FDI *fdi, uint16_t v) { - byte_add(fdi, (uae_u8) (v >> 8)); - byte_add(fdi, (uae_u8) v); + byte_add(fdi, (uint8_t) (v >> 8)); + byte_add(fdi, (uint8_t) v); } /* add one byte and mfm encode it */ static void -byte_mfm_add(FDI *fdi, uae_u8 v) +byte_mfm_add(FDI *fdi, uint8_t v) { int i; for (i = 7; i >= 0; i--) @@ -480,7 +483,7 @@ byte_mfm_add(FDI *fdi, uae_u8 v) } /* add multiple bytes and mfm encode them */ static void -bytes_mfm_add(FDI *fdi, uae_u8 v, int len) +bytes_mfm_add(FDI *fdi, uint8_t v, int len) { int i; for (i = 0; i < len; i++) @@ -488,7 +491,7 @@ bytes_mfm_add(FDI *fdi, uae_u8 v, int len) } /* add one mfm encoded word and re-mfm encode it */ static void -word_post_mfm_add(FDI *fdi, uae_u16 v) +word_post_mfm_add(FDI *fdi, uint16_t v) { int i; for (i = 14; i >= 0; i -= 2) @@ -529,8 +532,8 @@ s04(FDI *fdi) static void s08(FDI *fdi) { - int bytes = *fdi->track_src++; - uae_u8 byte = *fdi->track_src++; + int bytes = *fdi->track_src++; + uint8_t byte = *fdi->track_src++; if (bytes == 0) bytes = 256; fdi2raw_log("s08:len=%d,data=%02.2X", bytes, byte); @@ -541,8 +544,8 @@ s08(FDI *fdi) static void s09(FDI *fdi) { - int bytes = *fdi->track_src++; - uae_u8 byte = *fdi->track_src++; + int bytes = *fdi->track_src++; + uint8_t byte = *fdi->track_src++; if (bytes == 0) bytes = 256; bit_drop_next(fdi); @@ -554,8 +557,8 @@ s09(FDI *fdi) static void s0a(FDI *fdi) { - int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; - uae_u8 b; + int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; + uint8_t b; fdi->track_src += 2; fdi2raw_log("s0a:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { @@ -575,8 +578,8 @@ s0a(FDI *fdi) static void s0b(FDI *fdi) { - int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; - uae_u8 b; + int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; + uint8_t b; fdi->track_src += 2; fdi2raw_log("s0b:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { @@ -596,8 +599,8 @@ s0b(FDI *fdi) static void s0c(FDI *fdi) { - int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; - uae_u8 b; + int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; + uint8_t b; fdi->track_src += 2; bit_drop_next(fdi); fdi2raw_log("s0c:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); @@ -618,8 +621,8 @@ s0c(FDI *fdi) static void s0d(FDI *fdi) { - int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; - uae_u8 b; + int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; + uint8_t b; fdi->track_src += 2; bit_drop_next(fdi); fdi2raw_log("s0d:bits=%d,data=%s", bits, datalog(fdi->track_src, (bits + 7) / 8)); @@ -643,7 +646,7 @@ s0d(FDI *fdi) /* just for testing integrity of Amiga sectors */ -/*static void rotateonebit (uae_u8 *start, uae_u8 *end, int shift) +/*static void rotateonebit (uint8_t *start, uint8_t *end, int shift) { if (shift == 0) return; @@ -654,21 +657,21 @@ s0d(FDI *fdi) } }*/ -/*static uae_u16 getmfmword (uae_u8 *mbuf) +/*static uint16_t getmfmword (uint8_t *mbuf) { - uae_u32 v; + uint32_t v; v = (mbuf[0] << 8) | (mbuf[1] << 0); if (check_offset == 0) - return v; + return (uint16_t)v; v <<= 8; v |= mbuf[2]; v >>= check_offset; - return v; + return (uint16_t)v; }*/ #define MFMMASK 0x55555555 -/*static uae_u32 getmfmlong (uae_u8 * mbuf) +/*static uint32_t getmfmlong (uint8_t * mbuf) { return ((getmfmword (mbuf) << 16) | getmfmword (mbuf + 2)) & MFMMASK; }*/ @@ -676,165 +679,165 @@ s0d(FDI *fdi) #if 0 static int amiga_check_track (FDI *fdi) { - int i, j, secwritten = 0; - int fwlen = fdi->out / 8; - int length = 2 * fwlen; - int drvsec = 11; - uae_u32 odd, even, chksum, id, dlong; - uae_u8 *secdata; - uae_u8 secbuf[544]; - uae_u8 bigmfmbuf[60000]; - uae_u8 *mbuf, *mbuf2, *mend; - char sectable[22]; - uae_u8 *raw = fdi->track_dst_buffer; - int slabel, off; - int ok = 1; + int i, j, secwritten = 0; + int fwlen = fdi->out / 8; + int length = 2 * fwlen; + int drvsec = 11; + uint32_t odd, even, chksum, id, dlong; + uint8_t *secdata; + uint8_t secbuf[544]; + uint8_t bigmfmbuf[60000]; + uint8_t *mbuf, *mbuf2, *mend; + char sectable[22]; + uint8_t *raw = fdi->track_dst_buffer; + int slabel, off; + int ok = 1; - memset (bigmfmbuf, 0, sizeof (bigmfmbuf)); - mbuf = bigmfmbuf; - check_offset = 0; - for (i = 0; i < (fdi->out + 7) / 8; i++) - *mbuf++ = raw[i]; - off = fdi->out & 7; + memset (bigmfmbuf, 0, sizeof (bigmfmbuf)); + mbuf = bigmfmbuf; + check_offset = 0; + for (i = 0; i < (fdi->out + 7) / 8; i++) + *mbuf++ = raw[i]; + off = fdi->out & 7; # if 1 - if (off > 0) { - mbuf--; - *mbuf &= ~((1 << (8 - off)) - 1); - } - j = 0; - while (i < (fdi->out + 7) / 8 + 600) { - *mbuf++ |= (raw[j] >> off) | ((raw[j + 1]) << (8 - off)); - j++; - i++; - } + if (off > 0) { + mbuf--; + *mbuf &= ~((1 << (8 - off)) - 1); + } + j = 0; + while (i < (fdi->out + 7) / 8 + 600) { + *mbuf++ |= (raw[j] >> off) | ((raw[j + 1]) << (8 - off)); + j++; + i++; + } # endif - mbuf = bigmfmbuf; + mbuf = bigmfmbuf; - memset (sectable, 0, sizeof (sectable)); - mend = bigmfmbuf + length; - mend -= (4 + 16 + 8 + 512); + memset (sectable, 0, sizeof (sectable)); + mend = bigmfmbuf + length; + mend -= (4 + 16 + 8 + 512); - while (secwritten < drvsec) { - int trackoffs; + while (secwritten < drvsec) { + int trackoffs; - for (;;) { - rotateonebit (bigmfmbuf, mend, 1); - if (getmfmword (mbuf) == 0) - break; - if (secwritten == 10) { - mbuf[0] = 0x44; - mbuf[1] = 0x89; - } - if (check_offset > 7) { - check_offset = 0; - mbuf++; - if (mbuf >= mend || *mbuf == 0) - break; - } - if (getmfmword (mbuf) == 0x4489) - break; - } - if (mbuf >= mend || *mbuf == 0) - break; + for (;;) { + rotateonebit (bigmfmbuf, mend, 1); + if (getmfmword (mbuf) == 0) + break; + if (secwritten == 10) { + mbuf[0] = 0x44; + mbuf[1] = 0x89; + } + if (check_offset > 7) { + check_offset = 0; + mbuf++; + if (mbuf >= mend || *mbuf == 0) + break; + } + if (getmfmword (mbuf) == 0x4489) + break; + } + if (mbuf >= mend || *mbuf == 0) + break; - rotateonebit (bigmfmbuf, mend, check_offset); - check_offset = 0; + rotateonebit (bigmfmbuf, mend, check_offset); + check_offset = 0; - while (getmfmword (mbuf) == 0x4489) - mbuf+= 1 * 2; - mbuf2 = mbuf + 8; + while (getmfmword (mbuf) == 0x4489) + mbuf+= 1 * 2; + mbuf2 = mbuf + 8; - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 2 * 2); - mbuf += 4 * 2; - id = (odd << 1) | even; + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 2 * 2); + mbuf += 4 * 2; + id = (odd << 1) | even; - trackoffs = (id & 0xff00) >> 8; - if (trackoffs + 1 > drvsec) { - fdi2raw_log("illegal sector offset %d\n",trackoffs); - ok = 0; - mbuf = mbuf2; - continue; - } - if ((id >> 24) != 0xff) { - fdi2raw_log("sector %d format type %02.2X?\n", trackoffs, id >> 24); - ok = 0; - } - chksum = odd ^ even; - slabel = 0; - for (i = 0; i < 4; i++) { - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 8 * 2); - mbuf += 2* 2; + trackoffs = (id & 0xff00) >> 8; + if (trackoffs + 1 > drvsec) { + fdi2raw_log("illegal sector offset %d\n",trackoffs); + ok = 0; + mbuf = mbuf2; + continue; + } + if ((id >> 24) != 0xff) { + fdi2raw_log("sector %d format type %02.2X?\n", trackoffs, id >> 24); + ok = 0; + } + chksum = odd ^ even; + slabel = 0; + for (i = 0; i < 4; i++) { + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 8 * 2); + mbuf += 2* 2; - dlong = (odd << 1) | even; - if (dlong) slabel = 1; - chksum ^= odd ^ even; - } - mbuf += 8 * 2; - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 2 * 2); - mbuf += 4 * 2; - if (((odd << 1) | even) != chksum) { - fdi2raw_log("sector %d header crc error\n", trackoffs); - ok = 0; - mbuf = mbuf2; - continue; - } - fdi2raw_log("sector %d header crc ok\n", trackoffs); - if (((id & 0x00ff0000) >> 16) != (uae_u32)fdi->current_track) { - fdi2raw_log("illegal track number %d <> %d\n",fdi->current_track,(id & 0x00ff0000) >> 16); - ok++; - mbuf = mbuf2; - continue; - } - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 2 * 2); - mbuf += 4 * 2; - chksum = (odd << 1) | even; - secdata = secbuf + 32; - for (i = 0; i < 128; i++) { - odd = getmfmlong (mbuf); - even = getmfmlong (mbuf + 256 * 2); - mbuf += 2 * 2; - dlong = (odd << 1) | even; - *secdata++ = (uae_u8) (dlong >> 24); - *secdata++ = (uae_u8) (dlong >> 16); - *secdata++ = (uae_u8) (dlong >> 8); - *secdata++ = (uae_u8) dlong; - chksum ^= odd ^ even; - } - mbuf += 256 * 2; - if (chksum) { - fdi2raw_log("sector %d data checksum error\n",trackoffs); - ok = 0; - } else if (sectable[trackoffs]) { - fdi2raw_log("sector %d already found?\n", trackoffs); - mbuf = mbuf2; - } else { - fdi2raw_log("sector %d ok\n",trackoffs); - if (slabel) fdi2raw_log("(non-empty sector header)\n"); - sectable[trackoffs] = 1; - secwritten++; - if (trackoffs == 9) - mbuf += 0x228; - } - } - for (i = 0; i < drvsec; i++) { - if (!sectable[i]) { - fdi2raw_log("sector %d missing\n", i); - ok = 0; - } - } - return ok; + dlong = (odd << 1) | even; + if (dlong) slabel = 1; + chksum ^= odd ^ even; + } + mbuf += 8 * 2; + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 2 * 2); + mbuf += 4 * 2; + if (((odd << 1) | even) != chksum) { + fdi2raw_log("sector %d header crc error\n", trackoffs); + ok = 0; + mbuf = mbuf2; + continue; + } + fdi2raw_log("sector %d header crc ok\n", trackoffs); + if (((id & 0x00ff0000) >> 16) != (uint32_t)fdi->current_track) { + fdi2raw_log("illegal track number %d <> %d\n",fdi->current_track,(id & 0x00ff0000) >> 16); + ok++; + mbuf = mbuf2; + continue; + } + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 2 * 2); + mbuf += 4 * 2; + chksum = (odd << 1) | even; + secdata = secbuf + 32; + for (i = 0; i < 128; i++) { + odd = getmfmlong (mbuf); + even = getmfmlong (mbuf + 256 * 2); + mbuf += 2 * 2; + dlong = (odd << 1) | even; + *secdata++ = (uint8_t) (dlong >> 24); + *secdata++ = (uint8_t) (dlong >> 16); + *secdata++ = (uint8_t) (dlong >> 8); + *secdata++ = (uint8_t) dlong; + chksum ^= odd ^ even; + } + mbuf += 256 * 2; + if (chksum) { + fdi2raw_log("sector %d data checksum error\n",trackoffs); + ok = 0; + } else if (sectable[trackoffs]) { + fdi2raw_log("sector %d already found?\n", trackoffs); + mbuf = mbuf2; + } else { + fdi2raw_log("sector %d ok\n",trackoffs); + if (slabel) fdi2raw_log("(non-empty sector header)\n"); + sectable[trackoffs] = 1; + secwritten++; + if (trackoffs == 9) + mbuf += 0x228; + } + } + for (i = 0; i < drvsec; i++) { + if (!sectable[i]) { + fdi2raw_log("sector %d missing\n", i); + ok = 0; + } + } + return ok; } #endif static void -amiga_data_raw(FDI *fdi, uae_u8 *secbuf, uae_u8 *crc, int len) +amiga_data_raw(FDI *fdi, uint8_t *secbuf, uint8_t *crc, int len) { - int i; - uae_u8 crcbuf[4]; + int i; + uint8_t crcbuf[4]; if (!crc) { memset(crcbuf, 0, 4); @@ -848,11 +851,11 @@ amiga_data_raw(FDI *fdi, uae_u8 *secbuf, uae_u8 *crc, int len) } static void -amiga_data(FDI *fdi, uae_u8 *secbuf) +amiga_data(FDI *fdi, uint8_t *secbuf) { - uae_u16 mfmbuf[4 + 512]; - uae_u32 dodd, deven, dck; - int i; + uint16_t mfmbuf[4 + 512]; + uint32_t dodd, deven, dck; + int i; for (i = 0; i < 512; i += 4) { deven = ((secbuf[i + 0] << 24) | (secbuf[i + 1] << 16) @@ -860,10 +863,10 @@ amiga_data(FDI *fdi, uae_u8 *secbuf) dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[(i >> 1) + 4] = (uae_u16) (dodd >> 16); - mfmbuf[(i >> 1) + 5] = (uae_u16) dodd; - mfmbuf[(i >> 1) + 256 + 4] = (uae_u16) (deven >> 16); - mfmbuf[(i >> 1) + 256 + 5] = (uae_u16) deven; + mfmbuf[(i >> 1) + 4] = (uint16_t) (dodd >> 16); + mfmbuf[(i >> 1) + 5] = (uint16_t) dodd; + mfmbuf[(i >> 1) + 256 + 4] = (uint16_t) (deven >> 16); + mfmbuf[(i >> 1) + 256 + 5] = (uint16_t) deven; } dck = 0; for (i = 4; i < 4 + 512; i += 2) @@ -872,22 +875,22 @@ amiga_data(FDI *fdi, uae_u8 *secbuf) dodd >>= 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[0] = (uae_u16) (dodd >> 16); - mfmbuf[1] = (uae_u16) dodd; - mfmbuf[2] = (uae_u16) (deven >> 16); - mfmbuf[3] = (uae_u16) deven; + mfmbuf[0] = (uint16_t) (dodd >> 16); + mfmbuf[1] = (uint16_t) dodd; + mfmbuf[2] = (uint16_t) (deven >> 16); + mfmbuf[3] = (uint16_t) deven; for (i = 0; i < 4 + 512; i++) word_post_mfm_add(fdi, mfmbuf[i]); } static void -amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int untilgap) +amiga_sector_header(FDI *fdi, uint8_t *header, uint8_t *data, int sector, int untilgap) { - uae_u8 headerbuf[4], databuf[16]; - uae_u32 deven, dodd, hck; - uae_u16 mfmbuf[24]; - int i; + uint8_t headerbuf[4], databuf[16]; + uint32_t deven, dodd, hck; + uint16_t mfmbuf[24]; + int i; byte_mfm_add(fdi, 0); byte_mfm_add(fdi, 0); @@ -897,9 +900,9 @@ amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int unti memcpy(headerbuf, header, 4); } else { headerbuf[0] = 0xff; - headerbuf[1] = (uae_u8) fdi->current_track; - headerbuf[2] = (uae_u8) sector; - headerbuf[3] = (uae_u8) untilgap; + headerbuf[1] = (uint8_t) fdi->current_track; + headerbuf[2] = (uint8_t) sector; + headerbuf[3] = (uint8_t) untilgap; } if (data) memcpy(databuf, data, 16); @@ -911,20 +914,20 @@ amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int unti dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[0] = (uae_u16) (dodd >> 16); - mfmbuf[1] = (uae_u16) dodd; - mfmbuf[2] = (uae_u16) (deven >> 16); - mfmbuf[3] = (uae_u16) deven; + mfmbuf[0] = (uint16_t) (dodd >> 16); + mfmbuf[1] = (uint16_t) dodd; + mfmbuf[2] = (uint16_t) (deven >> 16); + mfmbuf[3] = (uint16_t) deven; for (i = 0; i < 16; i += 4) { deven = ((databuf[i] << 24) | (databuf[i + 1] << 16) | (databuf[i + 2] << 8) | (databuf[i + 3])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[(i >> 1) + 0 + 4] = (uae_u16) (dodd >> 16); - mfmbuf[(i >> 1) + 0 + 5] = (uae_u16) dodd; - mfmbuf[(i >> 1) + 8 + 4] = (uae_u16) (deven >> 16); - mfmbuf[(i >> 1) + 8 + 5] = (uae_u16) deven; + mfmbuf[(i >> 1) + 0 + 4] = (uint16_t) (dodd >> 16); + mfmbuf[(i >> 1) + 0 + 5] = (uint16_t) dodd; + mfmbuf[(i >> 1) + 8 + 4] = (uint16_t) (deven >> 16); + mfmbuf[(i >> 1) + 8 + 5] = (uint16_t) deven; } hck = 0; for (i = 0; i < 4 + 16; i += 2) @@ -933,10 +936,10 @@ amiga_sector_header(FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int unti dodd >>= 1; deven &= 0x55555555; dodd &= 0x55555555; - mfmbuf[20] = (uae_u16) (dodd >> 16); - mfmbuf[21] = (uae_u16) dodd; - mfmbuf[22] = (uae_u16) (deven >> 16); - mfmbuf[23] = (uae_u16) deven; + mfmbuf[20] = (uint16_t) (dodd >> 16); + mfmbuf[21] = (uint16_t) dodd; + mfmbuf[22] = (uint16_t) (deven >> 16); + mfmbuf[23] = (uint16_t) deven; for (i = 0; i < 4 + 16 + 4; i++) word_post_mfm_add(fdi, mfmbuf[i]); @@ -1018,11 +1021,11 @@ s27(FDI *fdi) /* IBM */ /* *** */ -static uae_u16 -ibm_crc(uae_u8 byte, int reset) +static uint16_t +ibm_crc(uint8_t byte, int reset) { - static uae_u16 crc; - int i; + static uint16_t crc; + int i; if (reset) crc = 0xcdb4; @@ -1042,11 +1045,11 @@ ibm_crc(uae_u8 byte, int reset) } static void -ibm_data(FDI *fdi, uae_u8 *data, uae_u8 *crc, int len) +ibm_data(FDI *fdi, uint8_t *data, uint8_t *crc, int len) { - int i; - uae_u8 crcbuf[2]; - uae_u16 crcv = 0; + int i; + uint8_t crcbuf[2]; + uint16_t crcv = 0; word_add(fdi, 0x4489); word_add(fdi, 0x4489); @@ -1059,20 +1062,20 @@ ibm_data(FDI *fdi, uae_u8 *data, uae_u8 *crc, int len) } if (!crc) { crc = crcbuf; - crc[0] = (uae_u8) (crcv >> 8); - crc[1] = (uae_u8) crcv; + crc[0] = (uint8_t) (crcv >> 8); + crc[1] = (uint8_t) crcv; } byte_mfm_add(fdi, crc[0]); byte_mfm_add(fdi, crc[1]); } static void -ibm_sector_header(FDI *fdi, uae_u8 *data, uae_u8 *crc, int secnum, int pre) +ibm_sector_header(FDI *fdi, uint8_t *data, uint8_t *crc, int secnum, int pre) { - uae_u8 secbuf[5]; - uae_u8 crcbuf[2]; - uae_u16 crcv; - int i; + uint8_t secbuf[5]; + uint8_t crcbuf[2]; + uint16_t crcv; + int i; if (pre) bytes_mfm_add(fdi, 0, 12); @@ -1081,9 +1084,9 @@ ibm_sector_header(FDI *fdi, uae_u8 *data, uae_u8 *crc, int secnum, int pre) word_add(fdi, 0x4489); secbuf[0] = 0xfe; if (secnum >= 0) { - secbuf[1] = (uae_u8) (fdi->current_track / 2); - secbuf[2] = (uae_u8) (fdi->current_track % 2); - secbuf[3] = (uae_u8) secnum; + secbuf[1] = (uint8_t) (fdi->current_track / 2); + secbuf[2] = (uint8_t) (fdi->current_track % 2); + secbuf[3] = (uint8_t) secnum; secbuf[4] = 2; } else { memcpy(secbuf + 1, data, 4); @@ -1096,8 +1099,8 @@ ibm_sector_header(FDI *fdi, uae_u8 *data, uae_u8 *crc, int secnum, int pre) if (crc) { memcpy(crcbuf, crc, 2); } else { - crcbuf[0] = (uae_u8) (crcv >> 8); - crcbuf[1] = (uae_u8) crcv; + crcbuf[0] = (uint8_t) (crcv >> 8); + crcbuf[1] = (uint8_t) crcv; } /* data */ for (i = 0; i < 5; i++) @@ -1276,8 +1279,8 @@ track_amiga(struct fdi *fdi, int first_sector, int max_sector) static void track_atari_st(struct fdi *fdi, int max_sector) { - int i, gap3 = 0; - uae_u8 *p = fdi->track_src; + int i, gap3 = 0; + uint8_t *p = fdi->track_src; switch (max_sector) { case 9: @@ -1301,8 +1304,8 @@ track_atari_st(struct fdi *fdi, int max_sector) static void track_pc(struct fdi *fdi, int max_sector) { - int i, gap3; - uae_u8 *p = fdi->track_src; + int i, gap3; + uint8_t *p = fdi->track_src; switch (max_sector) { case 8: @@ -1331,7 +1334,7 @@ track_pc(struct fdi *fdi, int max_sector) static void track_amiga_dd(struct fdi *fdi) { - uae_u8 *p = fdi->track_src; + uint8_t *p = fdi->track_src; track_amiga(fdi, fdi->track_len >> 4, 11); fdi->track_src = p + (fdi->track_len & 15) * 512; } @@ -1339,7 +1342,7 @@ track_amiga_dd(struct fdi *fdi) static void track_amiga_hd(struct fdi *fdi) { - uae_u8 *p = fdi->track_src; + uint8_t *p = fdi->track_src; track_amiga(fdi, 0, 22); fdi->track_src = p + fdi->track_len * 256; } @@ -1420,8 +1423,8 @@ static int handle_sectors_described_track(FDI *fdi) { #ifdef ENABLE_FDI2RAW_LOG - int oldout; - uae_u8 *start_src = fdi->track_src; + int oldout; + uint8_t *start_src = fdi->track_src; #endif fdi->encoding_type = *fdi->track_src++; fdi->index_offset = get_u32(fdi->track_src); @@ -1454,20 +1457,20 @@ handle_sectors_described_track(FDI *fdi) return fdi->out; } -static uae_u8 * -fdi_decompress(int pulses, uae_u8 *sizep, uae_u8 *src, int *dofree) +static uint8_t * +fdi_decompress(int pulses, uint8_t *sizep, uint8_t *src, int *dofree) { - uae_u32 size = get_u24(sizep); - uae_u32 *dst2; - int len = size & 0x3fffff; - uae_u8 *dst; - int mode = size >> 22, i; + uint32_t size = get_u24(sizep); + uint32_t *dst2; + int len = size & 0x3fffff; + uint8_t *dst; + int mode = size >> 22, i; *dofree = 0; if (mode == 0 && pulses * 2 > len) mode = 1; if (mode == 0) { - dst2 = (uae_u32 *) src; + dst2 = (uint32_t *) src; dst = src; for (i = 0; i < pulses; i++) { *dst2++ = get_u32(src); @@ -1484,7 +1487,7 @@ fdi_decompress(int pulses, uae_u8 *sizep, uae_u8 *src, int *dofree) } static void -dumpstream(int track, uae_u8 *stream, int len) +dumpstream(int track, uint8_t *stream, int len) { #if 0 char name[100]; @@ -1499,8 +1502,8 @@ dumpstream(int track, uae_u8 *stream, int len) static int bitoffset; -STATIC_INLINE void -addbit(uae_u8 *p, int bit) +static inline void +addbit(uint8_t *p, int bit) { int off1 = bitoffset / 8; int off2 = bitoffset % 8; @@ -1517,7 +1520,7 @@ struct pulse_sample { static int pulse_limitval = 15; /* tolerance of 15% */ static struct pulse_sample psarray[FDI_MAX_ARRAY]; static int array_index; -static unsigned long total; +static uint32_t total; static int totaldiv; static void @@ -1536,145 +1539,145 @@ init_array(uint32_t standard_MFM_2_bit_cell_size, int nb_of_bits) #if 0 -static void fdi2_decode (FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 *maxp, uae_u8 *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) -{ - uint32_t adjust; - uint32_t adjusted_pulse; - uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000; - uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; - int real_size, i, j, eodat, outstep; - int indexoffset = *indexoffsetp; - uae_u8 *d = fdi->track_dst_buffer; - uae_u16 *pt = fdi->track_dst_buffer_timing; - uae_u32 ref_pulse, pulse; - - /* detects a long-enough stable pulse coming just after another stable pulse */ - i = 1; - while ( (i < pulses) && ( (idx[i] < maxidx) - || (idx[i - 1] < maxidx) - || (avgp[i] < (standard_MFM_2_bit_cell_size - (standard_MFM_2_bit_cell_size / 4))) ) ) - i++; - if (i == pulses) { - fdi2raw_log("No stable and long-enough pulse in track.\n"); - return; - } - i--; - eodat = i; - adjust = 0; - total = 0; - totaldiv = 0; - init_array(standard_MFM_2_bit_cell_size, 2); - bitoffset = 0; - ref_pulse = 0; - outstep = 0; - while (outstep < 2) { - - /* calculates the current average bitrate from previous decoded data */ - uae_u32 avg_size = (total << 3) / totaldiv; /* this is the new average size for one MFM bit */ - /* uae_u32 avg_size = (uae_u32)((((float)total)*8.0) / ((float)totaldiv)); */ - /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ - if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || - (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { - avg_size = standard_MFM_8_bit_cell_size; - } - /* this is to prevent the average value from going too far - * from the theoretical value, otherwise it could progressively go to (2 * - * real value), or (real value / 2), etc. */ - - /* gets the next long-enough pulse (this may require more than one pulse) */ - pulse = 0; - while (pulse < ((avg_size / 4) - (avg_size / 16))) { - int indx; - i++; - if (i >= pulses) - i = 0; - indx = idx[i]; - if (rand() <= (indx * RAND_MAX) / maxidx) { - pulse += avgp[i] - ref_pulse; - if (indx >= maxidx) - ref_pulse = 0; - else - ref_pulse = avgp[i]; - } - if (i == eodat) - outstep++; - if (outstep == 1 && indexoffset == i) - *indexoffsetp = bitoffset; - } - - /* gets the size in bits from the pulse width, considering the current average bitrate */ - adjusted_pulse = pulse; - real_size = 0; - while (adjusted_pulse >= avg_size) { - real_size += 4; - adjusted_pulse -= avg_size / 2; - } - adjusted_pulse <<= 3; - while (adjusted_pulse >= ((avg_size * 4) + (avg_size / 4))) { - real_size += 2; - adjusted_pulse -= avg_size * 2; - } - if (adjusted_pulse >= ((avg_size * 3) + (avg_size / 4))) { - if (adjusted_pulse <= ((avg_size * 4) - (avg_size / 4))) { - if ((2 * ((adjusted_pulse >> 2) - adjust)) <= ((2 * avg_size) - (avg_size / 4))) - real_size += 3; - else - real_size += 4; - } else - real_size += 4; - } else { - if (adjusted_pulse > ((avg_size * 3) - (avg_size / 4))) { - real_size += 3; - } else { - if (adjusted_pulse >= ((avg_size * 2) + (avg_size / 4))) { - if ((2 * ((adjusted_pulse >> 2) - adjust)) < (avg_size + (avg_size / 4))) - real_size += 2; - else - real_size += 3; - } else - real_size += 2; - } - } - - if (outstep == 1) { - for (j = real_size; j > 1; j--) - addbit (d, 0); - addbit (d, 1); - for (j = 0; j < real_size; j++) - *pt++ = (uae_u16)(pulse / real_size); - } - - /* prepares for the next pulse */ - adjust = ((real_size * avg_size)/8) - pulse; - total -= psarray[array_index].size; - totaldiv -= psarray[array_index].number_of_bits; - psarray[array_index].size = pulse; - psarray[array_index].number_of_bits = real_size; - total += pulse; - totaldiv += real_size; - array_index++; - if (array_index >= FDI_MAX_ARRAY) - array_index = 0; - } - - fdi->out = bitoffset; -} - -#else - -static void -fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 *maxp, uae_u8 *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) +static void fdi2_decode (FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_t *maxp, uint8_t *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) { uint32_t adjust; uint32_t adjusted_pulse; uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000; uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; - int real_size, i, j, nexti, eodat, outstep, randval; - int indexoffset = *indexoffsetp; - uae_u8 *d = fdi->track_dst_buffer; - uae_u16 *pt = fdi->track_dst_buffer_timing; - uae_u32 ref_pulse, pulse; - long jitter; + int real_size, i, j, eodat, outstep; + int indexoffset = *indexoffsetp; + uint8_t *d = fdi->track_dst_buffer; + uint16_t *pt = fdi->track_dst_buffer_timing; + uint32_t ref_pulse, pulse; + + /* detects a long-enough stable pulse coming just after another stable pulse */ + i = 1; + while ( (i < pulses) && ( (idx[i] < maxidx) + || (idx[i - 1] < maxidx) + || (avgp[i] < (standard_MFM_2_bit_cell_size - (standard_MFM_2_bit_cell_size / 4))) ) ) + i++; + if (i == pulses) { + fdi2raw_log("No stable and long-enough pulse in track.\n"); + return; + } + i--; + eodat = i; + adjust = 0; + total = 0; + totaldiv = 0; + init_array(standard_MFM_2_bit_cell_size, 2); + bitoffset = 0; + ref_pulse = 0; + outstep = 0; + while (outstep < 2) { + + /* calculates the current average bitrate from previous decoded data */ + uint32_t avg_size = (total << 3) / totaldiv; /* this is the new average size for one MFM bit */ + /* uint32_t avg_size = (uint32_t)((((float)total)*8.0) / ((float)totaldiv)); */ + /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ + if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || + (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { + avg_size = standard_MFM_8_bit_cell_size; + } + /* this is to prevent the average value from going too far + * from the theoretical value, otherwise it could progressively go to (2 * + * real value), or (real value / 2), etc. */ + + /* gets the next long-enough pulse (this may require more than one pulse) */ + pulse = 0; + while (pulse < ((avg_size / 4) - (avg_size / 16))) { + int indx; + i++; + if (i >= pulses) + i = 0; + indx = idx[i]; + if (rand() <= (indx * RAND_MAX) / maxidx) { + pulse += avgp[i] - ref_pulse; + if (indx >= maxidx) + ref_pulse = 0; + else + ref_pulse = avgp[i]; + } + if (i == eodat) + outstep++; + if (outstep == 1 && indexoffset == i) + *indexoffsetp = bitoffset; + } + + /* gets the size in bits from the pulse width, considering the current average bitrate */ + adjusted_pulse = pulse; + real_size = 0; + while (adjusted_pulse >= avg_size) { + real_size += 4; + adjusted_pulse -= avg_size / 2; + } + adjusted_pulse <<= 3; + while (adjusted_pulse >= ((avg_size * 4) + (avg_size / 4))) { + real_size += 2; + adjusted_pulse -= avg_size * 2; + } + if (adjusted_pulse >= ((avg_size * 3) + (avg_size / 4))) { + if (adjusted_pulse <= ((avg_size * 4) - (avg_size / 4))) { + if ((2 * ((adjusted_pulse >> 2) - adjust)) <= ((2 * avg_size) - (avg_size / 4))) + real_size += 3; + else + real_size += 4; + } else + real_size += 4; + } else { + if (adjusted_pulse > ((avg_size * 3) - (avg_size / 4))) { + real_size += 3; + } else { + if (adjusted_pulse >= ((avg_size * 2) + (avg_size / 4))) { + if ((2 * ((adjusted_pulse >> 2) - adjust)) < (avg_size + (avg_size / 4))) + real_size += 2; + else + real_size += 3; + } else + real_size += 2; + } + } + + if (outstep == 1) { + for (j = real_size; j > 1; j--) + addbit (d, 0); + addbit (d, 1); + for (j = 0; j < real_size; j++) + *pt++ = (uint16_t)(pulse / real_size); + } + + /* prepares for the next pulse */ + adjust = ((real_size * avg_size)/8) - pulse; + total -= psarray[array_index].size; + totaldiv -= psarray[array_index].number_of_bits; + psarray[array_index].size = pulse; + psarray[array_index].number_of_bits = real_size; + total += pulse; + totaldiv += real_size; + array_index++; + if (array_index >= FDI_MAX_ARRAY) + array_index = 0; + } + + fdi->out = bitoffset; +} + +#else + +static void +fdi2_decode(FDI *fdi, uint32_t totalavg, uint32_t *avgp, uint32_t *minp, uint32_t *maxp, uint8_t *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) +{ + uint32_t adjust; + uint32_t adjusted_pulse; + uint32_t standard_MFM_2_bit_cell_size = totalavg / 50000; + uint32_t standard_MFM_8_bit_cell_size = totalavg / 12500; + int real_size, i, j, nexti, eodat, outstep, randval; + int indexoffset = *indexoffsetp; + uint8_t *d = fdi->track_dst_buffer; + uint16_t *pt = fdi->track_dst_buffer_timing; + uint32_t ref_pulse, pulse; + int32_t jitter; /* detects a long-enough stable pulse coming just after another stable pulse */ i = 1; @@ -1698,20 +1701,20 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * while (outstep < 2) { /* calculates the current average bitrate from previous decoded data */ - uae_u32 avg_size = (total << (2 + mfm)) / totaldiv; /* this is the new average size for one MFM bit */ - /* uae_u32 avg_size = (uae_u32)((((float)total)*((float)(mfm+1))*4.0) / ((float)totaldiv)); */ + uint32_t avg_size = (uint32_t) ((total << (2 + mfm)) / totaldiv); /* this is the new average size for one MFM bit */ + /* uint32_t avg_size = (uint32_t)((((float)total)*((float)(mfm+1))*4.0) / ((float)totaldiv)); */ /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { avg_size = standard_MFM_8_bit_cell_size; } - /* this is to prevent the average value from going too far + /* this is to prevent the average value from going too far * from the theoretical value, otherwise it could progressively go to (2 * * real value), or (real value / 2), etc. */ /* gets the next long-enough pulse (this may require more than one pulse) */ pulse = 0; while (pulse < ((avg_size / 4) - (avg_size / 16))) { - uae_u32 avg_pulse, min_pulse, max_pulse; + uint32_t avg_pulse, min_pulse, max_pulse; i++; if (i >= pulses) i = 0; @@ -1739,7 +1742,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * randval = rand(); if (randval < (RAND_MAX / 2)) { if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1748,7 +1751,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * } else { randval -= RAND_MAX / 2; if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1774,7 +1777,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * randval = rand(); if (randval < (RAND_MAX / 2)) { if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1783,7 +1786,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * } else { randval -= RAND_MAX / 2; if (randval > (RAND_MAX / 4)) { - if (randval <= (((3LL * RAND_MAX) / 8))) + if (randval <= (((3LL * (uint64_t) RAND_MAX) / 8))) randval = (2 * randval) - (RAND_MAX / 4); else randval = (4 * randval) - RAND_MAX; @@ -1872,7 +1875,7 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * addbit(d, 0); addbit(d, 1); for (j = 0; j < real_size; j++) - *pt++ = (uae_u16) (pulse / real_size); + *pt++ = (uint16_t) (pulse / real_size); } /* prepares for the next pulse */ @@ -1894,11 +1897,11 @@ fdi2_decode(FDI *fdi, uint32_t totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 * #endif static void -fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uae_u16 *out) +fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uint16_t *out) { - uae_u16 *pt2, *pt; - double avg_bit_len; - int i; + uint16_t *pt2, *pt; + double avg_bit_len; + int i; avg_bit_len = (double) totalavg / (double) bitoffset; pt2 = fdi->track_dst_buffer_timing; @@ -1906,7 +1909,7 @@ fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uae_u16 *out) for (i = 0; i < bitoffset / 8; i++) { double v = (pt2[0] + pt2[1] + pt2[2] + pt2[3] + pt2[4] + pt2[5] + pt2[6] + pt2[7]) / 8.0; v = 1000.0 * v / avg_bit_len; - *pt++ = (uae_u16) v; + *pt++ = (uint16_t) v; pt2 += 8; } *pt++ = out[0]; @@ -1916,14 +1919,14 @@ fdi2_celltiming(FDI *fdi, uint32_t totalavg, int bitoffset, uae_u16 *out) static int decode_lowlevel_track(FDI *fdi, int track, struct fdi_cache *cache) { - uae_u8 *p1; - uae_u32 *p2; - uae_u32 *avgp, *minp = 0, *maxp = 0; - uae_u8 *idxp = 0; - uae_u32 maxidx, totalavg, weakbits; - int i, j, len, pulses, indexoffset; - int avg_free, min_free = 0, max_free = 0, idx_free; - int idx_off1 = 0, idx_off2 = 0, idx_off3 = 0; + uint8_t *p1; + uint32_t *p2; + uint32_t *avgp, *minp = 0, *maxp = 0; + uint8_t *idxp = 0; + uint32_t maxidx, totalavg, weakbits; + int i, j, len, pulses, indexoffset; + int avg_free, min_free = 0, max_free = 0, idx_free; + int idx_off1 = 0, idx_off2 = 0, idx_off3 = 0; p1 = fdi->track_src; pulses = get_u32(p1); @@ -1931,15 +1934,15 @@ decode_lowlevel_track(FDI *fdi, int track, struct fdi_cache *cache) return -1; p1 += 4; len = 12; - avgp = (uae_u32 *) fdi_decompress(pulses, p1 + 0, p1 + len, &avg_free); - dumpstream(track, (uae_u8 *) avgp, pulses); + avgp = (uint32_t *) fdi_decompress(pulses, p1 + 0, p1 + len, &avg_free); + dumpstream(track, (uint8_t *) avgp, pulses); len += get_u24(p1 + 0) & 0x3fffff; if (!avgp) return -1; if (get_u24(p1 + 3) && get_u24(p1 + 6)) { - minp = (uae_u32 *) fdi_decompress(pulses, p1 + 3, p1 + len, &min_free); + minp = (uint32_t *) fdi_decompress(pulses, p1 + 3, p1 + len, &min_free); len += get_u24(p1 + 3) & 0x3fffff; - maxp = (uae_u32 *) fdi_decompress(pulses, p1 + 6, p1 + len, &max_free); + maxp = (uint32_t *) fdi_decompress(pulses, p1 + 6, p1 + len, &max_free); len += get_u24(p1 + 6) & 0x3fffff; /* Computes the real min and max values */ for (i = 0; i < pulses; i++) { @@ -2048,7 +2051,7 @@ decode_lowlevel_track(FDI *fdi, int track, struct fdi_cache *cache) } static unsigned char fdiid[] = { "Formatted Disk Image file" }; -static int bit_rate_table[16] = { 125, 150, 250, 300, 500, 1000 }; +static int bit_rate_table[16] = { 125, 150, 250, 300, 500, 1000 }; void fdi2raw_header_free(FDI *fdi) @@ -2106,13 +2109,13 @@ fdi2raw_get_bit_rate(FDI *fdi) return fdi->bit_rate; } -int +FDI2RawDiskType fdi2raw_get_type(FDI *fdi) { return fdi->disk_type; } -int +bool fdi2raw_get_write_protect(FDI *fdi) { return fdi->write_protect; @@ -2127,9 +2130,9 @@ fdi2raw_get_tpi(FDI *fdi) FDI * fdi2raw_header(FILE *f) { - int i, offset, oldseek; - uae_u8 type, size; - FDI *fdi; + long i, offset, oldseek; + uint8_t type, size; + FDI *fdi; fdi2raw_log("ALLOC: memory allocated %d\n", fdi_allocated); fdi = fdi_malloc(sizeof(FDI)); @@ -2167,7 +2170,7 @@ fdi2raw_header(FILE *f) fdi->last_head = fdi->header[144]; fdi->disk_type = fdi->header[145]; fdi->rotation_speed = fdi->header[146] + 128; - fdi->write_protect = fdi->header[147] & 1; + fdi->write_protect = !!(fdi->header[147] & 1); fdi2raw_log("FDI version %d.%d\n", fdi->header[140], fdi->header[141]); fdi2raw_log("last_track=%d rotation_speed=%d\n", fdi->last_track, fdi->rotation_speed); @@ -2197,8 +2200,8 @@ fdi2raw_header(FILE *f) return fdi; } -int -fdi2raw_loadrevolution_2(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) +static int +fdi2raw_loadrevolution_2(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) { struct fdi_cache *cache = &fdi->cache[track]; int len, i, idx; @@ -2216,8 +2219,8 @@ fdi2raw_loadrevolution_2(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int tr *tracklength = len; for (i = 0; i < (len + 15) / (2 * 8); i++) { - uae_u8 *data = fdi->track_dst_buffer + i * 2; - *mfmbuf++ = 256 * *data + *(data + 1); + uint8_t *data = fdi->track_dst_buffer + i * 2; + *mfmbuf++ = 256 * *data + *(data + 1); } fdi2_celltiming(fdi, cache->totalavg, len, tracktiming); if (indexoffsetp) @@ -2226,18 +2229,20 @@ fdi2raw_loadrevolution_2(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int tr } int -fdi2raw_loadrevolution(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int mfm) +fdi2raw_loadrevolution(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int mfm) { + track ^= fdi->reversed_side; return fdi2raw_loadrevolution_2(fdi, mfmbuf, tracktiming, track, tracklength, 0, 0, mfm); } int -fdi2raw_loadtrack(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) +fdi2raw_loadtrack(FDI *fdi, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) { - uae_u8 *p; + uint8_t *p; int outlen, i; struct fdi_cache *cache = &fdi->cache[track]; + track ^= fdi->reversed_side; if (cache->lowlevel) return fdi2raw_loadrevolution_2(fdi, mfmbuf, tracktiming, track, tracklength, indexoffsetp, multirev, mfm); @@ -2305,8 +2310,8 @@ fdi2raw_loadtrack(FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, in return fdi2raw_loadrevolution_2(fdi, mfmbuf, tracktiming, track, tracklength, indexoffsetp, multirev, mfm); *tracklength = fdi->out; for (i = 0; i < ((*tracklength) + 15) / (2 * 8); i++) { - uae_u8 *data = fdi->track_dst_buffer + i * 2; - *mfmbuf++ = 256 * *data + *(data + 1); + uint8_t *data = fdi->track_dst_buffer + i * 2; + *mfmbuf++ = 256 * *data + *(data + 1); } } return outlen; diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index 5ed136de5..83dcd4836 100644 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(game OBJECT gameport.c joystick_standard.c diff --git a/src/game/gameport.c b/src/game/gameport.c index ab8422070..f3557d158 100644 --- a/src/game/gameport.c +++ b/src/game/gameport.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * RichardG, * * Copyright 2016-2018 Miran Grca. diff --git a/src/game/joystick_ch_flightstick_pro.c b/src/game/joystick_ch_flightstick_pro.c index 0741e0360..f5785d6f4 100644 --- a/src/game/joystick_ch_flightstick_pro.c +++ b/src/game/joystick_ch_flightstick_pro.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index 71c354945..55a28acee 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/game/joystick_sw_pad.c b/src/game/joystick_sw_pad.c index 647ca6a74..26e26474b 100644 --- a/src/game/joystick_sw_pad.c +++ b/src/game/joystick_sw_pad.c @@ -32,7 +32,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/game/joystick_tm_fcs.c b/src/game/joystick_tm_fcs.c index 4364a432f..7bcb15742 100644 --- a/src/game/joystick_tm_fcs.c +++ b/src/game/joystick_tm_fcs.c @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/apm.h b/src/include/86box/apm.h index 2676fa198..854969f3d 100644 --- a/src/include/86box/apm.h +++ b/src/include/86box/apm.h @@ -1,18 +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 the Advanced Power Management emulation. + * Definitions for the Advanced Power Management emulation. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2019 Miran Grca. + * Copyright 2019 Miran Grca. */ #ifndef APM_H #define APM_H diff --git a/src/include/86box/bswap.h b/src/include/86box/bswap.h index 22d25cf4a..9f3c51917 100644 --- a/src/include/86box/bswap.h +++ b/src/include/86box/bswap.h @@ -13,7 +13,7 @@ * Authors: Fred N. van Kempen, * neozeed, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 neozeed. * * This program is free software; you can redistribute it and/or modify diff --git a/src/include/86box/bugger.h b/src/include/86box/bugger.h index b0a6a5469..57dabd172 100644 --- a/src/include/86box/bugger.h +++ b/src/include/86box/bugger.h @@ -1,25 +1,25 @@ /* - * 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. * - * Implementation of the ISA Bus (de)Bugger expansion card - * sold as a DIY kit in the late 1980's in The Netherlands. - * This card was a assemble-yourself 8bit ISA addon card for - * PC and AT systems that had several tools to aid in low- - * level debugging (mostly for faulty BIOSes, bootloaders - * and system kernels...) + * Implementation of the ISA Bus (de)Bugger expansion card + * sold as a DIY kit in the late 1980's in The Netherlands. + * This card was a assemble-yourself 8bit ISA addon card for + * PC and AT systems that had several tools to aid in low- + * level debugging (mostly for faulty BIOSes, bootloaders + * and system kernels...) * - * Definitions for the BUGGER card. + * Definitions for the BUGGER card. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 1989-2018 Fred N. van Kempen. + * Copyright 1989-2018 Fred N. van Kempen. */ #ifndef BUGGER_H #define BUGGER_H diff --git a/src/include/86box/cartridge.h b/src/include/86box/cartridge.h index c07fe1cfd..2fa0a9358 100644 --- a/src/include/86box/cartridge.h +++ b/src/include/86box/cartridge.h @@ -1,18 +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 the PCjr cartridge emulation. + * Definitions for the PCjr cartridge emulation. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2021 Miran Grca. + * Copyright 2021 Miran Grca. */ #ifndef EMU_CARTRIDGE_H #define EMU_CARTRIDGE_H diff --git a/src/include/86box/cdrom.h b/src/include/86box/cdrom.h index ca7bcb2a1..28e9cf14b 100644 --- a/src/include/86box/cdrom.h +++ b/src/include/86box/cdrom.h @@ -1,16 +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. * - * Generic CD-ROM drive core header. + * Generic CD-ROM drive core header. * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2019 Miran Grca. + * Copyright 2016-2019 Miran Grca. */ #ifndef EMU_CDROM_H #define EMU_CDROM_H diff --git a/src/include/86box/cdrom_image.h b/src/include/86box/cdrom_image.h index b43e8cee3..c848af50d 100644 --- a/src/include/86box/cdrom_image.h +++ b/src/include/86box/cdrom_image.h @@ -1,19 +1,19 @@ /* - * 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. * - * CD-ROM image file handling module header, translated to C - * from cdrom_dosbox.h. + * CD-ROM image file handling module header, translated to C + * from cdrom_dosbox.h. * - * Authors: RichardG, - * Miran Grca, + * Authors: RichardG, + * Miran Grca, * - * Copyright 2016-2022 RichardG. - * Copyright 2016-2022 Miran Grca. + * Copyright 2016-2022 RichardG. + * Copyright 2016-2022 Miran Grca. */ #ifndef CDROM_IMAGE_H #define CDROM_IMAGE_H diff --git a/src/include/86box/cdrom_image_backend.h b/src/include/86box/cdrom_image_backend.h index 2a581624d..511ca68eb 100644 --- a/src/include/86box/cdrom_image_backend.h +++ b/src/include/86box/cdrom_image_backend.h @@ -1,21 +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. + * 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. * - * CD-ROM image file handling module header , translated to C - * from cdrom_dosbox.h. + * CD-ROM image file handling module header , translated to C + * from cdrom_dosbox.h. * - * Authors: Miran Grca, - * Fred N. van Kempen, - * The DOSBox Team, + * Authors: Miran Grca, + * Fred N. van Kempen, + * The DOSBox Team, * - * Copyright 2016-2020 Miran Grca. - * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2002-2020 The DOSBox Team. + * Copyright 2016-2020 Miran Grca. + * Copyright 2017-2020 Fred N. van Kempen. + * Copyright 2002-2020 The DOSBox Team. */ #ifndef CDROM_IMAGE_BACKEND_H #define CDROM_IMAGE_BACKEND_H diff --git a/src/include/86box/cdrom_mitsumi.h b/src/include/86box/cdrom_mitsumi.h index 747668c5d..0b8a3a250 100644 --- a/src/include/86box/cdrom_mitsumi.h +++ b/src/include/86box/cdrom_mitsumi.h @@ -1,18 +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. * - * Mitsumi CD-ROM emulation for the ISA bus. + * Mitsumi CD-ROM emulation for the ISA bus. * * * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2022 Miran Grca. + * Copyright 2022 Miran Grca. */ #ifndef CDROM_MITSUMI_H #define CDROM_MITSUMI_H diff --git a/src/include/86box/chipset.h b/src/include/86box/chipset.h index f76028d78..0a3e988f6 100644 --- a/src/include/86box/chipset.h +++ b/src/include/86box/chipset.h @@ -12,7 +12,7 @@ * * Authors: Miran Grca, * - * Copyright 2019,2020 Miran Grca. + * Copyright 2019-2020 Miran Grca. */ #ifndef EMU_CHIPSET_H #define EMU_CHIPSET_H diff --git a/src/include/86box/clock.h b/src/include/86box/clock.h index 813c21af7..10155eabc 100644 --- a/src/include/86box/clock.h +++ b/src/include/86box/clock.h @@ -1,18 +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 clock generator chips. + * Definitions for clock generator chips. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #ifndef EMU_CLOCK_H #define EMU_CLOCK_H diff --git a/src/include/86box/config.h b/src/include/86box/config.h index dd873d168..9738b049b 100644 --- a/src/include/86box/config.h +++ b/src/include/86box/config.h @@ -16,7 +16,7 @@ * Overdoze, * * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2016-2017 Miran Grca. * Copyright 2017 Fred N. van Kempen. */ #ifndef EMU_CONFIG_H diff --git a/src/include/86box/ddma.h b/src/include/86box/ddma.h index 1f422ab65..ccc423d27 100644 --- a/src/include/86box/ddma.h +++ b/src/include/86box/ddma.h @@ -1,18 +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 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 DDMA_H #define DDMA_H diff --git a/src/include/86box/device.h b/src/include/86box/device.h index 9f0a5f864..79cbf4d2a 100644 --- a/src/include/86box/device.h +++ b/src/include/86box/device.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/include/86box/discord.h b/src/include/86box/discord.h index 9a1467e08..358c95c9b 100644 --- a/src/include/86box/discord.h +++ b/src/include/86box/discord.h @@ -1,18 +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 the Discord integration module. + * Definitions for the Discord integration module. * * * - * Authors: David Hrdlička, + * Authors: David Hrdlička, * - * Copyright 2019 David Hrdlička. + * Copyright 2019 David Hrdlička. */ #ifndef WIN_DISCORD_H #define WIN_DISCORD_H diff --git a/src/include/86box/dma.h b/src/include/86box/dma.h index f7a516a61..904d0b13b 100644 --- a/src/include/86box/dma.h +++ b/src/include/86box/dma.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2020 Miran Grca. diff --git a/src/include/86box/fdc.h b/src/include/86box/fdc.h index ec3136baa..e68c5d463 100644 --- a/src/include/86box/fdc.h +++ b/src/include/86box/fdc.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * 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 2287978c1..106235658 100644 --- a/src/include/86box/fdc_ext.h +++ b/src/include/86box/fdc_ext.h @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the NEC uPD-765 and compatible floppy disk - * controller. + * Implementation of the NEC uPD-765 and compatible floppy disk + * controller. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. - * Copyright 2018-2020 Fred N. van Kempen. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. + * Copyright 2018-2020 Fred N. van Kempen. */ #ifndef EMU_FDC_EXT_H #define EMU_FDC_EXT_H diff --git a/src/include/86box/fdd.h b/src/include/86box/fdd.h index f612466b3..19a2141d3 100644 --- a/src/include/86box/fdd.h +++ b/src/include/86box/fdd.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/fdd_86f.h b/src/include/86box/fdd_86f.h index 88eeb035f..cc8035965 100644 --- a/src/include/86box/fdd_86f.h +++ b/src/include/86box/fdd_86f.h @@ -1,20 +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. + * 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 86F floppy image format. + * Definitions for the 86F floppy image format. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2018-2019 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_86F_H #define EMU_FLOPPY_86F_H diff --git a/src/include/86box/fdd_common.h b/src/include/86box/fdd_common.h index 9c6f8853c..7673d9684 100644 --- a/src/include/86box/fdd_common.h +++ b/src/include/86box/fdd_common.h @@ -1,18 +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. * - * Shared code for all the floppy modules. + * Shared code for all the floppy modules. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef FDD_COMMON_H #define FDD_COMMON_H diff --git a/src/include/86box/fdd_fdi.h b/src/include/86box/fdd_fdi.h index b984a8154..6b9461bad 100644 --- a/src/include/86box/fdd_fdi.h +++ b/src/include/86box/fdd_fdi.h @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the FDI floppy stream image format - * interface to the FDI2RAW module. + * Implementation of the FDI floppy stream image format + * interface to the FDI2RAW module. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 Fred N. van Kempen. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_FDI_H #define EMU_FLOPPY_FDI_H diff --git a/src/include/86box/fdd_imd.h b/src/include/86box/fdd_imd.h index 806304093..f50ad865e 100644 --- a/src/include/86box/fdd_imd.h +++ b/src/include/86box/fdd_imd.h @@ -1,20 +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. + * 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 IMD floppy image format. + * Definitions for the IMD floppy image format. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 Fred N. van Kempen. * * 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 diff --git a/src/include/86box/fdd_img.h b/src/include/86box/fdd_img.h index 7c36929c3..f0a639d88 100644 --- a/src/include/86box/fdd_img.h +++ b/src/include/86box/fdd_img.h @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the raw sector-based floppy image format, - * as well as the Japanese FDI, CopyQM, and FDF formats. + * 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, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 Fred N. van Kempen. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_IMG_H #define EMU_FLOPPY_IMG_H diff --git a/src/include/86box/fdd_json.h b/src/include/86box/fdd_json.h index e86aad01a..7f3c9adb4 100644 --- a/src/include/86box/fdd_json.h +++ b/src/include/86box/fdd_json.h @@ -10,7 +10,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/include/86box/fdd_mfm.h b/src/include/86box/fdd_mfm.h index 36c6e6b8f..3a8494a26 100644 --- a/src/include/86box/fdd_mfm.h +++ b/src/include/86box/fdd_mfm.h @@ -1,18 +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. * - * Implementation of the HxC MFM image format. + * Implementation of the HxC MFM image format. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2018 Miran Grca. + * Copyright 2018 Miran Grca. */ #ifndef EMU_FLOPPY_MFM_H #define EMU_FLOPPY_MFM_H diff --git a/src/include/86box/fdd_td0.h b/src/include/86box/fdd_td0.h index 56ff8f3c8..add6a07dd 100644 --- a/src/include/86box/fdd_td0.h +++ b/src/include/86box/fdd_td0.h @@ -1,20 +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. + * 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 Teledisk floppy image format. + * Definitions for the Teledisk floppy image format. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef EMU_FLOPPY_TD0_H #define EMU_FLOPPY_TD0_H diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index 07a51edc4..905130da0 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -1,22 +1,22 @@ /* - * 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 generic game port handlers. + * Definitions for the generic game port handlers. * * * - * Authors: Miran Grca, - * Sarah Walker, - * RichardG, + * Authors: Miran Grca, + * Sarah Walker, + * RichardG, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2008-2018 Sarah Walker. - * Copyright 2021 RichardG. + * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2021 RichardG. */ #ifndef EMU_GAMEPORT_H #define EMU_GAMEPORT_H diff --git a/src/include/86box/hdc_ide.h b/src/include/86box/hdc_ide.h index da5fe1b32..e7bd8d7cf 100644 --- a/src/include/86box/hdc_ide.h +++ b/src/include/86box/hdc_ide.h @@ -1,20 +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. + * 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. * - * Implementation of the IDE emulation for hard disks and ATAPI - * CD-ROM devices. + * Implementation of the IDE emulation for hard disks and ATAPI + * CD-ROM devices. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #ifndef EMU_IDE_H #define EMU_IDE_H diff --git a/src/include/86box/hdc_ide_sff8038i.h b/src/include/86box/hdc_ide_sff8038i.h index 5533319e1..b411ecf5d 100644 --- a/src/include/86box/hdc_ide_sff8038i.h +++ b/src/include/86box/hdc_ide_sff8038i.h @@ -1,19 +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. + * 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. * - * Emulation of the SFF-8038i IDE Bus Master. + * This file is part of the 86Box distribution. * - * Emulation core dispatcher. + * Emulation of the SFF-8038i IDE Bus Master. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #ifndef EMU_HDC_IDE_SFF8038I_H diff --git a/src/include/86box/hdd.h b/src/include/86box/hdd.h index abb2aa388..58fff9ffd 100644 --- a/src/include/86box/hdd.h +++ b/src/include/86box/hdd.h @@ -1,19 +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. + * 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 hard disk image handler. + * Definitions for the hard disk image handler. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Authors: Miran Grca, + * Fred N. van Kempen, + * + * Copyright 2016-2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef EMU_HDD_H #define EMU_HDD_H diff --git a/src/include/86box/i2c.h b/src/include/86box/i2c.h index 071e57729..20e2f8b30 100644 --- a/src/include/86box/i2c.h +++ b/src/include/86box/i2c.h @@ -1,18 +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 the I2C handler. + * Definitions for the I2C handler. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #ifndef EMU_I2C_H #define EMU_I2C_H diff --git a/src/include/86box/i8080.h b/src/include/86box/i8080.h index 9f85a85c0..a3f3fba64 100644 --- a/src/include/86box/i8080.h +++ b/src/include/86box/i8080.h @@ -1,16 +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. * - * 8080 CPU emulation (header). + * 8080 CPU emulation (header). * - * Authors: Cacodemon345 * - * Copyright 2022 Cacodemon345 + * + * Authors: Cacodemon345 + * + * Copyright 2022 Cacodemon345 */ #include diff --git a/src/include/86box/ibm_5161.h b/src/include/86box/ibm_5161.h index 711773d6d..e189826a8 100644 --- a/src/include/86box/ibm_5161.h +++ b/src/include/86box/ibm_5161.h @@ -1,15 +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. * - * Emulation of the IBM Expansion Unit (5161). + * This file is part of the 86Box distribution. + * + * Emulation of the IBM Expansion Unit (5161). * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #ifndef EMU_IBM_5161_H diff --git a/src/include/86box/ini.h b/src/include/86box/ini.h index d754d645b..5eca9ab8c 100644 --- a/src/include/86box/ini.h +++ b/src/include/86box/ini.h @@ -10,13 +10,13 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * Overdoze, * * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2016-2017 Miran Grca. * */ #ifndef EMU_INI_H diff --git a/src/include/86box/io.h b/src/include/86box/io.h index 7e7b45912..b80b37a39 100644 --- a/src/include/86box/io.h +++ b/src/include/86box/io.h @@ -1,21 +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. + * 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 I/O handler. + * Definitions for the I/O handler. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2008-2017 Sarah Walker. + * Copyright 2016-2017 Miran Grca. */ #ifndef EMU_IO_H #define EMU_IO_H diff --git a/src/include/86box/isapnp.h b/src/include/86box/isapnp.h index abf3eb10d..9fff876dc 100644 --- a/src/include/86box/isapnp.h +++ b/src/include/86box/isapnp.h @@ -1,18 +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 ISA Plug and Play. + * Definitions for ISA Plug and Play. * * * - * Author: RichardG, + * Authors: RichardG, * - * Copyright 2021 RichardG. + * Copyright 2021 RichardG. */ #ifndef EMU_ISAPNP_H diff --git a/src/include/86box/joystick_ch_flightstick_pro.h b/src/include/86box/joystick_ch_flightstick_pro.h index 5bdedede9..b49800ecb 100644 --- a/src/include/86box/joystick_ch_flightstick_pro.h +++ b/src/include/86box/joystick_ch_flightstick_pro.h @@ -1,20 +1,20 @@ /* - * VARCem Virtual ARchaeological Computer EMulator. - * An emulator of (mostly) x86-based PC systems and devices, - * using the ISA,EISA,VLB,MCA and PCI system buses, roughly - * spanning the era between 1981 and 1995. + * 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 VARCem Project. + * This file is part of the 86Box distribution. * - * Definitions for the Flight Stick Pro driver. + * Definitions for the Flight Stick Pro driver. * * * - * Authors: Miran Grca, - * Sarah Walker, + * Authors: Miran Grca, + * Sarah Walker, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. * * 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 diff --git a/src/include/86box/joystick_standard.h b/src/include/86box/joystick_standard.h index ac2b7ea3f..c874677ea 100644 --- a/src/include/86box/joystick_standard.h +++ b/src/include/86box/joystick_standard.h @@ -11,7 +11,7 @@ * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/joystick_sw_pad.h b/src/include/86box/joystick_sw_pad.h index d5aef7ccb..a75d802de 100644 --- a/src/include/86box/joystick_sw_pad.h +++ b/src/include/86box/joystick_sw_pad.h @@ -6,12 +6,12 @@ * * This file is part of the 86Box distribution. * - * Definitions for the Sidewinder Pro driver. + * Definitions for the Sidewinder Pro driver. * * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/joystick_tm_fcs.h b/src/include/86box/joystick_tm_fcs.h index 74b3edd2e..65e734a40 100644 --- a/src/include/86box/joystick_tm_fcs.h +++ b/src/include/86box/joystick_tm_fcs.h @@ -6,12 +6,12 @@ * * This file is part of the 86Box distribution. * - * Definitions for the Flight Control System driver. + * Definitions for the Flight Control System driver. * * * * Authors: Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/keyboard.h b/src/include/86box/keyboard.h index 0e384b39b..db18ac789 100644 --- a/src/include/86box/keyboard.h +++ b/src/include/86box/keyboard.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/language.h b/src/include/86box/language.h index 90bfecc06..8db604efc 100644 --- a/src/include/86box/language.h +++ b/src/include/86box/language.h @@ -1,21 +1,19 @@ /* - * 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 language management module. - * - * NOTE: FIXME: Strings 2176 and 2193 are same. + * Definitions for the language management module. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. - * Copyright 2022 Jasmine Iwanek. + * Copyright 2017-2018 Fred N. van Kempen. + * Copyright 2022 Jasmine Iwanek. */ #ifndef LANG_UAGE_H diff --git a/src/include/86box/log.h b/src/include/86box/log.h index b736ef2b6..9d3568069 100644 --- a/src/include/86box/log.h +++ b/src/include/86box/log.h @@ -1,20 +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. + * 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. * - * Main include file for the application. + * Main include file for the application. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2021 Miran Grca. - * Copyright 2021 Fred N. van Kempen. + * Copyright 2021 Miran Grca. + * Copyright 2021 Fred N. van Kempen. */ #ifndef EMU_LOG_H diff --git a/src/include/86box/lpt.h b/src/include/86box/lpt.h index 87bd90d48..cb8fc7cc6 100644 --- a/src/include/86box/lpt.h +++ b/src/include/86box/lpt.h @@ -11,10 +11,10 @@ #define LPT4_ADDR 0x0268 #define LPT4_IRQ 5 /* -#define LPT5_ADDR 0x027c -#define LPT5_IRQ 7 -#define LPT6_ADDR 0x026c -#define LPT6_IRQ 5 +#define LPT5_ADDR 0x027c +#define LPT5_IRQ 7 +#define LPT6_ADDR 0x026c +#define LPT6_IRQ 5 */ typedef struct diff --git a/src/include/86box/m_amstrad.h b/src/include/86box/m_amstrad.h index 1b99617ca..ef4e8b9ea 100644 --- a/src/include/86box/m_amstrad.h +++ b/src/include/86box/m_amstrad.h @@ -1,20 +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. + * 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 of the emulation of the Amstrad series of PC's: - * PC1512, PC1640 and PC200, including their keyboard, mouse and - * video devices, as well as the PC2086 and PC3086 systems. + * Header of the emulation of the Amstrad series of PC's: + * PC1512, PC1640 and PC200, including their keyboard, mouse and + * video devices, as well as the PC2086 and PC3086 systems. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2019 Sarah Walker. + * Copyright 2008-2019 Sarah Walker. */ #ifndef MACHINE_AMSTRAD_H diff --git a/src/include/86box/m_at_t3100e.h b/src/include/86box/m_at_t3100e.h index aa545fc45..c25d171b9 100644 --- a/src/include/86box/m_at_t3100e.h +++ b/src/include/86box/m_at_t3100e.h @@ -12,9 +12,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/include/86box/m_xt_t1000.h b/src/include/86box/m_xt_t1000.h index 452decc21..d8e8cd56b 100644 --- a/src/include/86box/m_xt_t1000.h +++ b/src/include/86box/m_xt_t1000.h @@ -12,9 +12,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 052e55abd..9137da5d3 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/mem.h b/src/include/86box/mem.h index f6252be09..f109776a6 100644 --- a/src/include/86box/mem.h +++ b/src/include/86box/mem.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * Miran Grca, * diff --git a/src/include/86box/mo.h b/src/include/86box/mo.h index ea22f8f29..19c999ee3 100644 --- a/src/include/86box/mo.h +++ b/src/include/86box/mo.h @@ -1,21 +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. + * 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. * - * Implementation of a generic Magneto-Optical Disk drive - * commands, for both ATAPI and SCSI usage. + * Implementation of a generic Magneto-Optical Disk drive + * commands, for both ATAPI and SCSI usage. * * * - * Authors: Natalia Portillo + * Authors: Natalia Portillo * Fred N. van Kempen, - * Miran Grca, + * Miran Grca, * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. */ #ifndef EMU_MO_H diff --git a/src/include/86box/mouse.h b/src/include/86box/mouse.h index aa046b81c..c260b3571 100644 --- a/src/include/86box/mouse.h +++ b/src/include/86box/mouse.h @@ -1,20 +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. + * 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 mouse driver. + * Definitions for the mouse driver. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. */ #ifndef EMU_MOUSE_H diff --git a/src/include/86box/net_3c501.h b/src/include/86box/net_3c501.h index e45f9a82a..996720f8f 100644 --- a/src/include/86box/net_3c501.h +++ b/src/include/86box/net_3c501.h @@ -1,22 +1,23 @@ /* - * 86Box An emulator of (mostly) x86-based PC systems and devices, - * using the ISA, EISA, VLB, MCA, and PCI system buses, - * roughly spanning the era between 1981 and 1995. + * 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 Project. + * This file is part of the 86Box Project. * - * Implementation of the following network controller: - * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). + * Implementation of the following network controller: + * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). * * * * Based on @(#)Dev3C501.cpp Oracle (VirtualBox) * - * Authors: TheCollector1995, - * Oracle + * Authors: TheCollector1995, + * Oracle * - * Copyright 2022 TheCollector1995. - * Portions Copyright (C) 2022 Oracle and/or its affilitates. + * Copyright 2022 TheCollector1995. + * Portions Copyright (C) 2022 Oracle and/or its affilitates. * * 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 diff --git a/src/include/86box/net_3c503.h b/src/include/86box/net_3c503.h index 147ae0f05..44024850f 100644 --- a/src/include/86box/net_3c503.h +++ b/src/include/86box/net_3c503.h @@ -1,3 +1,46 @@ +/* + * 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. + * + * Implementation of the following network controllers: + * - 3Com Etherlink II 3c503 (ISA 8-bit). + * + * + * + * Based on @(#)3c503.cpp Carl (MAME) + * + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, + * Carl, + * + * Copyright 2018 TheCollector1995. + * Copyright 2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. + * Portions Copyright (C) 2018 MAME Project + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the: + * + * Free Software Foundation, Inc. + * 59 Temple Place - Suite 330 + * Boston, MA 02111-1307 + * USA. + */ #ifndef NET_3C503_H #define NET_3C503_H diff --git a/src/include/86box/net_dp8390.h b/src/include/86box/net_dp8390.h index 7cb91d30a..4a172d4fe 100644 --- a/src/include/86box/net_dp8390.h +++ b/src/include/86box/net_dp8390.h @@ -1,20 +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. + * 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. * - * Header of the emulation of the DP8390 Network Interface - * Controller used by the WD family, NE1000/NE2000 family, and - * 3Com 3C503 NIC's. + * Header of the emulation of the DP8390 Network Interface + * Controller used by the WD family, NE1000/NE2000 family, and + * 3Com 3C503 NIC's. * * * - * Authors: Miran Grca, - * Bochs project, + * Authors: Miran Grca, + * Bochs project, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2008-2018 Bochs project. + * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Bochs project. */ #ifndef NET_DP8390_H diff --git a/src/include/86box/net_ne2000.h b/src/include/86box/net_ne2000.h index 73b5bd67d..350668ccb 100644 --- a/src/include/86box/net_ne2000.h +++ b/src/include/86box/net_ne2000.h @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * 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 diff --git a/src/include/86box/net_pcnet.h b/src/include/86box/net_pcnet.h index f1db74045..ccdc7e832 100644 --- a/src/include/86box/net_pcnet.h +++ b/src/include/86box/net_pcnet.h @@ -1,20 +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. + * 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. * - * Emulation of the AMD PCnet LANCE NIC controller for both the ISA - * and PCI buses. + * Emulation of the AMD PCnet LANCE NIC controller for both the ISA + * and PCI buses. * * * - * Authors: Miran Grca, - * TheCollector1995, - * Antony T Curtis + * Authors: Miran Grca, + * TheCollector1995, + * Antony T Curtis * - * Copyright 2004-2019 Antony T Curtis - * Copyright 2016-2019 Miran Grca. + * Copyright 2004-2019 Antony T Curtis + * Copyright 2016-2019 Miran Grca. */ #ifndef NET_PCNET_H diff --git a/src/include/86box/net_plip.h b/src/include/86box/net_plip.h index 890de3fd0..83c33e4c6 100644 --- a/src/include/86box/net_plip.h +++ b/src/include/86box/net_plip.h @@ -1,17 +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 the PLIP parallel port network device. + * Definitions for the PLIP parallel port network device. * * * - * Author: RichardG, - * Copyright 2020 RichardG. + * Authors: RichardG, + * + * Copyright 2020 RichardG. */ #ifndef NET_PLIP_H diff --git a/src/include/86box/net_wd8003.h b/src/include/86box/net_wd8003.h index ee313c1a9..a0ea13287 100644 --- a/src/include/86box/net_wd8003.h +++ b/src/include/86box/net_wd8003.h @@ -1,26 +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. * - * Implementation of the following network controllers: - * - SMC/WD 8003E (ISA 8-bit); - * - SMC/WD 8013EBT (ISA 16-bit); - * - SMC/WD 8013EP/A (MCA). + * Implementation of the following network controllers: + * - SMC/WD 8003E (ISA 8-bit); + * - SMC/WD 8013EBT (ISA 16-bit); + * - SMC/WD 8013EP/A (MCA). * * * - * Authors: Fred N. van Kempen, - * TheCollector1995, - * Miran Grca, - * Peter Grehan, + * Authors: Fred N. van Kempen, + * TheCollector1995, + * Miran Grca, + * Peter Grehan, * - * Copyright 2017,2018 Fred N. van Kempen. - * Copyright 2016-2018 Miran Grca. - * Portions Copyright (C) 2002 MandrakeSoft S.A. + * Copyright 2017-2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Portions Copyright (C) 2002 MandrakeSoft S.A. * * 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 diff --git a/src/include/86box/nvr_ps2.h b/src/include/86box/nvr_ps2.h index 9fd0a7897..478d1be44 100644 --- a/src/include/86box/nvr_ps2.h +++ b/src/include/86box/nvr_ps2.h @@ -11,9 +11,9 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2008-2018 Sarah Walker. * * This program is free software; you can redistribute it and/or modify diff --git a/src/include/86box/pci.h b/src/include/86box/pci.h index 5c24bebf2..c16d5a7e8 100644 --- a/src/include/86box/pci.h +++ b/src/include/86box/pci.h @@ -12,7 +12,7 @@ * * Authors: Miran Grca, * Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2020 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. diff --git a/src/include/86box/pic.h b/src/include/86box/pic.h index d1295be4b..318ce2fad 100644 --- a/src/include/86box/pic.h +++ b/src/include/86box/pic.h @@ -1,19 +1,19 @@ /* - * 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 of the implementation of the Intel PIC chip emulation, - * partially ported from reenigne's XTCE. + * Header of the implementation of the Intel PIC chip emulation, + * partially ported from reenigne's XTCE. * - * Authors: Andrew Jenner, - * Miran Grca, + * Authors: Andrew Jenner, + * Miran Grca, * - * Copyright 2015-2020 Andrew Jenner. - * Copyright 2016-2020 Miran Grca. + * Copyright 2015-2020 Andrew Jenner. + * Copyright 2016-2020 Miran Grca. */ #ifndef EMU_PIC_H diff --git a/src/include/86box/pit.h b/src/include/86box/pit.h index f6eb4cc6d..d50e45967 100644 --- a/src/include/86box/pit.h +++ b/src/include/86box/pit.h @@ -1,18 +1,19 @@ /* - * 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 of the implementation of the Intel 8253/8254 - * Programmable Interval Timer. + * Header of the implementation of the Intel 8253/8254 + * Programmable Interval Timer. * * * - * Author: Miran Grca, - * Copyright 2019,2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2019-2020 Miran Grca. */ #ifndef EMU_PIT_H diff --git a/src/include/86box/pit_fast.h b/src/include/86box/pit_fast.h index 317b8f13e..242fb4207 100644 --- a/src/include/86box/pit_fast.h +++ b/src/include/86box/pit_fast.h @@ -1,18 +1,19 @@ /* - * 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 of the implementation of the Intel 8253/8254 - * Programmable Interval Timer. + * Header of the implementation of the Intel 8253/8254 + * Programmable Interval Timer. * * * - * Author: Miran Grca, - * Copyright 2019,2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2019-2020 Miran Grca. */ #ifndef EMU_PIT_FAST_H diff --git a/src/include/86box/plat_dir.h b/src/include/86box/plat_dir.h index 74caac23f..f6c135001 100644 --- a/src/include/86box/plat_dir.h +++ b/src/include/86box/plat_dir.h @@ -1,17 +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 the platform OpenDir module. + * Definitions for the platform OpenDir module. * * * - * Author: Fred N. van Kempen, - * Copyright 2017 Fred N. van Kempen. + * Authors: Fred N. van Kempen, + * + * Copyright 2017 Fred N. van Kempen. */ #ifndef PLAT_DIR_H diff --git a/src/include/86box/plat_dynld.h b/src/include/86box/plat_dynld.h index 6e20f6e27..986e72424 100644 --- a/src/include/86box/plat_dynld.h +++ b/src/include/86box/plat_dynld.h @@ -1,17 +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. * - * Define the Dynamic Module Loader interface. + * Define the Dynamic Module Loader interface. * * * - * Author: Fred N. van Kempen, - * Copyright 2017 Fred N. van Kempen + * Authors: Fred N. van Kempen, + * + * Copyright 2017 Fred N. van Kempen */ #ifndef PLAT_DYNLD_H diff --git a/src/include/86box/port_6x.h b/src/include/86box/port_6x.h index 927a15efa..7eb0c9a56 100644 --- a/src/include/86box/port_6x.h +++ b/src/include/86box/port_6x.h @@ -1,19 +1,19 @@ /* - * 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 the implementation of Port 6x used by various - * machines. + * Header for the implementation of Port 6x used by various + * machines. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2021 Miran Grca. + * Copyright 2021 Miran Grca. */ #ifndef EMU_PORT_6X_H diff --git a/src/include/86box/port_92.h b/src/include/86box/port_92.h index 4d5aa031c..319b2b3ac 100644 --- a/src/include/86box/port_92.h +++ b/src/include/86box/port_92.h @@ -1,19 +1,19 @@ /* - * 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 the implementation of Port 92 used by PS/2 - * machines and 386+ clones. + * Header for the implementation of Port 92 used by PS/2 + * machines and 386+ clones. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2019 Miran Grca. + * Copyright 2019 Miran Grca. */ #ifndef EMU_PORT_92_H diff --git a/src/include/86box/postcard.h b/src/include/86box/postcard.h index 0db2d6187..5ceb64ae3 100644 --- a/src/include/86box/postcard.h +++ b/src/include/86box/postcard.h @@ -1,18 +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. * - * Implementation of a port 80h POST diagnostic card. + * Implementation of a port 80h POST diagnostic card. * * * - * Author: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #ifndef POSTCARD_H diff --git a/src/include/86box/random.h b/src/include/86box/random.h index 089a49c4a..021969a54 100644 --- a/src/include/86box/random.h +++ b/src/include/86box/random.h @@ -1,18 +1,19 @@ /* - * 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. * - * A better random number generation, used for floppy weak bits - * and network MAC address generation. + * A better random number generation, used for floppy weak bits + * and network MAC address generation. * * * - * Author: Miran Grca, - * Copyright 2016,2017 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2017 Miran Grca. */ #ifndef EMU_RANDOM_H diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h index dc54b504f..17af95ca4 100644 --- a/src/include/86box/resource.h +++ b/src/include/86box/resource.h @@ -1,24 +1,24 @@ /* - * 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. * - * Windows resource defines. + * Windows resource defines. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * David Hrdlička, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * David Hrdlička, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 David Hrdlička. - * Copyright 2021-2022 Jasmine Iwanek. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2018-2019 David Hrdlička. + * Copyright 2021-2022 Jasmine Iwanek. */ #ifndef WIN_RESOURCE_H diff --git a/src/include/86box/rom.h b/src/include/86box/rom.h index 82a1aef5f..91f813a95 100644 --- a/src/include/86box/rom.h +++ b/src/include/86box/rom.h @@ -1,17 +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 the ROM image handler. + * Definitions for the ROM image handler. * * * - * Author: Fred N. van Kempen, - * Copyright 2018,2019 Fred N. van Kempen. + * Authors: Fred N. van Kempen, + * + * Copyright 2018-2019 Fred N. van Kempen. */ #ifndef EMU_ROM_H diff --git a/src/include/86box/scsi.h b/src/include/86box/scsi.h index 93a7fd010..d19497101 100644 --- a/src/include/86box/scsi.h +++ b/src/include/86box/scsi.h @@ -1,22 +1,22 @@ /* - * 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. * - * SCSI controller handler header. + * SCSI controller handler header. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Fred N. van Kempen, + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 TheCollector1995. - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 TheCollector1995. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef EMU_SCSI_H #define EMU_SCSI_H diff --git a/src/include/86box/scsi_buslogic.h b/src/include/86box/scsi_buslogic.h index be865ec57..12bff6fdf 100644 --- a/src/include/86box/scsi_buslogic.h +++ b/src/include/86box/scsi_buslogic.h @@ -1,19 +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. + * 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. * - * Emulation of BusLogic BT-542B ISA and BT-958D PCI SCSI - * controllers. + * Emulation of BusLogic BT-542B ISA and BT-958D PCI SCSI + * controllers. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Fred N. van Kempen, - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, + * + * Copyright 2016-2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef SCSI_BUSLOGIC_H diff --git a/src/include/86box/scsi_cdrom.h b/src/include/86box/scsi_cdrom.h index 42d4412d1..6b94c2aa4 100644 --- a/src/include/86box/scsi_cdrom.h +++ b/src/include/86box/scsi_cdrom.h @@ -1,19 +1,19 @@ /* - * 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. * - * Implementation of the CD-ROM drive with SCSI(-like) - * commands, for both ATAPI and SCSI usage. + * Implementation of the CD-ROM drive with SCSI(-like) + * commands, for both ATAPI and SCSI usage. * * * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2018,2019 Miran Grca. + * Copyright 2018-2019 Miran Grca. */ #ifndef EMU_SCSI_CDROM_H diff --git a/src/include/86box/scsi_device.h b/src/include/86box/scsi_device.h index 8cb2f3877..61048fb54 100644 --- a/src/include/86box/scsi_device.h +++ b/src/include/86box/scsi_device.h @@ -1,20 +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. + * 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 generic SCSI device command handler. + * Definitions for the generic SCSI device command handler. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. */ #ifndef SCSI_DEVICE_H diff --git a/src/include/86box/scsi_disk.h b/src/include/86box/scsi_disk.h index 94171e7ac..bff40a396 100644 --- a/src/include/86box/scsi_disk.h +++ b/src/include/86box/scsi_disk.h @@ -1,15 +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. * - * Emulation of SCSI fixed and removable disks. + * Emulation of SCSI fixed and removable disks. * * * - * Author: Miran Grca, - * Copyright 2017,2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2017-2018 Miran Grca. */ #ifndef SCSI_DISK_H diff --git a/src/include/86box/scsi_ncr5380.h b/src/include/86box/scsi_ncr5380.h index 045e6bbe7..ecf5660ef 100644 --- a/src/include/86box/scsi_ncr5380.h +++ b/src/include/86box/scsi_ncr5380.h @@ -1,24 +1,24 @@ /* - * 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. * - * Implementation of the NCR 5380 series of SCSI Host Adapters - * made by NCR. These controllers were designed for - * the ISA bus. + * Implementation of the NCR 5380 series of SCSI Host Adapters + * made by NCR. These controllers were designed for + * the ISA bus. * * * - * Authors: Sarah Walker, - * TheCollector1995, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * TheCollector1995, + * Fred N. van Kempen, * - * Copyright 2017-2018 Sarah Walker. - * Copyright 2017-2018 TheCollector1995. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Sarah Walker. + * Copyright 2017-2018 TheCollector1995. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef SCSI_NCR5380_H diff --git a/src/include/86box/scsi_ncr53c8xx.h b/src/include/86box/scsi_ncr53c8xx.h index 37c5a72bf..5149c2203 100644 --- a/src/include/86box/scsi_ncr53c8xx.h +++ b/src/include/86box/scsi_ncr53c8xx.h @@ -1,25 +1,25 @@ /* - * 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. * - * Implementation of the NCR 53C810 and 53C875 SCSI Host - * Adapters made by NCR and later Symbios and LSI. These - * controllers were designed for the PCI bus. + * Implementation of the NCR 53C810 and 53C875 SCSI Host + * Adapters made by NCR and later Symbios and LSI. These + * controllers were designed for the PCI bus. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Paul Brook (QEMU), - * Artyom Tarasenko (QEMU), + * Authors: TheCollector1995, + * Miran Grca, + * Paul Brook (QEMU), + * Artyom Tarasenko (QEMU), * - * Copyright 2006-2018 Paul Brook. - * Copyright 2009-2018 Artyom Tarasenko. - * Copyright 2017,2018 Miran Grca. + * Copyright 2006-2018 Paul Brook. + * Copyright 2009-2018 Artyom Tarasenko. + * Copyright 2017-2018 Miran Grca. */ #ifndef SCSI_NCR53C8XX_H diff --git a/src/include/86box/scsi_pcscsi.h b/src/include/86box/scsi_pcscsi.h index d0b5baf04..0ce353d33 100644 --- a/src/include/86box/scsi_pcscsi.h +++ b/src/include/86box/scsi_pcscsi.h @@ -1,25 +1,25 @@ /* - * 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. * - * Implementation of the AMD PCscsi and Tekram DC-390 SCSI - * controllers using the NCR 53c9x series of chips. + * 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, - * Miran Grca, + * Authors: Fabrice Bellard (QEMU) + * Herve Poussineau (QEMU) + * TheCollector1995, + * Miran Grca, * - * Copyright 2005-2018 Fabrice Bellard. - * Copyright 2012-2018 Herve Poussineau. - * Copyright 2017,2018 Miran Grca. + * Copyright 2005-2018 Fabrice Bellard. + * Copyright 2012-2018 Herve Poussineau. + * Copyright 2017-2018 Miran Grca. */ #ifndef SCSI_PCSCSI_H diff --git a/src/include/86box/scsi_spock.h b/src/include/86box/scsi_spock.h index 3dae005db..bfa579c82 100644 --- a/src/include/86box/scsi_spock.h +++ b/src/include/86box/scsi_spock.h @@ -1,21 +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. + * 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. * - * Implementation of the IBM PS/2 SCSI controller with - * cache for MCA only. + * Implementation of the IBM PS/2 SCSI controller with + * cache for MCA only. * * * - * Authors: Sarah Walker, - * TheCollector1995, + * Authors: Sarah Walker, + * TheCollector1995, * - * Copyright 2020 Sarah Walker. - * Copyright 2020 TheCollector1995. + * Copyright 2020 Sarah Walker. + * Copyright 2020 TheCollector1995. */ #ifndef SCSI_SPOCK_H diff --git a/src/include/86box/scsi_x54x.h b/src/include/86box/scsi_x54x.h index 68a31e651..a20f1e788 100644 --- a/src/include/86box/scsi_x54x.h +++ b/src/include/86box/scsi_x54x.h @@ -1,24 +1,24 @@ /* - * 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 of the code common to the AHA-154x series of SCSI - * Host Adapters made by Adaptec, Inc. and the BusLogic series - * of SCSI Host Adapters made by Mylex. - * These controllers were designed for various buses. + * Header of the code common to the AHA-154x series of SCSI + * Host Adapters made by Adaptec, Inc. and the BusLogic series + * of SCSI Host Adapters made by Mylex. + * These controllers were designed for various buses. * * * - * Authors: TheCollector1995, - * Miran Grca, - * Fred N. van Kempen, + * Authors: TheCollector1995, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. */ #ifndef SCSI_X54X_H diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index 1394a1c53..ae48ee09f 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/smram.h b/src/include/86box/smram.h index 07537a7f6..84d1cbe8d 100644 --- a/src/include/86box/smram.h +++ b/src/include/86box/smram.h @@ -1,18 +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 the SMRAM interface. + * Definitions for the SMRAM interface. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2020 Miran Grca. + * Copyright 2016-2020 Miran Grca. */ #ifndef EMU_SMRAM_H diff --git a/src/include/86box/snd_ac97.h b/src/include/86box/snd_ac97.h index 600dd84d8..14d31dc40 100644 --- a/src/include/86box/snd_ac97.h +++ b/src/include/86box/snd_ac97.h @@ -1,18 +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 AC'97 audio emulation. + * Definitions for AC'97 audio emulation. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2021 RichardG. + * Copyright 2021 RichardG. */ #ifndef SOUND_AC97_H #define SOUND_AC97_H diff --git a/src/include/86box/snd_ad1848.h b/src/include/86box/snd_ad1848.h index bdf5022e5..76fc775db 100644 --- a/src/include/86box/snd_ad1848.h +++ b/src/include/86box/snd_ad1848.h @@ -1,22 +1,22 @@ /* - * 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 AD1848 / CS4248 / CS4231 (Windows Sound System) codec emulation. + * Definitions for AD1848 / CS4248 / CS4231 (Windows Sound System) codec emulation. * * * - * Authors: Sarah Walker, - * TheCollector1995, - * RichardG, + * Authors: Sarah Walker, + * TheCollector1995, + * RichardG, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2018-2020 TheCollector1995. - * Copyright 2021 RichardG. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2018-2020 TheCollector1995. + * Copyright 2021 RichardG. */ #ifndef SOUND_AD1848_H diff --git a/src/include/86box/snd_mpu401.h b/src/include/86box/snd_mpu401.h index 96143b251..4afbc6b53 100644 --- a/src/include/86box/snd_mpu401.h +++ b/src/include/86box/snd_mpu401.h @@ -1,23 +1,24 @@ /* - * 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. * - * Roland MPU-401 emulation. + * Roland MPU-401 emulation. * * * - * Author: Sarah Walker, - * DOSBox Team, - * Miran Grca, - * TheCollector1995, - * Copyright 2008-2020 Sarah Walker. - * Copyright 2008-2020 DOSBox Team. - * Copyright 2016-2020 Miran Grca. - * Copyright 2016-2020 TheCollector1995. + * Authors: Sarah Walker, + * DOSBox Team, + * Miran Grca, + * TheCollector1995, + * + * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 DOSBox Team. + * Copyright 2016-2020 Miran Grca. + * Copyright 2016-2020 TheCollector1995. */ #ifndef SOUND_MPU401_H diff --git a/src/include/86box/snd_opl.h b/src/include/86box/snd_opl.h index 5caccf8fc..b4f26543d 100644 --- a/src/include/86box/snd_opl.h +++ b/src/include/86box/snd_opl.h @@ -1,18 +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 the OPL interface. + * Definitions for the OPL interface. * - * Authors: Fred N. van Kempen, - * Miran Grca, + * Authors: Fred N. van Kempen, + * Miran Grca, * - * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2016-2020 Miran Grca. + * Copyright 2017-2020 Fred N. van Kempen. + * Copyright 2016-2020 Miran Grca. */ #ifndef SOUND_OPL_H #define SOUND_OPL_H diff --git a/src/include/86box/snd_opl_nuked.h b/src/include/86box/snd_opl_nuked.h index 635863407..f82e85b0e 100644 --- a/src/include/86box/snd_opl_nuked.h +++ b/src/include/86box/snd_opl_nuked.h @@ -1,20 +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. + * 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 NukedOPL3 driver. + * Definitions for the NukedOPL3 driver. * - * Version: @(#)snd_opl_nuked.h 1.0.5 2020/07/16 + * Version: @(#)snd_opl_nuked.h 1.0.5 2020/07/16 * - * Authors: Fred N. van Kempen, - * Miran Grca, + * Authors: Fred N. van Kempen, + * Miran Grca, * - * Copyright 2017-2020 Fred N. van Kempen. - * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2020 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. */ #ifndef SOUND_OPL_NUKED_H diff --git a/src/include/86box/snd_sb.h b/src/include/86box/snd_sb.h index 577335976..88f2c74f1 100644 --- a/src/include/86box/snd_sb.h +++ b/src/include/86box/snd_sb.h @@ -8,7 +8,7 @@ * * Sound Blaster emulation. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * diff --git a/src/include/86box/snd_speaker.h b/src/include/86box/snd_speaker.h index 922603d98..516d20588 100644 --- a/src/include/86box/snd_speaker.h +++ b/src/include/86box/snd_speaker.h @@ -1,20 +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. + * 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 of the emulation of the PC speaker. + * Header of the emulation of the PC speaker. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #ifndef SOUND_SPEAKER_H diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index 10303c3ca..a38d213da 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/include/86box/ui.h b/src/include/86box/ui.h index 5eb15a08d..58168ceb8 100644 --- a/src/include/86box/ui.h +++ b/src/include/86box/ui.h @@ -1,20 +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. + * 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. * - * Define the various UI functions. + * Define the various UI functions. * * * - * Authors: Miran Grca, - * Fred N. van Kempen, + * Authors: Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. */ #ifndef EMU_UI_H #define EMU_UI_H diff --git a/src/include/86box/usb.h b/src/include/86box/usb.h index 893a9f501..d0b169b6c 100644 --- a/src/include/86box/usb.h +++ b/src/include/86box/usb.h @@ -1,18 +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 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/vid_8514a.h b/src/include/86box/vid_8514a.h index be6c5d177..6463d0214 100644 --- a/src/include/86box/vid_8514a.h +++ b/src/include/86box/vid_8514a.h @@ -1,19 +1,19 @@ /* - * 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. * - * Emulation of the 8514/A card from IBM for the MCA bus and - * generic ISA bus clones without vendor extensions. + * Emulation of the 8514/A card from IBM for the MCA bus and + * generic ISA bus clones without vendor extensions. * * * - * Authors: TheCollector1995 + * Authors: TheCollector1995 * - * Copyright 2022 TheCollector1995. + * Copyright 2022 TheCollector1995. */ #ifndef VIDEO_8514A_H diff --git a/src/include/86box/vid_cga.h b/src/include/86box/vid_cga.h index 4421840d6..39e1c24ef 100644 --- a/src/include/86box/vid_cga.h +++ b/src/include/86box/vid_cga.h @@ -1,19 +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. + * 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. * - * Emulation of the old and new IBM CGA graphics cards. + * Emulation of the old and new IBM CGA graphics cards. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #ifndef VIDEO_CGA_H diff --git a/src/include/86box/vid_cga_comp.h b/src/include/86box/vid_cga_comp.h index f4dd58b40..3c7916034 100644 --- a/src/include/86box/vid_cga_comp.h +++ b/src/include/86box/vid_cga_comp.h @@ -1,20 +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. + * 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. * - * IBM CGA composite filter, borrowed from reenigne's DOSBox - * patch and ported to C. + * IBM CGA composite filter, borrowed from reenigne's DOSBox + * patch and ported to C. * * * - * Author: reenigne, - * Miran Grca, - * Copyright 2015-2018 reenigne. - * Copyright 2015-2018 Miran Grca. + * Authors: reenigne, + * Miran Grca, + * + * Copyright 2015-2018 reenigne. + * Copyright 2015-2018 Miran Grca. */ #ifndef VIDEO_CGA_COMP_H diff --git a/src/include/86box/vid_ddc.h b/src/include/86box/vid_ddc.h index b64759bac..144cca406 100644 --- a/src/include/86box/vid_ddc.h +++ b/src/include/86box/vid_ddc.h @@ -1,20 +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. + * 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. * - * DDC monitor emulation definitions. + * DDC monitor emulation definitions. * * * - * Authors: Sarah Walker, - * RichardG, + * Authors: Sarah Walker, + * RichardG, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2020 RichardG. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2020 RichardG. */ #ifndef EMU_VID_DDC_H diff --git a/src/include/86box/vid_ega.h b/src/include/86box/vid_ega.h index 3b4797bf8..784f0c596 100644 --- a/src/include/86box/vid_ega.h +++ b/src/include/86box/vid_ega.h @@ -1,21 +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. + * 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. * - * Emulation of the EGA and Chips & Technologies SuperEGA - * graphics cards. + * Emulation of the EGA and Chips & Technologies SuperEGA + * graphics cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #ifndef VIDEO_EGA_H diff --git a/src/include/86box/vid_hercules.h b/src/include/86box/vid_hercules.h index 109d721ae..bbb4239aa 100644 --- a/src/include/86box/vid_hercules.h +++ b/src/include/86box/vid_hercules.h @@ -1,20 +1,22 @@ /* - * 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. * - * Emulation of the Hercules graphics cards. + * Emulation of the Hercules graphics cards. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2021 Jasmine Iwanek. + * Authors: Sarah Walker, + * Miran Grca, + * Jasmine Iwanek, + * + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2021 Jasmine Iwanek. */ #ifndef VIDEO_HERCULES_H diff --git a/src/include/86box/vid_nga.h b/src/include/86box/vid_nga.h index 8dc0ad881..93786b15e 100644 --- a/src/include/86box/vid_nga.h +++ b/src/include/86box/vid_nga.h @@ -1,25 +1,25 @@ /* - * 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. * - * Emulation of the Olivetti OGC 8-bit ISA (GO708) and - * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. + * Emulation of the Olivetti OGC 8-bit ISA (GO708) and + * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #ifndef VIDEO_NGA_H diff --git a/src/include/86box/vid_ogc.h b/src/include/86box/vid_ogc.h index 6e6447694..6b80f5859 100644 --- a/src/include/86box/vid_ogc.h +++ b/src/include/86box/vid_ogc.h @@ -1,25 +1,25 @@ /* - * 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. * - * Emulation of the Olivetti OGC 8-bit ISA (GO708) and - * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. + * Emulation of the Olivetti OGC 8-bit ISA (GO708) and + * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #ifndef VIDEO_OGC_H diff --git a/src/include/86box/vid_pgc.h b/src/include/86box/vid_pgc.h index 3960598ab..12450c0d1 100644 --- a/src/include/86box/vid_pgc.h +++ b/src/include/86box/vid_pgc.h @@ -1,20 +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. + * 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 PGC driver. + * Definitions for the PGC driver. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. */ #ifndef VID_PGC_H #define VID_PGC_H diff --git a/src/include/86box/vid_pgc_palette.h b/src/include/86box/vid_pgc_palette.h index ffcf6a9f0..a242e0cbd 100644 --- a/src/include/86box/vid_pgc_palette.h +++ b/src/include/86box/vid_pgc_palette.h @@ -1,20 +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. + * 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. * - * Palette definitions for the PGC core. + * Palette definitions for the PGC core. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. */ #ifndef VID_PGC_PALETTE_H diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 3781d5530..7f987a2b7 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/include/86box/vid_svga_render.h b/src/include/86box/vid_svga_render.h index 04bd740b1..13ff527e0 100644 --- a/src/include/86box/vid_svga_render.h +++ b/src/include/86box/vid_svga_render.h @@ -1,19 +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. + * 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. * - * SVGA renderers. + * SVGA renderers. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #ifndef VIDEO_SVGA_RENDER_H diff --git a/src/include/86box/vid_vga.h b/src/include/86box/vid_vga.h index 44cc6b7c3..08a1a2591 100644 --- a/src/include/86box/vid_vga.h +++ b/src/include/86box/vid_vga.h @@ -1,20 +1,22 @@ /* - * 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. * - * Emulation of the IBM MDA + VGA graphics cards. + * Emulation of the IBM MDA + VGA graphics cards. * * * - * Author: Sarah Walker, - * Miran Grca, - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2021 Jasmine Iwanek. + * Authors: Sarah Walker, + * Miran Grca, + * Jasmine Iwanek, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2021 Jasmine Iwanek. */ #ifndef VIDEO_VGA_H diff --git a/src/include/86box/vid_voodoo_banshee.h b/src/include/86box/vid_voodoo_banshee.h index 4d966ea3e..56fd47eeb 100644 --- a/src/include/86box/vid_voodoo_banshee.h +++ b/src/include/86box/vid_voodoo_banshee.h @@ -1,18 +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. * - * Voodoo Banshee and 3 specific emulation. + * Voodoo Banshee and 3 specific emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef 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 9f7a1825e..2d36f1566 100644 --- a/src/include/86box/vid_voodoo_banshee_blitter.h +++ b/src/include/86box/vid_voodoo_banshee_blitter.h @@ -1,18 +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. * - * Voodoo Banshee and 3 specific emulation. + * Voodoo Banshee and 3 specific emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_BANSHEE_BLITTER_H diff --git a/src/include/86box/vid_voodoo_blitter.h b/src/include/86box/vid_voodoo_blitter.h index 2802c7d1e..981c0856d 100644 --- a/src/include/86box/vid_voodoo_blitter.h +++ b/src/include/86box/vid_voodoo_blitter.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * * Copyright 2008-2020 Sarah Walker. */ diff --git a/src/include/86box/vid_voodoo_common.h b/src/include/86box/vid_voodoo_common.h index e6d4ad5e4..0fd4155ef 100644 --- a/src/include/86box/vid_voodoo_common.h +++ b/src/include/86box/vid_voodoo_common.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_COMMON_H diff --git a/src/include/86box/vid_voodoo_display.h b/src/include/86box/vid_voodoo_display.h index e415f7824..25b3e9b1a 100644 --- a/src/include/86box/vid_voodoo_display.h +++ b/src/include/86box/vid_voodoo_display.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_DISPLAY_H diff --git a/src/include/86box/vid_voodoo_dither.h b/src/include/86box/vid_voodoo_dither.h index 2d674c5b4..3580cada2 100644 --- a/src/include/86box/vid_voodoo_dither.h +++ b/src/include/86box/vid_voodoo_dither.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics and 2 specific emulation. + * Voodoo Graphics and 2 specific emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_DITHER_H diff --git a/src/include/86box/vid_voodoo_fb.h b/src/include/86box/vid_voodoo_fb.h index 374474cc5..2138e83da 100644 --- a/src/include/86box/vid_voodoo_fb.h +++ b/src/include/86box/vid_voodoo_fb.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_FB_H diff --git a/src/include/86box/vid_voodoo_fifo.h b/src/include/86box/vid_voodoo_fifo.h index 86956cc5a..0073a295c 100644 --- a/src/include/86box/vid_voodoo_fifo.h +++ b/src/include/86box/vid_voodoo_fifo.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_FIFO_H diff --git a/src/include/86box/vid_voodoo_reg.h b/src/include/86box/vid_voodoo_reg.h index 13f7ae932..62738a8c5 100644 --- a/src/include/86box/vid_voodoo_reg.h +++ b/src/include/86box/vid_voodoo_reg.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_REG_H diff --git a/src/include/86box/vid_voodoo_setup.h b/src/include/86box/vid_voodoo_setup.h index be94f9533..d8820a7cb 100644 --- a/src/include/86box/vid_voodoo_setup.h +++ b/src/include/86box/vid_voodoo_setup.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_SETUP_H diff --git a/src/include/86box/vid_voodoo_texture.h b/src/include/86box/vid_voodoo_texture.h index 2e0af97a3..65eec54e4 100644 --- a/src/include/86box/vid_voodoo_texture.h +++ b/src/include/86box/vid_voodoo_texture.h @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #ifndef VIDEO_VOODOO_TEXTURE_H diff --git a/src/include/86box/video.h b/src/include/86box/video.h index abba64574..6f35dc5ee 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/include/86box/vnc.h b/src/include/86box/vnc.h index 7b82ce5d1..a63c53403 100644 --- a/src/include/86box/vnc.h +++ b/src/include/86box/vnc.h @@ -1,18 +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 the VNC renderer. + * Definitions for the VNC renderer. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017 Fred N. van Kempen. + * Copyright 2017 Fred N. van Kempen. */ #ifndef EMU_VNC_H diff --git a/src/include/86box/win.h b/src/include/86box/win.h index 3174e24b2..99620cbeb 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -1,23 +1,23 @@ /* - * 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. * - * Platform support defintions for Win32. + * Platform support defintions for Win32. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2021 Laci bá' + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2021 Laci bá' */ #ifndef PLAT_WIN_H diff --git a/src/include/86box/win_opengl.h b/src/include/86box/win_opengl.h index 6192a68c1..80d3695ca 100644 --- a/src/include/86box/win_opengl.h +++ b/src/include/86box/win_opengl.h @@ -1,16 +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. * - * Header file for OpenGL rendering module + * Header file for OpenGL rendering module * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2021 Teemu Korhonen + * Copyright 2021 Teemu Korhonen */ #ifndef WIN_OPENGL_H diff --git a/src/include/86box/win_opengl_glslp.h b/src/include/86box/win_opengl_glslp.h index caf86a04f..6586cd526 100644 --- a/src/include/86box/win_opengl_glslp.h +++ b/src/include/86box/win_opengl_glslp.h @@ -1,16 +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. * - * Header file for shader file parser. + * Header file for shader file parser. * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2021 Teemu Korhonen + * Copyright 2021 Teemu Korhonen */ #ifndef WIN_OPENGL_GLSLP_H diff --git a/src/include/86box/win_sdl.h b/src/include/86box/win_sdl.h index 52902034d..69340e8b6 100644 --- a/src/include/86box/win_sdl.h +++ b/src/include/86box/win_sdl.h @@ -1,38 +1,38 @@ /* - * 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 libSDL2 rendering module. + * Definitions for the libSDL2 rendering module. * * * - * Authors: Fred N. van Kempen, - * Michael Drüing, + * Authors: Fred N. van Kempen, + * Michael Drüing, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Michael Drüing. + * Copyright 2018-2019 Fred N. van Kempen. + * Copyright 2018-2019 Michael Drüing. * - * Redistribution and use in source and binary forms, with - * or without modification, are permitted provided that the - * following conditions are met: + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: * - * 1. Redistributions of source code must retain the entire - * above notice, this list of conditions and the following - * disclaimer. + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names - * of its contributors may be used to endorse or promote - * products derived from this software without specific - * prior written permission. + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT diff --git a/src/include/86box/zip.h b/src/include/86box/zip.h index 910436410..3981465ce 100644 --- a/src/include/86box/zip.h +++ b/src/include/86box/zip.h @@ -1,19 +1,19 @@ /* - * 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. * - * Implementation of the Iomega ZIP drive with SCSI(-like) - * commands, for both ATAPI and SCSI usage. + * Implementation of the Iomega ZIP drive with SCSI(-like) + * commands, for both ATAPI and SCSI usage. * * * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2018,2019 Miran Grca. + * Copyright 2018-2019 Miran Grca. */ #ifndef EMU_ZIP_H diff --git a/src/include/fdi2raw.h b/src/include/fdi2raw.h index 7a53d9d17..b848b26f2 100644 --- a/src/include/fdi2raw.h +++ b/src/include/fdi2raw.h @@ -1,51 +1,81 @@ /* - * 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 FDI floppy file format. + * Definitions for the FDI floppy file format. * * * - * Authors: Toni Wilen, - * and Vincent Joguin, - * Thomas Harte, + * Authors: Toni Wilen, + * and Vincent Joguin, + * Thomas Harte, * - * Copyright 2001-2004 Toni Wilen. - * Copyright 2001-2004 Vincent Joguin. - * Copyright 2001 Thomas Harte. + * Copyright 2001-2004 Toni Wilen. + * Copyright 2001-2004 Vincent Joguin. + * Copyright 2001-2016 Thomas Harte. */ #ifndef __FDI2RAW_H #define __FDI2RAW_H -#define uae_u8 uint8_t -#define uae_u16 uint16_t -#define uae_u32 uint32_t - +#include +#include #include + typedef struct fdi FDI; #ifdef __cplusplus extern "C" { #endif -extern int fdi2raw_loadtrack(FDI *, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffset, int *multirev, int mfm); +/*! + Attempts to parse and return an FDI header from the file @c file. -extern int fdi2raw_loadrevolution(FDI *, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int mfm); + @parameter file the file from which to attempt to read the FDI. + @returns a newly-allocated `FDI` if parsing succeeded; @c NULL otherwise. +*/ +extern FDI *fdi2raw_header(FILE *file); -extern FDI *fdi2raw_header(FILE *f); -extern void fdi2raw_header_free(FDI *); -extern int fdi2raw_get_last_track(FDI *); -extern int fdi2raw_get_num_sector(FDI *); -extern int fdi2raw_get_last_head(FDI *); -extern int fdi2raw_get_type(FDI *); -extern int fdi2raw_get_bit_rate(FDI *); -extern int fdi2raw_get_rotation(FDI *); -extern int fdi2raw_get_write_protect(FDI *); -extern int fdi2raw_get_tpi(FDI *); +/*! + Release all memory associated with @c file. +*/ +extern void fdi2raw_header_free(FDI *file); + +extern int fdi2raw_loadtrack(FDI *, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int *indexoffset, int *multirev, int mfm); +extern int fdi2raw_loadrevolution(FDI *, uint16_t *mfmbuf, uint16_t *tracktiming, int track, int *tracklength, int mfm); + +typedef enum { + FDI2RawDiskType8Inch = 0, + FDI2RawDiskType5_25Inch = 1, + FDI2RawDiskType3_5Inch = 2, + FDI2RawDiskType3Inch = 3, +} FDI2RawDiskType; + +/// @returns the disk type described by @c fdi. +extern FDI2RawDiskType fdi2raw_get_type(FDI *fdi); + +/// @returns the bit rate at which @c fdi is sampled if spinning at the intended rate, in Kbit/s. +extern int fdi2raw_get_bit_rate(FDI *fdi); + +/// @returns the intended rotation speed of @c fdi, in rotations per minute. +extern int fdi2raw_get_rotation(FDI *fdi); + +/// @returns whether the imaged disk was write protected. +extern bool fdi2raw_get_write_protect(FDI *fdi); + +/// @returns the final enumerated track represented in @c fdi. +extern int fdi2raw_get_last_track(FDI *fdi); + +/// @returns the final enumerated head represented in @c fdi. +extern int fdi2raw_get_last_head(FDI *fdi); + +/// @returns @c 22 if track 0 is a standard Amiga high-density; @c 11 otherwise. +extern int fdi2raw_get_num_sector(FDI *fdi); + +extern int fdi2raw_get_tpi(FDI *fdi); #ifdef __cplusplus } diff --git a/src/include/glad/glad.h b/src/include/glad/glad.h index 0b4d36656..5b2fd13f4 100644 --- a/src/include/glad/glad.h +++ b/src/include/glad/glad.h @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.34 on Sat Dec 4 18:46:02 2021. + OpenGL loader generated by glad 0.1.36 on Sat Jan 7 18:24:33 2023. Language/Generator: C/C++ Specification: gl diff --git a/src/include/minitrace/minitrace.h b/src/include/minitrace/minitrace.h index 2047eedb7..0335c9ac3 100644 --- a/src/include/minitrace/minitrace.h +++ b/src/include/minitrace/minitrace.h @@ -1,7 +1,7 @@ // Minitrace // // Copyright 2014 by Henrik Rydgård -// http://www.github.com/hrydgard/minitrace +// https://www.github.com/hrydgard/minitrace // Released under the MIT license. // // Ultra-light dependency free library for performance tracing C/C++ applications. @@ -71,13 +71,13 @@ const char *mtr_pool_string(const char *str); // Commented-out types will be supported in the future. typedef enum { - MTR_ARG_TYPE_NONE = 0, - MTR_ARG_TYPE_INT = 1, // I - // MTR_ARG_TYPE_FLOAT = 2, // TODO - // MTR_ARG_TYPE_DOUBLE = 3, // TODO - MTR_ARG_TYPE_STRING_CONST = 8, // C - MTR_ARG_TYPE_STRING_COPY = 9, - // MTR_ARG_TYPE_JSON_COPY = 10, + MTR_ARG_TYPE_NONE = 0, + MTR_ARG_TYPE_INT = 1, // I + // MTR_ARG_TYPE_FLOAT = 2, // TODO + // MTR_ARG_TYPE_DOUBLE = 3, // TODO + MTR_ARG_TYPE_STRING_CONST = 8, // C + MTR_ARG_TYPE_STRING_COPY = 9, + // MTR_ARG_TYPE_JSON_COPY = 10, } mtr_arg_type; // TODO: Add support for more than one argument (metadata) per event @@ -213,55 +213,55 @@ void internal_mtr_raw_event_arg(const char *category, const char *name, char ph, // These are optimized to use X events (combined B and E). Much easier to do in C++ than in C. class MTRScopedTrace { public: - MTRScopedTrace(const char *category, const char *name) - : category_(category), name_(name) { - start_time_ = mtr_time_s(); - } - ~MTRScopedTrace() { - internal_mtr_raw_event(category_, name_, 'X', &start_time_); - } + MTRScopedTrace(const char *category, const char *name) + : category_(category), name_(name) { + start_time_ = mtr_time_s(); + } + ~MTRScopedTrace() { + internal_mtr_raw_event(category_, name_, 'X', &start_time_); + } private: - const char *category_; - const char *name_; - double start_time_; + const char *category_; + const char *name_; + double start_time_; }; // Only outputs a block if execution time exceeded the limit. // TODO: This will effectively call mtr_time_s twice at the end, which is bad. class MTRScopedTraceLimit { public: - MTRScopedTraceLimit(const char *category, const char *name, double limit_s) - : category_(category), name_(name), limit_(limit_s) { - start_time_ = mtr_time_s(); - } - ~MTRScopedTraceLimit() { - double end_time = mtr_time_s(); - if (end_time - start_time_ >= limit_) { - internal_mtr_raw_event(category_, name_, 'X', &start_time_); - } - } + MTRScopedTraceLimit(const char *category, const char *name, double limit_s) + : category_(category), name_(name), limit_(limit_s) { + start_time_ = mtr_time_s(); + } + ~MTRScopedTraceLimit() { + double end_time = mtr_time_s(); + if (end_time - start_time_ >= limit_) { + internal_mtr_raw_event(category_, name_, 'X', &start_time_); + } + } private: - const char *category_; - const char *name_; - double start_time_; - double limit_; + const char *category_; + const char *name_; + double start_time_; + double limit_; }; class MTRScopedTraceArg { public: - MTRScopedTraceArg(const char *category, const char *name, mtr_arg_type arg_type, const char *arg_name, void *arg_value) - : category_(category), name_(name) { - internal_mtr_raw_event_arg(category, name, 'B', 0, arg_type, arg_name, arg_value); - } - ~MTRScopedTraceArg() { - internal_mtr_raw_event(category_, name_, 'E', 0); - } + MTRScopedTraceArg(const char *category, const char *name, mtr_arg_type arg_type, const char *arg_name, void *arg_value) + : category_(category), name_(name) { + internal_mtr_raw_event_arg(category, name, 'B', 0, arg_type, arg_name, arg_value); + } + ~MTRScopedTraceArg() { + internal_mtr_raw_event(category_, name_, 'E', 0); + } private: - const char *category_; - const char *name_; + const char *category_; + const char *name_; }; #endif diff --git a/src/ini.c b/src/ini.c index 59a3dc629..009d21c0b 100644 --- a/src/ini.c +++ b/src/ini.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * Overdoze, @@ -19,7 +19,7 @@ * Copyright 2008-2019 Sarah Walker. * Copyright 2016-2019 Miran Grca. * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * * NOTE: Forcing config files to be in Unicode encoding breaks * it on Windows XP, and possibly also Vista. Use the diff --git a/src/io.c b/src/io.c index cf934b895..0cd7cd87b 100644 --- a/src/io.c +++ b/src/io.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/mac/CMakeLists.txt b/src/mac/CMakeLists.txt index 9ad6206a8..bbdf1d5d5 100644 --- a/src/mac/CMakeLists.txt +++ b/src/mac/CMakeLists.txt @@ -38,9 +38,9 @@ set_source_files_properties(${APP_ICON_MACOSX} # Prepare long version string if(EMU_BUILD) - set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION} [${EMU_BUILD}]") + set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION} [${EMU_BUILD}]") else() - set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION}") + set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION}") endif() # Generate Info.plist diff --git a/src/machine/CMakeLists.txt b/src/machine/CMakeLists.txt index 1f356a91d..e88631044 100644 --- a/src/machine/CMakeLists.txt +++ b/src/machine/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(mch OBJECT machine.c machine_table.c m_xt.c m_xt_compaq.c diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index 5d64bda3b..89f8f5670 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -31,7 +31,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * John Elliott, @@ -935,45 +935,45 @@ vid_speed_changed_200(void *priv) */ static unsigned char mapping1[256] = { // clang-format off -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ -/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/*10*/ 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, -/*20*/ 2, 2, 0, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, -/*30*/ 2, 2, 2, 0, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, -/*40*/ 2, 2, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, -/*50*/ 2, 2, 1, 1, 2, 0, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, -/*60*/ 2, 2, 2, 2, 2, 2, 0, 1, 2, 2, 2, 2, 2, 2, 1, 1, -/*70*/ 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 1, -/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, -/*90*/ 2, 2, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, -/*A0*/ 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 0, 1, 2, 2, 1, 1, -/*B0*/ 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 0, 2, 2, 1, 1, -/*C0*/ 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, -/*D0*/ 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 0, 1, 1, -/*E0*/ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 0, 1, -/*F0*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/*10*/ 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, +/*20*/ 2, 2, 0, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, +/*30*/ 2, 2, 2, 0, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, +/*40*/ 2, 2, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, +/*50*/ 2, 2, 1, 1, 2, 0, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, +/*60*/ 2, 2, 2, 2, 2, 2, 0, 1, 2, 2, 2, 2, 2, 2, 1, 1, +/*70*/ 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 1, +/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, +/*90*/ 2, 2, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, +/*A0*/ 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 0, 1, 2, 2, 1, 1, +/*B0*/ 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 0, 2, 2, 1, 1, +/*C0*/ 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, +/*D0*/ 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 0, 1, 1, +/*E0*/ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 0, 1, +/*F0*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, // clang-format on }; static unsigned char mapping2[256] = { // clang-format off -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ -/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -/*10*/ 1, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, -/*20*/ 1, 1, 3, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, -/*30*/ 1, 1, 1, 3, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, -/*40*/ 1, 1, 2, 2, 3, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, -/*50*/ 1, 1, 2, 2, 1, 3, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, -/*60*/ 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, -/*70*/ 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, -/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, -/*90*/ 1, 1, 2, 2, 2, 2, 2, 2, 1, 3, 2, 2, 2, 2, 2, 2, -/*A0*/ 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 3, 2, 1, 1, 2, 2, -/*B0*/ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 1, 1, 2, 2, -/*C0*/ 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 3, 2, 2, 2, -/*D0*/ 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 3, 2, 2, -/*E0*/ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, -/*F0*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +/*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/*10*/ 1, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, +/*20*/ 1, 1, 3, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, +/*30*/ 1, 1, 1, 3, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, +/*40*/ 1, 1, 2, 2, 3, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, +/*50*/ 1, 1, 2, 2, 1, 3, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, +/*60*/ 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 2, 2, +/*70*/ 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, +/*80*/ 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, +/*90*/ 1, 1, 2, 2, 2, 2, 2, 2, 1, 3, 2, 2, 2, 2, 2, 2, +/*A0*/ 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 3, 2, 1, 1, 2, 2, +/*B0*/ 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 1, 1, 2, 2, +/*C0*/ 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 3, 2, 2, 2, +/*D0*/ 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 3, 2, 2, +/*E0*/ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, +/*F0*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, // clang-format on }; @@ -1054,7 +1054,7 @@ vid_out_200(uint16_t addr, uint8_t val, void *priv) uint8_t old; switch (addr) { - /* MDA writes ============================================================== */ + /* MDA writes ============================================================== */ case 0x3b1: case 0x3b3: case 0x3b5: @@ -1087,7 +1087,7 @@ vid_out_200(uint16_t addr, uint8_t val, void *priv) nmi_raise(); return; - /* CGA writes ============================================================== */ + /* CGA writes ============================================================== */ case 0x03d1: case 0x03d3: case 0x03d5: @@ -1122,12 +1122,12 @@ vid_out_200(uint16_t addr, uint8_t val, void *priv) set_lcd_cols(val); return; - /* PC200 control port writes ============================================== */ + /* PC200 control port writes ============================================== */ case 0x03de: vid->crtc_index = 0x1f; - /* NMI only seems to be triggered if the value being written has the high - * bit set (enable NMI). So it only protects writes to this port if you - * let it? */ + /* NMI only seems to be triggered if the value being written has the high + * bit set (enable NMI). So it only protects writes to this port if you + * let it? */ if (val & 0x80) { vid->operation_ctrl = val; vid->crtc_index |= 0x40; @@ -2032,14 +2032,14 @@ kbd_write(uint16_t port, uint8_t val, void *priv) /* * PortB - System Control. * - * 7 Enable Status-1/Disable Keyboard Code on Port A. - * 6 Enable incoming Keyboard Clock. - * 5 Prevent external parity errors from causing NMI. - * 4 Disable parity checking of on-board system Ram. - * 3 Undefined (Not Connected). - * 2 Enable Port C LSB / Disable MSB. (See 1.8.3) - * 1 Speaker Drive. - * 0 8253 GATE 2 (Speaker Modulate). + * 7 Enable Status-1/Disable Keyboard Code on Port A. + * 6 Enable incoming Keyboard Clock. + * 5 Prevent external parity errors from causing NMI. + * 4 Disable parity checking of on-board system Ram. + * 3 Undefined (Not Connected). + * 2 Enable Port C LSB / Disable MSB. (See 1.8.3) + * 1 Speaker Drive. + * 0 8253 GATE 2 (Speaker Modulate). * * This register is controlled by BIOS and/or ROS. */ @@ -2097,14 +2097,14 @@ kbd_read(uint16_t port, void *priv) /* * PortA - System Status 1 * - * 7 Always 0 (KBD7) - * 6 Second Floppy disk drive installed (KBD6) - * 5 DDM1 - Default Display Mode bit 1 (KBD5) - * 4 DDM0 - Default Display Mode bit 0 (KBD4) - * 3 Always 1 (KBD3) - * 2 Always 1 (KBD2) - * 1 8087 NDP installed (KBD1) - * 0 Always 1 (KBD0) + * 7 Always 0 (KBD7) + * 6 Second Floppy disk drive installed (KBD6) + * 5 DDM1 - Default Display Mode bit 1 (KBD5) + * 4 DDM0 - Default Display Mode bit 0 (KBD4) + * 3 Always 1 (KBD3) + * 2 Always 1 (KBD2) + * 1 8087 NDP installed (KBD1) + * 0 Always 1 (KBD0) * * DDM00 * 00 unknown, external color? @@ -2137,27 +2137,27 @@ kbd_read(uint16_t port, void *priv) /* * PortC - System Status 2. * - * 7 On-board system RAM parity error. - * 6 External parity error (I/OCHCK from expansion bus). - * 5 8253 PIT OUT2 output. - * 4 Undefined (Not Connected). + * 7 On-board system RAM parity error. + * 6 External parity error (I/OCHCK from expansion bus). + * 5 8253 PIT OUT2 output. + * 4 Undefined (Not Connected). *------------------------------------------- - * LSB MSB (depends on PB2) + * LSB MSB (depends on PB2) *------------------------------------------- - * 3 RAM3 Undefined - * 2 RAM2 Undefined - * 1 RAM1 Undefined - * 0 RAM0 RAM4 + * 3 RAM3 Undefined + * 2 RAM2 Undefined + * 1 RAM1 Undefined + * 0 RAM0 RAM4 * * PC7 is forced to 0 when on-board system RAM parity * checking is disabled by PB4. * * RAM4:0 - * 01110 512K bytes on-board. - * 01111 544K bytes (32K external). - * 10000 576K bytes (64K external). - * 10001 608K bytes (96K external). - * 10010 640K bytes (128K external or fitted on-board). + * 01110 512K bytes on-board. + * 01111 544K bytes (32K external). + * 10000 576K bytes (64K external). + * 10001 608K bytes (96K external). + * 10010 640K bytes (128K external or fitted on-board). */ if (ams->pb & 0x04) ret = ams->stat2 & 0x0f; @@ -2226,14 +2226,14 @@ ams_read(uint16_t port, void *priv) case 0x0379: /* printer control, also set LK1-3. * per John Elliott's site, this is xor'ed with 0x07 - * 7 English Language. - * 6 German Language. - * 5 French Language. - * 4 Spanish Language. - * 3 Danish Language. - * 2 Swedish Language. - * 1 Italian Language. - * 0 Diagnostic Mode. + * 7 English Language. + * 6 German Language. + * 5 French Language. + * 4 Spanish Language. + * 3 Danish Language. + * 2 Swedish Language. + * 1 Italian Language. + * 0 Diagnostic Mode. */ ret = (lpt_read(port, &lpt_ports[0]) & 0xf8) | ams->language; break; diff --git a/src/machine/m_at.c b/src/machine/m_at.c index ccee2f1e7..92f8c0f5f 100644 --- a/src/machine/m_at.c +++ b/src/machine/m_at.c @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2020 Miran Grca. diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c index ee117fa33..253ce804d 100644 --- a/src/machine/m_at_286_386sx.c +++ b/src/machine/m_at_286_386sx.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * EngiNerd * diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 1343b38ad..b9583f72e 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2010-2020 Sarah Walker. @@ -635,10 +635,9 @@ machine_at_pc330_6573_init(const machine_t *model) /* doesn't like every CPU oth pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 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(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); device_add(&opti802g_pci_device); device_add(&opti822_device); @@ -1003,10 +1002,10 @@ machine_at_alfredo_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + 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(&keyboard_ps2_pci_device); device_add(&sio_device); @@ -1033,9 +1032,9 @@ machine_at_ninja_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1 | PCI_NO_IRQ_STEERING); pci_register_slot(0x05, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 1, 2); - pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 1, 2, 1); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 1, 2); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 1, 2, 1); device_add(&keyboard_ps2_intel_ami_pci_device); device_add(&intel_flash_bxt_ami_device); @@ -1061,13 +1060,13 @@ machine_at_486sp3_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ - pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ + pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ + pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ device_add(&sio_device); device_add(&fdc37c663_ide_device); device_add(&sst_flash_29ee010_device); @@ -1095,12 +1094,12 @@ machine_at_pci400cb_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(0x0F, PCI_CARD_NORMAL, 4, 3, 2, 1); /* 0F = Slot 1 */ - pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0E = Slot 2 */ - pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0D = Slot 3 */ - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 0C = Slot 4 */ - device_add(&keyboard_ps2_ami_pci_device); /* Assume AMI Megakey 1993 standalone ('P') - because of the Tekram machine below. */ + pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 3, 2, 1); /* 0F = Slot 1 */ + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0E = Slot 2 */ + pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0D = Slot 3 */ + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 0C = Slot 4 */ + device_add(&keyboard_ps2_ami_pci_device); /* Assume AMI Megakey 1993 standalone ('P') + because of the Tekram machine below. */ device_add(&ims8848_device); @@ -1127,10 +1126,10 @@ machine_at_g486ip_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(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 1 */ - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 3 */ - device_add(&keyboard_ps2_ami_pci_device); /* AMI Megakey 1993 stanalone ('P') */ + pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 1 */ + pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 3 */ + device_add(&keyboard_ps2_ami_pci_device); /* AMI Megakey 1993 stanalone ('P') */ device_add(&ims8848_device); @@ -1156,12 +1155,12 @@ machine_at_486sp3g_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ - pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 06 = Slot 1 */ - pci_register_slot(0x05, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 05 = Slot 2 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 04 = Slot 3 */ + pci_register_slot(0x01, PCI_CARD_SCSI, 1, 2, 3, 4); /* 01 = SCSI */ + pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 06 = Slot 1 */ + pci_register_slot(0x05, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 05 = Slot 2 */ + pci_register_slot(0x04, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 04 = Slot 3 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ device_add(&sio_zb_device); device_add(&pc87332_398_ide_device); device_add(&sst_flash_29ee010_device); @@ -1188,11 +1187,11 @@ machine_at_486ap4_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1 | PCI_NO_IRQ_STEERING); /* Excluded: 5, 6, 7, 8 */ pci_register_slot(0x05, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 09 = Slot 1 */ - pci_register_slot(0x0a, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0a = Slot 2 */ - pci_register_slot(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0b = Slot 3 */ - pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 0c = Slot 4 */ - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 09 = Slot 1 */ + pci_register_slot(0x0a, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0a = Slot 2 */ + pci_register_slot(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0b = Slot 3 */ + pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 0c = Slot 4 */ + device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ if (fdc_type == FDC_INTERNAL) device_add(&fdc_at_device); @@ -1217,10 +1216,10 @@ machine_at_g486vpa_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(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(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); device_add(&via_vt82c49x_pci_ide_device); device_add(&via_vt82c505_device); @@ -1246,10 +1245,10 @@ machine_at_486vipio2_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(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(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); device_add(&via_vt82c49x_pci_ide_device); device_add(&via_vt82c505_device); @@ -1275,9 +1274,9 @@ machine_at_abpb4_init(const machine_t *model) pci_init(PCI_CAN_SWITCH_TYPE); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1489_device); device_add(&w83787f_device); @@ -1303,9 +1302,9 @@ machine_at_win486pci_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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1489_device); device_add(&prime3b_device); @@ -1329,10 +1328,10 @@ machine_at_ms4145_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(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&ali1489_device); device_add(&w83787f_device); @@ -1357,11 +1356,11 @@ machine_at_sbc490_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(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - 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, 2, 3, 4); - pci_register_slot(0x01, PCI_CARD_VIDEO, 4, 1, 2, 3); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); + 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, 2, 3, 4); + pci_register_slot(0x01, PCI_CARD_VIDEO, 4, 1, 2, 3); device_add(&ali1489_device); device_add(&fdc37c665_device); @@ -1390,7 +1389,7 @@ machine_at_tf486_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(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1489_device); device_add(&w83977ef_device); @@ -1416,7 +1415,7 @@ machine_at_itoxstar_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); - pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&w83977f_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&stpc_client_device); @@ -1445,9 +1444,9 @@ machine_at_arb1423c_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); - 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); + 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(&w83977f_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&stpc_consumer2_device); @@ -1472,9 +1471,9 @@ machine_at_arb1479_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); - 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); + 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(&w83977f_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&stpc_consumer2_device); @@ -1499,9 +1498,9 @@ machine_at_pcm9340_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); - 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); + 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(&w83977f_device, 1); device_add_inst(&w83977f_device, 2); device_add(&keyboard_ps2_ami_pci_device); @@ -1529,7 +1528,7 @@ machine_at_pcm5330_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0D, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0E, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&stpc_serial_device); device_add(&w83977f_370_device); device_add(&keyboard_ps2_ami_pci_device); @@ -1555,10 +1554,10 @@ machine_at_ecs486_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x0C, 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); + pci_register_slot(0x0F, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0C, 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); device_add(&umc_hb4_device); device_add(&umc_8886f_device); @@ -1586,10 +1585,10 @@ machine_at_hot433_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0F, 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); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1618,9 +1617,9 @@ machine_at_atc1415_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1649,10 +1648,10 @@ machine_at_actionpc2600_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0F, 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); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1679,9 +1678,9 @@ machine_at_m919_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&umc_hb4_device); device_add(&umc_8886af_device); @@ -1708,9 +1707,9 @@ machine_at_spc7700plw_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0C, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&umc_hb4_device); device_add(&umc_8886af_device); diff --git a/src/machine/m_at_commodore.c b/src/machine/m_at_commodore.c index 8eeabab19..3587db44a 100644 --- a/src/machine/m_at_commodore.c +++ b/src/machine/m_at_commodore.c @@ -12,9 +12,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/machine/m_at_compaq.c b/src/machine/m_at_compaq.c index 74e853834..0b3a901b5 100644 --- a/src/machine/m_at_compaq.c +++ b/src/machine/m_at_compaq.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * @@ -527,9 +527,9 @@ compaq_plasma_recalcattrs(compaq_plasma_t *self) * Bit 0: Attributes 01-06, 08-0E are inverse video * Bit 1: Attributes 01-06, 08-0E are bold * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are inverse video + * are inverse video * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are bold */ + * are bold */ /* Set up colours */ amber = makecol(0xff, 0x7D, 0x00); @@ -686,8 +686,8 @@ const device_config_t compaq_plasma_config[] = { }, { .name = "rgb_type", - .description = "RGB type", - .type = CONFIG_SELECTION, + .description = "RGB type", + .type = CONFIG_SELECTION, .default_string = "", .default_int = 0, .file_filter = "", diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index ec818871a..71aeeb7fb 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -654,7 +654,7 @@ machine_at_ms6168_common_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_SOUND, 3, 4, 1, 2); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index 1388eec3a..66ef15e1d 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -96,7 +96,7 @@ machine_at_s1857_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); 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); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); device_add(&keyboard_ps2_ami_pci_device); @@ -228,11 +228,11 @@ machine_at_ambx133_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_NORMAL, 4, 1, 2, 3); + 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, 1, 2, 3); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); @@ -264,11 +264,11 @@ machine_at_awo671r_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_NORMAL, 2, 3, 4, 1); + 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, 2, 3, 4, 1); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); @@ -297,11 +297,11 @@ machine_at_63a1_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(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); /* Integrated Sound? */ + 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); /* Integrated Sound? */ pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440zx_device); device_add(&piix4e_device); diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index d24933ff9..2aa94cce5 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2010-2019 Sarah Walker. @@ -51,10 +51,10 @@ machine_at_premiere_common_init(const machine_t *model, int pci_switch) pci_init(PCI_CONFIG_TYPE_2 | pci_switch); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + 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(&keyboard_ps2_intel_ami_pci_device); device_add(&sio_zb_device); @@ -70,12 +70,12 @@ machine_at_award_common_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ - pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ - pci_register_slot(0x07, PCI_CARD_SCSI, 1, 2, 3, 4); /* 07 = SCSI */ + pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ + pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ + pci_register_slot(0x07, PCI_CARD_SCSI, 1, 2, 3, 4); /* 07 = SCSI */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (fdc_type == FDC_INTERNAL) @@ -97,10 +97,10 @@ machine_at_sp4_common_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_IDE, 1, 2, 3, 4); /* Excluded: 02, 03*, 04*, 05*, 06*, 07*, 08* */ /* Slots: 09 (04), 0A (03), 0B (02), 0C (07) */ - 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(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); device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_device); device_add(&keyboard_ps2_ami_pci_device); @@ -123,10 +123,10 @@ machine_at_excaliburpci_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x03, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&fdc37c665_device); device_add(&keyboard_ps2_ami_pci_device); @@ -155,9 +155,9 @@ machine_at_p5mp3_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 1 */ - 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(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 1 */ + 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(&keyboard_ps2_pci_device); @@ -187,10 +187,10 @@ machine_at_dellxp60_init(const machine_t *model) pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); /* Not: 00, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C, 0D, 0E, 0F. */ /* Yes: 01, 10, 11, 12, 13, 14. */ - pci_register_slot(0x01, PCI_CARD_NORMAL, 1, 3, 2, 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); + pci_register_slot(0x01, PCI_CARD_NORMAL, 1, 3, 2, 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); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430lx_device); device_add(&keyboard_ps2_intel_ami_pci_device); @@ -217,9 +217,9 @@ machine_at_opti560l_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 4, 4, 3, 3); - 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(0x03, PCI_CARD_NORMAL, 4, 4, 3, 3); + 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(&keyboard_ps2_intel_ami_pci_device); @@ -236,7 +236,8 @@ machine_at_ambradp60_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/ambradp60/1004AF1P.BIO", - "roms/machines/ambradp60/1004AF1P.BI1", 0x1c000, 128); + "roms/machines/ambradp60/1004AF1P.BI1", + 0x1c000, 128); if (bios_only || !ret) return ret; @@ -254,7 +255,8 @@ machine_at_valuepointp60_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/valuepointp60/1006AV0M.BIO", - "roms/machines/valuepointp60/1006AV0M.BI1", 0x1d000, 128); + "roms/machines/valuepointp60/1006AV0M.BI1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -264,10 +266,10 @@ machine_at_valuepointp60_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + 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(&keyboard_ps2_ps1_pci_device); device_add(&sio_device); @@ -285,7 +287,8 @@ machine_at_revenge_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/revenge/1009af2_.bio", - "roms/machines/revenge/1009af2_.bi1", 0x1c000, 128); + "roms/machines/revenge/1009af2_.bi1", + 0x1c000, 128); if (bios_only || !ret) return ret; @@ -323,7 +326,8 @@ machine_at_pb520r_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/pb520r/1009bc0r.bio", - "roms/machines/pb520r/1009bc0r.bi1", 0x1d000, 128); + "roms/machines/pb520r/1009bc0r.bi1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -332,11 +336,11 @@ machine_at_pb520r_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_2); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_VIDEO, 3, 3, 3, 3); - 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(0x01, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x03, PCI_CARD_VIDEO, 3, 3, 3, 3); + 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(&i430lx_device); device_add(&ide_cmd640_pci_single_channel_device); @@ -389,10 +393,10 @@ machine_at_p5vl_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 5, 6, 7, 8); - pci_register_slot(0x13, PCI_CARD_NORMAL, 9, 10, 11, 12); - pci_register_slot(0x14, PCI_CARD_NORMAL, 13, 14, 15, 16); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x12, PCI_CARD_NORMAL, 5, 6, 7, 8); + pci_register_slot(0x13, PCI_CARD_NORMAL, 9, 10, 11, 12); + pci_register_slot(0x14, PCI_CARD_NORMAL, 13, 14, 15, 16); device_add(&opti5x7_pci_device); device_add(&opti822_device); @@ -422,11 +426,11 @@ machine_at_excaliburpci2_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(0x08, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&fdc37c665_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&ide_cmd640_pci_legacy_only_device); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 55751ae43..fa562a62c 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2010-2019 Sarah Walker. @@ -48,7 +48,8 @@ machine_at_plato_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/plato/1016ax1_.bio", - "roms/machines/plato/1016ax1_.bi1", 0x1d000, 128); + "roms/machines/plato/1016ax1_.bi1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -66,7 +67,8 @@ machine_at_ambradp90_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/ambradp90/1002AX1P.BIO", - "roms/machines/ambradp90/1002AX1P.BI1", 0x1d000, 128); + "roms/machines/ambradp90/1002AX1P.BI1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -114,10 +116,10 @@ machine_at_acerv30_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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_acer_pci_device); @@ -144,10 +146,10 @@ machine_at_apollo_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); @@ -173,10 +175,10 @@ 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(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); @@ -193,7 +195,8 @@ machine_at_zappa_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/zappa/1006bs0_.bio", - "roms/machines/zappa/1006bs0_.bi1", 0x20000, 128); + "roms/machines/zappa/1006bs0_.bi1", + 0x20000, 128); if (bios_only || !ret) return ret; @@ -202,9 +205,9 @@ machine_at_zappa_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(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_intel_ami_pci_device); device_add(&i430fx_device); @@ -231,9 +234,9 @@ machine_at_powermatev_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(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); + 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(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); @@ -258,10 +261,10 @@ 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(&keyboard_ps2_pci_device); device_add(&i430fx_device); @@ -288,9 +291,9 @@ machine_at_hawk_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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); @@ -338,10 +341,9 @@ machine_at_hot543_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 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(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); device_add(&opti5x7_pci_device); device_add(&opti822_device); @@ -387,11 +389,11 @@ machine_at_sq588_init(const machine_t *model) pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); /* Correct: 0D (01), 0F (02), 11 (03), 13 (04) */ - pci_register_slot(0x02, PCI_CARD_IDE, 1, 2, 3, 4); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x02, PCI_CARD_IDE, 1, 2, 3, 4); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_ami_pci_device); diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index a51c58b14..0ead2972a 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * @@ -95,11 +95,11 @@ machine_at_ap5vm_init(const machine_t *model) /* It seems there were plans for an on-board NCR 53C810 according to some clues left in the manual, but were latter scrapped. The BIOS still support that PCI device, though, so why not. */ - pci_register_slot(0x06, PCI_CARD_SCSI, 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(0x06, PCI_CARD_SCSI, 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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); @@ -126,10 +126,10 @@ machine_at_p55t2p4_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); @@ -155,10 +155,10 @@ machine_at_m7shi_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); - 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(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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); @@ -188,11 +188,11 @@ machine_at_tc430hx_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(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); + 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); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); @@ -223,12 +223,12 @@ machine_at_equium5200_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(0x08, PCI_CARD_VIDEO, 4, 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); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 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); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 0, 0, 0); // riser + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 0, 0, 0); // riser device_add(&i430hx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -257,11 +257,11 @@ machine_at_pcv90_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(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); + 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); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); @@ -303,10 +303,10 @@ machine_at_p55tvp4_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(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); - 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(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); + 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); @@ -332,9 +332,9 @@ machine_at_5ivg_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); @@ -361,10 +361,10 @@ machine_at_8500tvxa_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(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 2, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 3, 2, 1); + pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 2, 1); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 3, 2, 1); device_add(&i430vx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -390,8 +390,8 @@ machine_at_presario2240_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(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); if (gfxcard == VID_INTERNAL) device_add(&s3_trio64v2_dx_onboard_pci_device); @@ -421,8 +421,8 @@ machine_at_presario4500_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(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x14, PCI_CARD_VIDEO, 3, 0, 0, 0); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); if (gfxcard == VID_INTERNAL) device_add(&s3_trio64v2_dx_onboard_pci_device); @@ -451,10 +451,10 @@ machine_at_p55va_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); @@ -480,10 +480,10 @@ machine_at_brio80xx_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x14, PCI_CARD_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -513,10 +513,10 @@ machine_at_pb680_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(0x08, PCI_CARD_VIDEO, 4, 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); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 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); + pci_register_slot(0x0B, 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); @@ -542,10 +542,10 @@ machine_at_mb520n_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(&i430vx_device); device_add(&piix3_device); @@ -571,10 +571,10 @@ machine_at_i430vx_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(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -600,12 +600,12 @@ machine_at_nupro592_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(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); /*Strongly suspect these are on-board slots*/ - pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); /*Strongly suspect these are on-board slots*/ + pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); /* PIIX4 */ device_add(&i430tx_device); device_add(&piix4_device); @@ -637,13 +637,13 @@ machine_at_tx97_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(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(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(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); + 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(&keyboard_ps2_ami_pci_device); @@ -691,11 +691,11 @@ machine_at_an430tx_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); /* PIIX4 */ - // pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); - 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); + 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); device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_ami_pci_device); @@ -722,13 +722,13 @@ machine_at_ym430tx_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(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(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(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); + 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(&keyboard_ps2_pci_device); @@ -754,10 +754,10 @@ machine_at_mb540n_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(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); - 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(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ device_add(&i430tx_device); device_add(&piix4_device); @@ -784,12 +784,12 @@ machine_at_56a5_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ - pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_pci_device); @@ -816,10 +816,10 @@ machine_at_p5mms98_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); /* PIIX4 */ - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); + 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); device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_ami_pci_device); @@ -847,10 +847,10 @@ machine_at_ficva502_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); device_add(&via_vpx_device); device_add(&via_vt82c586b_device); @@ -966,15 +966,15 @@ machine_at_m560_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(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0B, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -997,16 +997,16 @@ machine_at_ms5164_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(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x0B, PCI_CARD_SOUTHBRIDGE_IDE, 5, 6, 0, 0); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE_PMU, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); - pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); + pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1531_device); device_add(&ali1543_device); /* -5 */ diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 09b142c83..7616d8a4a 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * @@ -51,11 +51,11 @@ machine_at_thor_common_init(const machine_t *model, int mr) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 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, 2, 1); - pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 3, 2, 1); + 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, 2, 1); + pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 3, 2, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (gfxcard == VID_INTERNAL) @@ -76,10 +76,10 @@ machine_at_p54tp4xe_common_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&keyboard_ps2_pci_device); device_add(&i430fx_device); @@ -126,7 +126,8 @@ machine_at_gw2katx_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/gw2katx/1003CN0T.BIO", - "roms/machines/gw2katx/1003CN0T.BI1", 0x20000, 128); + "roms/machines/gw2katx/1003CN0T.BI1", + 0x20000, 128); if (bios_only || !ret) return ret; @@ -142,7 +143,8 @@ machine_at_thor_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/thor/1006cn0_.bio", - "roms/machines/thor/1006cn0_.bi1", 0x20000, 128); + "roms/machines/thor/1006cn0_.bi1", + 0x20000, 128); if (bios_only || !ret) return ret; @@ -174,7 +176,8 @@ machine_at_endeavor_init(const machine_t *model) int ret; ret = bios_load_linear_combined("roms/machines/endeavor/1006cb0_.bio", - "roms/machines/endeavor/1006cb0_.bi1", 0x1d000, 128); + "roms/machines/endeavor/1006cb0_.bi1", + 0x1d000, 128); if (bios_only || !ret) return ret; @@ -183,11 +186,11 @@ machine_at_endeavor_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(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); + 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); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (gfxcard == VID_INTERNAL) @@ -218,9 +221,9 @@ machine_at_ms5119_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(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(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); device_add(&i430fx_device); device_add(&piix_device); @@ -246,10 +249,10 @@ machine_at_pb640_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(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -280,10 +283,10 @@ machine_at_fmb_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(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, 2, 1); - pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 3, 2, 1); + 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, 2, 1); + pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 3, 2, 1); device_add(&i430fx_device); device_add(&piix_no_mirq_device); @@ -310,11 +313,11 @@ machine_at_acerm3a_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(0x0C, 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); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x10, PCI_CARD_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x0C, 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); + 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(&keyboard_ps2_pci_device); @@ -340,12 +343,12 @@ machine_at_ap53_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x06, PCI_CARD_VIDEO, 1, 2, 3, 4); + pci_register_slot(0x06, PCI_CARD_VIDEO, 1, 2, 3, 4); device_add(&i430hx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -370,10 +373,10 @@ machine_at_8500tuc_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(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(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(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); device_add(&i430hx_device); device_add(&piix3_device); @@ -399,10 +402,10 @@ machine_at_p55t2s_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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); - 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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + 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); @@ -428,10 +431,10 @@ machine_at_p5vxb_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(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x06, 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(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x06, 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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); device_add(&i430vx_device); device_add(&piix3_device); @@ -461,11 +464,11 @@ machine_at_gw2kte_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(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, 3, 4, 1, 2); + 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, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); device_add(&i430vx_device); device_add(&piix3_device); @@ -492,10 +495,10 @@ machine_at_ap5s_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_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 2, 1); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 3, 2, 1); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 2, 1); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 3, 2, 1); device_add(&sis_5511_device); device_add(&keyboard_ps2_ami_pci_device); @@ -521,10 +524,10 @@ machine_at_ms5124_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, 0xFE, 0xFF, 0, 0); - pci_register_slot(0x10, PCI_CARD_NORMAL, 0x41, 0x42, 0x43, 0x44); - pci_register_slot(0x11, PCI_CARD_NORMAL, 0x44, 0x41, 0x42, 0x43); - pci_register_slot(0x12, PCI_CARD_NORMAL, 0x43, 0x44, 0x41, 0x42); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 0x42, 0x43, 0x44, 0x41); + pci_register_slot(0x10, PCI_CARD_NORMAL, 0x41, 0x42, 0x43, 0x44); + pci_register_slot(0x11, PCI_CARD_NORMAL, 0x44, 0x41, 0x42, 0x43); + pci_register_slot(0x12, PCI_CARD_NORMAL, 0x43, 0x44, 0x41, 0x42); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 0x42, 0x43, 0x44, 0x41); device_add(&sis_5511_device); device_add(&keyboard_ps2_ami_pci_device); @@ -550,10 +553,10 @@ machine_at_vectra54_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(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); + 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 == VID_INTERNAL) device_add(&s3_phoenix_trio64_onboard_pci_device); diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index 5ffbec822..c1c95f197 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -55,13 +55,13 @@ machine_at_p6rp4_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x19, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x14, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0); + pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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); @@ -89,10 +89,10 @@ machine_at_686nx_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(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(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); device_add(&i440fx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); // Uses the AMIKEY keyboard controller @@ -118,10 +118,10 @@ machine_at_mb600n_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(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); device_add(&i440fx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -147,11 +147,11 @@ machine_at_acerv60n_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(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - 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); + pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); + 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(&keyboard_ps2_pci_device); @@ -180,10 +180,10 @@ machine_at_vs440fx_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(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); - 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(0x0B, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); + 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); @@ -214,10 +214,10 @@ machine_at_ap440fx_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(0x08, PCI_CARD_VIDEO, 3, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); - 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(0x08, PCI_CARD_VIDEO, 3, 0, 0, 0); + pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4); + 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); @@ -244,10 +244,10 @@ machine_at_8600ttc_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(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(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); device_add(&i440fx_device); device_add(&piix3_device); device_add(&keyboard_ps2_ami_pci_device); @@ -273,10 +273,10 @@ machine_at_m6mi_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(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - 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); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + 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(&keyboard_ps2_ami_pci_device); @@ -294,11 +294,11 @@ machine_at_p65up5_common_init(const machine_t *model, const device_t *northbridg 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(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); - 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); + 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(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(&keyboard_ps2_ami_pci_device); diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 381940a10..2813e7275 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * diff --git a/src/machine/m_at_t3100e.c b/src/machine/m_at_t3100e.c index 6b09b1e02..080f22977 100644 --- a/src/machine/m_at_t3100e.c +++ b/src/machine/m_at_t3100e.c @@ -55,8 +55,8 @@ * * Page mapped at 0xD000 0xD400 0xD800 0xDC00 * ------------------------------------------------------ - * Pages 0x00-0x7F 0x208 0x4208 0x8208 0xc208 - * Pages 0x80-0xFF 0x218 0x4218 0x8218 0xc218 + * Pages 0x00-0x7F 0x208 0x4208 0x8208 0xc208 + * Pages 0x80-0xFF 0x218 0x4218 0x8218 0xc218 * Pages 0x100-0x17F 0x258 0x4258 0x8258 0xc258 * Pages 0x180-0x1FF 0x268 0x4268 0x8268 0xc268 * @@ -121,9 +121,9 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/machine/m_at_t3100e_vid.c b/src/machine/m_at_t3100e_vid.c index 30bbc488b..53571c49e 100644 --- a/src/machine/m_at_t3100e_vid.c +++ b/src/machine/m_at_t3100e_vid.c @@ -26,7 +26,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/machine/m_elt.c b/src/machine/m_elt.c index 47e6f145d..81647612c 100644 --- a/src/machine/m_elt.c +++ b/src/machine/m_elt.c @@ -31,7 +31,6 @@ * USA. */ -// clang-format off #include #include #include @@ -51,7 +50,6 @@ #include <86box/rom.h> #include <86box/video.h> #include <86box/vid_cga.h> -// clang-format on static void elt_vid_off_poll(void *p) diff --git a/src/machine/m_europc.c b/src/machine/m_europc.c index 3f78c8f49..116e10e5f 100644 --- a/src/machine/m_europc.c +++ b/src/machine/m_europc.c @@ -293,50 +293,50 @@ rtc_reset(nvr_t *nvr) /* * EuroPC System Configuration: * - * [A] unknown + * [A] unknown * - * [B] 7 1 bootdrive extern - * 0 bootdribe intern - * 6:5 11 invalid hard disk type - * 10 hard disk installed, type 2 - * 01 hard disk installed, type 1 - * 00 hard disk not installed - * 4:3 11 invalid external drive type - * 10 external drive 720K - * 01 external drive 360K - * 00 external drive disabled - * 2 unknown - * 1:0 11 invalid internal drive type - * 10 internal drive 360K - * 01 internal drive 720K - * 00 internal drive disabled + * [B] 7 1 bootdrive extern + * 0 bootdrive intern + * 6:5 11 invalid hard disk type + * 10 hard disk installed, type 2 + * 01 hard disk installed, type 1 + * 00 hard disk not installed + * 4:3 11 invalid external drive type + * 10 external drive 720K + * 01 external drive 360K + * 00 external drive disabled + * 2 unknown + * 1:0 11 invalid internal drive type + * 10 internal drive 360K + * 01 internal drive 720K + * 00 internal drive disabled * - * [C] 7:6 unknown - * 5 monitor detection OFF - * 4 unknown - * 3:2 11 illegal memory size - * 10 512K - * 01 256K - * 00 640K - * 1:0 11 illegal game port - * 10 gameport as mouse port - * 01 gameport as joysticks - * 00 gameport disabled + * [C] 7:6 unknown + * 5 monitor detection OFF + * 4 unknown + * 3:2 11 illegal memory size + * 10 512K + * 01 256K + * 00 640K + * 1:0 11 illegal game port + * 10 gameport as mouse port + * 01 gameport as joysticks + * 00 gameport disabled * - * [D] 7:6 10 9MHz CPU speed - * 01 7MHz CPU speed - * 00 4.77 MHz CPU - * 5 unknown - * 4 external: color, internal: mono - * 3 unknown - * 2 internal video ON - * 1:0 11 mono - * 10 color80 - * 01 color40 - * 00 special (EGA,VGA etc) + * [D] 7:6 10 9MHz CPU speed + * 01 7MHz CPU speed + * 00 4.77 MHz CPU + * 5 unknown + * 4 external: color, internal: mono + * 3 unknown + * 2 internal video ON + * 1:0 11 mono + * 10 color80 + * 01 color40 + * 00 special (EGA,VGA etc) * - * [E] 7:4 unknown - * 3:0 country (00=Deutschland, 0A=ASCII) + * [E] 7:4 unknown + * 3:0 country (00=Deutschland, 0A=ASCII) */ nvr->regs[MRTC_CONF_A] = 0x00; /* CONFIG A */ nvr->regs[MRTC_CONF_B] = 0x0A; /* CONFIG B */ @@ -400,15 +400,15 @@ jim_set(europc_t *sys, uint8_t reg, uint8_t val) case 4: /* CPU Speed control */ switch (val & 0xc0) { case 0x00: /* 4.77 MHz */ - // cpu_set_clockscale(0, 1.0/2); + // cpu_set_clockscale(0, 1.0/2); break; case 0x40: /* 7.16 MHz */ - // cpu_set_clockscale(0, 3.0/4); + // cpu_set_clockscale(0, 3.0/4); break; default: /* 9.54 MHz */ - // cpu_set_clockscale(0, 1);break; + // cpu_set_clockscale(0, 1);break; break; } break; diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 6446d5852..b03272f3d 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/machine/m_ps1.c b/src/machine/m_ps1.c index 53e6928e8..209b5d7a4 100644 --- a/src/machine/m_ps1.c +++ b/src/machine/m_ps1.c @@ -24,7 +24,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index cfe6ba6bd..f77b6f4a0 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2019 Fred N. van Kempen. * Copyright 2016-2019 Miran Grca. diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index c7789de26..0eddc1e19 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. @@ -174,219 +174,219 @@ static const scancode scancode_tandy[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x56, 0}, {0xd6, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*054*/ + { {0}, {0} }, { {0}, {0} }, /*054*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x57, 0}, {0xd7, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x35, 0}, {0xb5, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x38, 0}, {0xb8, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ { {0x29, 0}, {0xa9, 0} }, { {0x49, 0}, {0xc9, 0} }, - { {0}, {0} }, { {0x2b, 0}, {0xab, 0} }, /*148*/ + { {0}, {0} }, { {0x2b, 0}, {0xab, 0} }, /*148*/ { {0}, {0} }, { {0x4e, 0}, {0xce, 0} }, - { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ + { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ { {0x4a, 0}, {0xca, 0} }, { {0x51, 0}, {0xd1, 0} }, - { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ + { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*158*/ + { {0}, {0} }, { {0}, {0} }, /*158*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*15c*/ + { {0}, {0} }, { {0}, {0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*188*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; static uint8_t crtcmask[32] = { diff --git a/src/machine/m_xt_compaq.c b/src/machine/m_xt_compaq.c index 733063306..f5dca48a7 100644 --- a/src/machine/m_xt_compaq.c +++ b/src/machine/m_xt_compaq.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index c978e2caf..bb52c2049 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -11,7 +11,7 @@ * - Supports MM58174 real-time clock emulation (M24) * - Supports MM58274 real-time clock emulation (M240) * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * EngiNerd @@ -889,219 +889,219 @@ const scancode scancode_olivetti_m24_deluxe[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0x5e, 0}, {0xde, 0} }, { {0x60, 0}, {0xe0, 0} }, /*054*/ + { {0x5e, 0}, {0xde, 0} }, { {0x60, 0}, {0xe0, 0} }, /*054*/ { {0x61, 0}, {0xe1, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x57, 0}, {0xd7, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x5f, 0}, {0xdf, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x66, 0}, {0xe6, 0} }, { {0x55, 0}, {0xd5, 0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x63, 0}, {0xe3, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x63, 0}, {0xe3, 0} }, /*144*/ { {0x5b, 0}, {0xdb, 0} }, { {0x5c, 0}, {0xdc, 0} }, - { {0}, {0} }, { {0x58, 0}, {0xd8, 0} }, /*148*/ + { {0}, {0} }, { {0x58, 0}, {0xd8, 0} }, /*148*/ { {0}, {0} }, { {0x5a, 0}, {0xda, 0} }, - { {0}, {0} }, { {0x65, 0}, {0xe5, 0} }, /*14c*/ + { {0}, {0} }, { {0x65, 0}, {0xe5, 0} }, /*14c*/ { {0x59, 0}, {0xd9, 0} }, { {0x5d, 0}, {0xdd, 0} }, - { {0x62, 0}, {0xe2, 0} }, { {0x64, 0}, {0xe4, 0} }, /*150*/ + { {0x62, 0}, {0xe2, 0} }, { {0x64, 0}, {0xe4, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0x54, 0}, {0xd4, 0} }, /*158*/ + { {0}, {0} }, { {0x54, 0}, {0xd4, 0} }, /*158*/ { {0x67, 0}, {0xe7, 0} }, { {0x56, 0}, {0xd6, 0} }, - { {0}, {0} }, { {0}, {0} }, /*15c*/ + { {0}, {0} }, { {0}, {0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*188*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; @@ -1156,219 +1156,219 @@ const scancode scancode_olivetti_m240[512] = { { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*054*/ + { {0}, {0} }, { {0}, {0} }, /*054*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*058*/ + { {0}, {0} }, { {0}, {0} }, /*058*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*05c*/ + { {0}, {0} }, { {0}, {0} }, /*05c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*060*/ + { {0}, {0} }, { {0}, {0} }, /*060*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*064*/ + { {0}, {0} }, { {0}, {0} }, /*064*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*068*/ + { {0}, {0} }, { {0}, {0} }, /*068*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*06c*/ + { {0}, {0} }, { {0}, {0} }, /*06c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*070*/ + { {0}, {0} }, { {0}, {0} }, /*070*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*074*/ + { {0}, {0} }, { {0}, {0} }, /*074*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*078*/ + { {0}, {0} }, { {0}, {0} }, /*078*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*07c*/ + { {0}, {0} }, { {0}, {0} }, /*07c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*080*/ + { {0}, {0} }, { {0}, {0} }, /*080*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*084*/ + { {0}, {0} }, { {0}, {0} }, /*084*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*088*/ + { {0}, {0} }, { {0}, {0} }, /*088*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*08c*/ + { {0}, {0} }, { {0}, {0} }, /*08c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*090*/ + { {0}, {0} }, { {0}, {0} }, /*090*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*094*/ + { {0}, {0} }, { {0}, {0} }, /*094*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*098*/ + { {0}, {0} }, { {0}, {0} }, /*098*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*09c*/ + { {0}, {0} }, { {0}, {0} }, /*09c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a0*/ + { {0}, {0} }, { {0}, {0} }, /*0a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a4*/ + { {0}, {0} }, { {0}, {0} }, /*0a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0a8*/ + { {0}, {0} }, { {0}, {0} }, /*0a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ac*/ + { {0}, {0} }, { {0}, {0} }, /*0ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b0*/ + { {0}, {0} }, { {0}, {0} }, /*0b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b4*/ + { {0}, {0} }, { {0}, {0} }, /*0b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0b8*/ + { {0}, {0} }, { {0}, {0} }, /*0b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0bc*/ + { {0}, {0} }, { {0}, {0} }, /*0bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c0*/ + { {0}, {0} }, { {0}, {0} }, /*0c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c4*/ + { {0}, {0} }, { {0}, {0} }, /*0c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0c8*/ + { {0}, {0} }, { {0}, {0} }, /*0c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0cc*/ + { {0}, {0} }, { {0}, {0} }, /*0cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d0*/ + { {0}, {0} }, { {0}, {0} }, /*0d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d4*/ + { {0}, {0} }, { {0}, {0} }, /*0d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0d8*/ + { {0}, {0} }, { {0}, {0} }, /*0d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0dc*/ + { {0}, {0} }, { {0}, {0} }, /*0dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e0*/ + { {0}, {0} }, { {0}, {0} }, /*0e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e4*/ + { {0}, {0} }, { {0}, {0} }, /*0e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0e8*/ + { {0}, {0} }, { {0}, {0} }, /*0e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0ec*/ + { {0}, {0} }, { {0}, {0} }, /*0ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f0*/ + { {0}, {0} }, { {0}, {0} }, /*0f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f4*/ + { {0}, {0} }, { {0}, {0} }, /*0f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0f8*/ + { {0}, {0} }, { {0}, {0} }, /*0f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*0fc*/ + { {0}, {0} }, { {0}, {0} }, /*0fc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*100*/ + { {0}, {0} }, { {0}, {0} }, /*100*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*104*/ + { {0}, {0} }, { {0}, {0} }, /*104*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*108*/ + { {0}, {0} }, { {0}, {0} }, /*108*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*10c*/ + { {0}, {0} }, { {0}, {0} }, /*10c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*110*/ + { {0}, {0} }, { {0}, {0} }, /*110*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*114*/ + { {0}, {0} }, { {0}, {0} }, /*114*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*118*/ + { {0}, {0} }, { {0}, {0} }, /*118*/ { {0x1c, 0}, {0x9c, 0} }, { {0x1d, 0}, {0x9d, 0} }, - { {0}, {0} }, { {0}, {0} }, /*11c*/ + { {0}, {0} }, { {0}, {0} }, /*11c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*120*/ + { {0}, {0} }, { {0}, {0} }, /*120*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*124*/ + { {0}, {0} }, { {0}, {0} }, /*124*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*128*/ + { {0}, {0} }, { {0}, {0} }, /*128*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*12c*/ + { {0}, {0} }, { {0}, {0} }, /*12c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*130*/ + { {0}, {0} }, { {0}, {0} }, /*130*/ { {0}, {0} }, { {0x35, 0}, {0xb5, 0} }, - { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ + { {0}, {0} }, { {0x37, 0}, {0xb7, 0} }, /*134*/ { {0x38, 0}, {0xb8, 0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*138*/ + { {0}, {0} }, { {0}, {0} }, /*138*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*13c*/ + { {0}, {0} }, { {0}, {0} }, /*13c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*140*/ + { {0}, {0} }, { {0}, {0} }, /*140*/ { {0}, {0} }, { {0}, {0} }, - { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ + { {0x46, 0}, {0xc6, 0} }, { {0x47, 0}, {0xc7, 0} }, /*144*/ { {0x48, 0}, {0xc8, 0} }, { {0x49, 0}, {0xc9, 0} }, - { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ + { {0}, {0} }, { {0x4b, 0}, {0xcb, 0} }, /*148*/ { {0}, {0} }, { {0x4d, 0}, {0xcd, 0} }, - { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ + { {0}, {0} }, { {0x4f, 0}, {0xcf, 0} }, /*14c*/ { {0x50, 0}, {0xd0, 0} }, { {0x51, 0}, {0xd1, 0} }, - { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ + { {0x52, 0}, {0xd2, 0} }, { {0x53, 0}, {0xd3, 0} }, /*150*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*154*/ + { {0}, {0} }, { {0}, {0} }, /*154*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*158*/ + { {0}, {0} }, { {0}, {0} }, /*158*/ { {0}, {0} }, { {0x54, 0}, {0xd4, 0} }, - { {0x56, 0}, {0xd6, 0} }, { {0x5c, 0}, {0xdc, 0} }, /*15c*/ + { {0x56, 0}, {0xd6, 0} }, { {0x5c, 0}, {0xdc, 0} }, /*15c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*160*/ + { {0}, {0} }, { {0}, {0} }, /*160*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*164*/ + { {0}, {0} }, { {0}, {0} }, /*164*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*168*/ + { {0}, {0} }, { {0}, {0} }, /*168*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*16c*/ + { {0}, {0} }, { {0}, {0} }, /*16c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*170*/ + { {0}, {0} }, { {0}, {0} }, /*170*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*174*/ + { {0}, {0} }, { {0}, {0} }, /*174*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*148*/ + { {0}, {0} }, { {0}, {0} }, /*148*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*17c*/ + { {0}, {0} }, { {0}, {0} }, /*17c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*180*/ + { {0}, {0} }, { {0}, {0} }, /*180*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*184*/ + { {0}, {0} }, { {0}, {0} }, /*184*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*88*/ + { {0}, {0} }, { {0}, {0} }, /*188*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*18c*/ + { {0}, {0} }, { {0}, {0} }, /*18c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*190*/ + { {0}, {0} }, { {0}, {0} }, /*190*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*194*/ + { {0}, {0} }, { {0}, {0} }, /*194*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*198*/ + { {0}, {0} }, { {0}, {0} }, /*198*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*19c*/ + { {0}, {0} }, { {0}, {0} }, /*19c*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a0*/ + { {0}, {0} }, { {0}, {0} }, /*1a0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a4*/ + { {0}, {0} }, { {0}, {0} }, /*1a4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1a8*/ + { {0}, {0} }, { {0}, {0} }, /*1a8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ac*/ + { {0}, {0} }, { {0}, {0} }, /*1ac*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b0*/ + { {0}, {0} }, { {0}, {0} }, /*1b0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b4*/ + { {0}, {0} }, { {0}, {0} }, /*1b4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1b8*/ + { {0}, {0} }, { {0}, {0} }, /*1b8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1bc*/ + { {0}, {0} }, { {0}, {0} }, /*1bc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c0*/ + { {0}, {0} }, { {0}, {0} }, /*1c0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c4*/ + { {0}, {0} }, { {0}, {0} }, /*1c4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1c8*/ + { {0}, {0} }, { {0}, {0} }, /*1c8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1cc*/ + { {0}, {0} }, { {0}, {0} }, /*1cc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d0*/ + { {0}, {0} }, { {0}, {0} }, /*1d0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d4*/ + { {0}, {0} }, { {0}, {0} }, /*1d4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1d8*/ + { {0}, {0} }, { {0}, {0} }, /*1d8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1dc*/ + { {0}, {0} }, { {0}, {0} }, /*1dc*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e0*/ + { {0}, {0} }, { {0}, {0} }, /*1e0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e4*/ + { {0}, {0} }, { {0}, {0} }, /*1e4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1e8*/ + { {0}, {0} }, { {0}, {0} }, /*1e8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1ec*/ + { {0}, {0} }, { {0}, {0} }, /*1ec*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f0*/ + { {0}, {0} }, { {0}, {0} }, /*1f0*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f4*/ + { {0}, {0} }, { {0}, {0} }, /*1f4*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} }, /*1f8*/ + { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, - { {0}, {0} }, { {0}, {0} } /*1fc*/ + { {0}, {0} }, { {0}, {0} } /*1fc*/ // clang-format on }; diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c index f61ce639b..f6f2e5322 100644 --- a/src/machine/m_xt_t1000.c +++ b/src/machine/m_xt_t1000.c @@ -55,7 +55,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2018-2019 Fred N. van Kempen. * Copyright 2018-2019 Miran Grca. @@ -687,8 +687,8 @@ t1000_read_nvram(uint16_t addr, void *priv) tmp = fdc_read(0x03f7, t1000.fdc); tmp = (tmp & 0x80) >> 3; /* Bit 4 is changeline */ - tmp |= (sys->nvr_active & 0xc0); /* Bits 6,7 are r/w mode */ - tmp |= 0x2e; /* Bits 5,3,2,1 always 1 */ + tmp |= (sys->nvr_active & 0xc0); /* Bits 6, 7 are r/w mode */ + tmp |= 0x2e; /* Bits 5, 3, 2, 1 always 1 */ tmp |= (sys->nvr_active & 0x40) >> 6; /* Ready state */ break; } diff --git a/src/machine/m_xt_t1000_vid.c b/src/machine/m_xt_t1000_vid.c index 60fb59082..48c00d3c3 100644 --- a/src/machine/m_xt_t1000_vid.c +++ b/src/machine/m_xt_t1000_vid.c @@ -13,7 +13,7 @@ * * Authors: Fred N. van Kempen, * Miran Grca, - * Sarah Walker, + * Sarah Walker, * * Copyright 2018-2019 Fred N. van Kempen. * Copyright 2018-2019 Miran Grca. diff --git a/src/machine/m_xt_zenith.c b/src/machine/m_xt_zenith.c index 9e05f3077..e5cebe552 100644 --- a/src/machine/m_xt_zenith.c +++ b/src/machine/m_xt_zenith.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * EngiNerd diff --git a/src/machine/machine.c b/src/machine/machine.c index 6b496b06a..f7970d4f1 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 2807c1060..c2db92654 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -13,7 +13,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/mem/CMakeLists.txt b/src/mem/CMakeLists.txt index 1739d4807..6aad80544 100644 --- a/src/mem/CMakeLists.txt +++ b/src/mem/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(mem OBJECT catalyst_flash.c i2c_eeprom.c intel_flash.c mem.c rom.c diff --git a/src/mem/catalyst_flash.c b/src/mem/catalyst_flash.c index 043a24b37..5e473f540 100644 --- a/src/mem/catalyst_flash.c +++ b/src/mem/catalyst_flash.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/mem/intel_flash.c b/src/mem/intel_flash.c index 18b8a4b3d..f06b2426d 100644 --- a/src/mem/intel_flash.c +++ b/src/mem/intel_flash.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/mem/mem.c b/src/mem/mem.c index 4d5a5238b..1af83c844 100644 --- a/src/mem/mem.c +++ b/src/mem/mem.c @@ -8,7 +8,7 @@ * * Memory handling and MMU. * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/mem/rom.c b/src/mem/rom.c index 6c964f2c3..25ca1db71 100644 --- a/src/mem/rom.c +++ b/src/mem/rom.c @@ -14,7 +14,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/mem/sst_flash.c b/src/mem/sst_flash.c index 5ad110fa5..a58aa6895 100644 --- a/src/mem/sst_flash.c +++ b/src/mem/sst_flash.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, * diff --git a/src/minitrace/minitrace.c b/src/minitrace/minitrace.c index df68e7d79..0b2208605 100644 --- a/src/minitrace/minitrace.c +++ b/src/minitrace/minitrace.c @@ -1,6 +1,6 @@ // minitrace // Copyright 2014 by Henrik Rydgård -// http://www.github.com/hrydgard/minitrace +// https://www.github.com/hrydgard/minitrace // Released under the MIT license. // See minitrace.h for basic documentation. @@ -48,20 +48,20 @@ // Ugh, this struct is already pretty heavy. // Will probably need to move arguments to a second buffer to support more than one. typedef struct raw_event { - const char *name; - const char *cat; - void *id; - int64_t ts; - uint32_t pid; - uint32_t tid; - char ph; - mtr_arg_type arg_type; - const char *arg_name; - union { - const char *a_str; - int a_int; - double a_double; - }; + const char *name; + const char *cat; + void *id; + int64_t ts; + uint32_t pid; + uint32_t tid; + char ph; + mtr_arg_type arg_type; + const char *arg_name; + union { + const char *a_str; + int a_int; + double a_double; + }; } raw_event_t; static raw_event_t *event_buffer; @@ -74,7 +74,7 @@ static int events_in_progress = 0; static int64_t time_offset; static int first_line = 1; static FILE *f; -static __thread int cur_thread_id; // Thread local storage +static __thread int cur_thread_id; // Thread local storage static int cur_process_id; static pthread_mutex_t mutex; static pthread_mutex_t event_mutex; @@ -89,44 +89,44 @@ void mtr_flush_with_state(int); // Tiny portability layer. // Exposes: -// get_cur_thread_id() -// get_cur_process_id() -// mtr_time_s() -// pthread basics +// get_cur_thread_id() +// get_cur_process_id() +// mtr_time_s() +// pthread basics #ifdef _WIN32 static int get_cur_thread_id(void) { - return (int)GetCurrentThreadId(); + return (int)GetCurrentThreadId(); } static int get_cur_process_id(void) { - return (int)GetCurrentProcessId(); + return (int)GetCurrentProcessId(); } static uint64_t _frequency = 0; static uint64_t _starttime = 0; double mtr_time_s(void) { - if (_frequency == 0) { - QueryPerformanceFrequency((LARGE_INTEGER*)&_frequency); - QueryPerformanceCounter((LARGE_INTEGER*)&_starttime); - } - __int64 time; - QueryPerformanceCounter((LARGE_INTEGER*)&time); - return ((double) (time - _starttime) / (double) _frequency); + if (_frequency == 0) { + QueryPerformanceFrequency((LARGE_INTEGER*)&_frequency); + QueryPerformanceCounter((LARGE_INTEGER*)&_starttime); + } + __int64 time; + QueryPerformanceCounter((LARGE_INTEGER*)&time); + return ((double) (time - _starttime) / (double) _frequency); } // Ctrl+C handling for Windows console apps static BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) { - if (atomic_load(&is_tracing) && fdwCtrlType == CTRL_C_EVENT) { - printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); - mtr_flush(); - mtr_shutdown(); - } - ExitProcess(1); + if (atomic_load(&is_tracing) && fdwCtrlType == CTRL_C_EVENT) { + printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); + mtr_flush(); + mtr_shutdown(); + } + ExitProcess(1); } void mtr_register_sigint_handler(void) { - // For console apps: - SetConsoleCtrlHandler(&CtrlHandler, TRUE); + // For console apps: + SetConsoleCtrlHandler(&CtrlHandler, TRUE); } HANDLE thread_handle; @@ -155,10 +155,10 @@ static void join_flushing_thread(void) { #else static inline int get_cur_thread_id(void) { - return (int)(intptr_t)pthread_self(); + return (int)(intptr_t)pthread_self(); } static inline int get_cur_process_id(void) { - return (int)getpid(); + return (int)getpid(); } static pthread_t thread_handle = 0; @@ -188,110 +188,110 @@ static void join_flushing_thread(void) { #if defined(BLACKBERRY) double mtr_time_s() { - struct timespec time; - clock_gettime(CLOCK_MONOTONIC, &time); // Linux must use CLOCK_MONOTONIC_RAW due to time warps - return time.tv_sec + time.tv_nsec / 1.0e9; + struct timespec time; + clock_gettime(CLOCK_MONOTONIC, &time); // Linux must use CLOCK_MONOTONIC_RAW due to time warps + return time.tv_sec + time.tv_nsec / 1.0e9; } #else double mtr_time_s(void) { - static time_t start; - struct timeval tv; - gettimeofday(&tv, NULL); - if (start == 0) { - start = tv.tv_sec; - } - tv.tv_sec -= start; - return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; + static time_t start; + struct timeval tv; + gettimeofday(&tv, NULL); + if (start == 0) { + start = tv.tv_sec; + } + tv.tv_sec -= start; + return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; } -#endif // !BLACKBERRY +#endif // !BLACKBERRY static void termination_handler(int signum) ATTR_NORETURN; static void termination_handler(int signum) { - (void) signum; - if (is_tracing) { - printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); - mtr_flush(); - fwrite("\n]}\n", 1, 4, f); - fclose(f); - } - exit(1); + (void) signum; + if (is_tracing) { + printf("Ctrl-C detected! Flushing trace and shutting down.\n\n"); + mtr_flush(); + fwrite("\n]}\n", 1, 4, f); + fclose(f); + } + exit(1); } void mtr_register_sigint_handler(void) { #ifndef MTR_ENABLED - return; + return; #endif - // Avoid altering set-to-be-ignored handlers while registering. - if (signal(SIGINT, &termination_handler) == SIG_IGN) - signal(SIGINT, SIG_IGN); + // Avoid altering set-to-be-ignored handlers while registering. + if (signal(SIGINT, &termination_handler) == SIG_IGN) + signal(SIGINT, SIG_IGN); } #endif void mtr_init_from_stream(void *stream) { #ifndef MTR_ENABLED - return; + return; #endif - event_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); - flush_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); - event_count = 0; - f = (FILE *)stream; - const char *header = "{\"traceEvents\":[\n"; - fwrite(header, 1, strlen(header), f); - time_offset = (uint64_t)(mtr_time_s() * 1000000); - first_line = 1; - pthread_mutex_init(&mutex, 0); - pthread_mutex_init(&event_mutex, 0); + event_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); + flush_buffer = (raw_event_t *)malloc(INTERNAL_MINITRACE_BUFFER_SIZE * sizeof(raw_event_t)); + event_count = 0; + f = (FILE *)stream; + const char *header = "{\"traceEvents\":[\n"; + fwrite(header, 1, strlen(header), f); + time_offset = (uint64_t)(mtr_time_s() * 1000000); + first_line = 1; + pthread_mutex_init(&mutex, 0); + pthread_mutex_init(&event_mutex, 0); } void mtr_init(const char *json_file) { #ifndef MTR_ENABLED - return; + return; #endif - mtr_init_from_stream(fopen(json_file, "wb")); + mtr_init_from_stream(fopen(json_file, "wb")); } void mtr_shutdown(void) { - int i; + int i; #ifndef MTR_ENABLED - return; + return; #endif - mtr_flush_with_state(TRUE); + mtr_flush_with_state(TRUE); - fwrite("\n]}\n", 1, 4, f); - fclose(f); - pthread_mutex_destroy(&mutex); - pthread_mutex_destroy(&event_mutex); - f = 0; - free(event_buffer); - event_buffer = 0; - for (i = 0; i < STRING_POOL_SIZE; i++) { - if (str_pool[i]) { - free(str_pool[i]); - str_pool[i] = 0; - } - } + fwrite("\n]}\n", 1, 4, f); + fclose(f); + pthread_mutex_destroy(&mutex); + pthread_mutex_destroy(&event_mutex); + f = 0; + free(event_buffer); + event_buffer = 0; + for (i = 0; i < STRING_POOL_SIZE; i++) { + if (str_pool[i]) { + free(str_pool[i]); + str_pool[i] = 0; + } + } } const char *mtr_pool_string(const char *str) { - int i; - for (i = 0; i < STRING_POOL_SIZE; i++) { - if (!str_pool[i]) { - str_pool[i] = (char*)malloc(strlen(str) + 1); - strcpy(str_pool[i], str); - return str_pool[i]; - } else { - if (!strcmp(str, str_pool[i])) - return str_pool[i]; - } - } - return "string pool full"; + int i; + for (i = 0; i < STRING_POOL_SIZE; i++) { + if (!str_pool[i]) { + str_pool[i] = (char*)malloc(strlen(str) + 1); + strcpy(str_pool[i], str); + return str_pool[i]; + } else { + if (!strcmp(str, str_pool[i])) + return str_pool[i]; + } + } + return "string pool full"; } void mtr_start(void) { #ifndef MTR_ENABLED - return; + return; #endif #ifdef _WIN32 pthread_cond_init(&buffer_not_full_cond); @@ -301,19 +301,19 @@ void mtr_start(void) { pthread_cond_init(&buffer_full_cond, NULL); #endif atomic_store(&is_tracing, TRUE); - init_flushing_thread(); + init_flushing_thread(); } void mtr_stop(void) { #ifndef MTR_ENABLED - return; + return; #endif - atomic_store(&is_tracing, FALSE); - atomic_store(&stop_flushing_requested, TRUE); - pthread_cond_signal(&buffer_not_full_cond); - pthread_cond_signal(&buffer_full_cond); - join_flushing_thread(); - atomic_store(&stop_flushing_requested, FALSE); + atomic_store(&is_tracing, FALSE); + atomic_store(&stop_flushing_requested, TRUE); + pthread_cond_signal(&buffer_not_full_cond); + pthread_cond_signal(&buffer_full_cond); + join_flushing_thread(); + atomic_store(&stop_flushing_requested, FALSE); } // TODO: fwrite more than one line at a time. @@ -323,247 +323,248 @@ void mtr_stop(void) { // running at any point of time void mtr_flush_with_state(int is_last) { #ifndef MTR_ENABLED - return; + return; #endif - int i = 0; - char linebuf[1024]; - char arg_buf[1024]; - char id_buf[256]; - int event_count_copy = 0; - int events_in_progress_copy = 1; - raw_event_t *event_buffer_tmp = NULL; + int i = 0; + char linebuf[1024]; + char arg_buf[1024]; + char id_buf[256]; + int event_count_copy = 0; + int events_in_progress_copy = 1; + raw_event_t *event_buffer_tmp = NULL; - // small critical section to swap buffers - // - no any new events can be spawn while - // swapping since they tied to the same mutex - // - checks for any flushing in process - pthread_mutex_lock(&mutex); - // if not flushing already - if (is_flushing) { - pthread_mutex_unlock(&mutex); - return; - } - is_flushing = TRUE; - if(!is_last) { - while(event_count < INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { - pthread_cond_wait(&buffer_full_cond, &mutex); - } - } - event_count_copy = event_count; - event_buffer_tmp = flush_buffer; - flush_buffer = event_buffer; - event_buffer = event_buffer_tmp; - event_count = 0; - // waiting for any unfinished events before swap - while (events_in_progress_copy != 0) { - pthread_mutex_lock(&event_mutex); - events_in_progress_copy = events_in_progress; - pthread_mutex_unlock(&event_mutex); - } - pthread_mutex_unlock(&mutex); - pthread_cond_signal(&buffer_not_full_cond); + // small critical section to swap buffers + // - no any new events can be spawn while + // swapping since they tied to the same mutex + // - checks for any flushing in process + pthread_mutex_lock(&mutex); + // if not flushing already + if (is_flushing) { + pthread_mutex_unlock(&mutex); + return; + } + is_flushing = TRUE; + if(!is_last) { + while(event_count < INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { + pthread_cond_wait(&buffer_full_cond, &mutex); + } + } + event_count_copy = event_count; + event_buffer_tmp = flush_buffer; + flush_buffer = event_buffer; + event_buffer = event_buffer_tmp; + event_count = 0; + // waiting for any unfinished events before swap + while (events_in_progress_copy != 0) { + pthread_mutex_lock(&event_mutex); + events_in_progress_copy = events_in_progress; + pthread_mutex_unlock(&event_mutex); + } + pthread_mutex_unlock(&mutex); + pthread_cond_signal(&buffer_not_full_cond); - for (i = 0; i < event_count_copy; i++) { - raw_event_t *raw = &flush_buffer[i]; - int len; - switch (raw->arg_type) { - case MTR_ARG_TYPE_INT: - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":%i", raw->arg_name, raw->a_int); - break; - case MTR_ARG_TYPE_STRING_CONST: - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); - break; - case MTR_ARG_TYPE_STRING_COPY: - if (strlen(raw->a_str) > 700) { - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%.*s\"", raw->arg_name, 700, raw->a_str); - } else { - snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); - } - break; - case MTR_ARG_TYPE_NONE: - arg_buf[0] = '\0'; - break; - } - if (raw->id) { - switch (raw->ph) { - case 'S': - case 'T': - case 'F': - // TODO: Support full 64-bit pointers - snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"id\":\"0x%08x\"", (uint32_t)(uintptr_t)raw->id); - break; - case 'X': - snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"dur\":%i", (int)raw->a_double); - break; - } - } else { - id_buf[0] = 0; - } - const char *cat = raw->cat; + for (i = 0; i < event_count_copy; i++) { + raw_event_t *raw = &flush_buffer[i]; + int len; + switch (raw->arg_type) { + case MTR_ARG_TYPE_INT: + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":%i", raw->arg_name, raw->a_int); + break; + case MTR_ARG_TYPE_STRING_CONST: + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); + break; + case MTR_ARG_TYPE_STRING_COPY: + if (strlen(raw->a_str) > 700) { + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%.*s\"", raw->arg_name, 700, raw->a_str); + } else { + snprintf(arg_buf, ARRAY_SIZE(arg_buf), "\"%s\":\"%s\"", raw->arg_name, raw->a_str); + } + break; + case MTR_ARG_TYPE_NONE: + arg_buf[0] = '\0'; + break; + } + if (raw->id) { + switch (raw->ph) { + case 'S': + case 'T': + case 'F': + // TODO: Support full 64-bit pointers + snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"id\":\"0x%08x\"", (uint32_t)(uintptr_t)raw->id); + break; + case 'X': + snprintf(id_buf, ARRAY_SIZE(id_buf), ",\"dur\":%i", (int)raw->a_double); + break; + } + } else { + id_buf[0] = 0; + } + const char *cat = raw->cat; #ifdef _WIN32 - // On Windows, we often end up with backslashes in category. - char temp[256]; - { - int len = (int)strlen(cat); - int i; - if (len > 255) len = 255; - for (i = 0; i < len; i++) { - temp[i] = cat[i] == '\\' ? '/' : cat[i]; - } - temp[len] = 0; - cat = temp; - } + // On Windows, we often end up with backslashes in category. + char temp[256]; + { + int len = (int)strlen(cat); + int i; + if (len > 255) len = 255; + for (i = 0; i < len; i++) { + temp[i] = cat[i] == '\\' ? '/' : cat[i]; + } + temp[len] = 0; + cat = temp; + } #endif - len = snprintf(linebuf, ARRAY_SIZE(linebuf), "%s{\"cat\":\"%s\",\"pid\":%i,\"tid\":%i,\"ts\":%" PRId64 ",\"ph\":\"%c\",\"name\":\"%s\",\"args\":{%s}%s}", - first_line ? "" : ",\n", - cat, raw->pid, raw->tid, raw->ts - time_offset, raw->ph, raw->name, arg_buf, id_buf); - fwrite(linebuf, 1, len, f); - first_line = 0; + len = snprintf(linebuf, ARRAY_SIZE(linebuf), "%s{\"cat\":\"%s\",\"pid\":%i,\"tid\":%i,\"ts\":%" PRId64 ",\"ph\":\"%c\",\"name\":\"%s\",\"args\":{%s}%s}", + first_line ? "" : ",\n", + cat, raw->pid, raw->tid, raw->ts - time_offset, raw->ph, raw->name, arg_buf, id_buf); + fwrite(linebuf, 1, len, f); + first_line = 0; - if (raw->arg_type == MTR_ARG_TYPE_STRING_COPY) { - free((void*)raw->a_str); - } - #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME - free(raw->name); - free(raw->cat); - #endif - } + if (raw->arg_type == MTR_ARG_TYPE_STRING_COPY) { + free((void*)raw->a_str); + } + #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME + free(raw->name); + free(raw->cat); + #endif + } - pthread_mutex_lock(&mutex); - is_flushing = is_last; - pthread_mutex_unlock(&mutex); + pthread_mutex_lock(&mutex); + is_flushing = is_last; + pthread_mutex_unlock(&mutex); } void mtr_flush(void) { - mtr_flush_with_state(FALSE); + mtr_flush_with_state(FALSE); } void internal_mtr_raw_event(const char *category, const char *name, char ph, void *id) { #ifndef MTR_ENABLED - return; + return; #endif - if (!atomic_load(&is_tracing)) { - return; - } - pthread_mutex_lock(&mutex); - while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { - pthread_cond_wait(&buffer_not_full_cond, &mutex); - } - raw_event_t *ev = &event_buffer[event_count]; - ++event_count; - pthread_mutex_lock(&event_mutex); - ++events_in_progress; - pthread_mutex_unlock(&event_mutex); - int local_event_count = event_count; - pthread_mutex_unlock(&mutex); - if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { - pthread_cond_signal(&buffer_full_cond); - } + if (!atomic_load(&is_tracing)) { + return; + } + pthread_mutex_lock(&mutex); + while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { + pthread_cond_wait(&buffer_not_full_cond, &mutex); - double ts = mtr_time_s(); + } + raw_event_t *ev = &event_buffer[event_count]; + ++event_count; + pthread_mutex_lock(&event_mutex); + ++events_in_progress; + pthread_mutex_unlock(&event_mutex); + int local_event_count = event_count; + pthread_mutex_unlock(&mutex); + if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { + pthread_cond_signal(&buffer_full_cond); + } - if (!cur_thread_id) { - cur_thread_id = get_cur_thread_id(); - } - if (!cur_process_id) { - cur_process_id = get_cur_process_id(); - } + double ts = mtr_time_s(); + + if (!cur_thread_id) { + cur_thread_id = get_cur_thread_id(); + } + if (!cur_process_id) { + cur_process_id = get_cur_process_id(); + } #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME - const size_t category_len = strlen(category); - ev->cat = malloc(category_len + 1); - strcpy(ev->cat, category); + const size_t category_len = strlen(category); + ev->cat = malloc(category_len + 1); + strcpy(ev->cat, category); - const size_t name_len = strlen(name); - ev->name = malloc(name_len + 1); - strcpy(ev->name, name); + const size_t name_len = strlen(name); + ev->name = malloc(name_len + 1); + strcpy(ev->name, name); #else - ev->cat = category; - ev->name = name; + ev->cat = category; + ev->name = name; #endif - ev->id = id; - ev->ph = ph; - if (ev->ph == 'X') { - double x; - memcpy(&x, id, sizeof(double)); - ev->ts = (int64_t)(x * 1000000); - ev->a_double = (ts - x) * 1000000; - } else { - ev->ts = (int64_t)(ts * 1000000); - } - ev->tid = cur_thread_id; - ev->pid = cur_process_id; - ev->arg_type = MTR_ARG_TYPE_NONE; + ev->id = id; + ev->ph = ph; + if (ev->ph == 'X') { + double x; + memcpy(&x, id, sizeof(double)); + ev->ts = (int64_t)(x * 1000000); + ev->a_double = (ts - x) * 1000000; + } else { + ev->ts = (int64_t)(ts * 1000000); + } + ev->tid = cur_thread_id; + ev->pid = cur_process_id; + ev->arg_type = MTR_ARG_TYPE_NONE; - pthread_mutex_lock(&event_mutex); - --events_in_progress; - pthread_mutex_unlock(&event_mutex); + pthread_mutex_lock(&event_mutex); + --events_in_progress; + pthread_mutex_unlock(&event_mutex); } void internal_mtr_raw_event_arg(const char *category, const char *name, char ph, void *id, mtr_arg_type arg_type, const char *arg_name, void *arg_value) { #ifndef MTR_ENABLED - return; + return; #endif - if (!atomic_load(&is_tracing)) { - return; - } - pthread_mutex_lock(&mutex); - while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { - pthread_cond_wait(&buffer_not_full_cond, &mutex); - } - raw_event_t *ev = &event_buffer[event_count]; - ++event_count; - pthread_mutex_lock(&event_mutex); - ++events_in_progress; - pthread_mutex_unlock(&event_mutex); - int local_event_count = event_count; - pthread_mutex_unlock(&mutex); - if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { - pthread_cond_signal(&buffer_full_cond); - } + if (!atomic_load(&is_tracing)) { + return; + } + pthread_mutex_lock(&mutex); + while(event_count >= INTERNAL_MINITRACE_BUFFER_SIZE && atomic_load(&is_tracing)) { + pthread_cond_wait(&buffer_not_full_cond, &mutex); + } + raw_event_t *ev = &event_buffer[event_count]; + ++event_count; + pthread_mutex_lock(&event_mutex); + ++events_in_progress; + pthread_mutex_unlock(&event_mutex); + int local_event_count = event_count; + pthread_mutex_unlock(&mutex); + if(local_event_count >= INTERNAL_MINITRACE_BUFFER_SIZE) { + pthread_cond_signal(&buffer_full_cond); + } - if (!cur_thread_id) { - cur_thread_id = get_cur_thread_id(); - } - if (!cur_process_id) { - cur_process_id = get_cur_process_id(); - } - double ts = mtr_time_s(); + if (!cur_thread_id) { + cur_thread_id = get_cur_thread_id(); + } + if (!cur_process_id) { + cur_process_id = get_cur_process_id(); + } + double ts = mtr_time_s(); #ifdef MTR_COPY_EVENT_CATEGORY_AND_NAME - const size_t category_len = strlen(category); - ev->cat = malloc(category_len + 1); - strcpy(ev->cat, category); + const size_t category_len = strlen(category); + ev->cat = malloc(category_len + 1); + strcpy(ev->cat, category); - const size_t name_len = strlen(name); - ev->name = malloc(name_len + 1); - strcpy(ev->name, name); + const size_t name_len = strlen(name); + ev->name = malloc(name_len + 1); + strcpy(ev->name, name); #else - ev->cat = category; - ev->name = name; + ev->cat = category; + ev->name = name; #endif - ev->id = id; - ev->ts = (int64_t)(ts * 1000000); - ev->ph = ph; - ev->tid = cur_thread_id; - ev->pid = cur_process_id; - ev->arg_type = arg_type; - ev->arg_name = arg_name; - switch (arg_type) { - case MTR_ARG_TYPE_INT: ev->a_int = (int)(uintptr_t)arg_value; break; - case MTR_ARG_TYPE_STRING_CONST: ev->a_str = (const char*)arg_value; break; - case MTR_ARG_TYPE_STRING_COPY: ev->a_str = strdup((const char*)arg_value); break; - case MTR_ARG_TYPE_NONE: break; - } + ev->id = id; + ev->ts = (int64_t)(ts * 1000000); + ev->ph = ph; + ev->tid = cur_thread_id; + ev->pid = cur_process_id; + ev->arg_type = arg_type; + ev->arg_name = arg_name; + switch (arg_type) { + case MTR_ARG_TYPE_INT: ev->a_int = (int)(uintptr_t)arg_value; break; + case MTR_ARG_TYPE_STRING_CONST: ev->a_str = (const char*)arg_value; break; + case MTR_ARG_TYPE_STRING_COPY: ev->a_str = strdup((const char*)arg_value); break; + case MTR_ARG_TYPE_NONE: break; + } - pthread_mutex_lock(&event_mutex); - --events_in_progress; - pthread_mutex_unlock(&event_mutex); + pthread_mutex_lock(&event_mutex); + --events_in_progress; + pthread_mutex_unlock(&event_mutex); } diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index dc03cb417..e14f979d3 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(net OBJECT network.c net_pcap.c net_slirp.c net_dp8390.c net_3c501.c diff --git a/src/network/net_3c501.c b/src/network/net_3c501.c index 19ad587c2..736edb85b 100644 --- a/src/network/net_3c501.c +++ b/src/network/net_3c501.c @@ -1,22 +1,23 @@ /* - * 86Box An emulator of (mostly) x86-based PC systems and devices, - * using the ISA, EISA, VLB, MCA, and PCI system buses, - * roughly spanning the era between 1981 and 1995. + * 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 Project. + * This file is part of the 86Box distribution. * - * Implementation of the following network controller: - * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). + * Implementation of the following network controller: + * - 3Com Etherlink 3c500/3c501 (ISA 8-bit). * * * - * Based on @(#)Dev3C501.cpp Oracle (VirtualBox) + * Based on @(#)Dev3C501.cpp Oracle (VirtualBox) * - * Authors: TheCollector1995, - * Oracle + * Authors: TheCollector1995, + * Oracle * - * Copyright 2022 TheCollector1995. - * Portions Copyright (C) 2022 Oracle and/or its affilitates. + * Copyright 2022 TheCollector1995. + * Portions Copyright (C) 2022 Oracle and/or its affilitates. * * 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 diff --git a/src/network/net_3c503.c b/src/network/net_3c503.c index 07dcc1a43..9e4f9c12b 100644 --- a/src/network/net_3c503.c +++ b/src/network/net_3c503.c @@ -1,9 +1,10 @@ /* - * 86Box An emulator of (mostly) x86-based PC systems and devices, - * using the ISA, EISA, VLB, MCA, and PCI system buses, - * roughly spanning the era between 1981 and 1995. + * 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 Project. + * This file is part of the 86Box distribution. * * Implementation of the following network controllers: * - 3Com Etherlink II 3c503 (ISA 8-bit). diff --git a/src/network/net_dp8390.c b/src/network/net_dp8390.c index 255749e4e..3b54fdb9d 100644 --- a/src/network/net_dp8390.c +++ b/src/network/net_dp8390.c @@ -44,11 +44,11 @@ dp8390_log(const char *fmt, ...) { va_list ap; - // if (dp8390_do_log >= lvl) { +// if (dp8390_do_log >= lvl) { va_start(ap, fmt); pclog_ex(fmt, ap); va_end(ap); - // } +// } } #else # define dp8390_log(lvl, fmt, ...) diff --git a/src/network/net_ne2000.c b/src/network/net_ne2000.c index 66681206b..9a598538d 100644 --- a/src/network/net_ne2000.c +++ b/src/network/net_ne2000.c @@ -22,7 +22,7 @@ * Miran Grca, * Peter Grehan, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Portions Copyright (C) 2002 MandrakeSoft S.A. * diff --git a/src/network/pcap_if.c b/src/network/pcap_if.c index 69110cb34..56fa3eaf1 100644 --- a/src/network/pcap_if.c +++ b/src/network/pcap_if.c @@ -12,7 +12,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/network/slirp/CMakeLists.txt b/src/network/slirp/CMakeLists.txt index a2c82e642..29da352e9 100644 --- a/src/network/slirp/CMakeLists.txt +++ b/src/network/slirp/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(slirp STATIC arp_table.c bootp.c cksum.c dnssearch.c if.c diff --git a/src/nvr.c b/src/nvr.c index dccc6be40..4b073c48f 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -12,7 +12,7 @@ * David Hrdlička, * * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/nvr_at.c b/src/nvr_at.c index a881444c2..bd0bbe34e 100644 --- a/src/nvr_at.c +++ b/src/nvr_at.c @@ -194,7 +194,7 @@ * Authors: Fred N. van Kempen, * Miran Grca, * Mahod, - * Sarah Walker, + * Sarah Walker, * * Copyright 2017-2020 Fred N. van Kempen. * Copyright 2016-2020 Miran Grca. diff --git a/src/nvr_ps2.c b/src/nvr_ps2.c index b137cb81b..1ab97d8a3 100644 --- a/src/nvr_ps2.c +++ b/src/nvr_ps2.c @@ -11,9 +11,9 @@ * * * Authors: Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2008-2018 Sarah Walker. * * This program is free software; you can redistribute it and/or modify diff --git a/src/pci.c b/src/pci.c index 7b4464407..f9155e2e3 100644 --- a/src/pci.c +++ b/src/pci.c @@ -12,7 +12,7 @@ * * Authors: Miran Grca, * Fred N. van Kempen, - * Sarah Walker, + * Sarah Walker, * * Copyright 2016-2020 Miran Grca. * Copyright 2017-2020 Fred N. van Kempen. diff --git a/src/printer/CMakeLists.txt b/src/printer/CMakeLists.txt index dd07121df..ef7b1d5ec 100644 --- a/src/printer/CMakeLists.txt +++ b/src/printer/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(print OBJECT png.c prt_cpmap.c prt_escp.c prt_text.c prt_ps.c) diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c index e7c9e0442..1cca57da0 100644 --- a/src/printer/prt_escp.c +++ b/src/printer/prt_escp.c @@ -13,8 +13,8 @@ * * Based on code by Frederic Weymann (originally for DosBox.) * - * Copyright 2018,2019 Michael Drüing. - * Copyright 2019,2019 Fred N. van Kempen. + * Copyright 2018-2019 Michael Drüing. + * Copyright 2019 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/printer/prt_text.c b/src/printer/prt_text.c index b67d859b9..506261ccf 100644 --- a/src/printer/prt_text.c +++ b/src/printer/prt_text.c @@ -17,7 +17,7 @@ * * Authors: Fred N. van Kempen, * - * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018-2019 Fred N. van Kempen. * * Redistribution and use in source and binary forms, with * or without modification, are permitted provided that the diff --git a/src/qt/evdev_mouse.cpp b/src/qt/evdev_mouse.cpp index c3d926285..4b487e65d 100644 --- a/src/qt/evdev_mouse.cpp +++ b/src/qt/evdev_mouse.cpp @@ -1,18 +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. * - * Linux/FreeBSD libevdev mouse input module. + * Linux/FreeBSD libevdev mouse input module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "evdev_mouse.hpp" #include diff --git a/src/qt/qt.c b/src/qt/qt.c index f1c6eee3f..c2a5396da 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -1,16 +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. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ /* * C functionality for Qt platform, where the C equivalent is not easily diff --git a/src/qt/qt_cdrom.c b/src/qt/qt_cdrom.c index d0ab0113e..6e28966b0 100644 --- a/src/qt/qt_cdrom.c +++ b/src/qt/qt_cdrom.c @@ -1,21 +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. + * 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. * - * Handle the platform-side of CDROM/ZIP/MO drives. + * Handle the platform-side of CDROM/ZIP/MO drives. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. */ #include diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 81f8b8493..2fecdc543 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -1,20 +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. + * 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. * - * Device configuration UI code. + * Device configuration UI code. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 */ #include "qt_deviceconfig.hpp" #include "ui_qt_deviceconfig.h" diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index 969d5ff29..9bdb6cd7f 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -1,20 +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. + * 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. * - * File field widget. + * File field widget. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 */ #include "qt_filefield.hpp" #include "ui_qt_filefield.h" diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index eb8b3fd1a..943b13dc0 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -1,20 +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. + * 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. * - * Hard disk dialog code. + * Hard disk dialog code. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 */ #include "qt_harddiskdialog.hpp" #include "ui_qt_harddiskdialog.h" diff --git a/src/qt/qt_harddrive_common.cpp b/src/qt/qt_harddrive_common.cpp index 2b415f6f4..55b7fa820 100644 --- a/src/qt/qt_harddrive_common.cpp +++ b/src/qt/qt_harddrive_common.cpp @@ -1,18 +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. * - * Common storage devices module. + * Common storage devices module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_harddrive_common.hpp" diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index f158e7d62..647827e85 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Hardware renderer module. + * Hardware renderer module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include "qt_hardwarerenderer.hpp" #include diff --git a/src/qt/qt_joystickconfiguration.cpp b/src/qt/qt_joystickconfiguration.cpp index a9c53c07e..e91cb9086 100644 --- a/src/qt/qt_joystickconfiguration.cpp +++ b/src/qt/qt_joystickconfiguration.cpp @@ -1,18 +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. * - * Joystick configuration UI module. + * Joystick configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_joystickconfiguration.hpp" #include "ui_qt_joystickconfiguration.h" diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index d095eadb7..29b394114 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -1,20 +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. + * 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. * - * Joystick configuration UI module. + * Joystick configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 */ #include "qt_machinestatus.hpp" diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 1ae545227..e2d4c6c90 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -1,21 +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. + * 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. * - * Main entry point module + * Main entry point module * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include #include diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 24c37d107..f0e8fdc34 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1,24 +1,24 @@ /* - * 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. * - * Main window module. + * Main window module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * dob205 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen - * Copyright 2022 dob205 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen + * Copyright 2022 dob205 */ #include diff --git a/src/qt/qt_mediahistorymanager.cpp b/src/qt/qt_mediahistorymanager.cpp index 5564afd46..b895b46aa 100644 --- a/src/qt/qt_mediahistorymanager.cpp +++ b/src/qt/qt_mediahistorymanager.cpp @@ -1,18 +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. * - * Media history management module + * Media history management module * * * - * Authors: cold-brewed + * Authors: cold-brewed * - * Copyright 2022 The 86Box development team + * Copyright 2022 The 86Box development team */ #include diff --git a/src/qt/qt_mediahistorymanager.hpp b/src/qt/qt_mediahistorymanager.hpp index 507cbdf7f..f1942b81c 100644 --- a/src/qt/qt_mediahistorymanager.hpp +++ b/src/qt/qt_mediahistorymanager.hpp @@ -1,18 +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. * - * Header for the media history management module + * Header for the media history management module * * * - * Authors: cold-brewed + * Authors: cold-brewed * - * Copyright 2022 The 86Box development team + * Copyright 2022 The 86Box development team */ #ifndef QT_MEDIAHISTORYMANAGER_HPP diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index f6f091bdc..e898ea9d9 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Media menu UI module. + * Media menu UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include "qt_progsettings.hpp" #include "qt_machinestatus.hpp" diff --git a/src/qt/qt_models_common.cpp b/src/qt/qt_models_common.cpp index 0e9856a50..ed6aeaa7d 100644 --- a/src/qt/qt_models_common.cpp +++ b/src/qt/qt_models_common.cpp @@ -1,18 +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. * - * Common storage devices module. + * Common storage devices module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_models_common.hpp" diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index cbb021963..479b6711f 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Common storage devices module. + * Common storage devices module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2022 Cacodemon345 - * Copyright 2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 + * Copyright 2022 Teemu Korhonen */ #include "qt_newfloppydialog.hpp" #include "ui_qt_newfloppydialog.h" diff --git a/src/qt/qt_opengloptions.cpp b/src/qt/qt_opengloptions.cpp index f90ba37c0..58030b467 100644 --- a/src/qt/qt_opengloptions.cpp +++ b/src/qt/qt_opengloptions.cpp @@ -1,17 +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. * - * OpenGL renderer options for Qt + * OpenGL renderer options for Qt * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_opengloptions.hpp b/src/qt/qt_opengloptions.hpp index b88cf4b07..64f761670 100644 --- a/src/qt/qt_opengloptions.hpp +++ b/src/qt/qt_opengloptions.hpp @@ -1,17 +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. * - * Header for OpenGL renderer options + * Header for OpenGL renderer options * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #ifndef QT_OPENGLOPTIONS_HPP diff --git a/src/qt/qt_opengloptionsdialog.cpp b/src/qt/qt_opengloptionsdialog.cpp index c87989161..acb2ce9f2 100644 --- a/src/qt/qt_opengloptionsdialog.cpp +++ b/src/qt/qt_opengloptionsdialog.cpp @@ -1,17 +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. * - * OpenGL renderer options dialog for Qt + * OpenGL renderer options dialog for Qt * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_opengloptionsdialog.hpp b/src/qt/qt_opengloptionsdialog.hpp index 6b1c673bd..f34d74d75 100644 --- a/src/qt/qt_opengloptionsdialog.hpp +++ b/src/qt/qt_opengloptionsdialog.hpp @@ -1,17 +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. * - * Header for OpenGL renderer options dialog + * Header for OpenGL renderer options dialog * - * Authors: - * Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * Copyright 2022 Teemu Korhonen */ #ifndef QT_OPENGLOPTIONSDIALOG_H diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index a2f1ecad0..60aa998a9 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -1,17 +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. * - * OpenGL renderer for Qt + * OpenGL renderer for Qt * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_openglrenderer.hpp b/src/qt/qt_openglrenderer.hpp index c303ca614..27822600c 100644 --- a/src/qt/qt_openglrenderer.hpp +++ b/src/qt/qt_openglrenderer.hpp @@ -1,17 +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. * - * Header file for OpenGL renderer + * Header file for OpenGL renderer * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #ifndef QT_OPENGLRENDERER_HPP diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 0fe611cbe..f1d56d061 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -1,21 +1,22 @@ /* - * 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. * - * Common platform functions. + * Common platform functions. * * - * Authors: Joakim L. Gilje + * + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 3ee998002..4dda901d7 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -1,18 +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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include diff --git a/src/qt/qt_renderercommon.cpp b/src/qt/qt_renderercommon.cpp index 98fb27ca0..47bc33d51 100644 --- a/src/qt/qt_renderercommon.cpp +++ b/src/qt/qt_renderercommon.cpp @@ -1,18 +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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_renderercommon.hpp" diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index d36a88f86..885c97990 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -1,12 +1,12 @@ /* - * 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. * - * Program settings UI module. + * Program settings UI module. * * * @@ -14,9 +14,9 @@ * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2021 Teemu Korhonen - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2021 Teemu Korhonen + * Copyright 2021-2022 Cacodemon345 */ #include "qt_rendererstack.hpp" #include "ui_qt_rendererstack.h" diff --git a/src/qt/qt_sdl.c b/src/qt/qt_sdl.c index 54eca952b..857ccf381 100644 --- a/src/qt/qt_sdl.c +++ b/src/qt/qt_sdl.c @@ -1,42 +1,42 @@ /* - * 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. * - * Rendering module for libSDL2 + * Rendering module for libSDL2 * - * NOTE: Given all the problems reported with FULLSCREEN use of SDL, - * we will not use that, but, instead, use a new window which - * coverrs the entire desktop. + * NOTE: Given all the problems reported with FULLSCREEN use of SDL, + * we will not use that, but, instead, use a new window which + * covers the entire desktop. * * * - * Authors: Fred N. van Kempen, - * Michael Drüing, + * Authors: Fred N. van Kempen, + * Michael Drüing, * - * Copyright 2018-2020 Fred N. van Kempen. - * Copyright 2018-2020 Michael Drüing. + * Copyright 2018-2020 Fred N. van Kempen. + * Copyright 2018-2020 Michael Drüing. * - * Redistribution and use in source and binary forms, with - * or without modification, are permitted provided that the - * following conditions are met: + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: * - * 1. Redistributions of source code must retain the entire - * above notice, this list of conditions and the following - * disclaimer. + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names - * of its contributors may be used to endorse or promote - * products derived from this software without specific - * prior written permission. + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT diff --git a/src/qt/qt_sdl.h b/src/qt/qt_sdl.h index 684e6ccd0..29804c278 100644 --- a/src/qt/qt_sdl.h +++ b/src/qt/qt_sdl.h @@ -1,38 +1,38 @@ /* - * 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 libSDL2 rendering module. + * Definitions for the libSDL2 rendering module. * * * - * Authors: Fred N. van Kempen, - * Michael Drüing, + * Authors: Fred N. van Kempen, + * Michael Drüing, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Michael Drüing. + * Copyright 2018-2019 Fred N. van Kempen. + * Copyright 2018-2019 Michael Drüing. * - * Redistribution and use in source and binary forms, with - * or without modification, are permitted provided that the - * following conditions are met: + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: * - * 1. Redistributions of source code must retain the entire - * above notice, this list of conditions and the following - * disclaimer. + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names - * of its contributors may be used to endorse or promote - * products derived from this software without specific - * prior written permission. + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index b42b20786..f9a6b8e14 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -1,20 +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. + * 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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 */ #include "qt_settings.hpp" #include "ui_qt_settings.h" diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp index c22b8b10b..c6069e99e 100644 --- a/src/qt/qt_settings_bus_tracking.cpp +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -1,20 +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. + * 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. * - * Program settings UI module. + * Program settings UI module. * * * * Authors: Miran Grca * Cacodemon345 * - * Copyright 2022 Miran Grca - * Copyright 2022 Cacodemon345 + * Copyright 2022 Miran Grca + * Copyright 2022 Cacodemon345 */ #include #include diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp index f01d7fc4d..d459b0e53 100644 --- a/src/qt/qt_settingsdisplay.cpp +++ b/src/qt/qt_settingsdisplay.cpp @@ -1,18 +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. * - * Display settings UI module. + * Display settings UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsdisplay.hpp" #include "ui_qt_settingsdisplay.h" diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 751bb829a..609c76fc0 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -1,20 +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. + * 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. * - * Floppy/CD-ROM devices configuration UI module. + * Floppy/CD-ROM devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsfloppycdrom.hpp" #include "ui_qt_settingsfloppycdrom.h" diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index 1883797e5..1b6964898 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -1,20 +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. + * 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. * - * Hard disk configuration UI module. + * Hard disk configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsharddisks.hpp" #include "ui_qt_settingsharddisks.h" diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp index 49d84037f..630fc705d 100644 --- a/src/qt/qt_settingsinput.cpp +++ b/src/qt/qt_settingsinput.cpp @@ -1,18 +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. * - * Mouse/Joystick configuration UI module. + * Mouse/Joystick configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsinput.hpp" #include "ui_qt_settingsinput.h" diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index 0d2ffa129..b88397e30 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -1,18 +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. * - * Machine selection and configuration UI module. + * Machine selection and configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsmachine.hpp" #include "ui_qt_settingsmachine.h" diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp index cbddfab72..014e82ab3 100644 --- a/src/qt/qt_settingsnetwork.cpp +++ b/src/qt/qt_settingsnetwork.cpp @@ -1,18 +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. * - * Network devices configuration UI module. + * Network devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsnetwork.hpp" #include "ui_qt_settingsnetwork.h" diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp index edffd360a..e0edd7358 100644 --- a/src/qt/qt_settingsotherperipherals.cpp +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -1,18 +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. * - * Other peripherals configuration UI module. + * Other peripherals configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsotherperipherals.hpp" #include "ui_qt_settingsotherperipherals.h" diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index f625388ea..bb77046d2 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -1,20 +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. + * 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. * - * Other removable devices configuration UI module. + * Other removable devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsotherremovable.hpp" #include "ui_qt_settingsotherremovable.h" diff --git a/src/qt/qt_settingsports.cpp b/src/qt/qt_settingsports.cpp index dfa2c8853..a4be440e5 100644 --- a/src/qt/qt_settingsports.cpp +++ b/src/qt/qt_settingsports.cpp @@ -1,21 +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. + * 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. * - * Serial/Parallel ports configuration UI module. + * Serial/Parallel ports configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2022 Cacodemon345 - * Copyright 2022 Jasmine Iwanek - * Copyright 2021 Joakim L. Gilje + * Copyright 2022 Cacodemon345 + * Copyright 2022 Jasmine Iwanek + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsports.hpp" #include "ui_qt_settingsports.h" diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp index 57686f7df..e17ec5ed1 100644 --- a/src/qt/qt_settingssound.cpp +++ b/src/qt/qt_settingssound.cpp @@ -1,18 +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. * - * Sound/MIDI devices configuration UI module. + * Sound/MIDI devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingssound.hpp" #include "ui_qt_settingssound.h" diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index 14b0fb1dc..a732e9820 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -1,18 +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. * - * Storage devices configuration UI module. + * Storage devices configuration UI module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje */ #include "qt_settingsstoragecontrollers.hpp" #include "ui_qt_settingsstoragecontrollers.h" diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index cd27e1c0e..a8c0229d3 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -1,22 +1,22 @@ /* - * 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. * - * Software renderer module. + * Software renderer module. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * Teemu Korhonen * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 - * Copyright 2021-2022 Teemu Korhonen + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen */ #include "qt_softwarerenderer.hpp" #include diff --git a/src/qt/qt_soundgain.cpp b/src/qt/qt_soundgain.cpp index 9283ae42e..725a5b115 100644 --- a/src/qt/qt_soundgain.cpp +++ b/src/qt/qt_soundgain.cpp @@ -1,18 +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. * - * Sound gain dialog UI module. + * Sound gain dialog UI module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "qt_soundgain.hpp" #include "ui_qt_soundgain.h" diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp index e2aa24a9b..c01ef2ae4 100644 --- a/src/qt/qt_specifydimensions.cpp +++ b/src/qt/qt_specifydimensions.cpp @@ -1,18 +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. * - * Specify dimensions UI module. + * Specify dimensions UI module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "qt_specifydimensions.h" #include "ui_qt_specifydimensions.h" diff --git a/src/qt/qt_styleoverride.cpp b/src/qt/qt_styleoverride.cpp index 6efe523d9..7ec5a341c 100644 --- a/src/qt/qt_styleoverride.cpp +++ b/src/qt/qt_styleoverride.cpp @@ -1,18 +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. * - * Style override class. + * Style override class. * * * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * Copyright 2022 Teemu Korhonen */ #include "qt_styleoverride.hpp" diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index a2864f3ea..05a2e8f6c 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -1,20 +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. + * 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. * - * Common UI functions. + * Common UI functions. * * * - * Authors: Joakim L. Gilje + * Authors: Joakim L. Gilje * Cacodemon345 * - * Copyright 2021 Joakim L. Gilje - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 */ #include diff --git a/src/qt/qt_unixmanagerfilter.cpp b/src/qt/qt_unixmanagerfilter.cpp index d1091198d..5d94584e6 100644 --- a/src/qt/qt_unixmanagerfilter.cpp +++ b/src/qt/qt_unixmanagerfilter.cpp @@ -1,19 +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. + * 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. * - * Source file for Unix VM-managers (client-side) + * Source file for Unix VM-managers (client-side) * - * Authors: - * Teemu Korhonen - Cacodemon345 * - * Copyright 2022 Teemu Korhonen - * Copyright 2022 Cacodemon345 + * + * Authors: Teemu Korhonen + * Cacodemon345 + * + * Copyright 2022 Teemu Korhonen + * Copyright 2022 Cacodemon345 */ #include "qt_unixmanagerfilter.hpp" diff --git a/src/qt/qt_unixmanagerfilter.hpp b/src/qt/qt_unixmanagerfilter.hpp index eca373b47..0587e06ee 100644 --- a/src/qt/qt_unixmanagerfilter.hpp +++ b/src/qt/qt_unixmanagerfilter.hpp @@ -1,19 +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. + * 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 file for Unix VM-managers (client-side) * - * Authors: - * Teemu Korhonen - Cacodemon345 * - * Copyright 2022 Teemu Korhonen - * Copyright 2022 Cacodemon345 + * + * Authors: Teemu Korhonen + * Cacodemon345 + * + * Copyright 2022 Teemu Korhonen + * Copyright 2022 Cacodemon345 */ #ifndef QT_UNIXMANAGERFILTER_HPP diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp index 876a4b047..b05b656bb 100644 --- a/src/qt/qt_util.cpp +++ b/src/qt/qt_util.cpp @@ -1,18 +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. * - * Utility functions. + * Utility functions. * * * - * Authors: Teemu Korhonen + * Authors: Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * Copyright 2022 Teemu Korhonen */ #include #include diff --git a/src/qt/qt_winmanagerfilter.cpp b/src/qt/qt_winmanagerfilter.cpp index d9a6208b1..0218ae5ba 100644 --- a/src/qt/qt_winmanagerfilter.cpp +++ b/src/qt/qt_winmanagerfilter.cpp @@ -1,17 +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. * - * Windows VM-managers native messages filter + * Windows VM-managers native messages filter * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #include "qt_winmanagerfilter.hpp" diff --git a/src/qt/qt_winmanagerfilter.hpp b/src/qt/qt_winmanagerfilter.hpp index cd141e93f..e8fb06d90 100644 --- a/src/qt/qt_winmanagerfilter.hpp +++ b/src/qt/qt_winmanagerfilter.hpp @@ -1,17 +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. * - * Header file for Windows VM-managers native messages filter + * Header file for Windows VM-managers native messages filter * - * Authors: - * Teemu Korhonen * - * Copyright 2022 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen */ #ifndef QT_WINDOWSMANAGERFILTER_HPP diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp index 56d8c9ec9..88b723d4c 100644 --- a/src/qt/qt_winrawinputfilter.cpp +++ b/src/qt/qt_winrawinputfilter.cpp @@ -1,19 +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. + * 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. * - * Windows raw input native filter for QT + * Windows raw input native filter for QT * - * Authors: - * Teemu Korhonen - * Miran Grca, * - * Copyright 2021 Teemu Korhonen - * Copyright 2016-2018 Miran Grca. + * + * Authors: Teemu Korhonen + * Miran Grca, + * + * Copyright 2021 Teemu Korhonen + * Copyright 2016-2018 Miran Grca. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/qt/qt_winrawinputfilter.hpp b/src/qt/qt_winrawinputfilter.hpp index 252f7206c..6d23b83b7 100644 --- a/src/qt/qt_winrawinputfilter.hpp +++ b/src/qt/qt_winrawinputfilter.hpp @@ -1,17 +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. * - * Header file for windows raw input native filter for QT + * Header file for windows raw input native filter for QT * - * Authors: - * Teemu Korhonen * - * Copyright 2021 Teemu Korhonen + * + * Authors: Teemu Korhonen + * + * Copyright 2021 Teemu Korhonen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/qt/win_dynld.c b/src/qt/win_dynld.c index 66fd0503d..88fb632bc 100644 --- a/src/qt/win_dynld.c +++ b/src/qt/win_dynld.c @@ -1,18 +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. * - * Try to load a support DLL. + * Try to load a support DLL. * * * - * Author: Fred N. van Kempen, + * Authors: Fred N. van Kempen, * - * Copyright 2017,2018 Fred N. van Kempen + * Copyright 2017-2018 Fred N. van Kempen */ #include #include diff --git a/src/qt/win_joystick_rawinput.c b/src/qt/win_joystick_rawinput.c index f41131b28..2976a54b9 100644 --- a/src/qt/win_joystick_rawinput.c +++ b/src/qt/win_joystick_rawinput.c @@ -1,20 +1,22 @@ /* - * 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. * - * RawInput joystick interface. + * RawInput joystick interface. * - * Authors: Sarah Walker, - * Miran Grca, - * GH Cao, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2020 GH Cao. + * + * Authors: Sarah Walker, + * Miran Grca, + * GH Cao, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2020 GH Cao. */ #include #include diff --git a/src/qt/wl_mouse.cpp b/src/qt/wl_mouse.cpp index 4cc1b3169..9b23792c8 100644 --- a/src/qt/wl_mouse.cpp +++ b/src/qt/wl_mouse.cpp @@ -1,18 +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. * - * Wayland mouse input module. + * Wayland mouse input module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Cacodemon345 */ #include "wl_mouse.hpp" #include diff --git a/src/qt/xinput2_mouse.cpp b/src/qt/xinput2_mouse.cpp index 5017c78d2..7e49c2694 100644 --- a/src/qt/xinput2_mouse.cpp +++ b/src/qt/xinput2_mouse.cpp @@ -1,18 +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. * - * X11 Xinput2 mouse input module. + * X11 Xinput2 mouse input module. * * * - * Authors: Cacodemon345 + * Authors: Cacodemon345 * - * Copyright 2022 Cacodemon345 + * Copyright 2022 Cacodemon345 */ /* Valuator parsing and duplicate event checking code from SDL2. */ diff --git a/src/scsi/CMakeLists.txt b/src/scsi/CMakeLists.txt index 467affd5a..addde844e 100644 --- a/src/scsi/CMakeLists.txt +++ b/src/scsi/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(scsi OBJECT scsi.c scsi_device.c scsi_cdrom.c scsi_disk.c diff --git a/src/scsi/scsi_aha154x.c b/src/scsi/scsi_aha154x.c index 669d050bf..aec89d588 100644 --- a/src/scsi/scsi_aha154x.c +++ b/src/scsi/scsi_aha154x.c @@ -641,8 +641,8 @@ aha_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv) * their way of handling issues like these at the time.. * * Patch 1: emulate the I/O ADDR SW setting by patching a - * byte in the BIOS that indicates the I/O ADDR - * switch setting on the board. + * byte in the BIOS that indicates the I/O ADDR + * switch setting on the board. */ if (dev->rom_ioaddr != 0x0000) { /* Look up the I/O address in the table. */ @@ -789,8 +789,8 @@ aha_setbios(x54x_t *dev) * their way of handling issues like these at the time.. * * Patch 1: emulate the I/O ADDR SW setting by patching a - * byte in the BIOS that indicates the I/O ADDR - * switch setting on the board. + * byte in the BIOS that indicates the I/O ADDR + * switch setting on the board. */ if (dev->rom_ioaddr != 0x0000) { /* Look up the I/O address in the table. */ @@ -880,11 +880,11 @@ aha_initnvr(x54x_t *dev) dev->nvr[0] |= EE0_ALTFLOP; dev->nvr[1] = dev->Irq - 9; /* IRQ15 */ dev->nvr[1] |= (dev->DmaChannel << 4); /* DMA6 */ - dev->nvr[2] = (EE2_HABIOS | /* BIOS enabled */ - EE2_DYNSCAN | /* scan bus */ - EE2_EXT1G | EE2_RMVOK); /* Imm return on seek */ - dev->nvr[3] = SPEED_50; /* speed 5.0 MB/s */ - dev->nvr[6] = (EE6_TERM | /* host term enable */ + dev->nvr[2] = (EE2_HABIOS | /* BIOS enabled */ + EE2_DYNSCAN | /* scan bus */ + EE2_EXT1G | EE2_RMVOK); /* Imm return on seek */ + dev->nvr[3] = SPEED_50; /* speed 5.0 MB/s */ + dev->nvr[6] = (EE6_TERM | /* host term enable */ EE6_RSTBUS); /* reset SCSI bus on boot*/ } diff --git a/src/scsi/scsi_buslogic.c b/src/scsi/scsi_buslogic.c index c0b0575df..1e0f74d0f 100644 --- a/src/scsi/scsi_buslogic.c +++ b/src/scsi/scsi_buslogic.c @@ -1152,7 +1152,7 @@ BuslogicPCIRead(int func, int addr, void *p) case 0x13: return buslogic_pci_bar[0].addr_regs[3]; case 0x14: - // return (buslogic_pci_bar[1].addr_regs[0] & 0xe0); /*Memory space*/ + // return (buslogic_pci_bar[1].addr_regs[0] & 0xe0); /*Memory space*/ return 0x00; case 0x15: return buslogic_pci_bar[1].addr_regs[1] & 0xc0; diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index d2cf4c4e5..b635bcb10 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -1297,10 +1297,10 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, int msf, int type, int flags, int32_t *l data than that. */ #if 0 if ((dev->sector_pos + dev->sector_len - 1) >= cdsize) { - scsi_cdrom_log("CD-ROM %i: Trying to read to beyond the end of disc (%i >= %i)\n", dev->id, - (dev->sector_pos + dev->sector_len - 1), cdsize); - scsi_cdrom_lba_out_of_range(dev); - return -1; + scsi_cdrom_log("CD-ROM %i: Trying to read to beyond the end of disc (%i >= %i)\n", dev->id, + (dev->sector_pos + dev->sector_len - 1), cdsize); + scsi_cdrom_lba_out_of_range(dev); + return -1; } #endif diff --git a/src/scsi/scsi_spock.c b/src/scsi/scsi_spock.c index af37d63a4..1223c21aa 100644 --- a/src/scsi/scsi_spock.c +++ b/src/scsi/scsi_spock.c @@ -1162,12 +1162,12 @@ static const device_config_t spock_rom_config[] = { // clang-format off { .name = "bios_ver", - .description = "BIOS Version", - .type = CONFIG_SELECTION, - .default_string = "", - .default_int = 1, - .file_filter = "", - .spinner = { 0 }, + .description = "BIOS Version", + .type = CONFIG_SELECTION, + .default_string = "", + .default_int = 1, + .file_filter = "", + .spinner = { 0 }, .selection = { { .description = "1991 BIOS (>1GB)", .value = 1 }, { .description = "1990 BIOS", .value = 0 }, diff --git a/src/scsi/scsi_x54x.c b/src/scsi/scsi_x54x.c index 45854a0ba..ae049d921 100644 --- a/src/scsi/scsi_x54x.c +++ b/src/scsi/scsi_x54x.c @@ -1312,14 +1312,14 @@ x54x_in(uint16_t port, void *priv) case 3: /* Bits according to ASPI4DOS.SYS v3.36: - 0 Not checked - 1 Must be 0 - 2 Must be 0-0-0-1 - 3 Must be 0 - 4 Must be 0-1-0-0 - 5 Must be 0 - 6 Not checked - 7 Not checked + 0 Not checked + 1 Must be 0 + 2 Must be 0-0-0-1 + 3 Must be 0 + 4 Must be 0-1-0-0 + 5 Must be 0 + 6 Not checked + 7 Not checked */ if (dev->flags & X54X_INT_GEOM_WRITABLE) ret = dev->Geometry; diff --git a/src/sio/CMakeLists.txt b/src/sio/CMakeLists.txt index bf38efe57..15411d3e6 100644 --- a/src/sio/CMakeLists.txt +++ b/src/sio/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(sio OBJECT sio_acc3221.c sio_ali5123.c sio_f82c710.c sio_82091aa.c diff --git a/src/sio/sio_82091aa.c b/src/sio/sio_82091aa.c index 1a7910cab..52a8809e9 100644 --- a/src/sio/sio_82091aa.c +++ b/src/sio/sio_82091aa.c @@ -1,17 +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. * - * Emulation of the Intel 82091AA Super I/O chip. + * Emulation of the Intel 82091AA Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_acc3221.c b/src/sio/sio_acc3221.c index dd0c247f0..f5c671c3a 100644 --- a/src/sio/sio_acc3221.c +++ b/src/sio/sio_acc3221.c @@ -1,18 +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. * - * Implementation of the ACC 3221-SP Super I/O Chip. + * Implementation of the ACC 3221-SP Super I/O Chip. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2019 Sarah Walker. + * Copyright 2019 Sarah Walker. */ #include #include @@ -40,31 +40,31 @@ typedef struct acc3221_t { } acc3221_t; /* Configuration Register Index, BE (R/W): - Bit Function - 7 PIRQ 5 polarity. + Bit Function + 7 PIRQ 5 polarity. 1 = active high, default 0 = active low - 6 PIRQ 7 polarity. + 6 PIRQ 7 polarity. 1 = active high, default 0 = active low - 5 Primary Parallel Port Extended Mode + 5 Primary Parallel Port Extended Mode 0 = Compatible mode, default 1 = Extended/Bidirectional mode. - 4 Primary Parallel Port Disable + 4 Primary Parallel Port Disable 1 = Disable, 0 = Enable Power Up Default is set by pin 120 (3221-DP)/pin 96 (3221-SP) - 3 Primary Parallel Port Power Down + 3 Primary Parallel Port Power Down 1 = Power Down, default = 0 - 2** Secondary Parallel Port Extended + 2** Secondary Parallel Port Extended Mode 0 = Compatible mode, default 1 = Extended/Bidirectional mode. - 1** Secondary Parallel Port Disable + 1** Secondary Parallel Port Disable 1 = Disable, 0 = Enable Power Up Default is set by pin 77 (3221-DP) - 0** Secondary Parallel Port Power Down + 0** Secondary Parallel Port Power Down 1 = Power Down 0 = Enable, default Note: Power Up not applicable to 3221-EP. */ @@ -72,41 +72,41 @@ typedef struct acc3221_t { #define REG_BE_LPT2_DISABLE (3 << 0) /* 3221-DP/EP only */ /* Configuration Register Index, BF (R/W): - Bit Function - 7-0 The 8 most significant address bits of + Bit Function + 7-0 The 8 most significant address bits of the primary parallel port (A9-2) Default 9E (LPT2, at 278-27B) */ /* Configuration Register Index, DA (R/W)**: - Bit Function - 7-0 The 8 most significant address bits of + Bit Function + 7-0 The 8 most significant address bits of the secondary parallel port (A9-2) Default DE (LPT1, at 378-37B) */ /* Configuration Register Index, DB (R/W): - Bit Function - 7 SIRQ4 polarity. + Bit Function + 7 SIRQ4 polarity. 1 = active high; default 0 = active low - 6 SIRQ3 polarity. + 6 SIRQ3 polarity. 1 = active high; default 0 = active low - 5 SXTAL clock off. 1 = SCLK off, + 5 SXTAL clock off. 1 = SCLK off, 0 = SCKL on, default - 4 Primary serial port disable + 4 Primary serial port disable 1 = Disable, 0 = Enable Power Up default is set by pin 116 (3221-DP)/pin 93 (3221-SP) - 3 Primary serial port power down + 3 Primary serial port power down 1 = Power down, 0 = Enable Power Up default is set by pin 116 (3221-DP)/pin 93 (3221-SP) - 2 Reserved - 1 Secondary serial port disable + 2 Reserved + 1 Secondary serial port disable 1 = Disable, 0 = Enable Power Up default is set by pin 121 (3221-DP)/pin 97 (3221-SP) - 0 Secondary serial port power down + 0 Secondary serial port power down 1 = Power down, 0 = Enable Power Up default is set by pin 121 (3221-DP)/pin 97 (3221-SP) @@ -115,57 +115,57 @@ typedef struct acc3221_t { #define REG_DB_SERIAL2_DISABLE (3 << 0) /* Configuration Register Index, DC (R/W): - Bit Function - 7-1 The MSB of the Primary Serial Port + Bit Function + 7-1 The MSB of the Primary Serial Port Address (bits A9-3). Default = 7F (COM1, at 3F8-3FF). - 0 When this bit is set to 1, bit A2 of + 0 When this bit is set to 1, bit A2 of primary parallel port is decoded. Default is 0. */ /* Configuration Register Index, DD (R/W): - Bit Function - 7-1 The MSB of the Secondary Serial Port + Bit Function + 7-1 The MSB of the Secondary Serial Port Address (bits A9-3). Default = 5F (COM2, at 2F8-2FF). - 0** When this bit is set to 1, bit A2 of + 0** When this bit is set to 1, bit A2 of secondary parallel port is decoded. Default is 0. */ /* Configuration Register Index, DE (R/W): - Bit Function - 7-6 SIRQ3 source - b7 b6 - 0 0 Disabled, tri-stated - 0 1 Disabled, tri-stated** - 1 0 Primary serial port - 1 1 Secondary serial port, + Bit Function + 7-6 SIRQ3 source + b7 b6 + 0 0 Disabled, tri-stated + 0 1 Disabled, tri-stated** + 1 0 Primary serial port + 1 1 Secondary serial port, default - 5-4 SIRQ4 source - b5 b4 - 0 0 Disabled, tri-stated - 0 1 Disabled, tri-stated** - 1 0 Primary serial port, + 5-4 SIRQ4 source + b5 b4 + 0 0 Disabled, tri-stated + 0 1 Disabled, tri-stated** + 1 0 Primary serial port, default - 1 1 Secondary serial port + 1 1 Secondary serial port - 3-2** PIRQ7 source - b3 b2 - 0 0 Diabled, tri-stated, + 3-2** PIRQ7 source + b3 b2 + 0 0 Diabled, tri-stated, default - 0 1 Primary serial port - 1 0 Primary parallel port - 1 1 Secondary parallel + 0 1 Primary serial port + 1 0 Primary parallel port + 1 1 Secondary parallel port Note: Bits 3-2 are reserved in 3221-SP. - 1-0 PIRQ5 source - b1 b0 - 0 0 Disabled, tri-stated - 0 1 Secondary serial port - 1 0 Primary parallel port, + 1-0 PIRQ5 source + b1 b0 + 0 0 Disabled, tri-stated + 0 1 Secondary serial port + 1 0 Primary parallel port, default - 1 1 Secondary parallel + 1 1 Secondary parallel port** */ #define REG_DE_SIRQ3_SOURCE (3 << 6) #define REG_DE_SIRQ3_SERIAL1 (1 << 6) @@ -183,48 +183,48 @@ typedef struct acc3221_t { #define REG_DE_PIRQ5_LPT2 (3 << 0) /* Configuration Register Index, DF (R/W)**: - Bit Function - 7-6 Reserved - 5 RTC interface disable + Bit Function + 7-6 Reserved + 5 RTC interface disable 1 = /RTCCS disabled 0 = /RTCCS enabled, default - 4 Disable Modem Select + 4 Disable Modem Select 1 = Moden CS disabled, default 0 = Modem CS enabled 3-2 - b3 b2 - 1 1 Reserved - 1 0 Modem port address + b3 b2 + 1 1 Reserved + 1 0 Modem port address = 3E8-3EF (default) - 0 1 Modem port address: + 0 1 Modem port address: 2F8-2FF - 0 0 Modem port address: + 0 0 Modem port address: 3F8-3FF 1-0 - b1 b0 - 1 1 Reserved - 1 0 Mode 2, EISA Mode - 0 1 Mode 1, AT BUS, - 0 0 Mode 0, Two parallel + b1 b0 + 1 1 Reserved + 1 0 Mode 2, EISA Mode + 0 1 Mode 1, AT BUS, + 0 0 Mode 0, Two parallel ports, default */ /* Configuration Register Index, FA (R/W)**: - Bit Function - 7 General purpose I/O register, Bit 7 - 6 General purpose I/O register, Bit 6 - 5 General purpose I/O register, Bit 5 - 4 General purpose I/O register, Bit 4 - 3 General purpose I/O register, Bit 3 - 2 General purpose I/O register, Bit 2 - 1 General purpose I/O register, Bit 1 - 0 General purpose I/O register, Bit 0 */ + Bit Function + 7 General purpose I/O register, Bit 7 + 6 General purpose I/O register, Bit 6 + 5 General purpose I/O register, Bit 5 + 4 General purpose I/O register, Bit 4 + 3 General purpose I/O register, Bit 3 + 2 General purpose I/O register, Bit 2 + 1 General purpose I/O register, Bit 1 + 0 General purpose I/O register, Bit 0 */ /* Configuration Register Index, FB (R/W)**: - Bit Function - 7 Reserved - 6** 0/2 EXG (Read Only) + Bit Function + 7 Reserved + 6** 0/2 EXG (Read Only) In mode 1 and mode 2 operation, when the third floppy drive is installed, pin @@ -234,7 +234,7 @@ typedef struct acc3221_t { disable the third floppy drive. 1 = Third floppy drive enabled 0 = Third floppy drive disabled - 5** EXTFDD (Read Only) + 5** EXTFDD (Read Only) In mode 1 and mode 2 operation, when the third floppy drive is installed and @@ -246,7 +246,7 @@ typedef struct acc3221_t { drive 2. 1 = Third floppy drive as drive 0 (bootable) 0 = Third floppy drive as drive 2 - 4** MS + 4** MS In mode 1 and mode 2, t his bit is to control the output pin MS to support a special 3 1/2", 1.2M drive. When this @@ -254,45 +254,45 @@ typedef struct acc3221_t { a low signal. When this bit is set to low (0), the MS pin sends a high signal to support a 3 1/2", 1.2M drive. - 3 FDC, Clock disable + 3 FDC, Clock disable 0 = enable, default 1 = disable - 2 Reserved - 1 FDC disable + 2 Reserved + 1 FDC disable 0 = enable, 1= disable Power Upd efault set by pin 117 (3221- DP)/pin 94 (3221-SP) - 0 FDC address + 0 FDC address 0 = Primary, default 1 = Secondary Note: Bits 6-4 are reserved in 3221-SP. */ #define REG_FB_FDC_DISABLE (1 << 1) /* Configuration Register Index, FB (R/W)**: - Bit Function - 7** Disable general chip select 1 + Bit Function + 7** Disable general chip select 1 1 = disable, default 0 = enable - 6** Disable general chip select 2 + 6** Disable general chip select 2 1 = disable, default 0 = enable - 5** Enable SA2 decoding for general chip + 5** Enable SA2 decoding for general chip select 1 1 = enable 0 = disable, default - 4** Enable SA2 decoding for general chip + 4** Enable SA2 decoding for general chip select 2 1 = enable 0 = disable, default - 3 Reserved - 2 IDE XT selected + 3 Reserved + 2 IDE XT selected 0 = IDE AT interface, default 1 = IDE XT interface - 1 IDE disable, 1 = IDE disable + 1 IDE disable, 1 = IDE disable 0 = IDE enable Power Up default set by pin 13 (3221- DP)/pin 13 (3221-SP) - 0 Secondary IDE + 0 Secondary IDE 1 = secondary 0 = primary, default Note: Bits 6-4 are reserved in 3221-SP. */ diff --git a/src/sio/sio_ali5123.c b/src/sio/sio_ali5123.c index 5c52bbc88..310a09ab0 100644 --- a/src/sio/sio_ali5123.c +++ b/src/sio/sio_ali5123.c @@ -1,17 +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. * - * Implementation of the ALi M5123/1543C Super I/O Chip. + * Implementation of the ALi M5123/1543C Super I/O Chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_detect.c b/src/sio/sio_detect.c index 871ad1a0a..36c12cd54 100644 --- a/src/sio/sio_detect.c +++ b/src/sio/sio_detect.c @@ -1,18 +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. * - * Super I/O chip detection code. + * Super I/O chip detection code. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_f82c710.c b/src/sio/sio_f82c710.c index eccf799f4..ad347fb03 100644 --- a/src/sio/sio_f82c710.c +++ b/src/sio/sio_f82c710.c @@ -1,28 +1,30 @@ /* - * 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. * - * Implementation of the Chips & Technologies F82C710 Universal Peripheral - * Controller (UPC) and 82C606 CHIPSpak Multifunction Controller. + * Implementation of the Chips & Technologies F82C710 Universal Peripheral + * Controller (UPC) and 82C606 CHIPSpak Multifunction Controller. * - * Relevant literature: + * Relevant literature: * - * [1] Chips and Technologies, Inc., - * 82C605/82C606 CHIPSpak/CHIPSport MULTIFUNCTION CONTROLLERS, - * PRELIMINARY Data Sheet, Revision 1, May 1987. - * + * [1] Chips and Technologies, Inc., + * 82C605/82C606 CHIPSpak/CHIPSport MULTIFUNCTION CONTROLLERS, + * PRELIMINARY Data Sheet, Revision 1, May 1987. + * * - * Authors: Sarah Walker, - * Eluan Costa Miranda - * Lubomir Rintel * - * Copyright 2020 Sarah Walker. - * Copyright 2020 Eluan Costa Miranda. - * Copyright 2021 Lubomir Rintel. + * + * Authors: Sarah Walker, + * Eluan Costa Miranda + * Lubomir Rintel + * + * Copyright 2020 Sarah Walker. + * Copyright 2020 Eluan Costa Miranda. + * Copyright 2021 Lubomir Rintel. */ #include #include diff --git a/src/sio/sio_fdc37c669.c b/src/sio/sio_fdc37c669.c index 81d9647c0..a8bc4d700 100644 --- a/src/sio/sio_fdc37c669.c +++ b/src/sio/sio_fdc37c669.c @@ -1,17 +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. * - * Implementation of the SMC FDC37C669 Super I/O Chip. + * Implementation of the SMC FDC37C669 Super I/O Chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_fdc37c67x.c b/src/sio/sio_fdc37c67x.c index e728a8ffb..af8a89bf5 100644 --- a/src/sio/sio_fdc37c67x.c +++ b/src/sio/sio_fdc37c67x.c @@ -1,17 +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. * - * Implementation of the SMC FDC37C67X Super I/O Chip. + * Implementation of the SMC FDC37C67X Super I/O Chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include @@ -171,13 +172,13 @@ fdc37c67x_sio_handler(fdc37c67x_t *dev) { #if 0 if (dev->sio_base) { - io_removehandler(dev->sio_base, 0x0002, - fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); + io_removehandler(dev->sio_base, 0x0002, + fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); } dev->sio_base = (((uint16_t) dev->regs[0x27]) << 8) | dev->regs[0x26]; if (dev->sio_base) { - io_sethandler(dev->sio_base, 0x0002, - fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); + io_sethandler(dev->sio_base, 0x0002, + fdc37c67x_read, NULL, NULL, fdc37c67x_write, NULL, NULL, dev); } #endif } diff --git a/src/sio/sio_fdc37c6xx.c b/src/sio/sio_fdc37c6xx.c index 9484ae680..f9c911402 100644 --- a/src/sio/sio_fdc37c6xx.c +++ b/src/sio/sio_fdc37c6xx.c @@ -11,7 +11,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/sio/sio_fdc37c93x.c b/src/sio/sio_fdc37c93x.c index afc1642a5..55464ec98 100644 --- a/src/sio/sio_fdc37c93x.c +++ b/src/sio/sio_fdc37c93x.c @@ -1,18 +1,19 @@ /* - * 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. * - * Implementation of the SMC FDC37C932FR and FDC37C935 Super - * I/O Chips. + * Implementation of the SMC FDC37C932FR and FDC37C935 Super + * I/O Chips. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/sio/sio_fdc37m60x.c b/src/sio/sio_fdc37m60x.c index d74db6207..e29734c51 100644 --- a/src/sio/sio_fdc37m60x.c +++ b/src/sio/sio_fdc37m60x.c @@ -1,15 +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. * - * Emulation of the SMSC FDC37M60x Super I/O + * Emulation of the SMSC FDC37M60x Super I/O * - * Authors: Tiseno100 - * Copyright 2020 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2020 Tiseno100 */ #include #include diff --git a/src/sio/sio_it8661f.c b/src/sio/sio_it8661f.c index 98340aaa5..c7d4110be 100644 --- a/src/sio/sio_it8661f.c +++ b/src/sio/sio_it8661f.c @@ -1,18 +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. * - * Implementation of the ITE IT8661F chipset. + * Implementation of the ITE IT8661F chipset. * - * Note: This Super I/O is partially incomplete and intended only for having the intended machine to function + * Note: This Super I/O is partially incomplete and intended only for having the intended machine to function * - * Authors: Tiseno100 + * Authors: Tiseno100 * - * Copyright 2021 Tiseno100 + * Copyright 2021 Tiseno100 * */ #include diff --git a/src/sio/sio_pc87306.c b/src/sio/sio_pc87306.c index 18b9a9357..8755775de 100644 --- a/src/sio/sio_pc87306.c +++ b/src/sio/sio_pc87306.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87306 Super I/O chip. + * Emulation of the NatSemi PC87306 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2016-2018 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include @@ -365,7 +366,7 @@ pc87306_reset(pc87306_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); lpt1_handler(dev); diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index ecdb13c5b..6f773a8e1 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87307 Super I/O chip. + * Emulation of the NatSemi PC87307 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include @@ -534,7 +535,7 @@ pc87307_reset(pc87307_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); serial_remove(dev->uart[0]); diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c index 8d7ff7065..70ed57229 100644 --- a/src/sio/sio_pc87309.c +++ b/src/sio/sio_pc87309.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87309 Super I/O chip. + * Emulation of the NatSemi PC87309 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include @@ -421,7 +422,7 @@ pc87309_reset(pc87309_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); serial_remove(dev->uart[0]); diff --git a/src/sio/sio_pc87310.c b/src/sio/sio_pc87310.c index 5b5267191..eacbadf89 100644 --- a/src/sio/sio_pc87310.c +++ b/src/sio/sio_pc87310.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of the NatSemi PC87310 Super I/O chip. + * Emulation of the NatSemi PC87310 Super I/O chip. * * * - * Author: Miran Grca, - * Tiseno100 - * EngiNerd + * Authors: Miran Grca, + * Tiseno100 + * EngiNerd * - * Copyright 2020 Miran Grca. - * Copyright 2020 Tiseno100 - * Copyright 2021 EngiNerd. + * Copyright 2020 Miran Grca. + * Copyright 2020 Tiseno100 + * Copyright 2021 EngiNerd. */ #include #include @@ -210,7 +210,7 @@ pc87310_reset(pc87310_t *dev) dev->tries = 0; /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); lpt1_handler(dev); diff --git a/src/sio/sio_pc87311.c b/src/sio/sio_pc87311.c index 2c098d5ab..c795da8a9 100644 --- a/src/sio/sio_pc87311.c +++ b/src/sio/sio_pc87311.c @@ -1,15 +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. * - * Emulation of the National Semiconductor PC87311 Super I/O + * Emulation of the National Semiconductor PC87311 Super I/O * - * Authors: Tiseno100 - * Copyright 2020 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2020 Tiseno100 */ #include #include diff --git a/src/sio/sio_pc87332.c b/src/sio/sio_pc87332.c index 71f7584f4..64dd86665 100644 --- a/src/sio/sio_pc87332.c +++ b/src/sio/sio_pc87332.c @@ -1,17 +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. * - * Emulation of the NatSemi PC87332 Super I/O chip. + * Emulation of the NatSemi PC87332 Super I/O chip. * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #include #include @@ -276,7 +277,7 @@ pc87332_reset(pc87332_t *dev) /* 0 = 360 rpm @ 500 kbps for 3.5" - 1 = Default, 300 rpm @ 500,300,250,1000 kbps for 3.5" + 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ lpt1_remove(); lpt1_handler(dev); diff --git a/src/sio/sio_prime3b.c b/src/sio/sio_prime3b.c index b0267f0a0..a204fde5b 100644 --- a/src/sio/sio_prime3b.c +++ b/src/sio/sio_prime3b.c @@ -1,15 +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. * - * Emulation of the Goldstar Prime3B Super I/O + * Emulation of the Goldstar Prime3B Super I/O * - * Authors: Tiseno100 - * Copyright 2021 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2021 Tiseno100 */ #include #include diff --git a/src/sio/sio_prime3c.c b/src/sio/sio_prime3c.c index 303a10967..eae3fe1b2 100644 --- a/src/sio/sio_prime3c.c +++ b/src/sio/sio_prime3c.c @@ -1,15 +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. * - * Emulation of the LG Prime3C Super I/O + * Emulation of the LG Prime3C Super I/O * - * Authors: Tiseno100 - * Copyright 2020 Tiseno100 + * + * + * Authors: Tiseno100 + * + * Copyright 2020 Tiseno100 */ #include #include diff --git a/src/sio/sio_um8669f.c b/src/sio/sio_um8669f.c index 954e7c45c..bd153a9e4 100644 --- a/src/sio/sio_um8669f.c +++ b/src/sio/sio_um8669f.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of the UMC UM8669F Super I/O chip. + * Emulation of the UMC UM8669F Super I/O chip. * * * - * Authors: Sarah Walker, - * Miran Grca, - * RichardG, + * Authors: Sarah Walker, + * Miran Grca, + * RichardG, * - * Copyright 2008-2021 Sarah Walker. - * Copyright 2016-2021 Miran Grca. - * Copyright 2021 RichardG. + * Copyright 2008-2021 Sarah Walker. + * Copyright 2016-2021 Miran Grca. + * Copyright 2021 RichardG. */ #include #include @@ -69,27 +69,27 @@ static uint8_t um8669f_pnp_rom[] = { }; static const isapnp_device_config_t um8669f_pnp_defaults[] = { { - .activate = 1, - .io = { { .base = FDC_PRIMARY_ADDR }, }, - .irq = { { .irq = FDC_PRIMARY_IRQ }, }, - .dma = { { .dma = FDC_PRIMARY_DMA }, } + .activate = 1, + .io = { { .base = FDC_PRIMARY_ADDR }, }, + .irq = { { .irq = FDC_PRIMARY_IRQ }, }, + .dma = { { .dma = FDC_PRIMARY_DMA }, } }, { - .activate = 1, - .io = { { .base = COM1_ADDR }, }, - .irq = { { .irq = COM1_IRQ }, } + .activate = 1, + .io = { { .base = COM1_ADDR }, }, + .irq = { { .irq = COM1_IRQ }, } }, { - .activate = 1, - .io = { { .base = COM2_ADDR }, }, - .irq = { { .irq = COM2_IRQ }, } + .activate = 1, + .io = { { .base = COM2_ADDR }, }, + .irq = { { .irq = COM2_IRQ }, } }, { - .activate = 1, - .io = { { .base = LPT1_ADDR }, }, - .irq = { { .irq = LPT1_IRQ }, } + .activate = 1, + .io = { { .base = LPT1_ADDR }, }, + .irq = { { .irq = LPT1_IRQ }, } }, { - .activate = 0 + .activate = 0 }, { - .activate = 0, - .io = { { .base = 0x200 }, } + .activate = 0, + .io = { { .base = 0x200 }, } } }; diff --git a/src/sio/sio_vt82c686.c b/src/sio/sio_vt82c686.c index 00617e4ea..c7f9c28bc 100644 --- a/src/sio/sio_vt82c686.c +++ b/src/sio/sio_vt82c686.c @@ -1,18 +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. * - * Emulation of the VIA VT82C686A/B integrated Super I/O. + * Emulation of the VIA VT82C686A/B integrated Super I/O. * * * - * Author: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #include #include diff --git a/src/sio/sio_w83787f.c b/src/sio/sio_w83787f.c index ce6c20386..722f1eef8 100644 --- a/src/sio/sio_w83787f.c +++ b/src/sio/sio_w83787f.c @@ -1,20 +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. + * 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. * - * Emulation of the Winbond W83787F/IF Super I/O Chip. + * Emulation of the Winbond W83787F/IF Super I/O Chip. * - * Winbond W83787F Super I/O Chip - * Used by the Award 430HX + * Winbond W83787F Super I/O Chip + * Used by the Award 430HX * * * - * Author: Miran Grca, - * Copyright 2020 Miran Grca. + * Authors: Miran Grca, + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_w83877f.c b/src/sio/sio_w83877f.c index 28ab95f46..4f8b45118 100644 --- a/src/sio/sio_w83877f.c +++ b/src/sio/sio_w83877f.c @@ -1,20 +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. + * 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. * - * Emulation of the Winbond W83877F Super I/O Chip. + * Emulation of the Winbond W83877F Super I/O Chip. * - * Winbond W83877F Super I/O Chip - * Used by the Award 430HX + * Winbond W83877F Super I/O Chip + * Used by the Award 430HX * * * - * Author: Miran Grca, - * Copyright 2016-2020 Miran Grca. + * Authors: Miran Grca, + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/sio/sio_w83977f.c b/src/sio/sio_w83977f.c index e214f883d..1b6105840 100644 --- a/src/sio/sio_w83977f.c +++ b/src/sio/sio_w83977f.c @@ -1,20 +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. + * 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. * - * Emulation of the Winbond W83977F Super I/O Chip. + * Emulation of the Winbond W83977F Super I/O Chip. * - * Winbond W83977F Super I/O Chip - * Used by the Award 430TX + * Winbond W83977F Super I/O Chip + * Used by the Award 430TX * * * - * Author: Miran Grca, - * Copyright 2016-2020 Miran Grca. + * Authors: Miran Grca, + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/sound/CMakeLists.txt b/src/sound/CMakeLists.txt index 66672d547..10b8903bc 100644 --- a/src/sound/CMakeLists.txt +++ b/src/sound/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(snd OBJECT sound.c snd_opl.c snd_opl_nuked.c snd_opl_ymfm.cpp snd_resid.cc diff --git a/src/sound/midi.c b/src/sound/midi.c index 93fa62891..0cc8f2b38 100644 --- a/src/sound/midi.c +++ b/src/sound/midi.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Bit, * DOSBox Team, diff --git a/src/sound/openal.c b/src/sound/openal.c index 2153d4c2b..48e4ee818 100644 --- a/src/sound/openal.c +++ b/src/sound/openal.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/sound/resid-fp/CMakeLists.txt b/src/sound/resid-fp/CMakeLists.txt index 5ec9130d7..699fcae54 100644 --- a/src/sound/resid-fp/CMakeLists.txt +++ b/src/sound/resid-fp/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(resid-fp STATIC convolve-sse.cc convolve.cc envelope.cc extfilt.cc diff --git a/src/sound/snd_ad1848.c b/src/sound/snd_ad1848.c index 558024fb5..f9bc337c1 100644 --- a/src/sound/snd_ad1848.c +++ b/src/sound/snd_ad1848.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * RichardG, * diff --git a/src/sound/snd_audiopci.c b/src/sound/snd_audiopci.c index ecac7f05a..7d029a169 100644 --- a/src/sound/snd_audiopci.c +++ b/src/sound/snd_audiopci.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * RichardG, * Miran Grca, * diff --git a/src/sound/snd_mpu401.c b/src/sound/snd_mpu401.c index a31c48a7b..328c3c688 100644 --- a/src/sound/snd_mpu401.c +++ b/src/sound/snd_mpu401.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * DOSBox Team, * Miran Grca, * TheCollector1995, diff --git a/src/sound/snd_sb.c b/src/sound/snd_sb.c index 7660ace90..d67701180 100644 --- a/src/sound/snd_sb.c +++ b/src/sound/snd_sb.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * TheCollector1995, * diff --git a/src/sound/snd_speaker.c b/src/sound/snd_speaker.c index 34d32c110..774e4d650 100644 --- a/src/sound/snd_speaker.c +++ b/src/sound/snd_speaker.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/sound/snd_wss.c b/src/sound/snd_wss.c index 8a325e5c3..9e37dd745 100644 --- a/src/sound/snd_wss.c +++ b/src/sound/snd_wss.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * TheCollector1995, * * Copyright 2012-2018 Sarah Walker. diff --git a/src/sound/sound.c b/src/sound/sound.c index cda851137..ab75af4f0 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2020 Sarah Walker. diff --git a/src/unix/assets/86Box.spec b/src/unix/assets/86Box.spec index 414a38a96..9fac0dde4 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 v3.7 +%global romver v3.11 Name: 86Box Version: 3.11 diff --git a/src/unix/unix_cdrom.c b/src/unix/unix_cdrom.c index bbeed0149..79a649eb5 100644 --- a/src/unix/unix_cdrom.c +++ b/src/unix/unix_cdrom.c @@ -10,12 +10,12 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. */ #include diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt index a5ea1059a..b37e81134 100644 --- a/src/video/CMakeLists.txt +++ b/src/video/CMakeLists.txt @@ -10,7 +10,7 @@ # # Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020-2021 David Hrdlička. # add_library(vid OBJECT agpgart.c video.c vid_table.c vid_cga.c vid_cga_comp.c diff --git a/src/video/agpgart.c b/src/video/agpgart.c index 0a594a8d3..523fcc996 100644 --- a/src/video/agpgart.c +++ b/src/video/agpgart.c @@ -1,18 +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. * - * AGP Graphics Address Remapping Table remapping emulation. + * AGP Graphics Address Remapping Table remapping emulation. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2021 RichardG. + * Copyright 2021 RichardG. */ #include #include diff --git a/src/video/vid_8514a.c b/src/video/vid_8514a.c index 88dcee020..f7f3ce607 100644 --- a/src/video/vid_8514a.c +++ b/src/video/vid_8514a.c @@ -1,19 +1,19 @@ /* - * 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. * - * Emulation of the 8514/A card from IBM for the MCA bus and - * generic ISA bus clones without vendor extensions. + * Emulation of the 8514/A card from IBM for the MCA bus and + * generic ISA bus clones without vendor extensions. * * * - * Authors: TheCollector1995. + * Authors: TheCollector1995. * - * Copyright 2022 TheCollector1995. + * Copyright 2022 TheCollector1995. */ #include #include diff --git a/src/video/vid_ati18800.c b/src/video/vid_ati18800.c index 2fb58aa5b..3781ef567 100644 --- a/src/video/vid_ati18800.c +++ b/src/video/vid_ati18800.c @@ -1,20 +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. + * 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. * - * ATI 18800 emulation (VGA Edge-16) + * ATI 18800 emulation (VGA Edge-16) * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c index 06b61d41f..352ce2f7d 100644 --- a/src/video/vid_ati28800.c +++ b/src/video/vid_ati28800.c @@ -1,22 +1,22 @@ /* - * 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. * - * ATI 28800 emulation (VGA Charger and Korean VGA) + * ATI 28800 emulation (VGA Charger and Korean VGA) * * * - * Authors: Sarah Walker, - * Miran Grca, - * greatpsycho, + * Authors: Sarah Walker, + * Miran Grca, + * greatpsycho, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 greatpsycho. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 greatpsycho. */ #include #include diff --git a/src/video/vid_ati68860_ramdac.c b/src/video/vid_ati68860_ramdac.c index 1bf74067a..49fad5815 100644 --- a/src/video/vid_ati68860_ramdac.c +++ b/src/video/vid_ati68860_ramdac.c @@ -1,40 +1,40 @@ /* - * 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. * - * ATI 68860 RAMDAC emulation (for Mach64) + * ATI 68860 RAMDAC emulation (for Mach64) * - * ATI 68860/68880 Truecolor DACs: - * REG08 (R/W): - * bit 0-? Always 2 ?? + * ATI 68860/68880 Truecolor DACs: + * REG08 (R/W): + * bit 0-? Always 2 ?? * - * REG0A (R/W): - * bit 0-? Always 1Dh ?? + * REG0A (R/W): + * bit 0-? Always 1Dh ?? * - * REG0B (R/W): (GMR ?) - * bit 0-7 Mode. 82h: 4bpp, 83h: 8bpp, - * A0h: 15bpp, A1h: 16bpp, C0h: 24bpp, - * E3h: 32bpp (80h for VGA modes ?) + * REG0B (R/W): (GMR ?) + * bit 0-7 Mode. 82h: 4bpp, 83h: 8bpp, + * A0h: 15bpp, A1h: 16bpp, C0h: 24bpp, + * E3h: 32bpp (80h for VGA modes ?) * - * REG0C (R/W): Device Setup Register A - * bit 0 Controls 6/8bit DAC. 0: 8bit DAC/LUT, 1: 6bit DAC/LUT - * 2-3 Depends on Video memory (= VRAM width ?) . - * 1: Less than 1Mb, 2: 1Mb, 3: > 1Mb - * 5-6 Always set ? - * 7 If set can remove "snow" in some cases - * (A860_Delay_L ?) ?? + * REG0C (R/W): Device Setup Register A + * bit 0 Controls 6/8bit DAC. 0: 8bit DAC/LUT, 1: 6bit DAC/LUT + * 2-3 Depends on Video memory (= VRAM width ?) . + * 1: Less than 1Mb, 2: 1Mb, 3: > 1Mb + * 5-6 Always set ? + * 7 If set can remove "snow" in some cases + * (A860_Delay_L ?) ?? * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ati_eeprom.c b/src/video/vid_ati_eeprom.c index 15696be63..f1840a698 100644 --- a/src/video/vid_ati_eeprom.c +++ b/src/video/vid_ati_eeprom.c @@ -1,20 +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. + * 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. * - * Emulation of the EEPROM on select ATI cards. + * Emulation of the EEPROM on select ATI cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Copyright 2008-2020 Sarah Walker. + * Copyright 2016-2020 Miran Grca. */ #include #include diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index c2aa2b6ad..d67ff876b 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -1,20 +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. + * 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. * - * ATi Mach64 graphics card emulation. + * ATi Mach64 graphics card emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_att20c49x_ramdac.c b/src/video/vid_att20c49x_ramdac.c index 81cde31a4..1874afce9 100644 --- a/src/video/vid_att20c49x_ramdac.c +++ b/src/video/vid_att20c49x_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of a AT&T 20c490/491 and 492/493 RAMDAC. + * Emulation of a AT&T 20c490/491 and 492/493 RAMDAC. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_att2xc498_ramdac.c b/src/video/vid_att2xc498_ramdac.c index 5983677db..2dab4b903 100644 --- a/src/video/vid_att2xc498_ramdac.c +++ b/src/video/vid_att2xc498_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of a AT&T 2xc498 RAMDAC. + * Emulation of a AT&T 2xc498 RAMDAC. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_av9194.c b/src/video/vid_av9194.c index 20d39f247..f8ebc89de 100644 --- a/src/video/vid_av9194.c +++ b/src/video/vid_av9194.c @@ -1,20 +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. + * 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. * - * AV9194 clock generator emulation. + * AV9194 clock generator emulation. * - * Used by the S3 86c801 (V7-Mirage) card. + * Used by the S3 86c801 (V7-Mirage) card. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_bt48x_ramdac.c b/src/video/vid_bt48x_ramdac.c index 05ade0cc3..daf840df8 100644 --- a/src/video/vid_bt48x_ramdac.c +++ b/src/video/vid_bt48x_ramdac.c @@ -1,21 +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. + * 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. * - * Emulation of the Brooktree BT484-485A true colour RAMDAC - * family. + * Emulation of the Brooktree BT484-485A true colour RAMDAC + * family. * * * - * Authors: Miran Grca, - * TheCollector1995, + * Authors: Miran Grca, + * TheCollector1995, * - * Copyright 2016-2018 Miran Grca. - * Copyright 2018 TheCollector1995. + * Copyright 2016-2018 Miran Grca. + * Copyright 2018 TheCollector1995. */ #include #include diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c index 8dba373df..6ed81f616 100644 --- a/src/video/vid_cga.c +++ b/src/video/vid_cga.c @@ -1,20 +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. + * 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. * - * Emulation of the old and new IBM CGA graphics cards. + * Emulation of the old and new IBM CGA graphics cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_cga_comp.c b/src/video/vid_cga_comp.c index 077084000..ad9f673fb 100644 --- a/src/video/vid_cga_comp.c +++ b/src/video/vid_cga_comp.c @@ -1,21 +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. + * 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. * - * IBM CGA composite filter, borrowed from reenigne's DOSBox - * patch and ported to C. + * IBM CGA composite filter, borrowed from reenigne's DOSBox + * patch and ported to C. * * * - * Authors: reenigne, - * Miran Grca, + * Authors: reenigne, + * Miran Grca, * - * Copyright 2015-2019 reenigne. - * Copyright 2015-2019 Miran Grca. + * Copyright 2015-2019 reenigne. + * Copyright 2015-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index c3fd19e58..e29d95232 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -16,7 +16,7 @@ * TheCollector1995, * * Copyright 2016-2020 Miran Grca. - * Copyright 2020 tonioni. + * Copyright 2020 tonioni. * Copyright 2016-2020 TheCollector1995. */ #include diff --git a/src/video/vid_colorplus.c b/src/video/vid_colorplus.c index a343087d4..ae24d8ff0 100644 --- a/src/video/vid_colorplus.c +++ b/src/video/vid_colorplus.c @@ -1,20 +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. + * 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. * - * Plantronics ColorPlus emulation. + * Plantronics ColorPlus emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_compaq_cga.c b/src/video/vid_compaq_cga.c index da4006339..68255e746 100644 --- a/src/video/vid_compaq_cga.c +++ b/src/video/vid_compaq_cga.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of the Compaq CGA graphics cards. + * Emulation of the Compaq CGA graphics cards. * * * - * Authors: John Elliott, - * Sarah Walker, - * Miran Grca, + * Authors: John Elliott, + * Sarah Walker, + * Miran Grca, * - * Copyright 2016-2019 John Elliott. - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2016-2019 John Elliott. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ddc.c b/src/video/vid_ddc.c index b263448fc..f6c4d4dac 100644 --- a/src/video/vid_ddc.c +++ b/src/video/vid_ddc.c @@ -1,18 +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. * - * DDC monitor emulation. + * DDC monitor emulation. * * * - * Authors: RichardG, + * Authors: RichardG, * - * Copyright 2020 RichardG. + * Copyright 2020 RichardG. */ #include #include diff --git a/src/video/vid_ega.c b/src/video/vid_ega.c index af1c06335..bfac7d503 100644 --- a/src/video/vid_ega.c +++ b/src/video/vid_ega.c @@ -1,21 +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. + * 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. * - * Emulation of the EGA and Chips & Technologies SuperEGA - * graphics cards. + * Emulation of the EGA and Chips & Technologies SuperEGA + * graphics cards. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ega_render.c b/src/video/vid_ega_render.c index a9699dbf9..b2d5cb5c1 100644 --- a/src/video/vid_ega_render.c +++ b/src/video/vid_ega_render.c @@ -1,20 +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. + * 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. * - * EGA renderers. + * EGA renderers. * * * - * Author: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_et3000.c b/src/video/vid_et3000.c index 1d6288d9c..d107afe5c 100644 --- a/src/video/vid_et3000.c +++ b/src/video/vid_et3000.c @@ -1,16 +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. * - * Emulation of the Tseng Labs ET3000. + * Emulation of the Tseng Labs ET3000. * - * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * + * Authors: Miran Grca, + * + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c index 5d0691514..4020c0523 100644 --- a/src/video/vid_et4000.c +++ b/src/video/vid_et4000.c @@ -13,9 +13,9 @@ * Authors: Fred N. van Kempen, * Miran Grca, * GreatPsycho, - * Sarah Walker, + * Sarah Walker, * - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2017-2018 Fred N. van Kempen. * Copyright 2016-2018 Miran Grca. * Copyright 2008-2018 Sarah Walker. * diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index eb604f4ea..2f6e6497c 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -12,7 +12,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_f82c425.c b/src/video/vid_f82c425.c index 3fea0c1bd..15f4ce496 100644 --- a/src/video/vid_f82c425.c +++ b/src/video/vid_f82c425.c @@ -1,36 +1,36 @@ /* - * 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. * - * Chips & Technologies 82C425 display controller emulation, - * with support for 640x200 LCD and SMARTMAP text contrast - * enhancement. + * Chips & Technologies 82C425 display controller emulation, + * with support for 640x200 LCD and SMARTMAP text contrast + * enhancement. * - * Relevant literature: + * Relevant literature: * - * [1] Chips and Technologies, Inc., 82C425 CGA LCD/CRT Controller, - * Data Sheet, Revision No. 2.2, September 1991. - * + * [1] Chips and Technologies, Inc., 82C425 CGA LCD/CRT Controller, + * Data Sheet, Revision No. 2.2, September 1991. + * * - * [2] Pleva et al., COLOR TO MONOCHROME CONVERSION, - * U.S. Patent 4,977,398, Dec. 11, 1990. - * + * [2] Pleva et al., COLOR TO MONOCHROME CONVERSION, + * U.S. Patent 4,977,398, Dec. 11, 1990. + * * - * Based on Toshiba T1000 plasma display emulation code. + * Based on Toshiba T1000 plasma display emulation code. * - * Authors: Fred N. van Kempen, - * Miran Grca, - * Sarah Walker, - * Lubomir Rintel, + * Authors: Fred N. van Kempen, + * Miran Grca, + * Sarah Walker, + * Lubomir Rintel, * - * Copyright 2018,2019 Fred N. van Kempen. - * Copyright 2018,2019 Miran Grca. - * Copyright 2018,2019 Sarah Walker. - * Copyright 2021 Lubomir Rintel. + * Copyright 2018-2019 Fred N. van Kempen. + * Copyright 2018-2019 Miran Grca. + * Copyright 2018-2019 Sarah Walker. + * Copyright 2021 Lubomir Rintel. * * 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 diff --git a/src/video/vid_genius.c b/src/video/vid_genius.c index 5c13e3415..cbf4eabfe 100644 --- a/src/video/vid_genius.c +++ b/src/video/vid_genius.c @@ -1,20 +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. + * 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. * - * MDSI Genius VHR emulation. + * MDSI Genius VHR emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_hercules.c b/src/video/vid_hercules.c index 550f05338..5920ff27d 100644 --- a/src/video/vid_hercules.c +++ b/src/video/vid_hercules.c @@ -1,20 +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. + * 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. * - * Hercules emulation. + * Hercules emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_herculesplus.c b/src/video/vid_herculesplus.c index ea569cd3e..6561f9429 100644 --- a/src/video/vid_herculesplus.c +++ b/src/video/vid_herculesplus.c @@ -1,20 +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. + * 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. * - * Hercules Plus emulation. + * Hercules Plus emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ht216.c b/src/video/vid_ht216.c index 72d101e2b..255a9e8b8 100644 --- a/src/video/vid_ht216.c +++ b/src/video/vid_ht216.c @@ -1,20 +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. + * 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. * - * Video 7 VGA 1024i emulation. + * Video 7 VGA 1024i emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2019 Sarah Walker. - * Copyright 2019 Miran Grca. + * Copyright 2019 Sarah Walker. + * Copyright 2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ibm_rgb528_ramdac.c b/src/video/vid_ibm_rgb528_ramdac.c index 2f050e7c7..adfc6ea39 100644 --- a/src/video/vid_ibm_rgb528_ramdac.c +++ b/src/video/vid_ibm_rgb528_ramdac.c @@ -1,18 +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. * - * Emulation of the IBM RGB 528 true colour RAMDAC. + * Emulation of the IBM RGB 528 true colour RAMDAC. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/video/vid_icd2061.c b/src/video/vid_icd2061.c index 85740144c..3fafb65d9 100644 --- a/src/video/vid_icd2061.c +++ b/src/video/vid_icd2061.c @@ -1,24 +1,24 @@ /* - * 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. * - * ICD2061 clock generator emulation. - * Also emulates the ICS9161 which is the same as the ICD2016, - * but without the need for tuning (which is irrelevant in - * emulation anyway). + * ICD2061 clock generator emulation. + * Also emulates the ICS9161 which is the same as the ICD2016, + * but without the need for tuning (which is irrelevant in + * emulation anyway). * - * Used by ET4000w32/p (Diamond Stealth 32) and the S3 - * Vision964 family. + * Used by ET4000w32/p (Diamond Stealth 32) and the S3 + * Vision964 family. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2016-2018 Miran Grca. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ics2494.c b/src/video/vid_ics2494.c index d3a40cc8b..8bb4b0cb8 100644 --- a/src/video/vid_ics2494.c +++ b/src/video/vid_ics2494.c @@ -1,20 +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. + * 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. * - * ICS2494 clock generator emulation. + * ICS2494 clock generator emulation. * - * Used by the AMI S3 924. + * Used by the AMI S3 924. * * * - * Authors: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. */ #include #include diff --git a/src/video/vid_ics2595.c b/src/video/vid_ics2595.c index 77c46b6c3..10fc5ba39 100644 --- a/src/video/vid_ics2595.c +++ b/src/video/vid_ics2595.c @@ -1,20 +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. + * 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. * - * ICS2595 clock chip emulation. Used by ATI Mach64. + * ICS2595 clock chip emulation. Used by ATI Mach64. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_im1024.c b/src/video/vid_im1024.c index 9e08ce583..12d884127 100644 --- a/src/video/vid_im1024.c +++ b/src/video/vid_im1024.c @@ -1,50 +1,50 @@ /* - * 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. * - * Emulation of the ImageManager 1024 video controller. + * Emulation of the ImageManager 1024 video controller. * - * Just enough of the Vermont Microsystems IM-1024 is implemented - * to support the Windows 1.03 driver. Functions are partially - * implemented or hardwired to the behavior expected by the - * Windows driver. + * Just enough of the Vermont Microsystems IM-1024 is implemented + * to support the Windows 1.03 driver. Functions are partially + * implemented or hardwired to the behavior expected by the + * Windows driver. * - * One major difference seems to be that in hex mode, coordinates - * are passed as 2-byte integer words rather than 4-byte - * fixed-point fractions. + * One major difference seems to be that in hex mode, coordinates + * are passed as 2-byte integer words rather than 4-byte + * fixed-point fractions. * - * It is unknown what triggers this, so for now it's always on. + * It is unknown what triggers this, so for now it's always on. * - * As well as the usual PGC ring buffer at 0xC6000, the IM1024 - * appears to have an alternate method of passing commands. This - * is enabled by setting 0xC6330 to 1, and then: + * As well as the usual PGC ring buffer at 0xC6000, the IM1024 + * appears to have an alternate method of passing commands. This + * is enabled by setting 0xC6330 to 1, and then: * - * CX = count to write - * SI -> bytes to write + * CX = count to write + * SI -> bytes to write * - * Set pending bytes to 0 - * Read [C6331]. This gives number of bytes that can be written: - * 0xFF => 0, 0xFE => 1, 0xFD => 2 etc. - * Write that number of bytes to C6000. - * If there are more to come, go back to reading [C6331]. + * Set pending bytes to 0 + * Read [C6331]. This gives number of bytes that can be written: + * 0xFF => 0, 0xFE => 1, 0xFD => 2 etc. + * Write that number of bytes to C6000. + * If there are more to come, go back to reading [C6331]. * - * As far as can be determined, at least one byte is always - * written; there is no provision to pause if the queue is full. + * As far as can be determined, at least one byte is always + * written; there is no provision to pause if the queue is full. * - * This is implemented by holding a FIFO of unlimited depth in - * the IM1024 to receive the data. + * This is implemented by holding a FIFO of unlimited depth in + * the IM1024 to receive the data. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. */ #include #include diff --git a/src/video/vid_incolor.c b/src/video/vid_incolor.c index 6bf98ab86..68673c061 100644 --- a/src/video/vid_incolor.c +++ b/src/video/vid_incolor.c @@ -1,20 +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. + * 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. * - * Hercules InColor emulation. + * Hercules InColor emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_mda.c b/src/video/vid_mda.c index 5ace70058..57e91637c 100644 --- a/src/video/vid_mda.c +++ b/src/video/vid_mda.c @@ -1,20 +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. + * 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. * - * MDA emulation. + * MDA emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_mga.c b/src/video/vid_mga.c index 6da9a7c0f..ef7a2b366 100644 --- a/src/video/vid_mga.c +++ b/src/video/vid_mga.c @@ -1,17 +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. * - * Matrox MGA graphics card emulation. + * Matrox MGA graphics card emulation. * * * - * Author: Sarah Walker, - * Copyright 2008-2020 Sarah Walker. + * Authors: Sarah Walker, + * + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_nga.c b/src/video/vid_nga.c index 86173f198..e2e8fdc9c 100644 --- a/src/video/vid_nga.c +++ b/src/video/vid_nga.c @@ -1,24 +1,24 @@ /* - * 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. * - * Emulation of the NCR NGA (K511, K201) video cards. + * Emulation of the NCR NGA (K511, K201) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #include diff --git a/src/video/vid_oak_oti.c b/src/video/vid_oak_oti.c index 742bbafb0..cc07dc0a4 100644 --- a/src/video/vid_oak_oti.c +++ b/src/video/vid_oak_oti.c @@ -1,20 +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. + * 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. * - * Oak OTI037C/67/077 emulation. + * Oak OTI037C/67/077 emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_ogc.c b/src/video/vid_ogc.c index eddc6da8d..38d993216 100644 --- a/src/video/vid_ogc.c +++ b/src/video/vid_ogc.c @@ -1,25 +1,25 @@ /* - * 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. * - * Emulation of the Olivetti OGC 8-bit ISA (GO708) and - * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. + * Emulation of the Olivetti OGC 8-bit ISA (GO708) and + * M21/M24/M28 16-bit bus (GO317/318/380/709) video cards. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, - * EngiNerd, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - * Copyright 2017-2019 Fred N. van Kempen. - * Copyright 2020 EngiNerd. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2020 EngiNerd. */ #include diff --git a/src/video/vid_paradise.c b/src/video/vid_paradise.c index 3d82d459a..f2ec8aeb2 100644 --- a/src/video/vid_paradise.c +++ b/src/video/vid_paradise.c @@ -1,22 +1,22 @@ /* - * 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. * - * Paradise VGA emulation - * PC2086, PC3086 use PVGA1A - * MegaPC uses W90C11A + * Paradise VGA emulation + * PC2086, PC3086 use PVGA1A + * MegaPC uses W90C11A * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_pgc.c b/src/video/vid_pgc.c index eb28540fc..74a20145c 100644 --- a/src/video/vid_pgc.c +++ b/src/video/vid_pgc.c @@ -1,56 +1,56 @@ /* - * 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. * - * This implements just enough of the Professional Graphics - * Controller to act as a basis for the Vermont Microsystems - * IM-1024. + * This implements just enough of the Professional Graphics + * Controller to act as a basis for the Vermont Microsystems + * IM-1024. * - * PGC features implemented include: - * > The CGA-compatible display modes - * > Switching to and from native mode - * > Communicating with the host PC + * PGC features implemented include: + * > The CGA-compatible display modes + * > Switching to and from native mode + * > Communicating with the host PC * - * Numerous features are implemented partially or not at all, - * such as: - * > 2D drawing - * > 3D drawing - * > Command lists - * Some of these are marked TODO. + * Numerous features are implemented partially or not at all, + * such as: + * > 2D drawing + * > 3D drawing + * > Command lists + * Some of these are marked TODO. * - * The PGC has two display modes: CGA (in which it appears in - * the normal CGA memory and I/O ranges) and native (in which - * all functions are accessed through reads and writes to 1K - * of memory at 0xC6000). + * The PGC has two display modes: CGA (in which it appears in + * the normal CGA memory and I/O ranges) and native (in which + * all functions are accessed through reads and writes to 1K + * of memory at 0xC6000). * - * The PGC's 8088 processor monitors this buffer and executes - * instructions left there for it. We simulate this behavior - * with a separate thread. + * The PGC's 8088 processor monitors this buffer and executes + * instructions left there for it. We simulate this behavior + * with a separate thread. * - * **NOTE** This driver is not finished yet: + * **NOTE** This driver is not finished yet: * - * - cursor will blink at very high speed if used on a machine - * with clock greater than 4.77MHz. We should "scale down" - * this speed, to become relative to a 4.77MHz-based system. + * - cursor will blink at very high speed if used on a machine + * with clock greater than 4.77MHz. We should "scale down" + * this speed, to become relative to a 4.77MHz-based system. * - * - pgc_plot() should be overloaded by clones if they support - * modes other than WRITE and INVERT, like the IM-1024. + * - pgc_plot() should be overloaded by clones if they support + * modes other than WRITE and INVERT, like the IM-1024. * - * - test it with the Windows 1.x driver? + * - test it with the Windows 1.x driver? * - * This is expected to be done shortly. + * This is expected to be done shortly. * * * - * Authors: Fred N. van Kempen, - * John Elliott, + * Authors: Fred N. van Kempen, + * John Elliott, * - * Copyright 2019 Fred N. van Kempen. - * Copyright 2019 John Elliott. + * Copyright 2019 Fred N. van Kempen. + * Copyright 2019 John Elliott. * * 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 diff --git a/src/video/vid_rtg310x.c b/src/video/vid_rtg310x.c index 10f97cf4f..6f317426b 100644 --- a/src/video/vid_rtg310x.c +++ b/src/video/vid_rtg310x.c @@ -1,18 +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. * - * Emulation of the Realtek RTG series of VGA ISA chips. + * Emulation of the Realtek RTG series of VGA ISA chips. * * * - * Authors: TheCollector1995, + * Authors: TheCollector1995, * - * Copyright 2021 TheCollector1995. + * Copyright 2021 TheCollector1995. */ #include #include diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index b17f0e50b..e6630a6c3 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index 99661d309..376abb68c 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1,20 +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. + * 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. * - * S3 ViRGE emulation. + * S3 ViRGE emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_sc1148x_ramdac.c b/src/video/vid_sc1148x_ramdac.c index 936ff308d..873f66e92 100644 --- a/src/video/vid_sc1148x_ramdac.c +++ b/src/video/vid_sc1148x_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of Sierra SC1148x RAMDACs and clones (e.g.: Winbond). + * Emulation of Sierra SC1148x RAMDACs and clones (e.g.: Winbond). * - * Used by the S3 911 and 924 chips. + * Used by the S3 911 and 924 chips. * * * - * Authors: TheCollector1995, + * Authors: TheCollector1995, * - * Copyright 2020 TheCollector1995. + * Copyright 2020 TheCollector1995. */ #include #include diff --git a/src/video/vid_sc1502x_ramdac.c b/src/video/vid_sc1502x_ramdac.c index 202091449..3a3b3a863 100644 --- a/src/video/vid_sc1502x_ramdac.c +++ b/src/video/vid_sc1502x_ramdac.c @@ -1,22 +1,22 @@ /* - * 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. * - * Emulation of a Sierra SC1502X RAMDAC. + * Emulation of a Sierra SC1502X RAMDAC. * - * Used by the TLIVESA1 driver for ET4000. + * Used by the TLIVESA1 driver for ET4000. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_sdac_ramdac.c b/src/video/vid_sdac_ramdac.c index 58d6b164c..45fe714ec 100644 --- a/src/video/vid_sdac_ramdac.c +++ b/src/video/vid_sdac_ramdac.c @@ -1,20 +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. + * 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. * - * 87C716 'SDAC' true colour RAMDAC emulation. + * 87C716 'SDAC' true colour RAMDAC emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_sigma.c b/src/video/vid_sigma.c index d8fa55ce3..0e1833b1e 100644 --- a/src/video/vid_sigma.c +++ b/src/video/vid_sigma.c @@ -1,18 +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. * - * Sigma Color 400 emulation. + * Sigma Color 400 emulation. * * * - * Authors: John Elliott, + * Authors: John Elliott, * - * Copyright 2018 John Elliott. + * Copyright 2018 John Elliott. */ #include #include diff --git a/src/video/vid_stg_ramdac.c b/src/video/vid_stg_ramdac.c index 161cf1177..78a477acb 100644 --- a/src/video/vid_stg_ramdac.c +++ b/src/video/vid_stg_ramdac.c @@ -1,20 +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. + * 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. * - * STG1702 true colour RAMDAC emulation. + * STG1702 true colour RAMDAC emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 21d0b50ee..0d493a59e 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -13,7 +13,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/video/vid_svga_render.c b/src/video/vid_svga_render.c index c67a46e0d..ca843ac74 100644 --- a/src/video/vid_svga_render.c +++ b/src/video/vid_svga_render.c @@ -1,20 +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. + * 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. * - * SVGA renderers. + * SVGA renderers. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_tgui9440.c b/src/video/vid_tgui9440.c index dd39daf8e..f2475888b 100644 --- a/src/video/vid_tgui9440.c +++ b/src/video/vid_tgui9440.c @@ -1,59 +1,59 @@ /* - * 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. * - * Trident TGUI9400CXi and TGUI9440 emulation. + * Trident TGUI9400CXi and TGUI9440 emulation. * - * TGUI9400CXi has extended write modes, controlled by extended - * GDC registers : + * TGUI9400CXi has extended write modes, controlled by extended + * GDC registers : * - * GDC[0x10] - Control - * bit 0 - pixel width (1 = 16 bit, 0 = 8 bit) - * bit 1 - mono->colour expansion (1 = enabled, - * 0 = disabled) - * bit 2 - mono->colour expansion transparency - * (1 = transparent, 0 = opaque) - * bit 3 - extended latch copy - * GDC[0x11] - Background colour (low byte) - * GDC[0x12] - Background colour (high byte) - * GDC[0x14] - Foreground colour (low byte) - * GDC[0x15] - Foreground colour (high byte) - * GDC[0x17] - Write mask (low byte) - * GDC[0x18] - Write mask (high byte) + * GDC[0x10] - Control + * bit 0 - pixel width (1 = 16 bit, 0 = 8 bit) + * bit 1 - mono->colour expansion (1 = enabled, + * 0 = disabled) + * bit 2 - mono->colour expansion transparency + * (1 = transparent, 0 = opaque) + * bit 3 - extended latch copy + * GDC[0x11] - Background colour (low byte) + * GDC[0x12] - Background colour (high byte) + * GDC[0x14] - Foreground colour (low byte) + * GDC[0x15] - Foreground colour (high byte) + * GDC[0x17] - Write mask (low byte) + * GDC[0x18] - Write mask (high byte) * - * Mono->colour expansion will expand written data 8:1 to 8/16 - * consecutive bytes. - * MSB is processed first. On word writes, low byte is processed - * first. 1 bits write foreground colour, 0 bits write background - * colour unless transparency is enabled. - * If the relevant bit is clear in the write mask then the data - * is not written. + * Mono->colour expansion will expand written data 8:1 to 8/16 + * consecutive bytes. + * MSB is processed first. On word writes, low byte is processed + * first. 1 bits write foreground colour, 0 bits write background + * colour unless transparency is enabled. + * If the relevant bit is clear in the write mask then the data + * is not written. * - * With 16-bit pixel width, each bit still expands to one byte, - * so the TGUI driver doubles up monochrome data. + * With 16-bit pixel width, each bit still expands to one byte, + * so the TGUI driver doubles up monochrome data. * - * While there is room in the register map for three byte colours, - * I don't believe 24-bit colour is supported. The TGUI9440 - * blitter has the same limitation. + * While there is room in the register map for three byte colours, + * I don't believe 24-bit colour is supported. The TGUI9440 + * blitter has the same limitation. * - * I don't think double word writes are supported. + * I don't think double word writes are supported. * - * Extended latch copy uses an internal 16 byte latch. Reads load - * the latch, writing writes out 16 bytes. I don't think the - * access size or host data has any affect, but the Windows 3.1 - * driver always reads bytes and write words of 0xffff. + * Extended latch copy uses an internal 16 byte latch. Reads load + * the latch, writing writes out 16 bytes. I don't think the + * access size or host data has any affect, but the Windows 3.1 + * driver always reads bytes and write words of 0xffff. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #include diff --git a/src/video/vid_ti_cf62011.c b/src/video/vid_ti_cf62011.c index 417f85861..f804a6dde 100644 --- a/src/video/vid_ti_cf62011.c +++ b/src/video/vid_ti_cf62011.c @@ -1,56 +1,56 @@ /* - * 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. * - * Emulation of the TI CF62011 SVGA chip. + * Emulation of the TI CF62011 SVGA chip. * - * This chip was used in several of IBM's later machines, such - * as the PS/1 Model 2121, and a number of PS/2 models. As noted - * in an article on Usenet: + * This chip was used in several of IBM's later machines, such + * as the PS/1 Model 2121, and a number of PS/2 models. As noted + * in an article on Usenet: * - * "In the early 90s IBM looked for some cheap VGA card to - * substitute the (relatively) expensive XGA-2 adapter for - * *servers*, where the primary purpose is supervision of the - * machine rather than real *work* with it in Hi-Res. It was - * just to supply a base video, where a XGA-2 were a waste of - * potential. They had a contract with TI for some DSPs in - * multimedia already (the MWave for instance is based on - * TI-DSPs as well as many Thinkpad internal chipsets) and TI - * offered them a rather cheap – and inexpensive – chipset - * and combined it with a cheap clock oscillator and an Inmos - * RAMDAC. That chipset was already pretty much outdated at - * that time but IBM decided it would suffice for that low - * end purpose. + * "In the early 90s IBM looked for some cheap VGA card to + * substitute the (relatively) expensive XGA-2 adapter for + * *servers*, where the primary purpose is supervision of the + * machine rather than real *work* with it in Hi-Res. It was + * just to supply a base video, where a XGA-2 were a waste of + * potential. They had a contract with TI for some DSPs in + * multimedia already (the MWave for instance is based on + * TI-DSPs as well as many Thinkpad internal chipsets) and TI + * offered them a rather cheap – and inexpensive – chipset + * and combined it with a cheap clock oscillator and an Inmos + * RAMDAC. That chipset was already pretty much outdated at + * that time but IBM decided it would suffice for that low + * end purpose. * - * Driver support was given under DOS and OS/2 only for base - * functions like selection of the vertical refresh and few - * different modes only. Not even the Win 3.x support has - * been finalized. Technically the adapter could do better - * than VGA, but its video BIOS is largely undocumented and - * intentionally crippled down to a few functions." + * Driver support was given under DOS and OS/2 only for base + * functions like selection of the vertical refresh and few + * different modes only. Not even the Win 3.x support has + * been finalized. Technically the adapter could do better + * than VGA, but its video BIOS is largely undocumented and + * intentionally crippled down to a few functions." * - * This chip is reportedly the same one as used in the MCA - * IBM SVGA Adapter/A (ID 090EEh), which mostly had faster - * VRAM and RAMDAC. The VESA DOS graphics driver for that - * card can be used: m95svga.exe + * This chip is reportedly the same one as used in the MCA + * IBM SVGA Adapter/A (ID 090EEh), which mostly had faster + * VRAM and RAMDAC. The VESA DOS graphics driver for that + * card can be used: m95svga.exe * - * The controller responds at ports in the range 0x2100-0x210F, - * which are the same as the XGA. It supports up to 1MB of VRAM, - * but we lock it down to 512K. The PS/1 2122 had 256K. + * The controller responds at ports in the range 0x2100-0x210F, + * which are the same as the XGA. It supports up to 1MB of VRAM, + * but we lock it down to 512K. The PS/1 2122 had 256K. * * * - * Authors: Sarah Walker, - * Miran Grca, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. - * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017-2018 Fred N. van Kempen. */ #include #include diff --git a/src/video/vid_tkd8001_ramdac.c b/src/video/vid_tkd8001_ramdac.c index 225c91c4b..66c2ca922 100644 --- a/src/video/vid_tkd8001_ramdac.c +++ b/src/video/vid_tkd8001_ramdac.c @@ -1,20 +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. + * 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. * - * Trident TKD8001 RAMDAC emulation. + * Trident TKD8001 RAMDAC emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_tvga.c b/src/video/vid_tvga.c index ed249f618..384770ba4 100644 --- a/src/video/vid_tvga.c +++ b/src/video/vid_tvga.c @@ -1,20 +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. + * 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. * - * Trident TVGA (8900D) emulation. + * Trident TVGA (8900D) emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_tvp3026_ramdac.c b/src/video/vid_tvp3026_ramdac.c index cde953b01..2ea60d520 100644 --- a/src/video/vid_tvp3026_ramdac.c +++ b/src/video/vid_tvp3026_ramdac.c @@ -1,20 +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. + * 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. * - * Emulation of the Texas Instruments TVP3026 true colour RAMDAC - * family. + * Emulation of the Texas Instruments TVP3026 true colour RAMDAC + * family. * * - * TODO: Clock and other parts. + * TODO: Clock and other parts. * - * Authors: TheCollector1995, + * Authors: TheCollector1995, * - * Copyright 2021 TheCollector1995. + * Copyright 2021 TheCollector1995. */ #include #include diff --git a/src/video/vid_vga.c b/src/video/vid_vga.c index e581f237c..ac26c2b5d 100644 --- a/src/video/vid_vga.c +++ b/src/video/vid_vga.c @@ -1,20 +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. + * 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. * - * IBM VGA emulation. + * IBM VGA emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/vid_voodoo.c b/src/video/vid_voodoo.c index 326ff9879..cb5491c03 100644 --- a/src/video/vid_voodoo.c +++ b/src/video/vid_voodoo.c @@ -1,19 +1,19 @@ /* - * 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. * - * Voodoo Graphics, 2, Banshee, 3 emulation. + * Voodoo Graphics, 2, Banshee, 3 emulation. * * * - * Authors: Sarah Walker, - * leilei + * Authors: Sarah Walker, + * leilei * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 386ac8575..f1c1347fe 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -1,18 +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. * - * Voodoo Banshee and 3 specific emulation. + * Voodoo Banshee and 3 specific emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_blitter.c b/src/video/vid_voodoo_blitter.c index 00847554a..f60d9e184 100644 --- a/src/video/vid_voodoo_blitter.c +++ b/src/video/vid_voodoo_blitter.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_display.c b/src/video/vid_voodoo_display.c index 40e0b2ce9..68be3b26d 100644 --- a/src/video/vid_voodoo_display.c +++ b/src/video/vid_voodoo_display.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_fb.c b/src/video/vid_voodoo_fb.c index 705c16853..f4a4edca6 100644 --- a/src/video/vid_voodoo_fb.c +++ b/src/video/vid_voodoo_fb.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_fifo.c b/src/video/vid_voodoo_fifo.c index d90c12bb5..646e5876c 100644 --- a/src/video/vid_voodoo_fifo.c +++ b/src/video/vid_voodoo_fifo.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_reg.c b/src/video/vid_voodoo_reg.c index 3d5580d04..51b9568b8 100644 --- a/src/video/vid_voodoo_reg.c +++ b/src/video/vid_voodoo_reg.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_render.c b/src/video/vid_voodoo_render.c index ec16b3a32..4b09cfadb 100644 --- a/src/video/vid_voodoo_render.c +++ b/src/video/vid_voodoo_render.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_setup.c b/src/video/vid_voodoo_setup.c index f98ddb450..40018ddf8 100644 --- a/src/video/vid_voodoo_setup.c +++ b/src/video/vid_voodoo_setup.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_voodoo_texture.c b/src/video/vid_voodoo_texture.c index 9d1149c65..4f81f6d00 100644 --- a/src/video/vid_voodoo_texture.c +++ b/src/video/vid_voodoo_texture.c @@ -1,18 +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. * - * 3DFX Voodoo emulation. + * 3DFX Voodoo emulation. * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * - * Copyright 2008-2020 Sarah Walker. + * Copyright 2008-2020 Sarah Walker. */ #include #include diff --git a/src/video/vid_wy700.c b/src/video/vid_wy700.c index e492523db..1a4babb99 100644 --- a/src/video/vid_wy700.c +++ b/src/video/vid_wy700.c @@ -1,20 +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. + * 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. * - * Wyse-700 emulation. + * Wyse-700 emulation. * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include diff --git a/src/video/video.c b/src/video/video.c index 096ea89e1..d0e9ebb2c 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -1,52 +1,52 @@ /* - * 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. * - * Main video-rendering module. + * Main video-rendering module. * - * Video timing settings - + * Video timing settings - * - * 8-bit - 1mb/sec - * B = 8 ISA clocks - * W = 16 ISA clocks - * L = 32 ISA clocks + * 8-bit - 1mb/sec + * B = 8 ISA clocks + * W = 16 ISA clocks + * L = 32 ISA clocks * - * Slow 16-bit - 2mb/sec - * B = 6 ISA clocks - * W = 8 ISA clocks - * L = 16 ISA clocks + * Slow 16-bit - 2mb/sec + * B = 6 ISA clocks + * W = 8 ISA clocks + * L = 16 ISA clocks * - * Fast 16-bit - 4mb/sec - * B = 3 ISA clocks - * W = 3 ISA clocks - * L = 6 ISA clocks + * Fast 16-bit - 4mb/sec + * B = 3 ISA clocks + * W = 3 ISA clocks + * L = 6 ISA clocks * - * Slow VLB/PCI - 8mb/sec (ish) - * B = 4 bus clocks - * W = 8 bus clocks - * L = 16 bus clocks + * Slow VLB/PCI - 8mb/sec (ish) + * B = 4 bus clocks + * W = 8 bus clocks + * L = 16 bus clocks * - * Mid VLB/PCI - - * B = 4 bus clocks - * W = 5 bus clocks - * L = 10 bus clocks + * Mid VLB/PCI - + * B = 4 bus clocks + * W = 5 bus clocks + * L = 10 bus clocks * - * Fast VLB/PCI - - * B = 3 bus clocks - * W = 3 bus clocks - * L = 4 bus clocks + * Fast VLB/PCI - + * B = 3 bus clocks + * W = 3 bus clocks + * L = 4 bus clocks * * * - * Authors: Sarah Walker, - * Miran Grca, + * Authors: Sarah Walker, + * Miran Grca, * - * Copyright 2008-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. */ #include #define PNG_DEBUG 0 diff --git a/src/win/glad.c b/src/win/glad.c index f3ceb1148..7c282ebee 100644 --- a/src/win/glad.c +++ b/src/win/glad.c @@ -1,6 +1,6 @@ /* - OpenGL loader generated by glad 0.1.34 on Sat Dec 4 18:46:02 2021. + OpenGL loader generated by glad 0.1.36 on Sat Jan 7 18:24:33 2023. Language/Generator: C/C++ Specification: gl @@ -21,10 +21,10 @@ https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.0&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_debug_output&extensions=GL_ARB_sync */ -#include #include #include #include +#include static void *get_proc(const char *namez); diff --git a/src/win/win.c b/src/win/win.c index 3d46054a6..3dd41fca9 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/win/win_cdrom.c b/src/win/win_cdrom.c index 00195bcda..bfd62383a 100644 --- a/src/win/win_cdrom.c +++ b/src/win/win_cdrom.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/src/win/win_devconf.c b/src/win/win_devconf.c index c867dab9f..5a833d5e5 100644 --- a/src/win/win_devconf.c +++ b/src/win/win_devconf.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/win/win_icon.c b/src/win/win_icon.c index d23a325ff..64acc44b0 100644 --- a/src/win/win_icon.c +++ b/src/win/win_icon.c @@ -9,6 +9,7 @@ * Implement the application's icon changing system. * * + * * Authors: Laci bá' * * Copyright 2021 Laci bá'. diff --git a/src/win/win_joystick.cpp b/src/win/win_joystick.cpp index ab9a2907e..42ab8bd69 100644 --- a/src/win/win_joystick.cpp +++ b/src/win/win_joystick.cpp @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * * Copyright 2008-2019 Sarah Walker. diff --git a/src/win/win_joystick_rawinput.c b/src/win/win_joystick_rawinput.c index efaf76f01..2976a54b9 100644 --- a/src/win/win_joystick_rawinput.c +++ b/src/win/win_joystick_rawinput.c @@ -8,7 +8,9 @@ * * RawInput joystick interface. * - * Authors: Sarah Walker, + * + * + * Authors: Sarah Walker, * Miran Grca, * GH Cao, * diff --git a/src/win/win_joystick_xinput.c b/src/win/win_joystick_xinput.c index caf8f3452..2f98e5241 100644 --- a/src/win/win_joystick_xinput.c +++ b/src/win/win_joystick_xinput.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * GH Cao, * diff --git a/src/win/win_mouse.c b/src/win/win_mouse.c index 4490328a9..1a914aa9b 100644 --- a/src/win/win_mouse.c +++ b/src/win/win_mouse.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * GH Cao, * diff --git a/src/win/win_opengl.c b/src/win/win_opengl.c index d9a492927..586632aaa 100644 --- a/src/win/win_opengl.c +++ b/src/win/win_opengl.c @@ -15,6 +15,8 @@ * (UI) options * More error handling * + * + * * Authors: Teemu Korhonen * * Copyright 2021 Teemu Korhonen @@ -63,7 +65,7 @@ typedef LONG atomic_flag; static const int INIT_WIDTH = 640; static const int INIT_HEIGHT = 400; -static const int BUFFERPIXELS = 4194304; /* Same size as render_buffer, pow(2048+64,2). */ +static const int BUFFERPIXELS = 4194304; /* Same size as render_buffer, pow(2048 + 64, 2). */ static const int BUFFERBYTES = 16777216; /* Pixel is 4 bytes. */ static const int BUFFERCOUNT = 3; /* How many buffers to use for pixel transfer (2-3 is commonly recommended). */ static const int ROW_LENGTH = 2048; /* Source buffer row lenght (including padding) */ diff --git a/src/win/win_opengl_glslp.c b/src/win/win_opengl_glslp.c index c3d40a56e..47cc755dc 100644 --- a/src/win/win_opengl_glslp.c +++ b/src/win/win_opengl_glslp.c @@ -11,6 +11,8 @@ * * TODO: Read .glslp files for multipass shaders and settings. * + * + * * Authors: Teemu Korhonen * * Copyright 2021 Teemu Korhonen diff --git a/src/win/win_settings.c b/src/win/win_settings.c index d6e0c0693..40501c77c 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -14,7 +14,7 @@ * David Hrdlička, * * Copyright 2016-2019 Miran Grca. - * Copyright 2018,2019 David Hrdlička. + * Copyright 2018-2019 David Hrdlička. * Copyright 2021 Laci bá' * Copyright 2021-2022 Jasmine Iwanek. */ @@ -1103,7 +1103,7 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) settings_enable_window(hdlg, IDC_CONFIGURE_VID, video_card_has_config(e)); // Secondary Video Card - c = 0; + c = d = 0; settings_reset_content(hdlg, IDC_COMBO_VIDEO_2); while (1) { @@ -1118,12 +1118,17 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) if (!device_name[0]) break; + if ((c > 1) && (video_card_get_flags(c) == video_card_get_flags(temp_gfxcard))) { + c++; + continue; + } + if (video_card_available(c) && device_is_valid(video_card_getdevice(c), temp_machine)) { if (c == 0) // "None" settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2104)); else if (c == 1) // "Internal" settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2119)); - else if (video_card_get_flags(c) != video_card_get_flags(gfxcard)) + else settings_add_string(hdlg, IDC_COMBO_VIDEO_2, (LPARAM) device_name); settings_list_to_device[1][d] = c; if ((c == 0) || (c == temp_gfxcard_2)) @@ -1158,6 +1163,49 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) case IDC_COMBO_VIDEO: temp_gfxcard = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_VIDEO)]; settings_enable_window(hdlg, IDC_CONFIGURE_VID, video_card_has_config(temp_gfxcard)); + + // Secondary Video Card + c = d = 0; + settings_reset_content(hdlg, IDC_COMBO_VIDEO_2); + + while (1) { + /* Skip "internal" if machine doesn't have it. */ + if ((c == 1) && !machine_has_flags(temp_machine, MACHINE_VIDEO)) { + c++; + continue; + } + + generate_device_name(video_card_getdevice(c), video_get_internal_name(c), 1); + + if (!device_name[0]) + break; + + if ((c > 1) && (video_card_get_flags(c) == video_card_get_flags(temp_gfxcard))) { + c++; + continue; + } + + if (video_card_available(c) && device_is_valid(video_card_getdevice(c), temp_machine)) { + if (c == 0) // "None" + settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2104)); + else if (c == 1) // "Internal" + settings_add_string(hdlg, IDC_COMBO_VIDEO_2, win_get_string(IDS_2119)); + else + settings_add_string(hdlg, IDC_COMBO_VIDEO_2, (LPARAM) device_name); + settings_list_to_device[1][d] = c; + if ((c == 0) || (c == temp_gfxcard_2)) + settings_set_cur_sel(hdlg, IDC_COMBO_VIDEO_2, d); + d++; + } + + c++; + + settings_process_messages(); + } + + settings_enable_window(hdlg, IDC_COMBO_VIDEO_2, !machine_has_flags(temp_machine, MACHINE_VIDEO_ONLY)); + e = settings_list_to_device[1][settings_get_cur_sel(hdlg, IDC_COMBO_VIDEO_2)]; + settings_enable_window(hdlg, IDC_CONFIGURE_VID_2, video_card_has_config(e)); break; case IDC_COMBO_VIDEO_2: @@ -1184,11 +1232,10 @@ win_settings_video_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) break; case IDC_BUTTON_XGA: - if (machine_has_bus(temp_machine, MACHINE_BUS_MCA) > 0) { + if (machine_has_bus(temp_machine, MACHINE_BUS_MCA) > 0) temp_deviceconfig |= deviceconfig_open(hdlg, (void *) &xga_device); - } else { + else temp_deviceconfig |= deviceconfig_open(hdlg, (void *) &xga_isa_device); - } break; case IDC_CONFIGURE_VID: diff --git a/src/win/win_thread.c b/src/win/win_thread.c index 97ea3a56c..c110779f2 100644 --- a/src/win/win_thread.c +++ b/src/win/win_thread.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Fred N. van Kempen, * * Copyright 2008-2018 Sarah Walker. diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 38d7e161c..6107c0609 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -10,7 +10,7 @@ * * * - * Authors: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * diff --git a/vcpkg.json b/vcpkg.json index 46ab6bff3..c9fd8eceb 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -2,7 +2,7 @@ "name": "86box", "version-string": "3.11", "homepage": "https://86box.net/", - "documentation": "http://86box.readthedocs.io/", + "documentation": "https://86box.readthedocs.io/", "license": "GPL-2.0-or-later", "dependencies": [ "freetype", From f9bc675a62102b5b6b4617bba97490a0ef2850fb Mon Sep 17 00:00:00 2001 From: TC1995 Date: Sun, 8 Jan 2023 14:32:58 +0100 Subject: [PATCH 096/112] Git, so, stop the pull/push errors, anyway, fix compile again. --- src/cdrom/cdrom_mitsumi.c | 89 +++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/src/cdrom/cdrom_mitsumi.c b/src/cdrom/cdrom_mitsumi.c index a6ad860b3..64433535f 100644 --- a/src/cdrom/cdrom_mitsumi.c +++ b/src/cdrom/cdrom_mitsumi.c @@ -1,18 +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. * - * Mitsumi CD-ROM emulation for the ISA bus. + * Mitsumi CD-ROM emulation for the ISA bus. * * * - * Authors: Miran Grca, + * Author: Miran Grca, * - * Copyright 2022 Miran Grca. + * Copyright 2022 Miran Grca. */ #include #include @@ -28,6 +28,7 @@ #include <86box/pic.h> #include <86box/dma.h> #include <86box/cdrom.h> +#include <86box/cdrom_interface.h> #include <86box/cdrom_mitsumi.h> #include <86box/plat.h> #include <86box/sound.h> @@ -109,6 +110,7 @@ typedef struct { int drvmode; int cur_toc_track; int pos; + int newstat; } mcd_t; /* The addresses sent from the guest are absolute, ie. a LBA of 0 corresponds to a MSF of 00:00:00. Otherwise, the counter displayed by the guest is wrong: @@ -141,9 +143,9 @@ mitsumi_cdrom_log(const char *fmt, ...) static void mitsumi_cdrom_reset(mcd_t *dev) { - cdrom_t *cdrom = &cdrom[0]; + cdrom_t cdrom; - dev->stat = cdrom->host_drive ? (STAT_READY | STAT_CHANGE) : 0; + dev->stat = cdrom.host_drive ? (STAT_READY | STAT_CHANGE) : 0; dev->cmdrd_count = 0; dev->cmdbuf_count = 0; dev->buf_count = 0; @@ -154,21 +156,19 @@ mitsumi_cdrom_reset(mcd_t *dev) dev->dmalen = COOKED_SECTOR_SIZE; dev->locked = 0; dev->change = 1; + dev->newstat = 1; dev->data = 0; } static int mitsumi_cdrom_read_sector(mcd_t *dev, int first) { - cdrom_t *cdrom = &cdrom[0]; + cdrom_t cdrom; uint8_t status; int ret; - if (cdrom == NULL) - return 0; - if (dev->drvmode == DRV_MODE_CDDA) { - status = cdrom_mitsumi_audio_play(cdrom, dev->readmsf, dev->readcount); + status = cdrom_mitsumi_audio_play(&cdrom, dev->readmsf, dev->readcount); if (status == 1) return status; else @@ -182,15 +182,15 @@ mitsumi_cdrom_read_sector(mcd_t *dev, int first) dev->data = 0; return 0; } - cdrom_stop(cdrom); - ret = cdrom_readsector_raw(cdrom, dev->buf, cdrom->seek_pos, 0, 2, 0x10, (int *) &dev->readcount); + cdrom_stop(&cdrom); + ret = cdrom_readsector_raw(&cdrom, dev->buf, cdrom.seek_pos, 0, 2, 0x10, (int *) &dev->readcount, 0); if (!ret) return 0; if (dev->mode & 0x40) { dev->buf[12] = CD_BCD((dev->readmsf >> 16) & 0xff); dev->buf[13] = CD_BCD((dev->readmsf >> 8) & 0xff); } - dev->readmsf = cdrom_lba_to_msf_accurate(cdrom->seek_pos + 1); + dev->readmsf = cdrom_lba_to_msf_accurate(cdrom.seek_pos + 1); dev->buf_count = dev->dmalen + 1; dev->buf_idx = 0; dev->data = 1; @@ -213,6 +213,7 @@ mitsumi_cdrom_in(uint16_t port, void *priv) mcd_t *dev = (mcd_t *) priv; uint8_t ret; + pclog("Mitsumi CD-ROM IN=%03x\n", port); switch (port & 1) { case 0: if (dev->cmdbuf_count) { @@ -225,16 +226,19 @@ mitsumi_cdrom_in(uint16_t port, void *priv) if (!dev->buf_count) mitsumi_cdrom_read_sector(dev, 0); + pclog("Read port 0: ret = %02x\n", ret); return ret; } + pclog("Read port 0: stat = %02x\n", dev->stat); return dev->stat; case 1: ret = 0; picintc(1 << dev->irq); if (!dev->buf_count || !dev->data || dev->enable_dma) ret |= FLAG_NODATA; - if (!dev->cmdbuf_count) + if (!dev->cmdbuf_count || !dev->newstat) ret |= FLAG_NOSTAT; + pclog("Read port 1: ret = %02x\n", ret | FLAG_UNK); return ret | FLAG_UNK; } @@ -245,8 +249,9 @@ static void mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) { mcd_t *dev = (mcd_t *) priv; - cdrom_t *cdrom = &cdrom[0]; + cdrom_t cdrom; + pclog("Mitsumi CD-ROM OUT=%03x, val=%02x\n", port, val); switch (port & 1) { case 0: if (dev->cmdrd_count) { @@ -317,19 +322,19 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) break; } if (!dev->cmdrd_count) - dev->stat = cdrom->host_drive ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; + dev->stat = cdrom.host_drive ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; return; } dev->cmd = val; dev->cmdbuf_idx = 0; dev->cmdrd_count = 0; dev->cmdbuf_count = 1; - dev->cmdbuf[0] = cdrom->host_drive ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; + dev->cmdbuf[0] = cdrom.host_drive ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; dev->data = 0; switch (val) { case CMD_GET_INFO: - if (cdrom->host_drive) { - cdrom_get_track_buffer(cdrom, &(dev->cmdbuf[1])); + if (cdrom.host_drive) { + cdrom_get_track_buffer(&cdrom, &(dev->cmdbuf[1])); dev->cmdbuf_count = 10; dev->readcount = 0; } else { @@ -338,8 +343,8 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) } break; case CMD_GET_Q: - if (cdrom->host_drive) { - cdrom_get_q(cdrom, &(dev->cmdbuf[1]), &dev->cur_toc_track, dev->mode & MODE_GET_TOC); + if (cdrom.host_drive) { + cdrom_get_q(&cdrom, &(dev->cmdbuf[1]), &dev->cur_toc_track, dev->mode & MODE_GET_TOC); dev->cmdbuf_count = 11; dev->readcount = 0; } else { @@ -355,7 +360,7 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) break; case CMD_STOPCDDA: case CMD_STOP: - cdrom_stop(cdrom); + cdrom_stop(&cdrom); dev->drvmode = DRV_MODE_STOP; dev->cur_toc_track = 0; break; @@ -364,7 +369,7 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) break; case CMD_READ1X: case CMD_READ2X: - if (cdrom->host_drive) { + if (cdrom.host_drive) { dev->readcount = 0; dev->drvmode = (val == CMD_READ1X) ? DRV_MODE_CDDA : DRV_MODE_READ; dev->cmdrd_count = 6; @@ -380,13 +385,17 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) dev->cmdbuf_count = 4; break; case CMD_EJECT: - cdrom_stop(cdrom); + cdrom_stop(&cdrom); cdrom_eject(0); dev->readcount = 0; break; case CMD_LOCK: dev->cmdrd_count = 1; break; + case CMD_SOFT_RESET: + pclog("Soft Reset\n"); + mitsumi_cdrom_reset(dev); + break; default: dev->cmdbuf[0] = dev->stat | STAT_CMD_CHECK; break; @@ -429,15 +438,15 @@ mitsumi_cdrom_close(void *priv) } const device_t mitsumi_cdrom_device = { - "Mitsumi CD-ROM interface", - "mcd", - DEVICE_ISA | DEVICE_AT, - 0, - mitsumi_cdrom_init, - mitsumi_cdrom_close, - NULL, - { NULL }, - NULL, - NULL, - NULL + .name = "Mitsumi CD-ROM interface", + .internal_name = "mcd", + .flags = DEVICE_ISA | DEVICE_AT, + .local = 1, + .init = mitsumi_cdrom_init, + .close = mitsumi_cdrom_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL }; From 112b60eb88e1f5819fdd84509fa1086e8553ccfc Mon Sep 17 00:00:00 2001 From: rueni97 <99608219+luennix@users.noreply.github.com> Date: Sun, 8 Jan 2023 19:04:40 +0300 Subject: [PATCH 097/112] Update ali1429.c --- src/chipset/ali1429.c | 300 +++++++++++++++++++++--------------------- 1 file changed, 152 insertions(+), 148 deletions(-) diff --git a/src/chipset/ali1429.c b/src/chipset/ali1429.c index 36ac2fdf9..500b1c6a0 100644 --- a/src/chipset/ali1429.c +++ b/src/chipset/ali1429.c @@ -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. + * 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. * - * Implementation of the ALi M1429 chipset. + * Implementation of the ALi M1429 chipset. * - * Note: This chipset has no datasheet, everything were done via - * reverse engineering the BIOS of various machines using it. + * Note: This chipset has no datasheet, everything were done via + * reverse engineering the BIOS of various machines using it. * + * Authors: Tiseno100, + * Miran Grca, * - * - * Authors: Tiseno100, - * Miran Grca, - * - * Copyright 2020-2021 Tiseno100. - * Copyright 2021-2021 Miran Grca. + * Copyright 2020,2021 Tiseno100. + * Copyright 2021,2021 Miran Grca. */ /* @@ -66,14 +64,15 @@ Register 20h: Bits 2-1-0: Bus Clock Speed 0 0 0: 7.1519Mhz (ATCLK2) - 0 0 1: CLK2IN/4 - 0 1 0: CLK2IN/5 - 0 1 1: CLK2IN/6 - 1 0 0: CLK2IN/8 - 1 0 1: CLK2IN/10 - 1 1 0: CLK2IN/12 + 0 0 1: CLK2IN/4 + 0 1 0: CLK2IN/5 + 0 1 1: CLK2IN/6 + 1 0 0: CLK2IN/8 + 1 0 1: CLK2IN/10 + 1 1 0: CLK2IN/12 */ + #include #include #include @@ -95,11 +94,13 @@ #include <86box/smram.h> #include <86box/chipset.h> -#define GREEN dev->is_g /* Is G Variant */ +#define GREEN dev->is_g /* Is G Variant */ + #ifdef ENABLE_ALI1429_LOG int ali1429_do_log = ENABLE_ALI1429_LOG; + static void ali1429_log(const char *fmt, ...) { @@ -112,25 +113,27 @@ ali1429_log(const char *fmt, ...) } } #else -# define ali1429_log(fmt, ...) +#define ali1429_log(fmt, ...) #endif + typedef struct { - uint8_t is_g, index, cfg_locked, reg_57h, - regs[90]; + uint8_t is_g, index, cfg_locked, reg_57h, + regs[90]; } ali1429_t; + static void ali1429_shadow_recalc(ali1429_t *dev) { uint32_t base, i, can_write, can_read; - shadowbios = (dev->regs[0x13] & 0x40) && (dev->regs[0x14] & 0x01); + shadowbios = (dev->regs[0x13] & 0x40) && (dev->regs[0x14] & 0x01); shadowbios_write = (dev->regs[0x13] & 0x40) && (dev->regs[0x14] & 0x02); can_write = (dev->regs[0x14] & 0x02) ? MEM_WRITE_INTERNAL : MEM_WRITE_EXTANY; - can_read = (dev->regs[0x14] & 0x01) ? MEM_READ_INTERNAL : MEM_READ_EXTANY; + can_read = (dev->regs[0x14] & 0x01) ? MEM_READ_INTERNAL : MEM_READ_EXTANY; for (i = 0; i < 8; i++) { base = 0xc0000 + (i << 15); @@ -144,149 +147,149 @@ ali1429_shadow_recalc(ali1429_t *dev) flushmmucache_nopc(); } + static void ali1429_write(uint16_t addr, uint8_t val, void *priv) { - ali1429_t *dev = (ali1429_t *) priv; + ali1429_t *dev = (ali1429_t *)priv; switch (addr) { - case 0x22: - dev->index = val; - break; + case 0x22: + dev->index = val; + break; - case 0x23: + case 0x23: #ifdef ENABLE_ALI1429_LOG - if (dev->index != 0x03) - ali1429_log("M1429: dev->regs[%02x] = %02x\n", dev->index, val); + if (dev->index != 0x03) + ali1429_log("M1429: dev->regs[%02x] = %02x\n", dev->index, val); #endif - if (dev->index == 0x03) - dev->cfg_locked = !(val == 0xc5); + if (dev->index == 0x03) + dev->cfg_locked = (val != 0xc5); - if (!dev->cfg_locked) { - /* Common M1429 Registers */ - switch (dev->index) { - case 0x10: - case 0x11: - dev->regs[dev->index] = val; - break; + if (!dev->cfg_locked) { + pclog("M1429: dev->regs[%02x] = %02x\n", dev->index, val); - case 0x12: - dev->regs[dev->index] = val; - if (val & 4) - mem_remap_top(128); - else - mem_remap_top(0); - break; + /* Common M1429 Registers */ + switch (dev->index) { + case 0x10: case 0x11: + dev->regs[dev->index] = val; + break; - case 0x13: - case 0x14: - dev->regs[dev->index] = val; - ali1429_shadow_recalc(dev); - break; + case 0x12: + dev->regs[dev->index] = val; + if(val & 4) + mem_remap_top(128); + else + mem_remap_top(0); + break; - case 0x15: - case 0x16: - case 0x17: - dev->regs[dev->index] = val; - break; + case 0x13: case 0x14: + dev->regs[dev->index] = val; + ali1429_shadow_recalc(dev); + break; - case 0x18: - dev->regs[dev->index] = (val & 0x8f) | 0x20; - cpu_cache_ext_enabled = !!(val & 2); - cpu_update_waitstates(); - break; + case 0x15: case 0x16: + case 0x17: + dev->regs[dev->index] = val; + break; - case 0x19: - case 0x1a: - case 0x1e: - dev->regs[dev->index] = val; - break; + case 0x18: + dev->regs[dev->index] = (val & 0x8f) | 0x20; + cpu_cache_ext_enabled = !!(val & 2); + cpu_update_waitstates(); + break; - case 0x20: - dev->regs[dev->index] = val; + case 0x19: case 0x1a: + case 0x1e: + dev->regs[dev->index] = val; + break; - switch (val & 7) { - case 0: - case 7: /* Illegal */ - cpu_set_isa_speed(7159091); - break; + case 0x20: + dev->regs[dev->index] = val; - case 1: - cpu_set_isa_speed(cpu_busspeed / 4); - break; + switch(val & 7) { + case 0: case 7: /* Illegal */ + cpu_set_isa_speed(7159091); + break; - case 2: - cpu_set_isa_speed(cpu_busspeed / 5); - break; + case 1: + cpu_set_isa_speed(cpu_busspeed / 4); + break; - case 3: - cpu_set_isa_speed(cpu_busspeed / 6); - break; + case 2: + cpu_set_isa_speed(cpu_busspeed / 5); + break; - case 4: - cpu_set_isa_speed(cpu_busspeed / 8); - break; + case 3: + cpu_set_isa_speed(cpu_busspeed / 6); + break; - case 5: - cpu_set_isa_speed(cpu_busspeed / 10); - break; + case 4: + cpu_set_isa_speed(cpu_busspeed / 8); + break; - case 6: - cpu_set_isa_speed(cpu_busspeed / 12); - break; - } - break; + case 5: + cpu_set_isa_speed(cpu_busspeed / 10); + break; - case 0x21 ... 0x27: - dev->regs[dev->index] = val; - break; - } + case 6: + cpu_set_isa_speed(cpu_busspeed / 12); + break; + } + break; - /* M1429G Only Registers */ - if (GREEN) { - switch (dev->index) { - case 0x30 ... 0x41: - case 0x43: - case 0x45: - case 0x4a: - dev->regs[dev->index] = val; - break; + case 0x21 ... 0x27: + dev->regs[dev->index] = val; + break; + } - case 0x57: - dev->reg_57h = val; - break; - } - } - } - break; + /* M1429G Only Registers */ + if (GREEN) { + switch (dev->index) { + case 0x30 ... 0x41: + case 0x43: case 0x45: + case 0x4a: + dev->regs[dev->index] = val; + break; + + case 0x57: + dev->reg_57h = val; + break; + } + } + } + break; } } + static uint8_t ali1429_read(uint16_t addr, void *priv) { - ali1429_t *dev = (ali1429_t *) priv; - uint8_t ret = 0xff; + ali1429_t *dev = (ali1429_t *)priv; + uint8_t ret = 0xff; if ((addr == 0x23) && (dev->index >= 0x10) && (dev->index <= 0x4a)) - ret = dev->regs[dev->index]; + ret = dev->regs[dev->index]; else if ((addr == 0x23) && (dev->index == 0x57)) - ret = dev->reg_57h; + ret = dev->reg_57h; else if (addr == 0x22) - ret = dev->index; + ret = dev->index; return ret; } + static void ali1429_close(void *priv) { - ali1429_t *dev = (ali1429_t *) priv; + ali1429_t *dev = (ali1429_t *)priv; free(dev); } + static void ali1429_defaults(ali1429_t *dev) { @@ -305,27 +308,28 @@ ali1429_defaults(ali1429_t *dev) /* M1429G Default Registers */ if (GREEN) { - dev->regs[0x31] = 0x88; - dev->regs[0x32] = 0xc0; - dev->regs[0x38] = 0xe5; - dev->regs[0x40] = 0xe3; - dev->regs[0x41] = 2; - dev->regs[0x45] = 0x80; + dev->regs[0x31] = 0x88; + dev->regs[0x32] = 0xc0; + dev->regs[0x38] = 0xe5; + dev->regs[0x40] = 0xe3; + dev->regs[0x41] = 2; + dev->regs[0x45] = 0x80; } } + static void * ali1429_init(const device_t *info) { - ali1429_t *dev = (ali1429_t *) malloc(sizeof(ali1429_t)); + ali1429_t *dev = (ali1429_t *)malloc(sizeof(ali1429_t)); memset(dev, 0, sizeof(ali1429_t)); dev->cfg_locked = 1; - GREEN = info->local; + GREEN = info->local; /* M1429 Ports: - 22h Index Port - 23h Data Port + 22h Index Port + 23h Data Port */ io_sethandler(0x0022, 0x0002, ali1429_read, NULL, NULL, ali1429_write, NULL, NULL, dev); @@ -337,29 +341,29 @@ ali1429_init(const device_t *info) } const device_t ali1429_device = { - .name = "ALi M1429", + .name = "ALi M1429", .internal_name = "ali1429", - .flags = 0, - .local = 0, - .init = ali1429_init, - .close = ali1429_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = ali1429_init, + .close = ali1429_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; const device_t ali1429g_device = { - .name = "ALi M1429G", + .name = "ALi M1429G", .internal_name = "ali1429g", - .flags = 0, - .local = 1, - .init = ali1429_init, - .close = ali1429_close, - .reset = NULL, + .flags = 0, + .local = 1, + .init = ali1429_init, + .close = ali1429_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; From 9b8182706e6b44d4ee0b79fa8bfe1f505e8722ed Mon Sep 17 00:00:00 2001 From: rueni97 <99608219+luennix@users.noreply.github.com> Date: Sun, 8 Jan 2023 19:05:00 +0300 Subject: [PATCH 098/112] Add files via upload --- src/chipset/ali1435.c | 323 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 src/chipset/ali1435.c diff --git a/src/chipset/ali1435.c b/src/chipset/ali1435.c new file mode 100644 index 000000000..4497ad338 --- /dev/null +++ b/src/chipset/ali1435.c @@ -0,0 +1,323 @@ +/* + * 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. + * + * Emulation of ALi M1435 chipset that acts as both the + * southbridge. + * + * + * + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. + */ +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/io.h> +#include <86box/apm.h> +#include <86box/dma.h> +#include <86box/mem.h> +#include <86box/smram.h> +#include <86box/pci.h> +#include <86box/timer.h> +#include <86box/pic.h> +#include <86box/pit.h> +#include <86box/port_92.h> +#include <86box/hdc_ide.h> +#include <86box/hdc.h> +#include <86box/machine.h> +#include <86box/chipset.h> +#include <86box/spd.h> + + +#define MEM_STATE_SHADOW_R 0x01 +#define MEM_STATE_SHADOW_W 0x02 +#define MEM_STATE_SMRAM 0x04 + + +typedef struct +{ + uint8_t index, cfg_locked, + regs[16], pci_regs[256]; +} ali1435_t; + + +#define ENABLE_ALI1435_LOG 1 +#ifdef ENABLE_ALI1435_LOG +int ali1435_do_log = ENABLE_ALI1435_LOG; + + +static void +ali1435_log(const char *fmt, ...) +{ + va_list ap; + + if (ali1435_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +#define ali1435_log(fmt, ...) +#endif + + +/* NOTE: We cheat here. The real ALi M1435 uses a level to edge triggered IRQ converter + when the most siginificant bit is set. We work around that by manipulating the + emulated PIC's ELCR register. */ +static void +ali1435_update_irqs(ali1435_t *dev, int set) +{ + uint8_t val; + int i, reg; + int shift, irq; + int irq_map[8] = { -1, 5, 9, 10, 11, 12, 14, 15 }; + pic_t *temp_pic; + + for (i = 0; i < 4; i++) { + reg = 0x80 + (i >> 1); + shift = (i & 1) << 2; + val = (dev->pci_regs[reg] >> shift) & 0x0f; + irq = irq_map[val & 0x07]; + if (irq == -1) + continue; + temp_pic = (irq >= 8) ? &pic2 : &pic; + irq &= 7; + if (set && (val & 0x08)) + temp_pic->elcr |= (1 << irq); + else + temp_pic->elcr &= ~(1 << irq); + } +} + + +static void +ali1435_pci_write(int func, int addr, uint8_t val, void *priv) +{ + ali1435_t *dev = (ali1435_t *) priv; + int irq, irq_map[8] = { -1, 5, 9, 10, 11, 12, 14, 15 }; + + ali1435_log("ali1435_write(%02X, %02X, %02X)\n", func, addr, val); + + if (func > 0) + return; + + if ((addr < 0x04) || (addr == 0x06) || ((addr >= 0x08) && (addr <= 0x0b))) + return; + + if ((addr >= 0x0f) && (addr < 0x30)) + return; + + if ((addr >= 0x34) && (addr < 0x40)) + return; + + switch (addr) { + /* Dummy PCI Config */ + case 0x04: + dev->pci_regs[addr] = (val & 0x7f) | 0x07; + break; + + case 0x05: + dev->pci_regs[addr] = (val & 0x01); + break; + + /* Dummy PCI Status */ + case 0x07: + dev->pci_regs[addr] &= ~(val & 0xb8); + break; + + case 0x80: case 0x81: + dev->pci_regs[addr] = val; + ali1435_update_irqs(dev, 0); + irq = irq_map[val & 0x07]; + if (irq >= 0) { + ali1435_log("Set IRQ routing: INT %c -> %02X\n", 0x41 + ((addr & 0x01) << 1), irq); + pci_set_irq_routing(PCI_INTA + ((addr & 0x01) << 1), irq); + } else { + ali1435_log("Set IRQ routing: INT %c -> FF\n", 0x41 + ((addr & 0x01) << 1)); + pci_set_irq_routing(PCI_INTA + ((addr & 0x01) << 1), PCI_IRQ_DISABLED); + } + irq = irq_map[(val >> 4) & 0x07]; + if (irq >= 0) { + ali1435_log("Set IRQ routing: INT %c -> %02X\n", 0x42 + ((addr & 0x01) << 1), irq); + pci_set_irq_routing(PCI_INTB + ((addr & 0x01) << 1), irq); + } else { + ali1435_log("Set IRQ routing: INT %c -> FF\n", 0x42 + ((addr & 0x01) << 1)); + pci_set_irq_routing(PCI_INTB + ((addr & 0x01) << 1), PCI_IRQ_DISABLED); + } + ali1435_update_irqs(dev, 1); + break; + + default: + dev->pci_regs[addr] = val; + break; + } +} + + +static uint8_t +ali1435_pci_read(int func, int addr, void *priv) +{ + ali1435_t *dev = (ali1435_t *) priv; + uint8_t ret; + + ret = 0xff; + + if (func == 0) + ret = dev->pci_regs[addr]; + + ali1435_log("ali1435_read(%02X, %02X) = %02X\n", func, addr, ret); + + return ret; +} + + +static void +ali1435_write(uint16_t addr, uint8_t val, void *priv) +{ + ali1435_t *dev = (ali1435_t *)priv; + + switch (addr) { + case 0x22: + dev->index = val; + break; + + case 0x23: +/* #ifdef ENABLE_ALI1435_LOG + if (dev->index != 0x03) + ali1435_log("M1435: dev->regs[%02x] = %02x\n", dev->index, val); +#endif */ + + if (dev->index == 0x03) + dev->cfg_locked = (val != 0x69); + + if (!dev->cfg_locked) { + pclog("M1435: dev->regs[%02x] = %02x\n", dev->index, val); + + switch (dev->index) { + /* PCI Mechanism select? */ + case 0x00: + dev->regs[dev->index] = val; + pclog("PMC = %i\n", val != 0xc8); + pci_set_pmc(val != 0xc8); + break; + + /* ???? */ + case 0x06: + dev->regs[dev->index] = val; + break; + + /* ???? */ + case 0x07: + dev->regs[dev->index] = val; + break; + } + } + break; + } +} + + +static uint8_t +ali1435_read(uint16_t addr, void *priv) +{ + ali1435_t *dev = (ali1435_t *)priv; + uint8_t ret = 0xff; + + if ((addr == 0x23) && (dev->index < 0x10)) + ret = dev->regs[dev->index]; + else if (addr == 0x22) + ret = dev->index; + + return ret; +} + + +static void +ali1435_reset(void *priv) +{ + ali1435_t *dev = (ali1435_t *) priv; + + memset(dev->regs, 0, 16); + + dev->regs[0x00] = 0xff; + + pci_set_pmc(0); + + dev->cfg_locked = 1; + + memset(dev->pci_regs, 0, 256); + + dev->pci_regs[0x00] = 0x25; dev->pci_regs[0x01] = 0x10; /*ALi*/ + dev->pci_regs[0x02] = 0x35; dev->pci_regs[0x03] = 0x14; /*M1435*/ + dev->pci_regs[0x04] = 0x07; + dev->pci_regs[0x07] = 0x04; + dev->pci_regs[0x0b] = 0x06; + + dev->pci_regs[0x80] = 0x80; dev->pci_regs[0x81] = 0x00; + + pci_set_irq_routing(PCI_INTA, PCI_IRQ_DISABLED); + pci_set_irq_routing(PCI_INTB, PCI_IRQ_DISABLED); + pci_set_irq_routing(PCI_INTC, PCI_IRQ_DISABLED); + pci_set_irq_routing(PCI_INTD, PCI_IRQ_DISABLED); +} + + +static void +ali1435_close(void *p) +{ + ali1435_t *dev = (ali1435_t *)p; + + free(dev); +} + + +static void * +ali1435_init(const device_t *info) +{ + ali1435_t *dev = (ali1435_t *) malloc(sizeof(ali1435_t)); + memset(dev, 0, sizeof(ali1435_t)); + + dev->cfg_locked = 1; + + /* M1435 Ports: + 22h Index Port + 23h Data Port + */ + io_sethandler(0x0022, 0x0002, ali1435_read, NULL, NULL, ali1435_write, NULL, NULL, dev); + + pci_add_card(PCI_ADD_NORTHBRIDGE, ali1435_pci_read, ali1435_pci_write, dev); + + ali1435_reset(dev); + + /* pci_set_irq_level(PCI_INTA, 0); + pci_set_irq_level(PCI_INTB, 0); + pci_set_irq_level(PCI_INTC, 0); + pci_set_irq_level(PCI_INTD, 0); */ + + return dev; +} + +const device_t ali1435_device = { + .name = "Intel ALi M1435", + .internal_name = "ali1435", + .flags = DEVICE_PCI, + .local = 0x00, + .init = ali1435_init, + .close = ali1435_close, + .reset = ali1435_reset, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; From 42ceb4cfcc53f39d9db2faaca8dc96484693263a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 8 Jan 2023 15:25:28 -0500 Subject: [PATCH 099/112] Fix some bits which got lost in the last merge --- src/cdrom/cdrom_mitsumi.c | 16 ++++++++-------- src/scsi/scsi_ncr5380.c | 26 +++++++++++++------------- src/scsi/scsi_spock.c | 22 +++++++++++----------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/cdrom/cdrom_mitsumi.c b/src/cdrom/cdrom_mitsumi.c index 64433535f..eaddccef8 100644 --- a/src/cdrom/cdrom_mitsumi.c +++ b/src/cdrom/cdrom_mitsumi.c @@ -1,18 +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. * - * Mitsumi CD-ROM emulation for the ISA bus. + * Mitsumi CD-ROM emulation for the ISA bus. * * * - * Author: Miran Grca, + * Authors: Miran Grca, * - * Copyright 2022 Miran Grca. + * Copyright 2022 Miran Grca. */ #include #include diff --git a/src/scsi/scsi_ncr5380.c b/src/scsi/scsi_ncr5380.c index 54875963d..c01d0bf36 100644 --- a/src/scsi/scsi_ncr5380.c +++ b/src/scsi/scsi_ncr5380.c @@ -1,23 +1,23 @@ /* - * 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. * - * Implementation of the NCR 5380 series of SCSI Host Adapters - * made by NCR. These controllers were designed for the ISA bus. + * Implementation of the NCR 5380 series of SCSI Host Adapters + * made by NCR. These controllers were designed for the ISA bus. * * * - * Authors: Sarah Walker, - * TheCollector1995, - * Fred N. van Kempen, + * Authors: Sarah Walker, + * TheCollector1995, + * Fred N. van Kempen, * - * Copyright 2017-2019 Sarah Walker. - * Copyright 2017-2019 TheCollector1995. - * Copyright 2017-2019 Fred N. van Kempen. + * Copyright 2017-2019 Sarah Walker. + * Copyright 2017-2019 TheCollector1995. + * Copyright 2017-2019 Fred N. van Kempen. */ #include #include diff --git a/src/scsi/scsi_spock.c b/src/scsi/scsi_spock.c index 1223c21aa..0f618df95 100644 --- a/src/scsi/scsi_spock.c +++ b/src/scsi/scsi_spock.c @@ -1,21 +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. + * 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. * - * Implementation of the IBM PS/2 SCSI controller with - * cache for MCA only. + * Implementation of the IBM PS/2 SCSI controller with + * cache for MCA only. * * * - * Authors: Sarah Walker, - * TheCollector1995, + * Authors: Sarah Walker, + * TheCollector1995, * - * Copyright 2020 Sarah Walker. - * Copyright 2020 TheCollector1995. + * Copyright 2020 Sarah Walker. + * Copyright 2020 TheCollector1995. */ #include #include From 4085e4c92824b487952731f851cb86f9f1d87968 Mon Sep 17 00:00:00 2001 From: luennix Date: Mon, 9 Jan 2023 16:31:36 +0300 Subject: [PATCH 100/112] PR for 86Box --- .../v1/query/client-MicrosoftVS/query.json | 1 + out/build/regular/CPackConfig.cmake | 69 +++++++++++ out/build/regular/CPackSourceConfig.cmake | 77 ++++++++++++ out/build/regular/VSInheritEnvironments.txt | 1 + src/chipset/CMakeLists.txt | 2 +- src/device/keyboard_at.c | 2 +- src/include/86box/chipset.h | 1 + src/include/86box/machine.h | 3 + src/include/86box/sio.h | 1 + src/machine/m_at_386dx_486.c | 91 ++++++++++++++ src/machine/machine_table.c | 111 ++++++++++++++++++ src/sio/sio_fdc37c6xx.c | 16 ++- 12 files changed, 372 insertions(+), 3 deletions(-) create mode 100644 out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json create mode 100644 out/build/regular/CPackConfig.cmake create mode 100644 out/build/regular/CPackSourceConfig.cmake create mode 100644 out/build/regular/VSInheritEnvironments.txt diff --git a/out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json b/out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json new file mode 100644 index 000000000..7d776af01 --- /dev/null +++ b/out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json @@ -0,0 +1 @@ +{"requests":[{"kind":"cache","version":2},{"kind":"cmakeFiles","version":1},{"kind":"codemodel","version":2},{"kind":"toolchains","version":1}]} \ No newline at end of file diff --git a/out/build/regular/CPackConfig.cmake b/out/build/regular/CPackConfig.cmake new file mode 100644 index 000000000..7dfc8fb33 --- /dev/null +++ b/out/build/regular/CPackConfig.cmake @@ -0,0 +1,69 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BINARY_7Z "OFF") +set(CPACK_BINARY_IFW "OFF") +set(CPACK_BINARY_NSIS "ON") +set(CPACK_BINARY_NUGET "OFF") +set(CPACK_BINARY_WIX "OFF") +set(CPACK_BINARY_ZIP "OFF") +set(CPACK_BUILD_SOURCE_DIRS "C:/Users/rue/source/repos/86Box-luennix;C:/Users/rue/source/repos/86Box-luennix/out/build/regular") +set(CPACK_CMAKE_GENERATOR "Ninja") +set(CPACK_COMPONENTS_ALL "") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "86Box built using CMake") +set(CPACK_GENERATOR "NSIS") +set(CPACK_INSTALL_CMAKE_PROJECTS "C:/Users/rue/source/repos/86Box-luennix/out/build/regular;86Box;ALL;/") +set(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/86Box") +set(CPACK_MODULE_PATH "") +set(CPACK_NSIS_DISPLAY_NAME "86Box 3.11") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") +set(CPACK_NSIS_PACKAGE_NAME "86Box 3.11") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Emulator of x86-based systems") +set(CPACK_PACKAGE_FILE_NAME "86Box-3.11-win64") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://86box.net") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "86Box 3.11") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "86Box 3.11") +set(CPACK_PACKAGE_NAME "86Box") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "Humanity") +set(CPACK_PACKAGE_VERSION "3.11") +set(CPACK_PACKAGE_VERSION_MAJOR "3") +set(CPACK_PACKAGE_VERSION_MINOR "11") +set(CPACK_RESOURCE_FILE_LICENSE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericLicense.txt") +set(CPACK_RESOURCE_FILE_README "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericWelcome.txt") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_7Z "ON") +set(CPACK_SOURCE_GENERATOR "7Z;ZIP") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackSourceConfig.cmake") +set(CPACK_SOURCE_ZIP "ON") +set(CPACK_SYSTEM_NAME "win64") +set(CPACK_THREADS "1") +set(CPACK_TOPLEVEL_TAG "win64") +set(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/out/build/regular/CPackSourceConfig.cmake b/out/build/regular/CPackSourceConfig.cmake new file mode 100644 index 000000000..eb8420f36 --- /dev/null +++ b/out/build/regular/CPackSourceConfig.cmake @@ -0,0 +1,77 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BINARY_7Z "OFF") +set(CPACK_BINARY_IFW "OFF") +set(CPACK_BINARY_NSIS "ON") +set(CPACK_BINARY_NUGET "OFF") +set(CPACK_BINARY_WIX "OFF") +set(CPACK_BINARY_ZIP "OFF") +set(CPACK_BUILD_SOURCE_DIRS "C:/Users/rue/source/repos/86Box-luennix;C:/Users/rue/source/repos/86Box-luennix/out/build/regular") +set(CPACK_CMAKE_GENERATOR "Ninja") +set(CPACK_COMPONENTS_ALL "") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "86Box built using CMake") +set(CPACK_GENERATOR "7Z;ZIP") +set(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_INSTALLED_DIRECTORIES "C:/Users/rue/source/repos/86Box-luennix;/") +set(CPACK_INSTALL_CMAKE_PROJECTS "") +set(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/86Box") +set(CPACK_MODULE_PATH "") +set(CPACK_NSIS_DISPLAY_NAME "86Box 3.11") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") +set(CPACK_NSIS_PACKAGE_NAME "86Box 3.11") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Emulator of x86-based systems") +set(CPACK_PACKAGE_FILE_NAME "86Box-3.11-Source") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://86box.net") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "86Box 3.11") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "86Box 3.11") +set(CPACK_PACKAGE_NAME "86Box") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "Humanity") +set(CPACK_PACKAGE_VERSION "3.11") +set(CPACK_PACKAGE_VERSION_MAJOR "3") +set(CPACK_PACKAGE_VERSION_MINOR "11") +set(CPACK_RESOURCE_FILE_LICENSE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericLicense.txt") +set(CPACK_RESOURCE_FILE_README "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericWelcome.txt") +set(CPACK_RPM_PACKAGE_SOURCES "ON") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_7Z "ON") +set(CPACK_SOURCE_GENERATOR "7Z;ZIP") +set(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_SOURCE_INSTALLED_DIRECTORIES "C:/Users/rue/source/repos/86Box-luennix;/") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackSourceConfig.cmake") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "86Box-3.11-Source") +set(CPACK_SOURCE_TOPLEVEL_TAG "win64-Source") +set(CPACK_SOURCE_ZIP "ON") +set(CPACK_STRIP_FILES "") +set(CPACK_SYSTEM_NAME "win64") +set(CPACK_THREADS "1") +set(CPACK_TOPLEVEL_TAG "win64-Source") +set(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/out/build/regular/VSInheritEnvironments.txt b/out/build/regular/VSInheritEnvironments.txt new file mode 100644 index 000000000..f8cc9d8ac --- /dev/null +++ b/out/build/regular/VSInheritEnvironments.txt @@ -0,0 +1 @@ +msvc_x64_x64 \ No newline at end of file diff --git a/src/chipset/CMakeLists.txt b/src/chipset/CMakeLists.txt index d93f86219..0a6a5fbe5 100644 --- a/src/chipset/CMakeLists.txt +++ b/src/chipset/CMakeLists.txt @@ -13,7 +13,7 @@ # Copyright 2020-2021 David Hrdlička. # -add_library(chipset OBJECT 82c100.c acc2168.c cs8230.c ali1429.c ali1489.c ali1531.c ali1541.c ali1543.c +add_library(chipset OBJECT 82c100.c acc2168.c cs8230.c ali1429.c ali1435.c ali1489.c ali1531.c ali1541.c ali1543.c ali1621.c ali6117.c headland.c ims8848.c intel_82335.c contaq_82c59x.c cs4031.c intel_420ex.c intel_4x0.c intel_i450kx.c intel_sio.c intel_piix.c ../ioapic.c neat.c opti283.c opti291.c opti391.c opti495.c opti822.c opti895.c opti5x7.c scamp.c scat.c sis_85c310.c sis_85c4xx.c diff --git a/src/device/keyboard_at.c b/src/device/keyboard_at.c index 5b777eaf3..dc385c011 100644 --- a/src/device/keyboard_at.c +++ b/src/device/keyboard_at.c @@ -1947,7 +1947,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv) val &= ~0x0c; val |= (dev->output_port & 0x0c); } - write_output(dev, val); + write_output(dev, val | 0x01); break; case 0xd2: /* write to keyboard output buffer */ diff --git a/src/include/86box/chipset.h b/src/include/86box/chipset.h index 0a3e988f6..9d6bd64cf 100644 --- a/src/include/86box/chipset.h +++ b/src/include/86box/chipset.h @@ -24,6 +24,7 @@ extern const device_t acc2168_device; extern const device_t ali1217_device; extern const device_t ali1429_device; extern const device_t ali1429g_device; +extern const device_t ali1435_device; extern const device_t ali1489_device; extern const device_t ali1531_device; extern const device_t ali1541_device; diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 9137da5d3..4d5b535a8 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -513,6 +513,9 @@ extern int machine_at_atc1415_init(const machine_t *); extern int machine_at_actionpc2600_init(const machine_t *); extern int machine_at_m919_init(const machine_t *); extern int machine_at_spc7700plw_init(const machine_t *); +extern int machine_at_ms4134_init(const machine_t *); +extern int machine_at_tg486gp_init(const machine_t *); +extern int machine_at_tg486g_init(const machine_t *); /* m_at_commodore.c */ extern int machine_at_cmdpc_init(const machine_t *); diff --git a/src/include/86box/sio.h b/src/include/86box/sio.h index 09b5b1c40..8b95b55b5 100644 --- a/src/include/86box/sio.h +++ b/src/include/86box/sio.h @@ -29,6 +29,7 @@ extern const device_t fdc37c663_device; extern const device_t fdc37c663_ide_device; extern const device_t fdc37c665_device; extern const device_t fdc37c665_ide_device; +extern const device_t fdc37c665_ide_pri_device; extern const device_t fdc37c666_device; extern const device_t fdc37c67x_device; extern const device_t fdc37c669_device; diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index b9583f72e..036eac550 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -1719,3 +1719,94 @@ machine_at_spc7700plw_init(const machine_t *model) return ret; } + +int +machine_at_ms4134_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/ms4134/4alm001.bin", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_ide_init(model); + + device_add(&ali1429g_device); + + device_add(&fdc37c665_ide_pri_device); + + pci_init(PCI_CAN_SWITCH_TYPE | 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); + + device_add(&ali1435_device); + device_add(&sst_flash_29ee010_device); + + device_add(&keyboard_ps2_ami_device); + + return ret; +} + +int +machine_at_tg486gp_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/tg486gp/tg486gp.bin", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_ide_init(model); + + device_add(&ali1429g_device); + + device_add(&fdc37c665_ide_pri_device); + + pci_init(PCI_CAN_SWITCH_TYPE | 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); + + device_add(&ali1435_device); + device_add(&sst_flash_29ee010_device); + + device_add(&keyboard_ps2_ami_device); + + return ret; +} + +int +machine_at_tg486g_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/tg486g/tg486g.bin", + 0x000c0000, 262144, 0); + + if (bios_only || !ret) + return ret; + else { + mem_mapping_set_addr(&bios_mapping, 0x0c0000, 0x40000); + mem_mapping_set_exec(&bios_mapping, rom); + } + + machine_at_common_init(model); + device_add(&sis_85c471_device); + device_add(&ide_isa_device); + device_add(&fdc37c651_ide_device); + device_add(&keyboard_ps2_intel_ami_pci_device); + + return ret; +} diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index c2db92654..293aa6629 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -5765,8 +5765,119 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* TriGem AMIBIOS Pre-Color with TriGem AMI 'Z' keyboard controller */ + { + .name = "[SiS 471] TriGem 486G", + .internal_name = "tg486g", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_SIS_471, + .init = machine_at_tg486g_init, + .pad = 0, + .pad0 = 0, + .pad1 = MACHINE_AVAILABLE, + .pad2 = 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 + }, + .bus_flags = MACHINE_VLB, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 65536, + .step = 1024 + }, + .nvrmask = 127, + .kbc = KBC_UNKNOWN, + .kbc_p1 = 0, + .gpio = 0, + .device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* 486 machines which utilize the PCI bus */ + /* Machine with ALi M1429G chipset and M1435 southbridge */ + { + .name = "[ALi M1429G] MSI MS-4134", + .internal_name = "ms4134", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_ms4134_init, + .pad = 0, + .pad0 = 0, + .pad1 = MACHINE_AVAILABLE, + .pad2 = 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 + }, + .bus_flags = MACHINE_PS2_PCIV, + .flags = MACHINE_IDE_DUAL, + .ram = { + .min = 1024, + .max = 131072, + .step = 1024 + }, + .nvrmask = 255, + .kbc = KBC_UNKNOWN, + .kbc_p1 = 0, + .gpio = 0, + .device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* TriGem machine with M1429G and PhoenixBIOS */ + { + .name = "[ALi M1429G] TriGem 486GP", + .internal_name = "tg486gp", + .type = MACHINE_TYPE_486_S3, + .chipset = MACHINE_CHIPSET_ALI_M1429G, + .init = machine_at_tg486gp_init, + .pad = 0, + .pad0 = 0, + .pad1 = MACHINE_AVAILABLE, + .pad2 = 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 + }, + .bus_flags = MACHINE_PS2_PCIV, + .flags = MACHINE_IDE_DUAL, + .ram = { + .min = 1024, + .max = 131072, + .step = 1024 + }, + .nvrmask = 255, + .kbc = KBC_UNKNOWN, + .kbc_p1 = 0, + .gpio = 0, + .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", diff --git a/src/sio/sio_fdc37c6xx.c b/src/sio/sio_fdc37c6xx.c index f9c911402..8400ca1e0 100644 --- a/src/sio/sio_fdc37c6xx.c +++ b/src/sio/sio_fdc37c6xx.c @@ -216,7 +216,7 @@ static uint8_t fdc37c6xx_read(uint16_t port, void *priv) { fdc37c6xx_t *dev = (fdc37c6xx_t *) priv; - uint8_t ret = 0x00; + uint8_t ret = 0xff; if (dev->tries == 2) { if (port == 0x3f1) @@ -437,6 +437,20 @@ const device_t fdc37c665_ide_device = { .config = NULL }; +const device_t fdc37c665_ide_pri_device = { + .name = "SMC FDC37C665 Super I/O (With Primary IDE)", + .internal_name = "fdc37c665_ide_pri", + .flags = 0, + .local = 0x165, + .init = fdc37c6xx_init, + .close = fdc37c6xx_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t fdc37c666_device = { .name = "SMC FDC37C666 Super I/O", .internal_name = "fdc37c666", From de67e4a085bfa34db5dd01b69c8d35d732a720af Mon Sep 17 00:00:00 2001 From: rueni97 <99608219+luennix@users.noreply.github.com> Date: Mon, 9 Jan 2023 17:07:38 +0300 Subject: [PATCH 101/112] Delete query.json --- .../regular/.cmake/api/v1/query/client-MicrosoftVS/query.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json diff --git a/out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json b/out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json deleted file mode 100644 index 7d776af01..000000000 --- a/out/build/regular/.cmake/api/v1/query/client-MicrosoftVS/query.json +++ /dev/null @@ -1 +0,0 @@ -{"requests":[{"kind":"cache","version":2},{"kind":"cmakeFiles","version":1},{"kind":"codemodel","version":2},{"kind":"toolchains","version":1}]} \ No newline at end of file From d4e13d4ee33c689289bf32524dc911a7fb9e15eb Mon Sep 17 00:00:00 2001 From: rueni97 <99608219+luennix@users.noreply.github.com> Date: Mon, 9 Jan 2023 17:08:08 +0300 Subject: [PATCH 102/112] Delete CPackConfig.cmake --- out/build/regular/CPackConfig.cmake | 69 ----------------------------- 1 file changed, 69 deletions(-) delete mode 100644 out/build/regular/CPackConfig.cmake diff --git a/out/build/regular/CPackConfig.cmake b/out/build/regular/CPackConfig.cmake deleted file mode 100644 index 7dfc8fb33..000000000 --- a/out/build/regular/CPackConfig.cmake +++ /dev/null @@ -1,69 +0,0 @@ -# This file will be configured to contain variables for CPack. These variables -# should be set in the CMake list file of the project before CPack module is -# included. The list of available CPACK_xxx variables and their associated -# documentation may be obtained using -# cpack --help-variable-list -# -# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) -# and some are specific to a generator -# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables -# usually begin with CPACK__xxxx. - - -set(CPACK_BINARY_7Z "OFF") -set(CPACK_BINARY_IFW "OFF") -set(CPACK_BINARY_NSIS "ON") -set(CPACK_BINARY_NUGET "OFF") -set(CPACK_BINARY_WIX "OFF") -set(CPACK_BINARY_ZIP "OFF") -set(CPACK_BUILD_SOURCE_DIRS "C:/Users/rue/source/repos/86Box-luennix;C:/Users/rue/source/repos/86Box-luennix/out/build/regular") -set(CPACK_CMAKE_GENERATOR "Ninja") -set(CPACK_COMPONENTS_ALL "") -set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") -set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") -set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") -set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "86Box built using CMake") -set(CPACK_GENERATOR "NSIS") -set(CPACK_INSTALL_CMAKE_PROJECTS "C:/Users/rue/source/repos/86Box-luennix/out/build/regular;86Box;ALL;/") -set(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/86Box") -set(CPACK_MODULE_PATH "") -set(CPACK_NSIS_DISPLAY_NAME "86Box 3.11") -set(CPACK_NSIS_INSTALLER_ICON_CODE "") -set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") -set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") -set(CPACK_NSIS_PACKAGE_NAME "86Box 3.11") -set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") -set(CPACK_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackConfig.cmake") -set(CPACK_PACKAGE_DEFAULT_LOCATION "/") -set(CPACK_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Emulator of x86-based systems") -set(CPACK_PACKAGE_FILE_NAME "86Box-3.11-win64") -set(CPACK_PACKAGE_HOMEPAGE_URL "https://86box.net") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "86Box 3.11") -set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "86Box 3.11") -set(CPACK_PACKAGE_NAME "86Box") -set(CPACK_PACKAGE_RELOCATABLE "true") -set(CPACK_PACKAGE_VENDOR "Humanity") -set(CPACK_PACKAGE_VERSION "3.11") -set(CPACK_PACKAGE_VERSION_MAJOR "3") -set(CPACK_PACKAGE_VERSION_MINOR "11") -set(CPACK_RESOURCE_FILE_LICENSE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericLicense.txt") -set(CPACK_RESOURCE_FILE_README "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") -set(CPACK_RESOURCE_FILE_WELCOME "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericWelcome.txt") -set(CPACK_SET_DESTDIR "OFF") -set(CPACK_SOURCE_7Z "ON") -set(CPACK_SOURCE_GENERATOR "7Z;ZIP") -set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackSourceConfig.cmake") -set(CPACK_SOURCE_ZIP "ON") -set(CPACK_SYSTEM_NAME "win64") -set(CPACK_THREADS "1") -set(CPACK_TOPLEVEL_TAG "win64") -set(CPACK_WIX_SIZEOF_VOID_P "8") - -if(NOT CPACK_PROPERTIES_FILE) - set(CPACK_PROPERTIES_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackProperties.cmake") -endif() - -if(EXISTS ${CPACK_PROPERTIES_FILE}) - include(${CPACK_PROPERTIES_FILE}) -endif() From e04d58f419e8aac64a9014a78ea1a4fa1c352d26 Mon Sep 17 00:00:00 2001 From: rueni97 <99608219+luennix@users.noreply.github.com> Date: Mon, 9 Jan 2023 17:08:43 +0300 Subject: [PATCH 103/112] Delete CPackSourceConfig.cmake --- out/build/regular/CPackSourceConfig.cmake | 77 ----------------------- 1 file changed, 77 deletions(-) delete mode 100644 out/build/regular/CPackSourceConfig.cmake diff --git a/out/build/regular/CPackSourceConfig.cmake b/out/build/regular/CPackSourceConfig.cmake deleted file mode 100644 index eb8420f36..000000000 --- a/out/build/regular/CPackSourceConfig.cmake +++ /dev/null @@ -1,77 +0,0 @@ -# This file will be configured to contain variables for CPack. These variables -# should be set in the CMake list file of the project before CPack module is -# included. The list of available CPACK_xxx variables and their associated -# documentation may be obtained using -# cpack --help-variable-list -# -# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) -# and some are specific to a generator -# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables -# usually begin with CPACK__xxxx. - - -set(CPACK_BINARY_7Z "OFF") -set(CPACK_BINARY_IFW "OFF") -set(CPACK_BINARY_NSIS "ON") -set(CPACK_BINARY_NUGET "OFF") -set(CPACK_BINARY_WIX "OFF") -set(CPACK_BINARY_ZIP "OFF") -set(CPACK_BUILD_SOURCE_DIRS "C:/Users/rue/source/repos/86Box-luennix;C:/Users/rue/source/repos/86Box-luennix/out/build/regular") -set(CPACK_CMAKE_GENERATOR "Ninja") -set(CPACK_COMPONENTS_ALL "") -set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") -set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") -set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") -set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "86Box built using CMake") -set(CPACK_GENERATOR "7Z;ZIP") -set(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") -set(CPACK_INSTALLED_DIRECTORIES "C:/Users/rue/source/repos/86Box-luennix;/") -set(CPACK_INSTALL_CMAKE_PROJECTS "") -set(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/86Box") -set(CPACK_MODULE_PATH "") -set(CPACK_NSIS_DISPLAY_NAME "86Box 3.11") -set(CPACK_NSIS_INSTALLER_ICON_CODE "") -set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") -set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") -set(CPACK_NSIS_PACKAGE_NAME "86Box 3.11") -set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") -set(CPACK_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackConfig.cmake") -set(CPACK_PACKAGE_DEFAULT_LOCATION "/") -set(CPACK_PACKAGE_DESCRIPTION_FILE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Emulator of x86-based systems") -set(CPACK_PACKAGE_FILE_NAME "86Box-3.11-Source") -set(CPACK_PACKAGE_HOMEPAGE_URL "https://86box.net") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "86Box 3.11") -set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "86Box 3.11") -set(CPACK_PACKAGE_NAME "86Box") -set(CPACK_PACKAGE_RELOCATABLE "true") -set(CPACK_PACKAGE_VENDOR "Humanity") -set(CPACK_PACKAGE_VERSION "3.11") -set(CPACK_PACKAGE_VERSION_MAJOR "3") -set(CPACK_PACKAGE_VERSION_MINOR "11") -set(CPACK_RESOURCE_FILE_LICENSE "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericLicense.txt") -set(CPACK_RESOURCE_FILE_README "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericDescription.txt") -set(CPACK_RESOURCE_FILE_WELCOME "E:/Programs/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.24/Templates/CPack.GenericWelcome.txt") -set(CPACK_RPM_PACKAGE_SOURCES "ON") -set(CPACK_SET_DESTDIR "OFF") -set(CPACK_SOURCE_7Z "ON") -set(CPACK_SOURCE_GENERATOR "7Z;ZIP") -set(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") -set(CPACK_SOURCE_INSTALLED_DIRECTORIES "C:/Users/rue/source/repos/86Box-luennix;/") -set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackSourceConfig.cmake") -set(CPACK_SOURCE_PACKAGE_FILE_NAME "86Box-3.11-Source") -set(CPACK_SOURCE_TOPLEVEL_TAG "win64-Source") -set(CPACK_SOURCE_ZIP "ON") -set(CPACK_STRIP_FILES "") -set(CPACK_SYSTEM_NAME "win64") -set(CPACK_THREADS "1") -set(CPACK_TOPLEVEL_TAG "win64-Source") -set(CPACK_WIX_SIZEOF_VOID_P "8") - -if(NOT CPACK_PROPERTIES_FILE) - set(CPACK_PROPERTIES_FILE "C:/Users/rue/source/repos/86Box-luennix/out/build/regular/CPackProperties.cmake") -endif() - -if(EXISTS ${CPACK_PROPERTIES_FILE}) - include(${CPACK_PROPERTIES_FILE}) -endif() From a40698b2e2e1640878739770bd1433fad8819a14 Mon Sep 17 00:00:00 2001 From: rueni97 <99608219+luennix@users.noreply.github.com> Date: Mon, 9 Jan 2023 17:08:57 +0300 Subject: [PATCH 104/112] Delete VSInheritEnvironments.txt --- out/build/regular/VSInheritEnvironments.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 out/build/regular/VSInheritEnvironments.txt diff --git a/out/build/regular/VSInheritEnvironments.txt b/out/build/regular/VSInheritEnvironments.txt deleted file mode 100644 index f8cc9d8ac..000000000 --- a/out/build/regular/VSInheritEnvironments.txt +++ /dev/null @@ -1 +0,0 @@ -msvc_x64_x64 \ No newline at end of file From bd3b60b82fff4c341cffffe694147b0f98929682 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 9 Jan 2023 19:08:19 -0500 Subject: [PATCH 105/112] Fix mingw makefile build --- src/win/Makefile.mingw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index e39792966..0daf65323 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -549,7 +549,7 @@ CPUOBJ := $(DYNARECOBJ) \ CHIPSETOBJ := 82c100.o acc2168.o \ contaq_82c59x.o \ cs4031.o cs8230.o \ - ali1429.o ali1489.o ali1531.o ali1541.o ali1543.o ali1621.o ali6117.o \ + ali1429.o ali1435.o ali1489.o ali1531.o ali1541.o ali1543.o ali1621.o ali6117.o \ gc100.o headland.o \ ims8848.o intel_82335.o intel_420ex.o intel_4x0.o intel_i450kx.o intel_sio.o intel_piix.o \ ioapic.o \ From b91f79dcdcf94e0865f4e41e007733623cd55765 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 10 Jan 2023 03:50:47 +0100 Subject: [PATCH 106/112] Fixed warnings in cdrom/cdrom.c. --- src/cdrom/cdrom.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index 37795b845..2a3cbb1ca 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -797,7 +797,7 @@ void cdrom_get_current_subchannel_sony(cdrom_t *dev, uint8_t *b, int msf) { subchannel_t subc; - int pos = 0, m, s, f; + int pos = 0; uint32_t dat; dev->ops->get_subchannel(dev, dev->seek_pos, &subc); @@ -833,7 +833,6 @@ cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, int msf) { uint8_t ret; subchannel_t subc; - int m, s, f; uint32_t dat; dev->ops->get_subchannel(dev, dev->seek_pos, &subc); @@ -1063,7 +1062,6 @@ read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf { track_info_t ti; int i, len = 4; - int m, s, f; int first_track, last_track; uint32_t temp; From 829671848ed7650593b01f665e3b5be24c4f3477 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 10 Jan 2023 04:03:34 +0100 Subject: [PATCH 107/112] Fixed warning sin scsi/scsi_cdrom.c. --- src/scsi/scsi_cdrom.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index b635bcb10..3fb567e98 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -858,11 +858,10 @@ scsi_cdrom_update_request_length(scsi_cdrom_t *dev, int len, int block_len) that a media access comand does not DRQ in the middle of a sector. One of the drivers that relies on the correctness of this behavior is MTMCDAI.SYS (the Mitsumi CD-ROM driver) for DOS which uses the READ CD command to read data on some CD types. */ - if ((dev->current_cdb[0] == 0xb9) || (dev->current_cdb[0] == 0xbe)) { - /* Round to sector length. */ - dlen = ((double) dev->max_transfer_len) / ((double) block_len); - dev->max_transfer_len = ((uint16_t) floor(dlen)) * block_len; - } + + /* Round to sector length. */ + dlen = ((double) dev->max_transfer_len) / ((double) block_len); + dev->max_transfer_len = ((uint16_t) floor(dlen)) * block_len; } else { /* Round it to the nearest 2048 bytes. */ dev->max_transfer_len = (dev->max_transfer_len >> 11) << 11; @@ -929,7 +928,7 @@ scsi_cdrom_bus_speed(scsi_cdrom_t *dev) static void scsi_cdrom_command_common(scsi_cdrom_t *dev) { - double bytes_per_second, period; + double bytes_per_second = 0.0, period; dev->status = BUSY_STAT; dev->phase = 1; From 55effffbfb29face735136d8194f382d0b6ac4d3 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 10 Jan 2023 04:04:53 +0100 Subject: [PATCH 108/112] Fixed warning in scsi/scsi_spock.c. --- src/scsi/scsi_spock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scsi/scsi_spock.c b/src/scsi/scsi_spock.c index 0f618df95..f8dc3282e 100644 --- a/src/scsi/scsi_spock.c +++ b/src/scsi/scsi_spock.c @@ -516,7 +516,7 @@ spock_process_imm_cmd(spock_t *scsi) static void spock_execute_cmd(spock_t *scsi, scb_t *scb) { - int c, j; + int c, j = 0; int old_scb_state; if (scsi->in_reset) { From db55912a63487f60b51e02eb4ba0298925943a29 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 10 Jan 2023 04:11:01 +0100 Subject: [PATCH 109/112] Fixed another warning in scsi/scsi_cdrom.c. --- src/scsi/scsi_cdrom.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index 3fb567e98..38693f590 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -2640,7 +2640,8 @@ begin: break; } - ret = cdrom_audio_play(dev->drv, pos, len, msf); + /* In this case, len is unused so just pass a fixed value of 1 intead. */ + ret = cdrom_audio_play(dev->drv, pos, 1 /*len*/, msf); if (ret) scsi_cdrom_command_complete(dev); From 54d862d0b72328973786db6bc041726565931421 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 10 Jan 2023 04:15:29 +0100 Subject: [PATCH 110/112] Fixed another warning in cdrom/cdrom.c. --- src/cdrom/cdrom.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index 2a3cbb1ca..062e3bf72 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -1618,6 +1618,9 @@ cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, int c lba = bcd2bin((sector >> 24) & 0xff); msf = sector; break; + /* Never used values but the compiler complains. */ + default: + lba = msf = 0; } } From f3680b05b1802a20d7a61ca049eb12179cf974ec Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 12 Jan 2023 19:16:04 -0500 Subject: [PATCH 111/112] Prevent accidental merge of VS Code files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b4c67ef0a..0a21bf105 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ Makefile # Visual Studio Code /.vs /.vscode +/out # Windows resource compiler RC* From 5aa971534c8a0a7ef6e9295a7064b4d8c90800a5 Mon Sep 17 00:00:00 2001 From: luennix Date: Sat, 14 Jan 2023 12:07:06 +0300 Subject: [PATCH 112/112] Fixed QDI EXCELLENT II to have an AGP slot, as the real board also has one. --- 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 293aa6629..cd2813991 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -10852,7 +10852,7 @@ const machine_t machines[] = { .min_multi = 3.0, .max_multi = 8.0 }, - .bus_flags = MACHINE_PS2_PCI, + .bus_flags = MACHINE_PS2_AGP, .flags = MACHINE_IDE_DUAL, .ram = { .min = 8192,