This commit is contained in:
OBattler
2025-12-31 18:54:40 +01:00
14 changed files with 176 additions and 172 deletions

30
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,30 @@
# Code of Conduct
In order for everyone to enjoy their time contributing to 86Box or otherwise being a part of the community, we kindly ask you to review and follow the below rules.
## 1. No illegal activity or GitHub ToS violations
- 1.1. Do not distribute malware for non-research purposes. Post samples in a clearly named encrypted archive.
- 1.2. Posting old software is allowed if at least 10 years old and out of support.
- 1.3. Do not post NSFW content (defined at the staff's discretion).
- 1.4. Do not do anything forbidden by the law or the Discord or GitHub Terms of Service.
## 2. No offensive or disruptive behavior or harassment
- 2.1. No gate-keeping. We aim to accommodate and welcome people of all different opinions and knowledge levels to this community.
- 2.2. You may speak any language but provide a summary in English so that we can understand what you are saying and use English when requested.
- 2.3. Do not retroactively delete messages or do major edits unless you posted something by mistake.
- 2.4. Do not antagonize, defame, demean, blackmail, impersonate, dox others, bring outside drama, use intentionally offensive profile aspects, or otherwise post messages to start a fight (eg. platform wars). Discuss or debate the idea, not the person.
- 2.5. Do not backseat moderate, spam, flood, unsolicitedly ping people, advertise without permission, or evade blocks.
- 2.6. Do not speak on behalf of the project unless you are a team member. This includes all messages which could reasonably be understood as being an official position. Ask a team member if you're unsure about your message.
- 2.7. Decisions by higher-ranked users supersede those by lower-ranked users.
- 2.8. Do not engage in political discussions.
- 2.9. Ignoring essential communication from team members does not exempt you from possible actions against you. Seniority must be earned.
## 3. Moderation and appeal protocol
- 3.1. Rule violations are punished at the team's discretion, taking all circumstances into account.
- 3.2. Rules enforcement must be equal, impartial, and not retroactive or politically motivated.
- 3.3. Everyone is innocent until proven guilty.
- 3.4. Unless there is an emergency, urgent action is otherwise warranted, or a user is participating with the express purpose of violating our rules, the team shall deliberate before taking action in order to reach consensus and avoid team conflicts.
## 4. Do not insist on requests or suggestions
- 4.1. You may politely request something from us; if rejected, you are going to be told why and what to do to have it reconsidered.
- 4.2. Follow the contribution requirements listed on the GitHub readme.
- 4.3. Follow proper procedure (eg. for pull requests or bug reports).

View File

@@ -392,6 +392,7 @@ extern const char * machine_getname_ex(int m);
extern const char * machine_get_internal_name(void);
extern const char * machine_get_nvr_name(void);
extern int machine_get_machine_from_internal_name(const char *s);
extern int machine_get_machine_from_internal_name_ex(const char *s); /* returns -1 if internal name does not exist. */
extern void machine_init(void);
#ifdef EMU_DEVICE_H
extern const device_t *machine_get_kbc_device(int m);

View File

@@ -14788,7 +14788,7 @@ const machine_t machines[] = {
.cpu = {
.package = CPU_PKG_SOCKET5_7,
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P,
CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L),
CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L, CPU_WINCHIP, CPU_WINCHIP2),
.min_bus = 50000000,
.max_bus = 66666667,
.min_voltage = 2800,
@@ -20709,6 +20709,21 @@ machine_get_machine_from_internal_name(const char *s)
return 0;
}
int
machine_get_machine_from_internal_name_ex(const char *s)
{
int c = 0;
while (machines[c].init != NULL) {
if (!strcmp(machines[c].internal_name, s))
return c;
c++;
}
return -1;
}
int
machine_has_mouse(void)
{

View File

@@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2025-12-06 18:56+0000\n"
"PO-Revision-Date: 2025-12-29 09:54+0000\n"
"Last-Translator: Daniel Gurney <daniel@gurney.dev>\n"
"Language-Team: Finnish <https://weblate.86box.net/projects/86box/86box/fi/>\n"
"Language: fi-FI\n"
@@ -211,13 +211,13 @@ msgid "Take s&creenshot"
msgstr "Ota &kuvakaappaus"
msgid "Take &raw screenshot"
msgstr "Ota &raaka kuvakaapus"
msgstr "Ota &raaka kuvakaappaus"
msgid "C&opy screenshot"
msgstr "K&opia kuvakaapaus"
msgstr "K&opioi kuvakaappaus"
msgid "Copy r&aw screenshot"
msgstr "Kopia r&aaka kuvakaapaus"
msgstr "Kopioi r&aaka kuvakaappaus"
msgid "S&ound"
msgstr "&Ääni"

View File

@@ -55,10 +55,10 @@ msgid "&Resizeable window"
msgstr "Fenêtre &redimensionnable"
msgid "R&emember size && position"
msgstr "S&auvegarder taille && position"
msgstr "S&auvegarder taille et position"
msgid "Remember size && position"
msgstr "Sauvegarder taille && position"
msgstr "Sauvegarder taille et position"
msgid "Re&nderer"
msgstr "Moteur de re&ndu vidéo"
@@ -691,7 +691,7 @@ msgid "&Removable disk %1 (%2): %3"
msgstr "&Disque amovible %1 (%2) : %3"
msgid "Removable disk images"
msgstr "Imges de disque amovible"
msgstr "Images de disque amovible"
msgid "Image %1"
msgstr "Image %1"
@@ -931,7 +931,7 @@ msgid "Advanced sector images"
msgstr "Images secteur avancé"
msgid "Flux images"
msgstr "Images Flux"
msgstr "Images de flux"
msgid "Are you sure you want to hard reset the emulated machine?"
msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?"
@@ -1957,7 +1957,7 @@ msgid "Translate 26 -> 17"
msgstr "Traduire 26 -> 17"
msgid "Language"
msgstr "Langage"
msgstr "Langue"
msgid "Enable backlight"
msgstr "Activer le rétro-éclairage"
@@ -2662,28 +2662,28 @@ msgid "High performance impact"
msgstr "Impact important sur la performance"
msgid "[Generic] RAM Disk (max. speed)"
msgstr "[Generic] Disque RAM (vitesse maximale)"
msgstr "[Générique] Disque RAM (vitesse maximale)"
msgid "[Generic] 1989 (3500 RPM)"
msgstr "[Generic] 1989 (3500 RPM)"
msgstr "[Générique] 1989 (3500 RPM)"
msgid "[Generic] 1992 (3600 RPM)"
msgstr "[Generic] 1992 (3600 RPM)"
msgstr "[Générique] 1992 (3600 RPM)"
msgid "[Generic] 1994 (4500 RPM)"
msgstr "[Generic] 1994 (4500 RPM)"
msgstr "[Générique] 1994 (4500 RPM)"
msgid "[Generic] 1996 (5400 RPM)"
msgstr "[Generic] 1996 (5400 RPM)"
msgstr "[Générique] 1996 (5400 RPM)"
msgid "[Generic] 1997 (5400 RPM)"
msgstr "[Generic] 1997 (5400 RPM)"
msgstr "[Générique] 1997 (5400 RPM)"
msgid "[Generic] 1998 (5400 RPM)"
msgstr "[Generic] 1998 (5400 RPM)"
msgstr "[Générique] 1998 (5400 RPM)"
msgid "[Generic] 2000 (7200 RPM)"
msgstr "[Generic] 2000 (7200 RPM)"
msgstr "[Générique] 2000 (7200 RPM)"
msgid "IBM 8514/A clone (ISA)"
msgstr "Clone IBM 8514/A (ISA)"
@@ -2911,7 +2911,7 @@ msgid "You are currently running build <b>%1</b>."
msgstr "Vous exécutez actuellement le build <b>%1</b>."
msgid "<b>Build %1</b> is now available."
msgstr "<b>Le Build %1</b> est désormais disponible."
msgstr "<b>Le build %1</b> est désormais disponible."
msgid "Would you like to visit the download page?"
msgstr "Souhaitez-vous visiter la page de téléchargement ?"

View File

@@ -154,13 +154,13 @@ msgid "VGA screen &type"
msgstr "Schermi &VGA"
msgid "RGB &Color"
msgstr "RGB a &Colori"
msgstr "RGB a &colori"
msgid "RGB (no brown)"
msgstr "RGB (senza marrone)"
msgid "&RGB Grayscale"
msgstr "&RGB a Scala di grigi"
msgstr "&RGB a scala di grigi"
msgid "Generic RGBI color monitor"
msgstr "Monitor a colori RGBI generico"
@@ -1123,7 +1123,7 @@ msgid "VMs: %1"
msgstr "Macchine virtuali: %1"
msgid "System Directory:"
msgstr "Directory Sistema:"
msgstr "Directory sistema:"
msgid "Choose directory"
msgstr "Scegli la directory"
@@ -2392,10 +2392,10 @@ msgid "Wheel"
msgstr "Rotellina"
msgid "Five + Wheel"
msgstr "Cinque + Rotellina"
msgstr "Cinque + rotellina"
msgid "Five + 2 Wheels"
msgstr "Cinque + 2 Rotelline"
msgstr "Cinque + 2 rotelline"
msgid "A3 - SMT2 Serial / SMT3(R)V"
msgstr "A3 - SMT2 seriale / SMT3(R)V"

View File

@@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2025-12-07 13:33+0000\n"
"PO-Revision-Date: 2025-12-30 13:56+0000\n"
"Last-Translator: Alexander Babikov <lemondrops358@gmail.com>\n"
"Language-Team: Russian <https://weblate.86box.net/projects/86box/86box/ru/>\n"
"Language: ru-RU\n"
@@ -212,13 +212,13 @@ msgid "Take s&creenshot"
msgstr "Сделать с&криншот"
msgid "Take &raw screenshot"
msgstr "Сделать &сырой скриншот"
msgstr "Сделать н&еобработанный скриншот"
msgid "C&opy screenshot"
msgstr "С&копировать скриншот"
msgstr "Ско&пировать скриншот"
msgid "Copy r&aw screenshot"
msgstr "Скопировать с&ырой скриншот"
msgstr "Скопировать необработанный скрин&шот"
msgid "S&ound"
msgstr "&Звук"

View File

@@ -202,16 +202,16 @@ msgid "&Update status bar icons"
msgstr "更新狀態列圖示(&U)"
msgid "Take s&creenshot"
msgstr "擷(&C)"
msgstr "擷取螢幕畫面(&C)"
msgid "Take &raw screenshot"
msgstr "原始擷圖(&R)"
msgstr "擷取原始螢幕畫面(&R)"
msgid "C&opy screenshot"
msgstr "複製擷圖(&O)"
msgstr "擷取螢幕畫面至剪貼簿(&O)"
msgid "Copy r&aw screenshot"
msgstr "複製原始擷圖(&A)"
msgstr " 擷取原始螢幕畫面至剪貼薄(&A)"
msgid "S&ound"
msgstr "聲音(&O)"
@@ -340,7 +340,7 @@ msgid "Machine:"
msgstr "機型:"
msgid "Configure"
msgstr "設定"
msgstr "組態"
msgid "CPU:"
msgstr "CPU:"
@@ -652,13 +652,13 @@ msgid "Card 4:"
msgstr "擴充卡 4:"
msgid "Generic ISA ROM Board"
msgstr "通用 ISA ROM 板"
msgstr "通用 ISA ROM 板"
msgid "Generic Dual ISA ROM Board"
msgstr "通用 ISA ROM 板"
msgstr "通用 ISA ROM 板"
msgid "Generic Quad ISA ROM Board"
msgstr "通用四通道 ISA ROM 板"
msgstr "通用 ISA ROM 板"
msgid "ISABugger device"
msgstr "ISABugger 裝置"
@@ -904,10 +904,10 @@ msgid "Steering wheel (3-axis, 4-button)"
msgstr "方向盤 (3 軸, 4 鍵搖桿)"
msgid "Thrustmaster Formula T1/T2 with adapter"
msgstr "附轉接器 Thrustmaster Formula T1/T2"
msgstr "Thrustmaster Formula T1/T2 附轉接器"
msgid "Thrustmaster Formula T1/T2 without adapter"
msgstr "不附轉接器 Thrustmaster Formula T1/T2"
msgstr "Thrustmaster Formula T1/T2 不附轉接器 "
msgid "None"
msgstr "無"
@@ -1006,7 +1006,7 @@ msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny docum
msgstr "自動將 PCL 檔案轉換為 PDF 需要 %1。\n\n使用通用 PCL 印表機列印的文件將被儲存為 Printer Command Language (.pcl) 檔案。"
msgid "Don't show this message again"
msgstr "不要再顯示此息"
msgstr "不要再顯示此息"
msgid "Don't exit"
msgstr "不退出"
@@ -1021,7 +1021,7 @@ msgid "CD-ROM images"
msgstr "光碟影像"
msgid "%1 Device Configuration"
msgstr "%1 裝置設定"
msgstr "%1 裝置組態"
msgid "Monitor in sleep mode"
msgstr "監視器處在睡眠狀態"
@@ -1297,7 +1297,7 @@ msgid "An error has occurred while checking for updates: %1"
msgstr "檢查更新時發生錯誤: %1"
msgid "<b>An update to 86Box is available!</b>"
msgstr "<b>86Box 的更新可用!</b>"
msgstr "<b>86Box 的更新可用!</b>"
msgid "Warning"
msgstr "警告"
@@ -1312,10 +1312,10 @@ msgid "&Delete"
msgstr "刪除(&D)"
msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!"
msgstr "您真的想要刪除虛擬機器 \"%1\" 及其所有檔案嗎?此操作無法撤銷"
msgstr "您真的想要刪除虛擬機器 \"%1\" 及其所有檔案嗎?此操作無法回復"
msgid "Show &config file"
msgstr "顯示設定檔(&C)"
msgstr "顯示組態檔(&C)"
msgid "No screenshot"
msgstr "沒有螢幕畫面擷取"
@@ -1915,7 +1915,7 @@ msgid "Enable BIOS extension ROM Writes (ROM #4)"
msgstr "啟用 BIOS 擴充 ROM 寫入 (ROM 4)"
msgid "Linear framebuffer base"
msgstr "線性圖框緩衝記憶體的起始位址"
msgstr "線性影格緩衝記憶體的起始位址"
msgid "Address"
msgstr "位址"
@@ -2335,7 +2335,7 @@ msgid "Address for > 2 MB"
msgstr "> 2 MB 的位址"
msgid "Frame Address"
msgstr "影格位址"
msgstr "頁框位址"
msgid "USA"
msgstr "美國"
@@ -2554,13 +2554,13 @@ msgid "Mono Interlaced"
msgstr "單色隔行掃描"
msgid "Mono Non-Interlaced"
msgstr "單色非隔行掃描"
msgstr "單色行掃描"
msgid "Color Interlaced"
msgstr "彩色隔行掃描"
msgid "Color Non-Interlaced"
msgstr "彩色非隔行掃描"
msgstr "彩色行掃描"
msgid "3Dfx Voodoo Graphics"
msgstr "3Dfx Voodoo 圖形"
@@ -2761,28 +2761,28 @@ msgid "Could not load file %1"
msgstr "無法載入檔案 %1"
msgid "Key Bindings:"
msgstr "按鍵綁定:"
msgstr "按鍵組合:"
msgid "Action"
msgstr "動"
msgstr "動"
msgid "Keybind"
msgstr "鍵盤綁定"
msgstr "按鍵組合"
msgid "Clear binding"
msgstr "解除綁定"
msgstr "解除組合"
msgid "Bind"
msgstr "綁定"
msgstr "組合"
msgid "Bind Key"
msgstr "綁定按鍵"
msgstr "組合按鍵"
msgid "Enter key combo:"
msgstr "輸入組合鍵:"
msgid "Bind conflict"
msgstr "綁定衝突"
msgstr "組合衝突"
msgid "This key combo is already in use."
msgstr "此組合鍵已在使用中。"
@@ -2932,7 +2932,7 @@ msgid "Virtual machine crash"
msgstr "虛擬機當機"
msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2."
msgstr "虛擬機 \"%1\" 的程以退出代碼 %2 意外終止。"
msgstr "虛擬機 \"%1\" 的程以結束碼 %2 意外終止。"
msgid "The system will not be added."
msgstr "系統將不會被新增。"

View File

@@ -263,8 +263,6 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig)
// * First you clear it with VMManagerDetailSection::clear()
// * Then you add each line with VMManagerDetailSection::addSection()
setUpdatesEnabled(false);
// System
systemSection->clear();
systemSection->addSection("Machine", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Machine));
@@ -322,8 +320,6 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig)
inputSection->setSections();
portsSection->setSections();
otherSection->setSections();
setUpdatesEnabled(true);
}
void

View File

@@ -39,10 +39,6 @@ VMManagerDetailSection::
ui->setupUi(this);
frameGridLayout = new QGridLayout();
frameGridLayout->setContentsMargins(getMargins(MarginSection::DisplayGrid));
ui->detailFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
ui->detailFrame->setLayout(frameGridLayout);
// Create the collapse button, set the name and add it to the layout
collapseButton = new CollapseButton();
setSectionName(sectionName);
@@ -132,8 +128,6 @@ VMManagerDetailSection::
innerFrameLayout->addWidget(buttonWidget);
innerFrameLayout->addWidget(frame);
setLayout(outerFrameLayout);
usedRows = 0;
}
VMManagerDetailSection::~VMManagerDetailSection()
@@ -162,7 +156,6 @@ VMManagerDetailSection::setupMainLayout()
delete mainLayout;
mainLayout = new QVBoxLayout;
}
void
VMManagerDetailSection::setSections()
{
@@ -179,64 +172,52 @@ VMManagerDetailSection::setSections()
continue;
}
auto item = frameGridLayout->itemAtPosition(row, 1);
QLabel *label;
if (item) {
label = (QLabel *) item->widget();
label->setVisible(true);
} else {
label = new QLabel();
label->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
label->setTextInteractionFlags(label->textInteractionFlags() | Qt::TextSelectableByMouse);
frameGridLayout->addWidget(label, row, 1, Qt::AlignLeft);
}
label->setText(line);
const auto labelValue = new QLabel();
labelValue->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
labelValue->setTextInteractionFlags(labelValue->textInteractionFlags() | Qt::TextSelectableByMouse);
labelValue->setText(line);
frameGridLayout->addWidget(labelValue, row, 1, Qt::AlignLeft);
item = frameGridLayout->itemAtPosition(row, 0);
if (!labelKey) {
if (item) {
labelKey = (QLabel *) item->widget();
labelKey->setVisible(true);
} else {
labelKey = new QLabel();
labelKey->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
frameGridLayout->addWidget(labelKey, row, 0, Qt::AlignLeft);
}
labelKey = new QLabel();
labelKey->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
labelKey->setTextInteractionFlags(labelValue->textInteractionFlags());
labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data()));
} else if (item) {
item->widget()->setVisible(false);
}
if (!frameGridLayout->itemAtPosition(row, 2)) {
const auto hSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
frameGridLayout->addItem(hSpacer, row, 2);
frameGridLayout->addWidget(labelKey, row, 0, Qt::AlignLeft);
}
const auto hSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
frameGridLayout->addItem(hSpacer, row, 2);
empty = false;
row++;
}
}
int prevUsedRows = usedRows;
usedRows = row;
for (; row < prevUsedRows; row++) {
for (int i = 0; i <= 1; i++) {
auto item = frameGridLayout->itemAtPosition(row, i);
if (item)
item->widget()->setVisible(false);
}
}
collapseButton->setContent(ui->detailFrame);
if (!empty)
setVisible(true);
}
void
VMManagerDetailSection::clear()
{
sections.clear();
setVisible(false);
// Clear everything out
if (frameGridLayout) {
while (frameGridLayout->count()) {
QLayoutItem *cur_item = frameGridLayout->takeAt(0);
if (cur_item->widget())
delete cur_item->widget();
delete cur_item;
}
}
delete frameGridLayout;
frameGridLayout = new QGridLayout();
frameGridLayout->setContentsMargins(getMargins(MarginSection::DisplayGrid));
ui->detailFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
ui->detailFrame->setLayout(frameGridLayout);
}
#ifdef Q_OS_WINDOWS

View File

@@ -91,7 +91,6 @@ private:
static QMargins getMargins(MarginSection section);
QString sectionName;
int usedRows;
struct DetailSection {
QString name;

View File

@@ -521,14 +521,11 @@ VMManagerSystem::setupVars()
auto machine_name = QString();
int i = 0;
int ram_granularity = 0;
int ci = machine_get_machine_from_internal_name_ex(machine_config["machine"].toUtf8());
// Machine
for (int ci = 0; ci < machine_count(); ++ci) {
if (machine_available(ci)) {
if (machines[ci].internal_name == machine_config["machine"]) {
machine_name = machines[ci].name;
ram_granularity = machines[ci].ram.step;
}
}
if (ci != -1 && machine_available(ci)) {
machine_name = machines[ci].name;
ram_granularity = machines[ci].ram.step;
}
display_table[VMManager::Display::Name::Machine] = machine_name;

View File

@@ -2169,6 +2169,14 @@ mach64_blit(uint32_t cpu_dat, int count, mach64_t *mach64)
uint32_t dest_dat;
uint32_t host_dat = 0;
int mix = 0;
int draw_pixel = !(mach64->dst_cntl & DST_POLYGON_EN);
if (mach64->dst_cntl & DST_POLYGON_EN) {
if (mach64->dst_cntl & DST_Y_MAJOR)
draw_pixel = 1;
else if (mach64->accel.err >= 0)
draw_pixel = 1;
}
if (mach64->accel.source_host) {
host_dat = cpu_dat;
@@ -2215,7 +2223,7 @@ mach64_blit(uint32_t cpu_dat, int count, mach64_t *mach64)
break;
}
if ((mach64->accel.dst_x >= mach64->accel.sc_left) && (mach64->accel.dst_x <= mach64->accel.sc_right) && (mach64->accel.dst_y >= mach64->accel.sc_top) && (mach64->accel.dst_y <= mach64->accel.sc_bottom)) {
if ((mach64->accel.dst_x >= mach64->accel.sc_left) && (mach64->accel.dst_x <= mach64->accel.sc_right) && (mach64->accel.dst_y >= mach64->accel.sc_top) && (mach64->accel.dst_y <= mach64->accel.sc_bottom) && draw_pixel) {
switch (mix ? mach64->accel.source_fg : mach64->accel.source_bg) {
case SRC_HOST:
src_dat = host_dat;
@@ -2285,17 +2293,21 @@ mach64_blit(uint32_t cpu_dat, int count, mach64_t *mach64)
if (mach64->dst_cntl & DST_Y_MAJOR) {
mach64->accel.dst_y += mach64->accel.yinc;
mach64->accel.src_y += mach64->accel.yinc;
if (mach64->accel.err >= 0) {
mach64->accel.err += mach64->dst_bres_dec;
mach64->accel.dst_x += mach64->accel.xinc;
mach64->accel.src_x += mach64->accel.xinc;
} else {
mach64->accel.err += mach64->dst_bres_inc;
}
} else {
mach64->accel.dst_x += mach64->accel.xinc;
mach64->accel.src_x += mach64->accel.xinc;
if (mach64->accel.err >= 0) {
mach64->accel.err += mach64->dst_bres_dec;
mach64->accel.dst_y += mach64->accel.yinc;
mach64->accel.src_y += mach64->accel.yinc;
} else {
mach64->accel.err += mach64->dst_bres_inc;
}
@@ -2347,9 +2359,7 @@ mach64_blit(uint32_t cpu_dat, int count, mach64_t *mach64)
if (mach64->dst_cntl & DST_POLYGON_EN) {
if (mach64->dst_cntl & DST_Y_MAJOR)
draw_pixel = 1;
else if ((mach64->dst_cntl & DST_X_DIR) && mach64->accel.err < (mach64->dst_bres_dec + mach64->dst_bres_inc)) /*X+*/
draw_pixel = 1;
else if (!(mach64->dst_cntl & DST_X_DIR) && mach64->accel.err >= 0) /*X-*/
else if (mach64->accel.err >= 0)
draw_pixel = 1;
}
@@ -2406,62 +2416,27 @@ mach64_blit(uint32_t cpu_dat, int count, mach64_t *mach64)
return;
}
switch (mach64->dst_cntl & 7) {
case 0:
case 2:
mach64->accel.src_x--;
mach64->accel.dst_x--;
break;
case 1:
case 3:
mach64->accel.src_x++;
mach64->accel.dst_x++;
break;
case 4:
case 5:
mach64->accel.src_y--;
mach64->accel.dst_y--;
break;
case 6:
case 7:
mach64->accel.src_y++;
mach64->accel.dst_y++;
break;
default:
break;
}
mach64_log("x %i y %i err %i inc %i dec %i\n", mach64->accel.dst_x, mach64->accel.dst_y, mach64->accel.err, mach64->dst_bres_inc, mach64->dst_bres_dec);
if (mach64->accel.err >= 0) {
mach64->accel.err += mach64->dst_bres_dec;
switch (mach64->dst_cntl & 7) {
case 0:
case 1:
mach64->accel.src_y--;
mach64->accel.dst_y--;
break;
case 2:
case 3:
mach64->accel.src_y++;
mach64->accel.dst_y++;
break;
case 4:
case 6:
mach64->accel.src_x--;
mach64->accel.dst_x--;
break;
case 5:
case 7:
mach64->accel.src_x++;
mach64->accel.dst_x++;
break;
default:
break;
if (mach64->dst_cntl & DST_Y_MAJOR) {
mach64->accel.dst_y += mach64->accel.yinc;
mach64->accel.src_y += mach64->accel.yinc;
if (mach64->accel.err >= 0) {
mach64->accel.err += mach64->dst_bres_dec;
mach64->accel.dst_x += mach64->accel.xinc;
mach64->accel.src_x += mach64->accel.xinc;
} else {
mach64->accel.err += mach64->dst_bres_inc;
}
} else
mach64->accel.err += mach64->dst_bres_inc;
} else {
mach64->accel.dst_x += mach64->accel.xinc;
mach64->accel.src_x += mach64->accel.xinc;
if (mach64->accel.err >= 0) {
mach64->accel.err += mach64->dst_bres_dec;
mach64->accel.dst_y += mach64->accel.yinc;
mach64->accel.src_y += mach64->accel.yinc;
} else {
mach64->accel.err += mach64->dst_bres_inc;
}
}
}
}
break;

View File

@@ -24,6 +24,7 @@
#include <stdatomic.h>
#define HAVE_STDARG_H
#include <86box/86box.h>
#include "cpu.h"
#include <86box/io.h>
#include <86box/timer.h>
#include <86box/dma.h>
@@ -1191,6 +1192,9 @@ s3_virge_mmio_read(uint32_t addr, void *priv)
virge_t *virge = (virge_t *) priv;
uint8_t ret;
/* Add wait states for MMIO reads to prevent excessive polling */
cycles -= virge->svga.monitor->mon_video_timing_read_b;
switch (addr & 0xffff) {
case 0x8504:
if (!virge->virge_busy)
@@ -1242,6 +1246,9 @@ s3_virge_mmio_read_w(uint32_t addr, void *priv)
virge_t *virge = (virge_t *) priv;
uint16_t ret;
/* Add wait states for MMIO reads to prevent excessive polling */
cycles -= virge->svga.monitor->mon_video_timing_read_w;
switch (addr & 0xfffe) {
case 0x8504:
ret = 0xc000;
@@ -1275,6 +1282,9 @@ s3_virge_mmio_read_l(uint32_t addr, void *priv)
virge_t *virge = (virge_t *) priv;
uint32_t ret = 0xffffffff;
/* Add wait states for MMIO reads to prevent excessive polling */
cycles -= virge->svga.monitor->mon_video_timing_read_l;
switch (addr & 0xfffc) {
case 0x8180:
ret = virge->streams.pri_ctrl;