Well, never seen a PSP so don't know exactly the working of psp joypad. But it seems promising the accuracy you are trying with this emu. As i said, i wanted to test some low level code and programs in the floppy controllers, but no current emulator provides it. So i wanted to try this and make some tests.
If you someday will make it usable i'll be happy of running on it a battery of tests and report all results. For this to work, a low level floppy must be emulated (not at sector level, but down to bit-cell timings and so). If you have some interest in this just pm me. Thanks!
Well, if you know a XBox 360 controller, UniPCemu maps the buttons 1:1 between the PSP buttons and XBox 360 buttons and analog inputs. It's about the same as a PS3 inputs afaik. Although not all buttons are mapped, the common face buttons and shoulder buttons are used(arrows(DPad), square/triangle/circle/cross(x/y/b/a), L/R and Select/Start are mapped). Those buttons, as well as one of the Analog sticks are mapped during the non-Direct Input modes on the PC/PSP builds. Android swaps some buttons on the (On-screen) keyboard for easier compatibility. Keyboard input is mapped in roughly a comination of the Visualboyadvance inputs (Q/W for L/R, Backspace(Escape on Android)/Enter(One key to the left on Android) for Select/Start, Numpad 4/8/6/2 for face buttons, Ctrl for Home(unused atm), i/j/k/l for Analog stick and right shift key for precise analog movement(to improve analog movement, shows a active color P on-screen to indicate activity)).
To get it running, I usually:
1. Create an empty 8KB ROM using the static disk image creation to flash the hard disk BIOS to.
2. Take a minimal MS-DOS 3.0 boot disk, extend using Winimage to 1.44MB, add the XT-IDE XT&AT ROMs and flashing utility to the disk.
3. Use the Generic Super PC/Turbo XT BIOS to boot the disk.
4. Flash the empty flash ROM with a automatically configured ROM for XT/AT (It's the default Atmel chip, specified in the documentation).
5. Run the emulator normally from virtual hard disk image after partitioning and formatting from a MS-DOS floppy disk image(Usually 5.0a).
I usually use one plain .img file to transfer data to/from my .sfdimg hard disk image containing test games and software. I just copy files into it using Winimage and copy them to the sfdimg hard disk image using the installed MS-DOS version.
Floppy disks are currently emulated on a DMA timing level, so atm no physical read/write emulation yet(Am planning to implement it eventually, though, but at the byte/sector level, with physical track and movement etc. emulation). Although, there seems to be some odd bug in the AT BIOS refusing to use the FDC correctly, and the Compaq Deskpro 386 just configures the floppy DMA controller channel incorrectly, causing it to hang when transferring data during a disk read(it's configured for self test if I'm remembering it correctly). I'm also rewriting part of the CPU emulation to be able to perform 80286+ protected mode tasks(tables besides IVT, task switching, paging and descriptor retrieval) on a cycle-accurate level, to start with by retrieving all those through the BIU. Currently only implemented the IVT to use the BIU besides normal 8086-80286 instructions in 16-bit/32-bit form) in the latest commit. I hope to eventually get as far as to map all those into the EU communicating with the BIU like normal instructions do, to archieve some form of cycle-based fetching(EU->BIU->Memory and DESCRIPTOR->PAGING->BIU->Memory) of course, the descriptors fetching using Paging support from the BIU, while the Paging requests from the BIU directly). Currently, all is done by directly interfacing the memory, but the BIU talking in physical addresses. The middle(execution) layer(which fetches through Paging translation from the BIU) uses the Paging TLB and Descriptors to translate correctly, but the loading of descriptors/TLB is still done on the EU itself without using the BIU. It would still need to be modified to load like the EU using the execution layer to perform it's job.
I have to concur that this isn't really usable in its current state. I was able to boot a DOS floppy image (only after switching to one of the generic XT BIOS ROM supported by PCEm), but I can't get much further. Specifically, there seems to be no way to tell the emulator *or* the BIOS to use CGA (rather than VGA). "VGA Mode" doesn't want to change to anything else than "pure VGA", and the same goes for "architecture" (XT) and "CPU type" (NEC V20/V30).
Any ideas on how I'd emulate an 4.77MHz XT/CGA floppy-only system?
[EDIT: never mind; somehow aborting and then relaunching the emulator allowed me to change those settings.]
In any case, UniPCemu could definitely use PC-centric controls, a menu system intended for mouse/keyboard, and a human-readable/editable settings file, at the minimum.
To change those settins you mention, you'll need to enter the Settings menu using select when the yellow text appears when starting the emulator(or press Select/Backspace on PC to archieve the same). It'll enter a full-rights menu, where all settings are adjustable(as the BIOS ROM isn't running yet). When the yellow text disappears and the BIOS ROM execution starts(the POST routines of the used BIOS), UniPCemu will protect those settings against changes. It would be the equivalent of changing stuff on the motherboard/hardware while a PC is turned on(a real PC would fry if you tried that, the emulator will crash(since all logic that's used to keep the system consistent would be reset, due to all those hardware changes changing and resetting all logic and data backends for the affected hardware, causing lots of problems if emulation is resumed(e.g. CPU logic being reset or hardware states fully changing due to changes in how they work.). For that reason, all settings that cannot be changed during runtime will ignore attempts to choose or modify them(equivalent of it being disabled, although UniPCemu's menus don't directly support disabled options, they will restart the current menu instead(they're actually being clicked when clicked on/used enter on, but will abort silently and cause the current menu to be reentered(it can be seen by moving the text cursor with the up/down keys to the item and pressing enter. The reentering of the current menu will, as can be seen, cause the > indicator(which specifies the selected item) to reset(due to the menu being reentered) to the top option in the menu. This behaviour isn't usually seen when clicking with the mouse, as it doesn't move the cursor and silently restarts the menu.
Besides using the yellow text to enter the full-access rights menu(before emulation starts) you can also use the "Restart emulator and enter Settings menu (save changes)" to make the emulator restart and automatically enter the settings menu(with full access rights) before the yellow text disappears. Once the yellow text disappears, the BIOS ROMs are loaded from their files and the Settings menu will be partially locked(due to otherwise runtime problems in the machine emulation). All locked items are effectively the same as a real PC: things that the CPU depends on that cannot change(stuff like attached hardware on the BUS and of course settings that impact the CPU as a whole(changes in it's logic operation, architecture etc.). I've never seen a PC that can exchange those basic components when power is applied on a real PC(non-USB etc. of course).
Do you think is possible to make it usuable to pc users? A SIMPLE (used for 30years, guess why) pulldown menu will be ok. Even simplier for you, a .ini o .cfg file if you want to add nothing "fancy". I know is your emu and you code as you please. But is really this emu being used for PSP users? I guess you'll have 10000000% more PC/Linux(whatever with a keyboard, even Raspberrys) users. Maybe you simply don't care, but having a userbase is good for getting new bugs, testing things, improving it, even collaborations and code submittings.
As i said, it's your work and you whatever you like. But making it usable for anyone except you, could be a plus.
I originally wanted to implement a configuration using .ini files, but the I had problems parsing them and how to implement them. I'll see if I can find out anything to parse/create them in a simple cross-platform way(without requiring libraries).
Edit: Managed to get a basic INI file(with numbers and text storage) working. Now(in the current commit), UniPCemu will use a SETTINGS.INI file instead of SETTINGS.DAT to store it's settings. Although all setting values are unchanged, so mostly numbers instead of descriptive text(which only makes sense to the emulator itself). Also no comments are supported yet. Text storage(filenames etc.) already work without problems and are editable. All other settings are stored as signed or unsigned numbers(depending on the setting supporting a combination of unset(-1) and set(0+) values. Unlike Dosbox, no text representation storage is supported for most values yet, except filename fields.
Currently generated SETTINGS.INI file with my current settings, as an example:
After fixing some bugs that truncated some values to 8-bit instead of 16/32/64-bit (un)signed, there's now only one actual bitfield(which isn't just some addition of a few numbers) left, but that can be easily done with a simple calculator to format some address to set:
X000 YYYY ZZZZ ZZZZ is the breakpoint format(in hexadecimal, saved in 64-bit unsigned decimal), where X is 0(No breakpoint), 1(Real mode breakpoint), 2(Protected mode breakpoint) or 3(Virtual 8086 mode breakpoint), YYYY is the segment and ZZZZZZZZ is the offset(truncated to 16-bits in all modes but the protected mode breakpoints).
I've also added a bit of documentation when saving(overwriting) the ini file:
1[general] 2; version: version number, DO NOT CHANGE 3; firstrun: 1 for opening the settings menu automatically, 0 otherwise 4; settingsmenufont: the font to use for the Settings menu: 0=Default, 1=Phoenix Laptop, 2=Phoenix - Award Workstation 5version=1 6firstrun=0 7settingsmenufont=0 8 9[machine] 10; cpu: 0=8086/8088, 1=NEC V20/V30, 2=80286, 3=80386, 4=80486 11; databussize: 0=Full sized data bus of 16/32-bits, 1=Reduced data bus size 12; memory: memory size in bytes 13; architecture: 0=XT, 1=AT, 2=Compaq Deskpro 386, 3=PS/2 14; executionmode: 0=Use emulator internal BIOS, 1=Run debug directory files, else TESTROM.DAT at 0000:0000, 2=Run TESTROM.DAT at 0000:0000, 3=Debug video card output, 4=Load BIOS from ROM directory as BIOSROM.u* and OPTROM.*, 5=Run sound test 15; cpuspeed: 0=default, otherwise, limited to n cycles(>=0) 16; showcpuspeed: 0=Don't show, 1=Show 17; turbocpuspeed: 0=default, otherwise, limit to n cycles(>=0) 18; useturbocpuspeed: 0=Don't use, 1=Use 19; BIOSROMmode: 0=Normal BIOS ROM, 1=Diagnostic ROM 20; inboardinitialwaitstates: 0=Default waitstates, 1=No waitstates 21cpu=3 22databussize=0 23memory=1398210560 24architecture=0 25executionmode=4 26cpuspeed=0 27showcpuspeed=0 28turbocpuspeed=0 29useturbocpuspeed=0 30BIOSROMmode=0 31inboardinitialwaitstates=0 32 33[debugger] 34; debugmode: 0=Disabled, 1=Enabled, RTrigger=Step, 2=Enabled, Step through, 3=Enabled, just run, ignore shoulder buttons 35; debuggerlog: 0=Don't log, 1=Only when debugging, 2=Always log, 3=Interrupt calls only, 4=BIOS Diagnostic codes only, 5=Always log, no register state, 6=Always log, even during skipping, 7=Always log, even during skipping, single line format, 8=Only when debugging, single line format, 9=Always log, even during skipping, single line format, simplified, 10=Only when debugging, single line format, simplified 36; logstates: 0=Disabled, 1=Enabled 37; breakpoint: bits 60-61: 0=Not set, 1=Real mode, 2=Protected mode, 3=Virtual 8086 mode; bits 32-47: segment, bits 31-0: offset(truncated to 16-bits in Real/Virtual 8086 mode 38; diagnosticsport_breakpoint: -1=Disabled, 0-255=Value to trigger the breakpoint 39; diagnosticsport_timeout: 0=At first instruction, 1+: At the n+1th instruction 40debugmode=0 41debuggerlog=0 42logstates=0 43breakpoint=1152941519154468472 44diagnosticsport_breakpoint=-1 45diagnosticsport_timeout=0 46 47[video] 48; videocard: 0=Pure VGA, 1=VGA with NMI, 2=VGA with CGA, 3=VGA with MDA, 4=Pure CGA, 5=Pure MDA, 6=Tseng ET4000, 7=Tseng ET3000, 8=Pure EGA 49; CGAmodel: 0=Old-style RGB, 1=Old-style NTSC, 2=New-style RGB, 3=New-style NTSC 50; VRAM: Ammount of VRAM installed, in bytes 51; synchronization: 0=Old synchronization depending on host, 1=Synchronize depending on host, 2=Full CPU synchronization 52; directplot: 0=Disabled, 1=Automatic, 2=Forced 53; aspectratio: 0=Fullscreen stretching, 1=Keep the same, 2=Force 4:3(VGA), 3=Force CGA, 4=Force 4:3(SVGA 768p), 5=Force 4:3(SVGA 1080p), 6=Force 4K 54; bwmonitor: 0=Color, 1=B/W monitor: white, 2=B/W monitor: green, 3=B/W monitor: amber 55; showframerate: 0=Disabled, otherwise Enabled 56videocard=0 57CGAmodel=0 58VRAM=262144 59synchronization=2 60directplot=2
…Show last 549 lines
61aspectratio=2 62bwmonitor=0 63showframerate=0 64 65[sound] 66; speaker: 0=Disabled, 1=Enabled 67; adlib: 0=Disabled, 1=Enabled 68; LPTDAC: 0=Disabled, 1=Enabled 69; soundfont: The path to the soundfont file. Empty for none. 70; directmidi: 0=Disabled, 1=Enabled 71; gameblaster: 0=Disabled, 1=Enabled 72; gameblaster_volume: Volume of the game blaster, in percent(>=0) 73; soundblaster: 0=Disabled, 1=Version 1.5, 2=Version 2.0 74; soundsource_volume: Volume of the sound source, in percent(>=0) 75speaker=0 76adlib=0 77LPTDAC=0 78soundfont= 79directmidi=0 80gameblaster=0 81gameblaster_volume=100 82soundblaster=0 83soundsource_volume=100 84 85[disks] 86; floppy[number]/hdd[number]/cdrom[number]: The disk to be mounted. Empty for none. 87; floppy[number]_readonly/hdd[number]_readonly: 0=Writable, 1=Read-only 88floppy0= 89floppy0_readonly=0 90floppy1= 91floppy1_readonly=0 92hdd0=games.sfdimg 93hdd0_readonly=1 94hdd1= 95hdd1_readonly=0 96cdrom0= 97cdrom1= 98 99[bios] 100; bootorder: The boot order of the internal BIOS: 101; 0=FLOPPY, CDROM, HDD 102; 1=FLOPPY, HDD, CDROM 103; 2=CDROM, FLOPPY, HDD 104; 3=CDROM, HDD, FLOPPY 105; 4=HDD, FLOPPY, CDROM 106; 5=HDD, CDROM, FLOPPY 107; 6=FLOPPY, CDROM 108; 7=FLOPPY, HDD 109; 8=CDROM, FLOPPY 110; 9=CDROM, HDD 111; 10=HDD, FLOPPY 112; 11=HDD, CDROM 113; 12=FLOPPY ONLY 114; 13=CDROM ONLY 115; 14=HDD ONLY 116; 117bootorder=0 118 119[input] 120; analog_minrange: Minimum range for the analog stick to repond. 0-255 121; Color codes are as follows: 122; 0=Black 123; 1=Blue 124; 2=Green 125; 3=Cyan 126; 4=Red 127; 5=Magenta 128; 6=Brown 129; 7=Light gray 130; 8=Dark gray 131; 9=Bright blue 132; 10=Bright green 133; 11=Bright cyan 134; 12=Bright red 135; 13=Bright magenta 136; 14=Yellow 137; 15=White 138; 139; keyboard_fontcolor: font color for the (PSP) OSK. 140; keyboard_bordercolor: border color for the (PSP) OSK. 141; keyboard_activecolor: active color for the (PSP) OSK. Also color of pressed keys on the touch OSK. 142; keyboard_specialcolor: font color for the LEDs. 143; keyboard_specialbordercolor: border color for the LEDs. 144; keyboard_specialactivecolor: active color for the LEDs. 145; 146analog_minrange=63 147keyboard_fontcolor=1 148keyboard_bordercolor=8 149keyboard_activecolor=14 150keyboard_specialcolor=7 151keyboard_specialbordercolor=6 152keyboard_specialactivecolor=14 153 154[gamingmode] 155; Key number 0 is a 156; Key number 1 is b 157; Key number 2 is c 158; Key number 3 is d 159; Key number 4 is e 160; Key number 5 is f 161; Key number 6 is g 162; Key number 7 is h 163; Key number 8 is i 164; Key number 9 is j 165; Key number 10 is k 166; Key number 11 is l 167; Key number 12 is m 168; Key number 13 is n 169; Key number 14 is o 170; Key number 15 is p 171; Key number 16 is q 172; Key number 17 is r 173; Key number 18 is s 174; Key number 19 is t 175; Key number 20 is u 176; Key number 21 is v 177; Key number 22 is w 178; Key number 23 is x 179; Key number 24 is y 180; Key number 25 is z 181; Key number 26 is 0 182; Key number 27 is 1 183; Key number 28 is 2 184; Key number 29 is 3 185; Key number 30 is 4 186; Key number 31 is 5 187; Key number 32 is 6 188; Key number 33 is 7 189; Key number 34 is 8 190; Key number 35 is 9 191; Key number 36 is ` 192; Key number 37 is - 193; Key number 38 is = 194; Key number 39 is \ 195; Key number 40 is bksp 196; Key number 41 is space 197; Key number 42 is tab 198; Key number 43 is capslock 199; Key number 44 is lshift 200; Key number 45 is lctrl 201; Key number 46 is lwin 202; Key number 47 is lalt 203; Key number 48 is rshift 204; Key number 49 is rctrl 205; Key number 50 is rwin 206; Key number 51 is ralt 207; Key number 52 is apps 208; Key number 53 is enter 209; Key number 54 is esc 210; Key number 55 is f1 211; Key number 56 is f2 212; Key number 57 is f3 213; Key number 58 is f4 214; Key number 59 is f5 215; Key number 60 is f6 216; Key number 61 is f7 217; Key number 62 is f8 218; Key number 63 is f9 219; Key number 64 is f10 220; Key number 65 is f11 221; Key number 66 is f12 222; Key number 67 is prtsc 223; Key number 68 is scroll 224; Key number 69 is pause 225; Key number 70 is [ 226; Key number 71 is insert 227; Key number 72 is home 228; Key number 73 is pgup 229; Key number 74 is del 230; Key number 75 is end 231; Key number 76 is pgdn 232; Key number 77 is up 233; Key number 78 is left 234; Key number 79 is down 235; Key number 80 is right 236; Key number 81 is num 237; Key number 82 is kp/ 238; Key number 83 is kp* 239; Key number 84 is kp- 240; Key number 85 is kp+ 241; Key number 86 is kpen 242; Key number 87 is kp. 243; Key number 88 is kp0 244; Key number 89 is kp1 245; Key number 90 is kp2 246; Key number 91 is kp3 247; Key number 92 is kp4 248; Key number 93 is kp5 249; Key number 94 is kp6 250; Key number 95 is kp7 251; Key number 96 is kp8 252; Key number 97 is kp9 253; Key number 98 is ] 254; Key number 99 is ; 255; Key number 100 is ' 256; Key number 101 is , 257; Key number 102 is . 258; Key number 103 is / 259; gamingmode_map_[key]_key: The key to be mapped. -1 for unmapped. Otherwise, the key number(0-103) 260; gamingmode_map_[key]_shiftstate: The summed state of ctrl/alt/shift keys to be pressed. 1=Ctrl, 2=Alt, 4=Shift. 0/empty=None. 261; gamingmode_map_[key]_mousebuttons: The summed state of mouse buttons to be pressed(0=None pressed, 1=Left, 2=Right, 4=Middle). 262; joystick: 0=Normal gaming mode mapped input, 1=Joystick, Cross=Button 1, Circle=Button 2, 2=Joystick, Cross=Button 2, Circle=Button 1, 3=Joystick, Gravis Gamepad, 4=Joystick, Gravis Analog Pro, 5=Joystick, Logitech WingMan Extreme Digital 263gamingmode_map_start_key=-1 264gamingmode_map_start_shiftstate=0 265gamingmode_map_start_mousebuttons=0 266gamingmode_map_left_key=-1 267gamingmode_map_left_shiftstate=0 268gamingmode_map_left_mousebuttons=0 269gamingmode_map_up_key=-1 270gamingmode_map_up_shiftstate=0 271gamingmode_map_up_mousebuttons=0 272gamingmode_map_right_key=-1 273gamingmode_map_right_shiftstate=0 274gamingmode_map_right_mousebuttons=0 275gamingmode_map_down_key=-1 276gamingmode_map_down_shiftstate=0 277gamingmode_map_down_mousebuttons=0 278gamingmode_map_ltrigger_key=-1 279gamingmode_map_ltrigger_shiftstate=0 280gamingmode_map_ltrigger_mousebuttons=0 281gamingmode_map_rtrigger_key=-1 282gamingmode_map_rtrigger_shiftstate=0 283gamingmode_map_rtrigger_mousebuttons=0 284gamingmode_map_triangle_key=-1 285gamingmode_map_triangle_shiftstate=0 286gamingmode_map_triangle_mousebuttons=0 287gamingmode_map_circle_key=-1 288gamingmode_map_circle_shiftstate=0 289gamingmode_map_circle_mousebuttons=0 290gamingmode_map_cross_key=-1 291gamingmode_map_cross_shiftstate=0 292gamingmode_map_cross_mousebuttons=0 293gamingmode_map_square_key=-1 294gamingmode_map_square_shiftstate=0 295gamingmode_map_square_mousebuttons=0 296gamingmode_map_analogleft_key=-1 297gamingmode_map_analogleft_shiftstate=0 298gamingmode_map_analogleft_mousebuttons=0 299gamingmode_map_analogup_key=-1 300gamingmode_map_analogup_shiftstate=0 301gamingmode_map_analogup_mousebuttons=0 302gamingmode_map_analogright_key=-1 303gamingmode_map_analogright_shiftstate=0 304gamingmode_map_analogright_mousebuttons=0 305gamingmode_map_analogdown_key=-1 306gamingmode_map_analogdown_shiftstate=0 307gamingmode_map_analogdown_mousebuttons=0 308joystick=0 309 310[primaryCMOS] 311; gotCMOS: 0=Don't load CMOS. 1=CMOS data is valid and to be loaded. 312; TimeDivergeance_seconds: Time to be added to get the emulated time, in seconds. 313; TimeDivergeance_microseconds: Time to be added to get the emulated time, in microseconds. 314; s100: 100th second register content on XT RTC (0-255, Usually BCD stored as integer) 315; s10000: 10000th second register content on XT RTC (0-255, Usually BCD stored as integer) 316; RAM[hexnumber]: The contents of the CMOS RAM location(0-255) 317; extraRAM[hexnumber]: The contents of the extra RAM location(0-255) 318gotCMOS=0 319TimeDivergeance_seconds=0 320TimeDivergeance_microseconds=0 321s100=0 322s10000=0 323RAM00=0 324RAM01=0 325RAM02=0 326RAM03=0 327RAM04=0 328RAM05=0 329RAM06=0 330RAM07=0 331RAM08=0 332RAM09=0 333RAM0A=0 334RAM0B=0 335RAM0C=0 336RAM0D=0 337RAM0E=0 338RAM0F=0 339RAM10=0 340RAM11=0 341RAM12=0 342RAM13=0 343RAM14=0 344RAM15=0 345RAM16=0 346RAM17=0 347RAM18=0 348RAM19=0 349RAM1A=0 350RAM1B=0 351RAM1C=0 352RAM1D=0 353RAM1E=0 354RAM1F=0 355RAM20=0 356RAM21=0 357RAM22=0 358RAM23=0 359RAM24=0 360RAM25=0 361RAM26=0 362RAM27=0 363RAM28=0 364RAM29=0 365RAM2A=0 366RAM2B=0 367RAM2C=0 368RAM2D=0 369RAM2E=0 370RAM2F=0 371RAM30=0 372RAM31=0 373RAM32=0 374RAM33=0 375RAM34=0 376RAM35=0 377RAM36=0 378RAM37=0 379RAM38=0 380RAM39=0 381RAM3A=0 382RAM3B=0 383RAM3C=0 384RAM3D=0 385RAM3E=0 386RAM3F=0 387RAM40=0 388RAM41=0 389RAM42=0 390RAM43=0 391RAM44=0 392RAM45=0 393RAM46=0 394RAM47=0 395RAM48=0 396RAM49=0 397RAM4A=0 398RAM4B=0 399RAM4C=0 400RAM4D=0 401RAM4E=0 402RAM4F=0 403RAM50=0 404RAM51=0 405RAM52=0 406RAM53=0 407RAM54=0 408RAM55=0 409RAM56=0 410RAM57=0 411RAM58=0 412RAM59=0 413RAM5A=0 414RAM5B=0 415RAM5C=0 416RAM5D=0 417RAM5E=0 418RAM5F=0 419RAM60=0 420RAM61=0 421RAM62=0 422RAM63=0 423RAM64=0 424RAM65=0 425RAM66=0 426RAM67=0 427RAM68=0 428RAM69=0 429RAM6A=0 430RAM6B=0 431RAM6C=0 432RAM6D=0 433RAM6E=0 434RAM6F=0 435RAM70=0 436RAM71=0 437RAM72=0 438RAM73=0 439RAM74=0 440RAM75=0 441RAM76=0 442RAM77=0 443RAM78=0 444RAM79=0 445RAM7A=0 446RAM7B=0 447RAM7C=0 448RAM7D=0 449RAM7E=0 450RAM7F=0 451extraRAM00=0 452extraRAM01=0 453extraRAM02=0 454extraRAM03=0 455extraRAM04=0 456extraRAM05=0 457extraRAM06=0 458extraRAM07=0 459 460[CompaqCMOS] 461; gotCMOS: 0=Don't load CMOS. 1=CMOS data is valid and to be loaded. 462; TimeDivergeance_seconds: Time to be added to get the emulated time, in seconds. 463; TimeDivergeance_microseconds: Time to be added to get the emulated time, in microseconds. 464; s100: 100th second register content on XT RTC (0-255, Usually BCD stored as integer) 465; s10000: 10000th second register content on XT RTC (0-255, Usually BCD stored as integer) 466; RAM[hexnumber]: The contents of the CMOS RAM location(0-255) 467; extraRAM[hexnumber]: The contents of the extra RAM location(0-255) 468gotCMOS=0 469TimeDivergeance_seconds=0 470TimeDivergeance_microseconds=0 471s100=0 472s10000=0 473RAM00=0 474RAM01=0 475RAM02=0 476RAM03=0 477RAM04=0 478RAM05=0 479RAM06=0 480RAM07=0 481RAM08=0 482RAM09=0 483RAM0A=0 484RAM0B=0 485RAM0C=0 486RAM0D=0 487RAM0E=0 488RAM0F=0 489RAM10=0 490RAM11=0 491RAM12=0 492RAM13=0 493RAM14=0 494RAM15=0 495RAM16=0 496RAM17=0 497RAM18=0 498RAM19=0 499RAM1A=0 500RAM1B=0 501RAM1C=0 502RAM1D=0 503RAM1E=0 504RAM1F=0 505RAM20=0 506RAM21=0 507RAM22=0 508RAM23=0 509RAM24=0 510RAM25=0 511RAM26=0 512RAM27=0 513RAM28=0 514RAM29=0 515RAM2A=0 516RAM2B=0 517RAM2C=0 518RAM2D=0 519RAM2E=0 520RAM2F=0 521RAM30=0 522RAM31=0 523RAM32=0 524RAM33=0 525RAM34=0 526RAM35=0 527RAM36=0 528RAM37=0 529RAM38=0 530RAM39=0 531RAM3A=0 532RAM3B=0 533RAM3C=0 534RAM3D=0 535RAM3E=0 536RAM3F=0 537RAM40=0 538RAM41=0 539RAM42=0 540RAM43=0 541RAM44=0 542RAM45=0 543RAM46=0 544RAM47=0 545RAM48=0 546RAM49=0 547RAM4A=0 548RAM4B=0 549RAM4C=0 550RAM4D=0 551RAM4E=0 552RAM4F=0 553RAM50=0 554RAM51=0 555RAM52=0 556RAM53=0 557RAM54=0 558RAM55=0 559RAM56=0 560RAM57=0 561RAM58=0 562RAM59=0 563RAM5A=0 564RAM5B=0 565RAM5C=0 566RAM5D=0 567RAM5E=0 568RAM5F=0 569RAM60=0 570RAM61=0 571RAM62=0 572RAM63=0 573RAM64=0 574RAM65=0 575RAM66=0 576RAM67=0 577RAM68=0 578RAM69=0 579RAM6A=0 580RAM6B=0 581RAM6C=0 582RAM6D=0 583RAM6E=0 584RAM6F=0 585RAM70=0 586RAM71=0 587RAM72=0 588RAM73=0 589RAM74=0 590RAM75=0 591RAM76=0 592RAM77=0 593RAM78=0 594RAM79=0 595RAM7A=0 596RAM7B=0 597RAM7C=0 598RAM7D=0 599RAM7E=0 600RAM7F=0 601extraRAM00=0 602extraRAM01=0 603extraRAM02=0 604extraRAM03=0 605extraRAM04=0 606extraRAM05=0 607extraRAM06=0 608extraRAM07=0
The breakpoint is set to Real mode address 1234:5678. Simply enter the value into a calculator and convert to/from hex to see it's actual setting(and convert it back to enter in the INI file).
1- Improved 80386+ TLB. 2- Improved Android minimizing, resetting high-resolution clocks of core, video and Sound Blaster recording(fully pausing the emulator when minimized. The bug that it restarts when the device is put into standby when the application is not minimized is still unknown). 3- Implemented simulated CD-ROM disk change, removing the disk and inserting it if required after timeout, with accompanying interrupt and Ready/Not ready as software might be expecting. 4- Improved ATAPI CD-ROM response when changing disks. 5- Disabled the internal video BIOS on 80286+ CPUs, as it cannot run reliably anyway in protected or virtual 8086 mode. 6- Improved 8086+ cycle accurate INTO instruction handling. 7- Improved x86 up until 80386 to become more dependant on the BIU for it's input/output. 8- Fixed the CPU being able to lock up completely when the BIU is busy for handling HLT. 9- Fixed a bug in the 80386+ POP SP instruction popping using SP or ESP, depending on the B-bit. 10- Fixed 8086 and 80286 address bugs and compatibility bugs. 11- The 80386 32-bit variants of the 80286- opcodes have been reimplemented, based on the new more cycle-accurate BIU core. 12- Improved timings lookup table for 80386 and 80486 CPUs modr/m data. 13- Fixed NEC V30+ opcodes memory protection checks. 14- Improved mouse packet rate not becoming infinite when disabled. 15- Fixed PS/2 port translation only applying to the first PS/2 port(the keyboard). 16- The scan code set has nothing to do with make(and typematic)/break codes being applied. 17- Improved Mouse identification on the second PS/2 port, according to http://www.computer-engineering.org/ps2mouse/ . 18- PS/2 mouse isn't supported on PS/2 and Compaq Deskpro 386 architectures. Use a serial mouse instead. 19- Fixed 80286 LOADALL properly reloading CPL and clearing it's buffer only at the start of the instruction(instead of after each break in the instruction waiting for the BIU). 20- Fixed 80386+ 0F01 instruction LMSW/SMSW always using 16-bit ModR/M. 21- Fixed 80386 LOADALL instruction to load CPL(previously wasn't reloading CPL at all). 22- Fixed I key release code on scancode set 3. 23- Fixed Scroll lock make code on scancode set 3. 24- Improved 80386 handling of protected mode debugging by properly checking for the resume flag when handling faults, preventing them from happening when set and clearing the resume flag after successfull execution in protected mode. 25- Implemented 80486SX information into the 80486SX CPUID instruction. 26- Fixed pending reset with HLT states on CPUs supporting it. 27- Implemented automatic DPI conversion on SDL2. It now will properly convert pixels to mm on SDL2, with backwards compatibility for defaults(no conversion). 28- Applied touch movement for mouse input to not apply to touches started on button areas. 29- Improved support for Inboard 80486 XT/AT. 30- Improved 80386SX/80486DX/80486SX hardwiring the ET bit to 1. 31- Fixed various CPU bugs. 32- Fixed settings menu setting 4K mode and recognizing it as valid. 33- Disabled the Pentium option from the CPU list, as it's currently difficult/unknown to implement in a cycle-accurate way. 34- Fixed problems with area detection during touch movement. No move areas are now properly detected. 35- Made the OSK toggle larger, to 3x2 characters for easy clickability. 36- Modified the OSK to not overwrite keyboard buttons without text. 37- Improved keyboard text layer with large Set/Sti/Cap buttons like the OSK button. 38- Reareanged the keyboard buttons to always make the Num Lock, Caps Lock and Scroll Lock(NCS) LEDs visible on the top half of the OSK button. 39- Fixed OSK identifier in Mouse/Keyboard mode. 40- Made the Direct Input mode with disabled input display a 'd' instead of a 'D'. 41- Removed the Android automatic Direct Input toggle: this can be done by using either a real RALT-F10 key combination or using the OSK. 42- Improved detection of Gaming mode. 43- Fixed mouse OSK functionality to not underflow/overflow incorrectly. 44- Added mappings on Android for SELECT and START to '=' and "'" for PSP compatibility on Android. 45- Improved x86 algorithmic add/substract flags, based on Bochs' lazy flags. 46- Optimized running opcodes to not keep looking up the execution unit handler. 47- Fixed bug in 32-bit GRP2 opcodes shift count. 48- Improved 8-bit, 16-bit and 32-bit handling of the shift/rotate instructions handling the flags, as documented in http://x86.renejeschke.de/html/file_module_x86_id_285.html 49- Fixed Finger OSK mouse input always updating when needed. 50- Fixed the Overflow flag on 80386+ SHLD instructions. 51- Improved 8086-80286 AAA/AAS instructions. 52- Improved and simplified the 8086 vs 80186+ versions of the BCD instructions, now using simplified logic to handle CPU specifics. 53- Switched the PS/2 keyboard and 8042 in XT mode to use scancode set 0. 54- Fixed interrupt mask not masking pending interrupts as well. 55- Extended the UART with automatic allocation. 56- Improved x86 shifting instructions, making the testsuite succeed again. 57- Improved 80386 opcode 69h IMULD to affect the sign flag correctly by shifting without errors. 58- Protection fault level only resets when executing and fetching a new opcode. 59- Made the special debugger option log RAM accesses beyond 1MB for debugging. 60- Changed the amount of UARTs to be automatic instead of static.
…Show last 54 lines
61- Improved handling of the A20 line with precalculated values. 62- Improved 8042 writing data vs command bytes. 63- Fixed 16-bit address size CMPSW reporting as CMPSB while debugger is active or logging. 64- Improved x86 interrupt/multitasking mechanism to support being run instead of the normal opcode handlers, allowing for future cycle accurate handling of these mechanisms through the BIU(interrupts in real mode are already handled through the BIU). 65- Improved x86 AAD instruction to be 16-bit ADD instead of 8-bit ADD. 66- Modified the remaining interrupt handling to always execute interrupts through the new mechanism. 67- Fixed fault on x86 task switch CS loading to actually abort the task switch process itself. 68- Made the interrupts and task switches handle immediately when started, for easy timing compatibility with older commits before this new method is implemented. 69- Made the execution phases a hybrid of the old and new methods for maximum compatiblity. 70- Applied a warning when the CPU is executing an unknown handler. 71- Improved hardware interrupts to continue properly when busy. 72- Interrupts that are being handled inhibit hardware interrupts to prevent corruption of addresses. 73- Verification ROM execution has been updated with the new execution phase methods. 74- Moved the BIU segment-related and Paging functionality to the execution unit(in order for it to be later converted to a scripted approach instead of the current approach). 75- Modified the BIU to only read and write physical memory addresses. 76- Modified the BIU PIQ to fetch from physical memory, not using the Paging unit and Segmented access anymore, becoming a dumb PIQ just fetching data from memory. 77- Reimplemented the A20 line in it's new form in the BIU connection to the memory and hardware memory. 78- Reapplied Paging and Protection to the BIU's fetching of instructions. 79- Triple fault finishes the currently executing instruction, to make sure it can triple fault on the next instruction fetch. 80- Modified the prefetcher to stop when an TLB miss occurs instead of faulting itself. The memory checking process, before fetching the instruction from the PIQ, will then handle the fault. 81- Modified memory dump to occur during debugging when pressing Circle+Triangle. 82- Circle is now a modifier button during debugging. 83- Circle+Square now performs a continue until jump is executed at the current instruction address instead of continue until following instruction. 84- Fixed and added the last executed CS:(E)IP address to the debugger. 85- Raised faults has nothing to do with the MMU actually writing to memory. 86- No fault raised before switching stack segments. 87- Restored use of the PIQ EIP with formulating direct memory addresses when running on a processor without the new protected mode(80(1)8X CPUs). 88- Fixed the audio capture path to use the correct directory. 89- Improved interrupts and restored REP no-fetch behaviour. 90- Fixed REP handling repeated instructions to be correctly restarted again, just like unrepeated instructions. 91- REPeated instructions don't clear the MMU buffered instruction: it's unchanged due to repeating being active. 92- Fixed repeating instructions that repeat to actually repeat correctly again, with cycle-timings. 93- Fixed 80(1)8X interrupts to work correctly with REPeated instructions. 94- The BIU prefetching handles faults the same, when prefetching, as it does with normal instructions, but simply stops prefetching from the current address on faults. 95- Fixed protected mode interrupt pushing 16-bit entries or 32-bit entries. 96- Improved protection faults when handling faults. 97- Improved protected-mode task size checking when handling interrupts. 98- Fixed protection error handling when interrupts are handled. 99- Improved UART interrupts to implement all interrupt cases. 100- Improved UART implementing the transmitter and Data Holding registers to buffer. 101- Fixed the UART modem status reporting itself by properly shifting the data to the high 4 bits that indicate the current status, instead of clearing it away and effectively zeroing it. 102- Fixed Line Status Register bit 0 being 1 when data is available. 103- Improved modem handling using documentation at http://seriss.com/people/erco/unixtools/hayes.html 104- Added a TCP helper module to connect to another client/server through the internet using SDL(2)_net. The code is loosely based on Dosbox misc_util.cpp converted to plain C(not using objects). 105- Added a simple ini parser and generator module to the project. 106- Implemented BIOS Settings using text SETTINGS.INI file instead of the binary SETTINGS.DAT file. 107- Reset the version number to 1, as it's the first version in the new INI file format. 108- The SETTINGS.INI file is always completely rewritten, when saved, to fix any leftover comments from older versions to be easily updated to their new equivalents if needed(new functions etc.). 109- UniPCemu can be compiled with or without SDL(2)_net(effectively disabling the functions of the TCP helper module, which still exist for compatiblity, being unable to connect or connected to when not compiled with SDL(2)_net). 110- Implemented a ini setting to specify the modem connection port manually. This is used as the default port and server port. 111- Modified the modem to check connections and transfer data at a fixed frequency. 112- A full Dosbox-compatible software modem(Dosbox's softmodem equivalent) with TCP backend(previously mentioned TCP module) is now emulated. It can already connect and properly talk to BBS servers(theoretically internet too, with a host providing packets to/from ethernet over a TCP connection). Also better support for I/O lines(on the UART) is implemented in the minimal Hayes command set. 113- Renamed android directory from superfury.unipcemu.sdl to com.unipcemu.app to be more compatible with other Android applications. [b]The files aren't automatically moved, this has to be done manually by renaming the directory or moving the directory contents to the new location!!![/b]. 114- Added required Android permissions to be able to properly use Sound Blaster audio recording again, as well as using internet connections on Android(required for SDL_net).
Last edited by superfury on 2017-08-31, 08:40. Edited 1 time in total.
To use, simply rename extension to .zip.001 and .zip.002(reversing the numbers back to the end) and extract normally(split files aren't allowed by default to upload?). Or simply convert it to a single zip file by using (on Windows command prompt):
1- Improved modem response to multiple commands on the same line. 2- Improved modem giving the command result the old way when switching to a new result type(during the V commands and related commands). 3- Switched serial mouse to use the PS/2 mouse on th PS/2 architecture. 4- Fixed the BIU incorrectly behaving on 80286+ CPUs, making itself lock up and not finish BIU requests because it's out of phase with itself. 5- Extended the emulator breakpoint setting to allow an I at the end to ignore the EIP for the breakpoint. That will cause it to only match the segment of the breakpoint, instead of the full address. 6- Fixed modem O command to properly give the result before returning to data mode, instead of buffering it and skipping to data mode, leaving the result in the buffer.
1- Only check LOADALL rights once at the start of the instruction. 2- Added an M(ode, with priority over the I option) option to be used instead of the Ignore offset address to the debugger, allowing to ignore the complete segment:offset address and use the mode only as a breakpoint(to allow trapping a code in a certain mode only, without any segment:offset address to break at). 3- Allowed loading of NULL data segment indexes. All other segments don't allow loading NULL segment indexes, except the LDTR register. 4- Cleaned up code a bit. 5- Disabled 16-bit offset translation when using expand-down segments. 6- Slightly optimized various CPU-related memory accessing. 7- Fixed the BIU fetching the correct address when the memory check doesn't translate the address(on 80(1)8X CPU emulation), instead of not translating the address and using the last value loaded in checkMMUaccess_linearaddr, which is always zeroed by default, since it's unused. 8- Fixed the 8042 A20 line Disable/Enable commands being reversed in bit 2 meaning of the command byte. 9- Improved the debugger to be refreshed at the start of an instruction only. 10- Fixed the debugger checks to be properly after the setting of the single step, instead of before it. 11- Improved the OP in the debugger to properly be the Prefix(0), as it's the first byte of the opcode in the debugger, not depending on what's in memory at that moment. 12- Fixed MMU logging also to be in the same case as the normal debugger during verification ROM execution. 13- Increased the debugger command buffer to be able to apply very long instructions with lots of prefixes(up to the 256 required). 14- Improved easy toolchain support for compiling. 15- Setting CR2 isn't dependent on Not Present Page Faults. It's always set during any Page Fault. 16- Modified double/triple faults to happen in real mode as well, when reaching infinite double faults. 17- Improved 32-bit BIU writes to properly update control registers CR0/3 and CPU mode. 18- Improved 80286 and 80386 LOADALL instructions to be more accurate in timings and loading. 19- Improved x86 LOADALL instructions more with improved segmentation and paging detection. 20- Fixed 80286 LOADALL structures and unions. 21- Fixed reporting of 32-bit JCXZ being JECXZ. 22- Operand size has nothing to do with ModR/M decoding addressing modes. Those parts not applicable to their modes have been removed. 23- Fixed saving the last decoded 32-bit address when 32-bit addressing is used to behave properly. 24- Optimized various parts of the protected mode CPU emulation. 25- Fixed some ROM path issues when not the default ROM subdirectory. 26- Improved the Android config changes that are required for the application to work without crashing or being closed when not supposed to in most cases. 27- Fixed the Android-required SDL2 event filter. 28- Improved Android foreground/background support for focus gained/lost. 29- Fixed x86 ModR/M 32-bit offsets to use the full 32-bits instead of being truncated to 16-bits. 30- Improved memory logging to continue when needed and to be properly disabled temporarily during hardware processing(like DMA accesses). 31- 8042 reads last byte again when the output buffer is read while it's empty. 32- Improved modr/m 16-bit and 32-bit displacements to be unsigned instead of signed. 8-bit offsets are still signed. 33- Fixed PSP compiler problems. 34- Disabled the Settings menu Breakpoint address option on the PSP, due to the compiler crashing compiling it. 35- Fixed some SDL 1.2 compatibility problems. 36- Fixed some variable sizes to be more correct. 37- Made the PSP build process a bit more automatic using the PSP executable configurations. 38- Fixed the makefile. UniPCemu is now compiling again with at least PSPSDK 0.9.6 on Windows 10(although with size warnings on any 32-bit and 64-bit number through (s)printf). 39- Fixed lots of signedness bugs with signed and unsigned parameters to (s)printf to use their correct syntax. 40- Made 16-bit instruction fetches become 8-bit when at an odd physical memory address. 41- Cross-platform compiling is now improved due to seperated build directories for each build option in the multiplatform(and multicompiler when using Windows MinGW or MSYS2) Makefile. 42- Changed the Visual Studio SDL2 and SDL2_net folders to not include the version numbers for an easier library upgrade path. 43- Updated the project to be able to use SDL2 2.0.6. 44- Updated Android manifest to SDL2 2.0.6. 45- Improved ModR/M SIB addressing on 80386+ CPUs. 46- Improved modr/m SIB displacement being the correct length and value again. 47- Improved 8086+ segment register MOV instruction. 48- Improved CPU EIP masking. 49- Improved CPU applying of granularity to become a simple macro. 50- Real mode loads all descriptor fields, just like Virtual 8086 mode. 51- Fixed Android Manifest version requirements. 52- Improved PIC handling of parallel interrupt lines and it's handling of lowering interrupt lines. 53- Added the interrupt mask register to the debugger and debugger log. 54- Fixed 8086 16-bit disassembly error being 16-bits parameter(disassembly) instead of 8-bit. 55- Fixed some 80386 instructions using 16-bit parameters, zero extended to 32-bits, instead of 32-bits parameters. 56- Fixed CMPD instruction truncating to 16-bits. 57- Improved x86 real mode segment descriptor loading not affecting the flags/limit high nibbles. 58- Disabled the VGA special debugger function to test memory only. 59- Improved 80386+ 32-bit instruction reporting. 60- Implemented 80486 debugger information, except for the CMPXCHG instruction.
…Show last 16 lines
61- Improved x86 MOVZx/MOVSx instruction disassembly to be correct. 62- Fixed some 32-bit instruction disassembly. 63- Fixed RET(F) using 16-bit immediate always, not depending on operand size. 64- POPD using 32-bit disassembly. 65- Fixed CALL Mp segment displacement. 66- Improved 32-bit IMULD comments. 67- Improved 32-bit LSL protection. 68- Fixed 32-bit BT(S/R/C) disassembly. 69- Fixed 32-bit BS[F/R]D disassembly. 70- Fixed 32-bit JMP Mp using the 32-bit data read instead of previous instruction 16-bit stored data. 71- Made the special debugger option(RALT+F9 key combination) log MMIO memory accesses too, to identify hardware intercepting the memory accesses. 72- Slightly optimized the Game Blaster emulation by adding (un)likely code paths. 73- Made the CPU cores up to 80386 entirely use the BIU and timings in a cycle-accurate way. This makes the cores up to 80386+ instructions perform in a cycle-accurate way through the BIU. 74- Modified the 80286+ BIU and PIQ to be able to fetch in aligned word(286) and aligned dword(386+) quantities and read from the PIQ in word/dword quantities in a single cycle. 75- Improved 80386SX BIU to only fetch 16-bits worth of data from memory each bus access. 76- Cleaned up an unused variable in opcode 0FBA 32-bit.
Notable new features:
- Debug extended with various new options(breakpoints, extended information, improved missing instruction reporting).
- 80386 instructions now use the BIU for it's memory/hardware processing, running in a cycle-accurate way(except protected-mode features. The same applies to the 80286).
- The 80386 is fully implemented into the debugger.
- Some hardware has been optimized.
- 80286+ processors now can handle 16-bit and 32-bit(386+) instruction fetching better.
- The first PSP build, although with the debugger address breakpoint option disabled due to compiler issues.
1- Added support for 32-bit single diagnostics ROM and XT/AT/XT286 diagnostics ROMs to be loaded automatically. 2- Extended log support for time logging(being able to disable the timestamp for certain logs). 3- Implemented the common log format, used by UniPCemu and various other emulators(also, see https://sites.google.com/site/capex86/common for more information, as well as the vogons thread http://www.vogons.org/viewtopic.php?f=9&t=56423 ). 4- Improved x86 instruction debugging to not add a space character before the second parameter following the first parameter of the debugged command. 5- JECXZ and LOOPnn instructions select between CX and ECX using the address size instead of the operand size attribute. 6- Improved 80386+ IMULD flags. 7- Added information about the new debugger log options to the SETTINGS.INI documentation. 8- Fixed 32-bit multiply and divide instructions. 9- Improved 32-bit versions of the 16-bit MOV Sw instructions. 10- Improved x86 16-bit vs 32-bit instruction size affecting PUSH/POP operations. 11- Fixed 80386+ opcode 0F01 32-bit. 12- Fixed Paging address shift to be correct. 13- Fixed SIB ESP addressing being literally none instead of an #UD. 14- Made protected mode data go through the direct access BIU and hardware layer always. 15- Fixed protection linear to use the BIU access method. 16- Fixed 32-bit ESP/EIP pushing parameters. 17- Improved 32-bit SS behaviour with ModR/M. 18- Only moves from segment register to a 32-bit register are zero-extended. Otherwise, it's just put in the lower word half of the memory address. 19- Fixed opcode 6A (PUSH imm8) sign-extending to 16-bit or 32-bit. 20- Added missing 6A 32-bit opcode on 386+ CPUs. 21- Fixed 80386+ MOVSX and MOVZX instructions to use proper 8-bit/16-bit and 16-bit/32-bit operands. 22- Fixed ModR/M SIB DWord displacement. 23- Improved ModR/M SIB parameter order and results. 24- Moved the segment before the used offset that's put in brackets, instead of within the brackets. 25- Moved the byte/word/dword debugger logic to the ModR/M byte, except for instructions without a ModR/M byte. 26- Fixed 8086+ JB disassembly. 27- Added some extra instruction information for overlapping instructions(FAR jumps and Dword variants of instructions). 28- Fixed ModR/M decoded text format overflow. 29- Fixed Paging ageing of it's TLB entries to work properly. 30- Fixed 32-bit writes to segment registers not overwriting said segment register with a 32-bit value, which overflows into the next segment register or other CPU data. 31- Move to 16-bit segment register is always 16-bit. 32- Fixed the x86 Bit Scan instructions. 33- Fixed the 80386+ Bit Test instructions. 34- Fixed PUSH 16-bit on 32-bit or 16-bit width. 35- Fixed ARPL instruction. 36- Fixed 80386+ BOUND instruction. 37- Forced horizontal and vertical delta on textsurfaces on adaptive text. 38- Added an option to use an IPS clock instead of cycle-accurate clock. 39- Fixed 80386+ IMUL overflow flag/carry flag sign extension detection. 40- Fixed direct memory access byte/word order during 16-bit and 32-bit memory accesses. 41- Fixed 80286 fetching protected word or dword faulting correctly without hanging the EU and BIU. 42- Set a different default filename from the debugger to log port E9 output lines to("porte9.log" is used now). 43- Applied proper defaults when the input colors are invalid or unset. 44- Improved debugger logging by a settings option to log registers. 45- Fixed logging spaces. 46- Cleaned up and fixed debugger register log errors and inconsistencies. 47- Reversed debugger flags text representation. 48- Made logging register values uppercase. 49- Converted the entire debugger logging process to use lower case hex numbers instead of upper case hex numbers. 50- Made logging registers affect memory accesses as well. 51- Made debugger memory logging use seperate lines for each memory access(of size byte/word/dword) in short encoded format(like BIU cycle logging). 52- Implemented lock #UD faults on non-memory operands and invalid instructions using the timings table. 53- Made opening the Settings menu close the currently logging file, updating it to become up-to-date for other software to view. 54- Improved 32-bit IMUL instructions. 55- Improved the breakpoint timeout to reset and restart counting again after being triggered to trigger again. 56- Improved x86 DAS instruction to match actual behaviour of known CPUs. 57- Improved 3 operand opcodes 69/6B to always use 3 operands. 58- Improved opcode 0F AF IMUL to use the timings table. 59- Improved memory access logs in common log format to only use a single tab. 60- Improved the debugger to always show all registers that are available on a CPU, regardless of the operating mode.
…Show last 39 lines
61- Fixed 80386 CR6/CR7 positioning in the on-screen debugger. 62- Fixed 16-bit operand shifting during 32-bit interrupt shifting of ESP(CS pushing to the stack). 63- Improved x86 (I)DIV instructions with better sign support. 64- Improved x86 signed overflow detection to be more accurate, according to the manual. 65- Fixed the x86 IDIV instructions to work properly. 66- Improved x86 shift/rotate instructions according to the 80386 programmer's reference manual. 67- Implemented general C-style IMUL support to the CPU module. 68- Redirected all x86 C-style IMUL instructions to the CPU module generic functionality. 69- Improved x86 IMUL instructions to apply all steps correctly. 70- Fixed 32-bit IMUL opcodes 69/6B parameter order. 71- Disabled CGA VRAM wait state when using the IPS clock, as it will hang the CPU in IPS clocking mode(since the video never ticks and finishes the wait state(because the CPU doesn't finish the instruction) and the CPU keeps waiting for the CGA to complete the waitstate and finish the instruction). 72- Fixed PSP warning on sign flag overflow during the generic IMUL instruction, fixing it's sign overflow(unchanging for the instruction itself, just improving the compilation process). 73- Improved settings menu clocking mode requiring restarting emulation and not being modifyable when emulation is running(because it changes CPU behaviour drastically). 74- Improved HDD settings menu selection, showing the default disk geometry used by the hard disk emulation. 75- Improved IDE CHS geometry autodetection, minimizing orphan sectors. 76- Implemented the hard disk CHS translation compatibility guidelines from ATA/ATAPI-5 revision 3 1321D. 77- Improved CHS geometry autodetection with 504MB and below disk sizes. 78- Added support for bximage generated flat disk images geometry up to 65535 cylinders to be autodetected correctly. Other disks are detected the compatibility way. 79- Extended x86 instruction stepping to 16-bit, allowing operations like ENTER to be able to finish it's full instruction without overflowing the step counter. 80- Fixed a lot of compiler warnings(signedness and type conversion warnings), according to Visual Studio. 81- Made GRP2 instructions universally the same. 82- Converted return instructions to normal statements. 83- Fixed the ADD/OR AX still containing the W operand size suffix. 84- Fixed NEC V30 opcode C0 still containing the B operand size suffix. 85- Fixed x86 shift/rotate right to shift properly. 86- Improved CF flag on ROL/ROR instructions, according to various manuals(http://x86.renejeschke.de and http://www.felixcloutier.com). 87- Seperated mask count, count and numcnt(actual shift) from each other, being based upon each other in different stages. 88- Improved mask count, count and numcnt usage in determining overflow flag calculation, according to various 80386+ manuals mentioned above. 89- Optimized x86 SHL/SHR/SAR overflow flag calculations. 90- Made the Settings menu button responsive while the Settings menu thread is running and waiting for input instead of being unresponsive due to the thread being running while the menu is waiting for the Set button input possibility. 91- Made 8-bit and 16-bit rotate instructions equal to their 32-bit variants. 92- Fixed the x86 shift/rotate instructions to work correctly, fixing all bugs, according to the test386.asm testsuite ( by Barotto, https://github.com/barotto/test386.asm ). 93- Various CHS formats for static and dynamic HDD disk images are now supported: 94-- sfdimg(dynamic disk images) is detected by the image's file contents. Creating a disk image can be done in the new optimal format(according to the ATA-5 spec appendix C). Using square/Numpad 4 will create a disk image in a Bochs-compatible format, instead(16 heads, 63 sectors per track). 95-- img is detected by (non)existance of text files with the same filename and a pattern after it to determine the geometry formula to use: 96-- <filename.img> without any text file uses the new optimal format. 97-- <filename.img> with <filename.img>.bochs.txt text file uses the Bochs/Dosbox-compatible (16 heads, 63 sectors per track) format. 98-- <filename.img> with <filename.img>.unipcemu.txt text file uses the older UniPCemu formatting format used in older sfdimg file formats. 99-- Creating a Bochs/Dosbox-compatible static disk file instead of the new optimal format works in the same way as sfdimg disk image files to generate a Bochs/Dosbox-compatible disk image(Using square/Numpad 4 to generate such an image instead of the optimal format).
So, in short:
- Disk geometry has changed, with compatibility built in for dynamic(sfdimg) disk images only. Normal img files will need an .bochs.txt(Dosbox 512,16,63 autodetect format) or .unipcemu.txt(old UniPCemu hard disk formatting until this version) to properly determine geometry.
1- Various CHS formats for static and dynamic HDD disk images are now supported: 2-- sfdimg(dynamic disk images) is detected by the image's file contents. Creating a disk image can be done in the new optimal format(according to the ATA-5 spec appendix C). Using square/Numpad 4 will create a disk image in a Bochs-compatible format, instead(16 heads, 63 sectors per track). 3-- img is detected by (non)existance of text files with the same filename and a pattern after it to determine the geometry formula to use: 4-- <filename.img> without any text file uses the new optimal format. 5-- <filename.img> with <filename.img>.bochs.txt text file uses the Bochs/Dosbox-compatible (16 heads, 63 sectors per track) format. 6-- <filename.img> with <filename.img>.unipcemu.txt text file uses the older UniPCemu formatting format used in older sfdimg file formats. 7-- Creating a Bochs/Dosbox-compatible static disk file instead of the new optimal format works in the same way as sfdimg disk image files to generate a Bochs/Dosbox-compatible disk image(Using square/Numpad 4 to generate such an image instead of the optimal format).
- Lots of 80286 and 80386+ 32-bit bugfixes.
- Fixed x86 shift/rotate instructions.
- #UD is now properly triggered for invalid LOCK prefixes.
- Implemented IPS(Instructions per millisecond) clock again, which times cycles in the same way Dosbox does(although a cycle backend is still used for compatiblity with cycle emulation).
- Made opening the Settings menu close the currently logging file, updating it to become up-to-date for other software to view.
- Common log format up until this point in time is fully supported (see https://sites.google.com/site/capex86/common for more information, as well as the vogons thread Common log format).
- Fixed and improved x86 disassembly.
- Improved x86 TLB emulation.
- Disabled CGA VRAM wait state when using the IPS clock, as it will hang the CPU in IPS clocking mode(since the video never ticks and finishes the wait state(because the CPU doesn't finish the instruction) and the CPU keeps waiting for the CGA to complete the waitstate and finish the instruction).
- New debugger.log formats have been added.
1- Fixed EGA clocking to use the correct frequency instead of VGA clocking rates. 2- Implemented port 3C8 data read that's apparently read on the EGA. 3- Improved 80386 Bit Test instructions to behave like a RCR instruction. 4- Improved x86 BCD instructions to become accurate. 5- Improved x86 shift/rotate instructions to become accurate. 6- Removed empty states from the common log format logging. 7- Improved settings defaults for video capabilities. 8- Don't execute 14 MHz-only hardware ticks when not ticking.
Although it's mostly bugfixes and a small update, it's recommended to update(due to bugfixes in the CPU and emulation speedups at higher CPU clock speeds).
The Android build has been updated with better low memory support(terminating the application, saving CMOS normally) and improved CPU/hardware optimizations(PC builds don't benefit much from those yet), up to 25% faster on Android.
For the link to the new Android build, see the previous post or signature.
A new UniPCemu release, with some slight improvements and bugfixes:
1- Improved higher frequency clocking with slower 14MHz and lower hardware, allowing increasing the CPU clock without making those hardware heavier(the only exception being video clocking(at non-14MHz, so everything except 14MHz EGA and CGA clocks) and the CPU clocking, which can be adjusted by modifying the CPU clock speed setting). 2- Added Compaq Deskpro 486/33M basic clock speed to the 80486 Compaq defaults. 3- Android: Being low on memory causes the app to terminate, saving CMOS to prevent data loss(it cannot be restarted out of unreallocatable memory possibilities). 4- Optimized VGA rendering for steps of 2-5 pixels in whole blocks. 5- Changed the BIU to handle all but active clock cycles using event handlers instead of checking for all of those every clock. 6- Fixed loading of the XT 286 ROM, no longer crashing the emulator when doing so. 7- Optimized FIFO buffering. 8- Optimized BIOS ROMs to not check for mounted ROMs when known ROMs are supposed to be mounted(prechecked when mounting once). 9- Increased the emulated modem speed to 57600 bytes/second. 10- Improved CD-ROM media status notification using the set feature command to enable and disable reporting of disk changes. 11- Improved ATAPI CD-ROM disk change notification based on the setting of the CD-ROM drive. 12- Implemented the CD-ROM disk changing mechanism from Dosbox-X for improved disk changing on CD-ROMs. 13- Fixed PS/2 keyboard giving infinite acknowledges for the Set/Reset LEDs command, causing bugs because of the command finishing unexpected. 14- Fixed LED display for Caps Lock to actually show the Caps Lock instead of Num Lock.
The Windows and Android builds can be found at the itch.io page.
1- Adjusted the VGA 28MHz clock to 28.322MHz(previously 28.321MHz). 2- Optimized BIU handling of IPS clocking timing to process whole blocks at once. This causes the 8086 to run at up to 75% speed(previously 50% on a Intel email@example.comGHz), so up to 50% speed increase in IPS cycle mode. 3- Improved per-CPU default speeds at IPS clocking, with Dosbox cycles specified. 80(1)8X being 315 KIPS, 80286 beimg 2.75 MIPS, 80386 being 7.8 MIPS and 80486 being 26.8 MIPS. 4- Implemented Light Pen and Video scanline handler precalcs for more efficient handling of video state rendering of (S)VGA vs older cards(MDA/CGA).
Two small updates fixing some bigger problems(like Megarace now fully working, with(CD-ROM version) and without CD-ROM(demo version running from CD-ROM(.iso createn with the demo files on it) and harddisk):
1- Improved result phase of ATAPI commands to be more accurate in the ATA status register. 2- Improved handling broken up transfers by specifying a byte count that's lower than the total transfer size.
1- Fixed IDE memset to use correct pointers for clearing buffers. 2- Implemented the Microsoft Corporation: Media Status Notification Support Specification, Version 1.03 into the CD-ROM drives, in limited form(only reporting the disk as changed when changed instead of eject/insert). 3- Extended CD-ROM support to support the Microsoft Media Status Notification Support Specification better, with proper media change requests and eject handling. Insertion will ensure in the usual way(always allowed on CD-ROM drives). 4- Implemented missing required ATAPI/MMC Mandatory command. 5- Various ATA/ATAPI bugfixes. 6- Various CPU bugfixes. 7- Implemented x86 Virtual 8086 mode on 80386+ processors. 8- Improved SDL2 window management to keep the window centered on the screen when not moved by the user. 9- Seperated physical(disk) floppy cylinder from FDC(logical) cylinder to allow BIOSes to detect 40-track vs 80-track drives. 10- Improved floppy seeking a track updating ST3. 11- Implemented slight IRQ delays into the ATA(PI) disk IRQ timing. 12- Improved PSP-style input for PSP buttons locking properly. 13- Fixed BIOS menu opening during debugging. 14- Fixed debugger rechecking during debugging. 15- Fixed debugger delay locking durign debugging. 16- Fixed debugger skip step mode 4(breakpoint on jump followed). 17- Added debugger support for current and previous modr/m debugging. 18- Added the current modr/m reg value as an opcode extension to the reported opcode in the debugger. 19- Decreased power usage when inactive by using large delays. 20- Fixed HLT being privileged on 80286+ in protected/Virtual 8086 modes. 21- Improved protected mode EXT bit for interrupts. 22- Improved x86 signed/unsigned imm32(s) to prevent errors. 23- Added CGA/MDA static memory emulation(unmapped memory). 24- Fixed emulated Sound Blaster default option. 25- Fixed debugger overflow bug. 26- Increased debugger buffer to prevent overflow. 27- Optimized 16/32-bit conditional jumps. 28- Implemented 32-bit repeated instructions using the REP prefix and related prefixes. 29- Improved response time to single percent digits or bigger when updating the screen processing HDD disk image convertions and defragmenting. 30- Added support for a REDIRECT.TXT to redirect the root directory on Android from the default path only(not recursive, contents is destination path, on Android only). 31- Improved various compiler warnings. 32- Fixed BIOS Menu bugs. 33-,Android releases are now built with Android Studio(with downgraded NDK to r12b for inline compatibility). This drops(deprecates) all other Android ABI platforms due to Google updates, leaving only x86 and armeabi-v7a architectures to be available for compiling releases(unable to re-enable after downgrade). 34- Fixed 8086+ instruction timing bugs and added documentation on ModR/M source/dest for the modrm_src0/modrm_src1 variables in the timings table. 35- Added deliberate #UD for the 80286 on opcode 0F0B. 36- Improved dynamic disk image creation to create disk images that are compatible with older UniPCemu builds when using the compatibility disk CHS mode, making them fully compatible again(removing unneeded headers from the file). 37- Fixed 80286 deliberate #UD instruction to have no special operands. 38- Fused various common x86 instructions (with reversed parameter orders only) to remove duplicates and decrease core size. 39- Improved main Settings menu to support all combinations of rebooting (with requirements) and saving/discarding settings. 40- Fixed plain emulator restart options in the Settings menu to work properly. 41- Improved LXS(LDS,LES,LFS,LGS,LSS) instructions to be #UD or NOP when using registers as a source. 42- Fixed dynamic disk image and static disk image geometry detection to use the correct file size in sectors instead of file size in bytes as input for the CHS geometry formulas. This changes current geometries back to their compatible and correct values. All disk images created and formatted since the support for the new formats are affected, might require reformatting(e.g. MS-DOS boot harddisks) to work properly again. 43- Fixed disk types when creating minimal/bochs type disks using the settings menu. 44- Fixed ATA buffer overflow and read/write multiple commands. 45- Improved BIU handling of byte/word/dword fetches from memory, by detecting the point at which the BIU splits the word/dword access with alignment while processing, using a simple address mask to detect break-during-transfer instead of a precalculated break bases on the base address, improving compatibility with 32-bit buses and 16-bit buses accessing 32-bit quantities from memory. 46- Adjusted Inboard 386/AT values based on measured BIOS timings (compared to expected 80286 speeds) and calculated the remaining values based on the XT values due to missing documentation on actual waitstates of the Inboard 386/AT. 47- Added a setting for an enforced U-ROM loading for loading normal BIOS ROMs instead of platform general BIOS ROMs, allowing all possible BIOS ROM configurations to be chosen from the Settings menu. 48- Improved static image creation when converting as well as cleanup of the disk image files. 49- Fixed dynamic disk image to static disk image conversion to use the correct filename. 50- Fixed reading of the extended dynamic disk image header for returning the extended information block location, fixing detection of said settings within the disk image file. This affects any disk image in the new format. The geometries of the formats not in UniPCemucompatible CHS format might change the CHS reported to software and cause issues(unbootable MS-DOS harddisks for example). 51- Improved 80186+ opcode 8E handling to use the parameters correctly from the lookup table. 52- Improved PUSH (E)SP, POP (E)SP instruction handling. 53- Fixed Floppy Disk Controller(FDC) bugs. 54- Improved and fixed bugs in the PS/2 keyboard and 8042 PS/2 controller. 55- Simplified DMA Page register logic to apply to both DMA controllers universally using a simple calculation for the register. 56- Improved the FDC to support the full 82072AA instruction set. 57- Improved and fixed CMOS chip and RTC(Real Time Clock) emulation. 58- Seperated XT and PS/2 CMOS savedata from AT and Compaq Deskpro 386 CMOS savedata respectively. 59- All compiled platforms now have the build version(git commit information) as their version information, except for the PSP builds. 60- Added an option to run the CMOS in cycle-accurate mode, with time starting at midnight 1-1-1970(epoch start time) instead of realtime(OS time, like Windows, Android, PSP, Linux current time).
…Show last 7 lines
61- Made changing architecture from XT to AT and up redetect memory automatically. 62- Added support for the 80286 BIU Waitstate BUS I/O. 63- Fixed various CPU bugs. 64- Decreased 8086-80386 modrm checks and related memory checks to only once each instruction(before the memory is accessed). 65- Added logging of starting an instruction with BIU response data buffered(thus unprocessed). It will log and discard the buffer for the new instruction to be able to run. 66- Removed invalid memory checks that can abort in the middle of a memory transaction. It shouldn't be there due to having no effect on a real Execution Unit(It might access part of existing memory after all. The other half being protected by normal protection means already applied). 67- Fixed various PSP&MinGW compiler warnings.
1- Optimized normal and stack address checks with unlikely statements and more efficient checking. 2- Optimized all modr/m checks by adding unlikely and reducing modrm checks to actually execute only once for an instruction. 3- Applied missing patches on the previous build to not show a command prompt window when opened on Windows.