Maxim Poliakovski
b51670cb25
ppcfpopcodes: improve mffs, mtfsb0 and mtfsb1.
2023-11-30 12:06:44 +01:00
Maxim Poliakovski
487c6c2c7c
ppcfpopcodes: remove dead code.
2023-11-30 12:06:44 +01:00
dingusdev
87b8a8e0a0
Correcting multiply tests
2023-11-28 19:02:48 -07:00
Maxim Poliakovski
47e0c23e64
Fix CR1 updates for floating-point instructions.
2023-11-28 16:31:51 +01:00
dingusdev
dd454689e0
Fixes for condition reg move instructions
2023-11-28 07:06:04 -07:00
dingusdev
4753ba5361
Continued clean-up
2023-11-23 16:56:58 -07:00
dingusdev
7835aec034
Further CPU cleanup
2023-11-21 08:06:50 -07:00
dingusdev
f4f035682c
Fixed cfloat include
2023-11-19 20:34:40 -07:00
dingusdev
d1f9b5631a
Added missing include for cfloat
2023-11-19 20:07:00 -07:00
dingusdev
d92ae6136a
CPU code clean-up in progress
...
Happened to fix one case in the process.
2023-11-19 17:56:30 -07:00
dingusdev
074a760b6a
FP compare fixes
...
This is the start of several fixes for the floating point emulation.
2023-11-13 07:30:31 -07:00
Mihai Parparita
35c86ad6bf
Clean up #includes
...
Result of running IWYU (https://include-what-you-use.org/ ) and
applying most of the suggestions about unncessary includes and
forward declarations.
Was motivated by observing that <thread> was being included in
ppcopcodes.cpp even though it was unused (found while researching
the use of threads), but seems generally good to help with build
times and correctness.
2023-11-03 00:33:47 -07:00
dingusdev
6ffc2b2f10
Optimize string word instructions
...
Partially unrolled the loop. Boots 7.1.2 Disk Tools slightly faster.
2023-10-29 17:23:31 -07:00
joevt
5b366e592c
Fix spelling.
2023-10-02 15:06:51 +02:00
joevt
170a9d78e7
Fix comment.
2023-10-02 15:06:06 +02:00
Maxim Poliakovski
a5fb124e69
pdmonboard: switch to mmu_map_dma_mem.
2023-10-02 15:00:12 +02:00
Maxim Poliakovski
8cf290c034
ppcmmu: add mmu_map_dma_mem method.
2023-10-02 02:20:42 +02:00
joevt
67146028bf
ppcmmu: Add 64-bit accesses to I/O.
...
Also add an exception for unaligned 64 bit. 64 bit accesses require dword alignment.
2023-09-30 00:29:01 +02:00
joevt
acdb14a10a
Recalculate execution block after RFI.
...
While booting Mac OS X 10.2 installer CD, a return from RFI didn't change the instruction address virtual memory page but did change the physical memory page so we must always recalculate the physical address after RFI.
Perhaps there are other cases where this may be required?
2023-09-26 00:13:11 +02:00
joevt
dcd4384d46
Fix eb_end calculation.
...
- Subtract one so that it can't overflow to zero.
- Use page_start as the base so mask operation is not required.
- Recalculate it only when the page changes.
2023-09-26 00:04:07 +02:00
joevt
8348370142
Add separate flags for instruction and data TLBs.
...
The same flag was being used for flushing both instruction and data TLBs so sometimes a flush for one TLB list would not occur if the flag was cleared when flushing the other TLB list.
2023-09-25 23:42:32 +02:00
joevt
6b3cdad877
ppcmmu: Fix BAT update.
...
Need to schedule flush of both BAT and PAT type TLBs because BAT takes precedence over PAT which means updating a BAT can invalidate a PAT.
2023-09-25 23:27:00 +02:00
joevt
6b40caf63a
ppcmmu: fix setting of LRU bits.
2023-09-25 23:17:57 +02:00
Maxim Poliakovski
6cfde29f00
heathrow: implement native interrupt mode.
2023-09-25 12:22:17 +02:00
Maxim Poliakovski
278799795c
Disable decrementer exceptions for MPC601.
2023-09-18 21:20:59 +02:00
Maxim Poliakovski
c47cbb354d
Add is_601 flag for selecting MPC601 specific behavior.
2023-09-18 21:20:59 +02:00
Maxim Poliakovski
8ff2125312
Revert "Minor checks for Data Cache opcodes and LMW"
...
This reverts commit fd6327ab62
.
2023-09-18 21:20:59 +02:00
Maxim Poliakovski
a69763c6de
dbdma: noop incomplete LOAD_QUAD & STORE_QUAD.
2023-09-18 20:20:25 +02:00
dingusdev
5e32b599d6
Merge branch 'master' of https://github.com/dingusdev/dingusppc
2023-09-04 07:22:27 -07:00
dingusdev
fd6327ab62
Minor checks for Data Cache opcodes and LMW
2023-09-04 07:21:00 -07:00
Maxim Poliakovski
45528bfc6d
ppcmmu: fix flushing of the secondary ITLB.
2023-08-22 23:36:48 +02:00
Maxim Poliakovski
932f2bbceb
ppcopcodes: fix stwcx. emulation.
2023-08-21 04:50:02 +02:00
dingusdev
a7ef177164
Preliminary DBDMA expansion
2023-08-13 16:38:15 -07:00
joevt
300965ab10
Decrementer exception changes.
2023-08-10 00:46:04 +02:00
Maxim Poliakovski
d2e7c9a5df
ppcexceptions: fix next address for decrementer exceptions.
2023-08-09 12:53:48 +02:00
Maxim Poliakovski
de1f0c8a9b
ppc_mmu: rename reg_desc to rgn_desc to improve readability.
2023-08-07 13:56:49 +02:00
Maxim Poliakovski
52a64168d7
Clean up previous merge.
2023-08-07 13:45:26 +02:00
Maxim Poliakovski
b571ff8412
Revert "ppcmmu: Add 64-bit accesses to I/O"
...
This reverts commit 16123dea45
.
2023-08-07 13:06:11 +02:00
joevt
ac64f9e30d
ppcmmu: Fix mmio read/write offset calculation.
...
For TLBs referencing an mmio region, calculate an offset that will translate a guest virtual address to an offset in the mmio region.
2023-08-04 20:16:13 -07:00
joevt
16123dea45
ppcmmu: Add 64-bit accesses to I/O
...
Also add an exception for unaligned 64 bit. 64 bit accesses require dword alignment.
2023-08-04 20:16:13 -07:00
joevt
814260f0b6
ppcmmu: Reduce unmapped physical memory logging.
...
Don't log consecutive accesses to unmapped physical memory addresses. This saves a couple hundred thousand lines in the log in some cases.
This is only a partial fix. Any access that isn't logged should be queued and output if a log message is output that is not this log message or after a time period.
2023-08-04 20:16:13 -07:00
Maxim Poliakovski
25150268cd
ppcexceptions: fix ISI exception target address.
2023-07-10 14:06:20 +02:00
dingusdev
4364c89fd4
Slight clean-up for execution type
2023-06-19 22:36:27 -07:00
Maxim Poliakovski
73d0356058
ppcopcodes: fix dcbz for BlockZero in Mac OS 8.x
2023-06-17 20:57:48 +02:00
Maxim Poliakovski
03595c3940
Merge remote-tracking branch 'origin/machine-yosemite'
2023-04-21 12:49:58 +02:00
Maxim Poliakovski
cf0d361918
Merge 'hard-disks' branch.
2023-04-17 01:20:38 +02:00
Maxim Poliakovski
597c077b19
Implement PPC decrementer.
2023-02-15 02:36:40 +01:00
Maxim Poliakovski
9fcf5ba51a
ppcmmu: fix bug in mmu_change_mode().
2023-02-15 02:18:31 +01:00
joevt
19adb54cd8
Fix compiler warnings.
...
These were detected by github Actions but not by Xcode.
2023-01-11 01:17:13 -08:00
joevt
5294a8b71c
Fix compiler warnings: unused variables.
2023-01-11 01:17:12 -08:00
joevt
46bc8567e9
Fix compiler warnings: uninitialized variables.
...
- mpc601_block_address_translation will now return 0 for prot and pa when bat_hit is false (when the if statement is not positive during the for loop). The calling function doesn't care what prot and pa are when bat_hit is false, but we do this to remove the compiler warining.
- For tlb_flush_entry, the compiler thinks m might not always be in the range 0 to 5 so tlb1 and tlb2 might not get initialized by the switch statement. Add default to get around this warning.
2023-01-11 01:17:12 -08:00
joevt
64fec88436
Fix compiler warnings: cast loses precision.
...
Use explicit cast when converting large integer types to smaller integer types when it is known that the most significant bytes are not required.
For pcidevice, check the ROM file size before casting to int. We'll allow expansion ROM sizes up to 4MB but usually they are 64K, sometimes 128K, rarely 256K.
for machinefactory, change the type to size_t so that it can correctly get the size of files that are larger than 4GB; it already checks the file size is 4MB before we need to cast to uint32_t.
For floppyimg, check the image size before casting to int. For raw images, only allow files up to 2MB. For DiskCopy42 images, it already checks the file size, so do the cast after that.
2023-01-11 01:17:12 -08:00
Maxim Poliakovski
7ba8921649
ppcemu: add PVR for 603ev.
2022-12-23 17:19:46 +01:00
Maxim Poliakovski
648dfcd47b
ppcmmu: fix BAT state updates.
2022-12-20 14:58:45 +01:00
Maxim Poliakovski
9f4c248e4c
Rework DBDMA logic for bidirectional channels.
2022-11-17 18:03:18 +01:00
dingusdev
a58ce8aeb3
Slight tweak to lscbx
2022-11-15 08:01:57 -07:00
dingusdev
8f99510af0
Fixed lscbx
2022-11-15 07:40:37 -07:00
dingusdev
647ae456e5
Slight typo squash for lscbx
2022-11-12 20:18:33 -07:00
dingusdev
1b7ff084ab
Cleaned lscbx
2022-11-12 20:17:04 -07:00
dingusdev
1ed6e25d1b
Removed redundant variable
...
Slight clean-up for lswi and lswx
2022-11-12 20:16:29 -07:00
joevt
6f0d3b48ba
Fix TBR range
...
Fixed an issue where TBR doesn't have full 64-bit range. The original calculation was 64 bit and ended with a ÷ 10^9. This means the max for the upper 32 bits is 2^32/10^9 = 4. The solution is to use a multiplication method that supports a 96 bit product. core/mathutils.h contains functions for that. TBR driving frequency is assumed to be less than 1 GHz. Some minor modification is required for future > 1 GHz support.
2022-09-15 21:22:37 -07:00
joevt
b665f2cb4e
Fix RTC units
...
Fixed an issue where get-msecs-601 and get-msecs-60x were not returning the same value. RTC was being calculated using timebase frequency instead of nanosecond frequency. 601 uses RTC. 60x uses TBR. On a real Mac, a G3 CPU won't have a RTC and accessing RTC would cause an exception. This is not the case for dingusppc but I don't think that's a problem.
2022-09-15 21:05:08 -07:00
joevt
ed424ad544
Fix setting RTC
...
Fixed an issue where setting RTC upper or lower doesn't adjust the other (since the current time has changed since the last timestamp).
2022-09-15 20:59:56 -07:00
joevt
50dbd5eccd
Fix RTC not always updating
...
Fixed an issue where RTC was not being updated if only the upper 32 bits (seconds) was read.
Also simplified things by always updating the timestamp instead of only when the seconds changes.
2022-09-15 20:54:22 -07:00
joevt
01d7d6bac3
Make accessing RTC or TBR not affect the other
...
Fixed an issue where the following would cause inconsistent results (tb in the left column would sometimes decrement instead of always incrementing):
2 0 do 2 0 do cr tb@ 8 u.r ." ." 8 u.r loop 2 0 do cr 12 spaces rtc@ 8 u.r ." ." 8 u.r loop 2 0 do cr tb@ 8 u.r ." ." 8 u.r space rtc@ 8 u.r ." ." 8 u.r loop loop
RTC and TBR could not be used simultaneously because they are both incremented by an amount based on the last time stamp but that time stamp can be changed by accessing either RTC or TBR. The solution is to have a different time stamp for each.
2022-09-15 20:21:54 -07:00
joevt
ce925f5e56
Fix RTC upper
...
Fixed a typo that caused rtc@ to always return 0 for the upper 32 bits (represents seconds).
The problem could cause the following to hang on Power Mac 7500:
cr 2000 0 do get-msecs u. 1 ms loop
2022-09-15 19:34:46 -07:00
Maxim Poliakovski
b38d00ce2d
cpu/ppc: improve support for external interrupts.
...
Support generating of external interrupt exception
in MTMSR and RFI when MSR[EE] is re-enabled and
external interrupt still pending.
2022-08-24 14:15:47 +02:00
Maxim Poliakovski
8c0f391548
ppcemu: add enums for HID0 and HID1.
2022-08-15 14:45:55 +02:00
joevt
b76bfedf4b
Remove unnecessary linefeeds from log
...
To remove blank lines in the dingusppc.log file or in the console output when -d is used.
2022-08-14 05:26:56 -07:00
Maxim Poliakovski
0c77cccb9e
ppcopcodes: fix mcrf (again).
2022-05-21 14:51:28 +02:00
Maxim Poliakovski
b47de8b042
Implement MPC601 style RTC.
2022-05-21 14:51:27 +02:00
Maxim Poliakovski
d83fdd8866
ppcexec: remove old code.
2022-03-02 17:02:32 +01:00
Maxim Poliakovski
646880cbf2
Interpreter loop is now controlled by exec_flags.
2022-03-02 16:55:20 +01:00
Maxim Poliakovski
f1ed56ae9a
debugger: a couple of cosmetic improvements.
2022-02-26 10:57:13 +01:00
Maxim Poliakovski
123f820775
ppcopcodes: fix lswi/stswi emulation.
2022-02-19 23:23:24 +01:00
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