012
09.09.2025, 13:43 Uhr
bandu
|
Hier der funktionierende Boot vom DCP_320.IMG, die Einrichtung einer HDD und des SCP-Drivers SCPDR.SYS für 2*80*5*1024 Diskimages.
1. Starten der 86Box, Menü bearbeiten:
86Box-1.jpg

Dannach beeenden. Die Maschine ist nun in .cfg konfiguriert.
2. Zweiter Start – AMI-Bios konfigurieren
Leeres HDD-Image hdd32mb.img mit dd erzeugen: dd if=/dev/zero of= hdd32mb.img bs=512 count=65484 Von Diskette DCP_320.IMG in Lw. A: booten Im Menü bei Festplatten das Image zuordnen. (Sektoreinträge !! siehe AMI-Advanced) Im AMIBIos unter Type 47 eintragen.

3. Dritter Start -- Startdatei- Inhalte anpassen
config.sys (DCP_320) --------------------------- devices=ansi.sys device=driver.sys /D:1 /T:88 /F:2 /C (kann entfallen) device=scpdr.sys /D:1 (nicht erforderlich für Bootdiskette) devices=roncor.sys country=049 (ungültig, keybgd macht DE)
autoexec.bat (DCP_320) ------------------------------ ver
4. Das leere HDD-Image im DCP einrichten
fdisk format c: /s copy a:*.* c:
5. Beenden und neu Starten und mit DEL ins AMI-BIOS gehen. Bei ADVANCED die Bootreihenfolge von A: C: auf C: A: ändern.
6. Neu Starten, sollte jetzt von C: booten und C:> zeigen. Im Menü die Diskette A: auswerfen. (Achtung: ohne eine kleine code-Änderung führte das bei mir zum Absturz der 86Box. Alternativ: vor dem Start die Disk aus dem .cfg-File entfernen. 7. config.sys bearbeiten In 86Box arbeitet scpdr.sys NICHT von D:1 sondern NUR von D:0. Es kann auch nur EIN scpdr.sys aktiv gemacht werden ! device=scpdr.sys /D:0
8. autoexec.bat bearbeiten echo off SET PATH=C ;C DCP_320;C NORTON PROMPT $P$G keybgd rem 2*80*5*1024 scpset CP/A_01
9. Im Menü „Disketten & CDROM“ den Diskettentyp anpassen:
86Box-3.jpg
 Einstellen auf 800k. Achtung für diese Einstellung ist eine kleine Codeänderung erforderlich ! Die Einstellung muß aber vorgenomen werden, da der emulierte FDC initioal nicht anders auf das Diskettenformat eingestellt werden kann. Wichtig: im AMI-BIOS muß 360k stehen !!! SCPDR.SYS kann auch nur für Laufwerk A: konfiguriert werden !!
Nach dem Neustart meldet sich DCP mit folgendem Bildschirm:
Bild 86Box-4.jpg

Im Menü „Medien“ kann man die Diskettenzuweisung kontrollieren und Ändern.
Das Kommando `dir d:` listet jetzt die scp-Diskettein Lw. A auf.
Im Diskettenmenü der modifizierten 86Box-Version funktioniert auch 5,25“ 720k für 800k weil die eigentlich wirksame Änderung die erste Codeänderung C1 ist.
Das hdd image kann man unter linux offline mit den mtools bearbeiten.
C1. Für Fileformat 800k in fdd_img.c ist zur ergänzen:
<code> } else if (size <= (720 * 1024)) { /*DD 720K*/ dev->sectors = 9; dev->tracks = 80;
} else if (size <= (800 * 1024)) { /*DD*/ if (dev->sides == 2) { dev->sectors = 5; /* 10 mkl */ dev->tracks = 80; dev->sector_size = 3; /* mkl */ } else { dev->sectors = 10; dev->tracks = 80; }
} else if (size <= (880 * 1024)) { /*DD*/ </code>
C2. Für Fileformat 800k in fdd.c ist die Tabelle um eine Spalte zu erweitern und um einen Eintrag zu ergänzen:
<code> static const struct { int max_track; int flags; const char *name; const char *internal_name; int cpm; } drive_types[] = { /* None */ { 0, 0, "None", "none" ,0}, /* 5.25" 1DD */ { 43, FLAG_RPM_300 | FLAG_525 | FLAG_HOLE0, "5.25\" 180k", "525_1dd" ,0}, /* 5.25" DD */ { 43, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0, "5.25\" 360k", "525_2dd" ,0}, /* 5.25" QD */ { 86, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "5.25\" 720k", "525_2qd" ,0}, /* 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" ,0 }, /* 5.25" QD */ { 86, FLAG_RPM_300 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 800k", "525_2hd" ,1}, /* mkl */ /* 5.25" HD */ { 86, FLAG_RPM_360 | FLAG_525 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "5.25\" 1.2M", "525_2hd" ,0}, /* 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" ,0}, /* 3.5" 1DD */ { 86, FLAG_RPM_300 | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 360k", "35_1dd" ,0}, /* 3.5" DD, Equivalent to TEAC FD-235F */ { 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_DOUBLE_STEP, "3.5\" 720k", "35_2dd" ,0}, /* 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" ,0}, /* 3.5" HD, Equivalent to TEAC FD-235HF */ { 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.44M", "35_2hd" ,0}, /* TODO: 3.5" DD, Equivalent to TEAC FD-235GF */ // { 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_DOUBLE_STEP, "3.5\" 1.25M", "35_2hd_2mode" ,0}, /* 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" ,0}, /* 3.5" HD 3-Mode, Equivalent to TEAC FD-235HG */ { 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" ,0}, /* 3.5" ED, Equivalent to TEAC FD-235J */ { 86, FLAG_RPM_300 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2 | FLAG_DOUBLE_STEP, "3.5\" 2.88M", "35_2ed" ,0}, /* 3.5" ED Dual RPM, Equivalent to TEAC FD-335J */ { 86, FLAG_RPM_300 | FLAG_RPM_360 | FLAG_DS | FLAG_HOLE0 | FLAG_HOLE1 | FLAG_HOLE2 | FLAG_DOUBLE_STEP, "3.5\" 2.88M 300/360 RPM", "35_2ed_dualrpm" ,0}, /* End of list */ { -1, -1, "", "" ,0} }; </code>
C3. Für die Floppy-Eject Korrektur ist in src/qt/qt_mediahistorymanager.cpp folgende Änderung vorzunehmen:
<code> device_index_list_t & MediaHistoryManager::removeMissingImages(device_index_list_t &device_history) { for (auto &checked_path : device_history) { QFileInfo file_info(checked_path);
if (file_info.filePath().isEmpty()) { continue; }
// mkl ------------- QByteArray utf8 = checked_path.toUtf8(); // QByteArray hier als Variable erhalten (Lebensdauer!) char temp[1024] = { 0 };
// Kopiere in temp, damit du einen sicheren, nullterminierten Puffer hast size_t len = std::min<size_t>(utf8.size(), sizeof(temp) - 1); memcpy(temp, utf8.constData(), len); temp[len] = '\0'; // explizit nullterminieren (zur Sicherheit)
char* p = temp; // p zeigt jetzt auf sicheren, modifizierbaren String
if (path_abs(p)) { if (strlen(p) > (MAX_IMAGE_PATH_LEN - 1)) { fatal("removeMissingImages(): strlen(p) > 2047\n"); } else { // temp ist schon p, hier evtl. noch etwas machen } } else { snprintf(temp, sizeof(temp), "%s%s%s", usr_path, path_get_slash(usr_path), p); }
/* char *p = checked_path.toUtf8().data(); char temp[1024] = { 0 };
if (path_abs(p)) { if (strlen(p) > (MAX_IMAGE_PATH_LEN - 1)) fatal("removeMissingImages(): strlen(p) > 2047\n"); else snprintf(temp, (MAX_IMAGE_PATH_LEN - 1), "%s", p); } else snprintf(temp, (MAX_IMAGE_PATH_LEN - 1), "%s%s%s", usr_path, path_get_slash(usr_path), p); */
path_normalize(temp);
QString qstr = QString::fromUtf8(temp); QFileInfo new_fi(qstr);
if ((new_fi.filePath().left(8) != "ioctl://") && !new_fi.exists()) { qWarning("Image file %s does not exist - removing from history", qPrintable(new_fi.filePath())); checked_path = ""; } } return device_history; } </code> |