Maxim Poliakovski
477ad7ddee
ppcopcodes: fix lswx/stswx emulation.
2022-02-19 23:23:24 +01:00
Maxim Poliakovski
b39e884d61
ppcfpopcodes: add missing std:: prefixes.
2022-02-17 00:20:18 +01:00
Maxim Poliakovski
de65196c4f
ppcfpopcodes: remove unused template parameters.
2022-02-17 00:11:14 +01:00
Maxim Poliakovski
8f528184b8
Fix compilation with gcc, part 1.
2022-02-16 23:52:43 +01:00
Maxim Poliakovski
25a4fd1107
Allow adding timers from timer callbacks.
2022-02-05 17:10:57 +01:00
dingusdev
3258abe190
crnand and crnor fixes
2022-01-22 22:33:13 -07:00
Maxim Poliakovski
c8d39d5ee5
ppcopcodes: fix creqv emulation.
2022-01-21 16:32:07 +01:00
Maxim Poliakovski
2442bd17b3
ppcopcodes: fix crand emulation.
2022-01-21 14:56:10 +01:00
Maxim Poliakovski
c864b9b7d9
ppcopcodes: fix cror emulation.
2022-01-21 14:37:51 +01:00
Maxim Poliakovski
d8c3cfc38e
Fix next instruction address after external exceptions.
2022-01-20 01:38:41 +01:00
Maxim Poliakovski
e1e651966e
Revert "Further condition reg opcode patches"
...
This reverts commit 756d32df07
.
2022-01-10 18:10:39 +01:00
Maxim Poliakovski
c12bab9e27
Revert "Quick fix for creqv"
...
This reverts commit 8efc61e1b9
.
2022-01-10 18:01:48 +01:00
Maxim Poliakovski
aefc66d118
Fix external exception processing.
2022-01-10 17:56:24 +01:00
Maxim Poliakovski
339db4a078
Add timers management.
2022-01-10 17:56:24 +01:00
dingusdev
8efc61e1b9
Quick fix for creqv
2022-01-08 15:22:27 -07:00
dingusdev
756d32df07
Further condition reg opcode patches
2022-01-07 20:40:07 -07:00
Maxim Poliakovski
9cd7ca0077
ppcopcodes: fix crxor.
2022-01-08 04:21:09 +01:00
Maxim Poliakovski
7bdad7703c
Predict TBR values based on elapsed virtual time.
2021-12-20 00:12:44 +01:00
Maxim Poliakovski
087402290d
Implement virtual time based on instruction counting.
2021-12-20 00:10:02 +01:00
Maxim Poliakovski
fd33c10712
ppcmmu.cpp: remove unused local variables.
2021-12-07 23:23:39 +01:00
dingusdev
c2a63bab09
FP Opcode Test Fixes
2021-10-30 16:43:13 -07:00
dingusdev
767735251b
FP comp tests & various fixes
2021-10-24 14:00:35 -07:00
dingusdev
a28ef677fd
Fixing FP mul ops & tests
2021-10-23 13:05:20 -07:00
Maxim Poliakovski
c0cd6eb38f
Add missing licence headers, update license date.
2021-10-23 21:00:31 +02:00
Maxim Poliakovski
9329d56d83
Move devices into dedicated subdirectories.
2021-10-23 20:17:47 +02:00
dingusdev
7919cd0590
Merge pull request #21 from dingusdev/floating-point
...
Floating point fixes. Rehauled floating-point emulation code. Fixed a test suite for floating points.
2021-10-19 07:18:21 -07:00
dingusdev
fb277945c2
Floating point test fixes
2021-10-19 07:16:15 -07:00
Maxim Poliakovski
331b93d4d6
Fix compilation with Clang 11.
2021-10-17 23:41:53 +02:00
dingusdev
3c7fc58ac0
Small test case fixes for floating points
2021-10-16 22:33:56 -07:00
dingusdev
00dd99d851
Temporarily removing comparisons
...
These seem to cause the test program to crash. Will reinstate once the cause of the crash is resolved.
2021-10-15 20:02:00 -07:00
dingusdev
7d7a4b453f
Partial test file reading fix
2021-10-15 06:28:11 -07:00
dingusdev
7ce94a6ab5
Further fixing the test code
2021-10-14 21:05:58 -07:00
dingusdev
061b061813
Floating point overhaul, part 4
...
Reworked the INF/NAN checks again - This time, only checking them when the result is calculated
2021-10-14 20:31:10 -07:00
dingusdev
9251745d6f
Fixed floating-point test generation
2021-10-14 07:19:04 -07:00
Maxim Poliakovski
e53296f7a9
Implement all required context-synchronizing events.
2021-10-13 20:58:09 +02:00
Maxim Poliakovski
2a9d364b1b
ppcmmu: implement separate TLB pointers for read/write.
2021-10-10 22:01:02 +02:00
Maxim Poliakovski
3eb2d3cba7
ppcmmu: verbose MMU state with mmu_print_regs().
2021-10-10 22:01:02 +02:00
Maxim Poliakovski
bde5b71167
ppcmmu: re-arrange code to avoid formward declarations.
2021-10-10 22:01:02 +02:00
Maxim Poliakovski
bb0ca2ac40
ppcmmu: fix TLB flushing.
2021-10-10 22:01:02 +02:00
dingusdev
5672a154cb
Floating-point refactor, part 3
...
Condensed code to shorten enum names and remove casting.
Condensed mffs and partially fixed NAN checks for FADD(S).
2021-10-10 07:48:49 -07:00
dingusdev
2d65ed47fc
Floating point overhaul, part 2
...
Further formatting fixes. Removed obsoleted separation definitions. Fixed rounding to nearest.
2021-10-09 19:42:25 -07:00
dingusdev
e344b089b3
Floating point overhaul, part 1
...
Cleaned up formatting and reworked the INF/NAN checks
2021-10-09 15:08:53 -07:00
dingusdev
d5960ca70b
Fixed warnings for frsqrte and fsqrts
2021-10-06 18:59:31 -07:00
dingusdev
2106c4ca47
Fixed floating-point opcode table issues
...
fmuls, fmsubs, fmadds, fnmsubs, and fnmadds are all properly mapped now.
2021-10-06 18:36:23 -07:00
dingusdev
ad6a2a9f17
Merge pull request #20 from dingusdev/floating-point
...
Merging floating point branch
2021-10-06 18:32:23 -07:00
dingusdev
1922a20cdd
Partial revert for exception handling
...
This will be for a future update regarding 601 instructions
2021-10-05 17:42:55 -07:00
dingusdev
f605c484dd
ecowx and eciwx added
2021-10-05 17:40:09 -07:00
Maxim Poliakovski
69c357b70f
ppcopcodes: fix compilation error with Clang 11.
2021-10-05 00:40:12 +02:00
dingusdev
983e278498
Refactoring 601 opcode emulation - part 1
...
All opcodes should be emulated now. There was also a significant amount of clean-up, particularly with lscbx and the bit rotation/shifting instructions.
2021-10-01 22:37:28 -07:00
Maxim Poliakovski
b4d399ffa2
Improve three logging messages.
2021-09-30 23:01:56 +02:00
Maxim Poliakovski
22827642e4
ppcmmu: implement 601-style BAT.
2021-09-27 12:37:35 +02:00
Maxim Poliakovski
f104a634ea
ppcmmu: some more cleanup.
2021-09-26 14:20:46 +02:00
Maxim Poliakovski
81ea96a058
ppcmmu.cpp: fix includes.
2021-09-25 23:38:27 +02:00
Maxim Poliakovski
e052eb4a87
Merge branch 'atirage-hacks'.
2021-09-25 23:16:38 +02:00
Maxim Poliakovski
212cd58f40
ppcmmu: refactor and clean up.
2021-09-25 19:13:40 +02:00
Maxim Poliakovski
5b54cd69ef
ppcmmu: better fatal error handling with ABORT_F.
2021-09-25 19:13:40 +02:00
Maxim Poliakovski
501f24f0d3
ppcmmu: implement SoftTLB for instructions.
2021-09-25 19:13:40 +02:00
Maxim Poliakovski
2a79c9a63c
ppcmmu.c: restructure and clean up.
2021-09-25 19:13:40 +02:00
Maxim Poliakovski
84e111290f
Fix includes for loguru and SDL.
2021-09-16 00:46:38 +02:00
Maxim Poliakovski
9ce15be106
ppcmmu.c: restructure and clean up.
2021-08-22 21:33:59 +02:00
Maxim Poliakovski
a8f400287a
Add TLB profiling.
2021-08-22 17:34:23 +02:00
Maxim Poliakovski
089645e830
Implement SoftTLB for writes.
2021-08-22 17:34:23 +02:00
Maxim Poliakovski
22a15f4780
ppcfpopcodes: fix mtfsb0 & mtfsb1 emulation.
2021-07-09 01:07:42 +02:00
dingusdev
48a65279e1
Fixed crf_d for mtfsb0 and mtfsb1
2021-07-07 18:58:02 -07:00
dingusdev
6abe86589b
Update ppcfpopcodes.cpp
2021-07-07 08:00:37 -07:00
dingusdev
07a4166eef
Preliminary work on floating point tests
2021-06-25 21:20:53 -07:00
Maxim Poliakovski
094d9a9c2f
Remove inline to fix compiler warnings.
2021-06-21 00:11:14 +02:00
Maxim Poliakovski
4da95a66d7
Make emulated memory loads to use SoftTLB.
2021-06-20 22:33:10 +02:00
Maxim Poliakovski
7d8f4d4e61
Finalize SoftTLB for reads.
2021-05-16 22:00:00 +02:00
Maxim Poliakovski
a5ddb51a3b
ppcmmu: initial TLB implementation for reads.
2021-05-16 00:53:15 +02:00
Maxim Poliakovski
6f9ee10de5
Rework PPC CPU profiler.
2021-04-29 02:26:17 +02:00
Maxim Poliakovski
0c1c59ffa7
ppcmmu: set type of the profiling variables to uint64_t.
2021-04-29 01:30:27 +02:00
Maxim Poliakovski
085877a8bf
ppcmmu: add MMU profiling (disabled by default).
2021-04-18 20:49:58 +02:00
Maxim Poliakovski
bc59bf7c43
ppcmmu: replace macros with function templates.
2021-04-18 20:05:15 +02:00
Maxim Poliakovski
0375b6a687
ppcmmu: invert BAT mask to speed up match.
2021-04-11 02:03:20 +02:00
Maxim Poliakovski
d545780071
ppcmmu: fix calculation for BAT access_bits.
2021-04-10 23:51:00 +02:00
dingusdev
19ca37c4ba
Started refactoring fctiw and fctiwz
2021-02-05 12:45:57 -07:00
dingusdev
ce70b0f096
Removed obseleted function declarations
2021-02-03 20:01:02 -07:00
Maxim Poliakovski
7628ec92c0
Rename memreadwrite.h to memaccess.h
2021-02-03 12:19:18 +01:00
dingusdev
7f0acaf3d3
Load and store instruction clean-up
2021-01-25 21:03:17 -07:00
Maxim Poliakovski
5961552ed9
ppcfpopcodes: fix register stores.
2021-01-25 17:19:32 +01:00
Maxim Poliakovski
2141a72b87
ppcfpopcodes: finish RFC of the loading helpers.
2021-01-25 02:27:58 +01:00
Maxim Poliakovski
9683c660bc
ppcfpopcodes: RFC loading helpers, part 2.
...
Fix lfdx emulation along the way.
2021-01-25 01:30:19 +01:00
Maxim Poliakovski
d8397906c2
ppcfpopcodes: start refactoring of loading helpers.
2021-01-24 23:06:33 +01:00
Maxim Poliakovski
fd0f8e2ef5
ppcopcodes: revert inlining of helper functions.
2021-01-24 22:50:07 +01:00
dingusdev
60f84ef0d9
Refactoring interpreter value storage
2021-01-24 11:59:16 -07:00
dingusdev
593230f326
Disassembler - floating point instruction fixes
2021-01-23 22:44:14 -07:00
dingusdev
680b437b74
Fixed disassembly for fctiwz, frsp, and fctiw
2021-01-23 21:30:29 -07:00
Maxim Poliakovski
3189876d41
ppcfpopcodes: fix fmul emulation.
2021-01-24 04:53:19 +01:00
dingusdev
2539faef7e
Small typo fixes
2021-01-23 15:10:08 -07:00
Maxim Poliakovski
42184213e9
ppcexec: fix RC flag for subgroup 63.
2021-01-23 03:21:50 +01:00
Maxim Poliakovski
bb3f4e596e
ppcexec: fix subopcode 59 dispatching.
2021-01-23 03:12:39 +01:00
Maxim Poliakovski
014eefdf7e
ppcdisasm: fix frsp and add tests for it.
2021-01-23 02:32:30 +01:00
Maxim Poliakovski
d8f7588693
debugger: some fixes and improvements.
2021-01-12 15:17:51 +01:00
dingusdev
2bac606365
Added to Heathrow
...
Plus some debugging stuff to help figure out what register 0x34 is responsible for.
2021-01-08 15:29:43 -07:00
dingusdev
df8ea1b276
Code clean-up for interpreter
2021-01-08 14:34:01 -07:00
Maxim Poliakovski
358f018815
ppcopcodes: fix mcrf.
2021-01-08 21:59:18 +01:00
dingusdev
79e3d398ba
mcrf implemented
2021-01-07 20:38:32 -07:00
Maxim Poliakovski
2f3938c23f
ppcopcodes: fix dcbz.
2021-01-07 04:25:27 +01:00
Maxim Poliakovski
dbbaf13a78
ppcopcodes: fix cntlzw to compile properly with Clang.
...
Enable USE_GCC_BUILTINS by default.
2020-12-18 18:33:00 +01:00
Maxim Poliakovski
99641b1b5e
ppcopcodes: fix cntlzw with __builtin_clz.
...
The result of __builtin_clz is undefined when the source operand
is zero. Add a check for this case and handle it accordingly.
2020-12-07 14:37:20 +01:00
Maxim Poliakovski
6c6247b94f
Clean up program exceptions.
2020-11-30 20:59:36 +01:00
Maxim Poliakovski
acfa09af65
Illegal opcodes raise program exception.
2020-11-29 23:54:10 +01:00
dingusdev
54fcfca8e9
Fixed floating point loading and storing instructions
2020-11-29 06:52:01 -07:00
Maxim Poliakovski
a775007d3a
MMU: implement misaligned cross-page accesses.
2020-11-29 00:23:30 +01:00
dingusdev
0c202b0c2d
Merging the 68k debugger from another branch
2020-11-26 20:00:08 -07:00
Maxim Poliakovski
b81de4af48
ppcexec: initialize interpreter lookup tables.
2020-11-14 03:05:41 +01:00
Maxim Poliakovski
2b19b0b237
ppcmmu: better initialization of last used entries.
2020-11-14 02:57:36 +01:00
dingusdev
1fe9ffe3e5
Further refactoring to clean up the interpreter
2020-10-17 21:46:38 -07:00
dingusdev
dc58386237
Started re-refactoring opcode retrieval
2020-10-17 14:30:37 -07:00
dingusdev
14ef7564cd
CLI fixes - RAM and GFXMEM work better
2020-08-25 20:07:02 -07:00
Maxim Poliakovski
353035e9ca
Prevent clobbering during debugging.
2020-07-20 23:02:07 +02:00
Maxim Poliakovski
b9dcfef551
debugger: debugging commands for 68k code.
2020-07-16 14:26:34 +02:00
Maxim Poliakovski
6b74e358dc
WIP: basic 68k debugging environment.
2020-07-15 02:19:05 +02:00
Maxim Poliakovski
39a643aff6
Merge branch 'machines'
...
Also disable SDL for now because it produces build errors.
2020-06-03 18:21:51 +02:00
Maxim Poliakovski
2cd002cffa
ppcexec: remove dead code.
2020-06-03 15:33:32 +02:00
Maxim Poliakovski
6ef0f0baae
Fix CPU cycles counter to play nicely with setjmp.
...
setjmp clobbers non-volatile local variables. bb_start_la is such
a local variable that is used for counting of virtual CPU cycles.
To make cycles counting work after setjmp, the global variable
glob_bb_start_la is used to preserve content of bb_start_la accross
interpreter pipeline.
2020-06-03 15:21:19 +02:00
Maxim Poliakovski
d21fdb25d1
Remove unused variable grab_branch.
2020-06-01 23:12:18 +02:00
Maxim Poliakovski
f204caa907
ppcexec: new TBR/DEC updating code.
2020-06-01 00:46:00 +02:00
Waqar Ahmed
0ab9380be3
clang-format everything
2020-05-12 23:55:45 +05:00
Maxim Poliakovski
64d74228c2
ppcopcodes: fix STMW emulation.
2020-04-21 04:58:21 +02:00
Maxim Poliakovski
3d13bc1ca6
ppcopcodes: fix TWI emulation.
2020-04-21 04:58:21 +02:00
Maxim Poliakovski
695044cf0e
Support more than one I/O region per device.
2020-03-31 18:48:04 +02:00
dingusdev
60ffa5bfac
Initial attempt at fixing SDL2 building for Windows
2020-03-22 20:15:12 -07:00
Maxim Poliakovski
8e34c1657c
Mock up DBDMA channel execution for sound.
2020-03-19 02:00:18 +01:00
Maxim Poliakovski
9be3250142
Fix MMU region bounds check.
2020-03-15 20:08:53 +01:00
Maxim Poliakovski
822f6cafd2
Create machine factory.
...
It manages various hardware configurations referred to as machines.
2020-03-13 23:09:36 +01:00
dingusdev
4ceed27ccf
Simplified prog_counter back to pc
2020-03-05 07:48:10 -07:00
dingusdev
e31f7873f5
Fixed redunant variable names for PPC emulation.
2020-03-04 21:29:04 -07:00
Maxim Poliakovski
0eb557751b
ppcopcodes: fix timebase read & write.
2020-03-02 00:01:18 +01:00
dingusdev
f5e8c9cbb8
Three tiny typos fixed
...
All related to 4*cr1+lt
2020-03-01 14:11:26 -07:00
dingusdev
31147aada3
Fixed most condition register issues with disassembler
2020-03-01 14:09:08 -07:00
dingusdev
81cabc5730
Fixed various bugs in the disassembler
2020-03-01 11:18:29 -07:00
Maxim Poliakovski
cbb46e8f30
More tests to reaveal wrong disassembly.
2020-03-01 18:21:57 +01:00
Maxim Poliakovski
7978d9d59f
Fix SRR0 setting in exception handler.
2020-03-01 17:24:50 +01:00
dingusdev
055445e04a
Merge branch 'master' of https://github.com/dingusdev/dingusppc
2020-02-28 09:04:30 -07:00
dingusdev
354409812e
Updating files with proper licensing header
2020-02-28 09:04:28 -07:00
Maxim Poliakovski
e08bf39af3
debugger: more checks for user input.
2020-02-28 08:58:14 +01:00
dingusdev
5991ef1dca
Merge branch 'ppc-fixes'
2020-02-27 21:03:40 -07:00
dingusdev
c8611dc293
Code cleanup + procedures for cleanup
2020-02-27 21:03:01 -07:00
Maxim Poliakovski
90779bd9c6
Remove log messages from cache/TLB instructions.
2020-02-27 16:31:22 +01:00
dingusdev
a3f55d35b4
Fixed most compiler warnings
2020-02-25 07:15:42 -07:00
dingusdev
6c1dc8aaf0
Further logging work
2020-02-24 19:50:52 -07:00
dingusdev
baef838f7c
Further integration with loguru
2020-02-24 07:54:29 -07:00
dingusdev
d91950e582
Further logging code.
2020-02-23 22:36:31 -07:00
dingusdev
e9a616ffeb
Started working on incorporating loguru
2020-02-23 20:59:10 -07:00
Maxim Poliakovski
461d859e73
ppcmmu: add debug memory reading function.
...
This function saves and restores the MMU state
so no invalid user input can break CPU execution.
2020-02-23 16:41:58 +01:00
Maxim Poliakovski
403c19ca39
Improve the command line debugger.
...
Add next command. Make the debugger somewhat foolproof.
2020-02-23 15:24:55 +01:00
dingusdev
02a75f78da
regsfpsab fixed
2020-02-20 22:21:58 -07:00
dingusdev
d20122b3a9
Proper flag updates for fm arithmetic operations
2020-02-20 20:00:20 -07:00