Maxim Poliakovski
8ff2125312
Revert "Minor checks for Data Cache opcodes and LMW"
...
This reverts commit fd6327ab62
.
2023-09-18 21:20:59 +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
932f2bbceb
ppcopcodes: fix stwcx. emulation.
2023-08-21 04:50:02 +02:00
joevt
300965ab10
Decrementer exception changes.
2023-08-10 00:46:04 +02: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
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
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
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
646880cbf2
Interpreter loop is now controlled by exec_flags.
2022-03-02 16:55:20 +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
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
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
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
c0cd6eb38f
Add missing licence headers, update license date.
2021-10-23 21:00:31 +02:00
Maxim Poliakovski
e53296f7a9
Implement all required context-synchronizing events.
2021-10-13 20:58:09 +02: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
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
089645e830
Implement SoftTLB for writes.
2021-08-22 17:34:23 +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
dingusdev
7f0acaf3d3
Load and store instruction clean-up
2021-01-25 21:03:17 -07: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
2539faef7e
Small typo fixes
2021-01-23 15:10:08 -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
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
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
d21fdb25d1
Remove unused variable grab_branch.
2020-06-01 23:12:18 +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
dingusdev
60ffa5bfac
Initial attempt at fixing SDL2 building for Windows
2020-03-22 20:15:12 -07: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
354409812e
Updating files with proper licensing header
2020-02-28 09:04:28 -07:00
Maxim Poliakovski
90779bd9c6
Remove log messages from cache/TLB instructions.
2020-02-27 16:31:22 +01:00
dingusdev
6c1dc8aaf0
Further logging work
2020-02-24 19:50:52 -07:00
dingusdev
d91950e582
Further logging code.
2020-02-23 22:36:31 -07:00
dingusdev
30b1116393
Implemeted limited simplified mnemonics for rlwinm
2020-02-10 20:02:41 -07:00
Maxim Poliakovski
26bd402f44
ppcopcodes: optimize ppc_changecrf0() a bit.
2020-02-10 23:07:39 +01:00
Maxim Poliakovski
d0f1a34c02
Fix integer multiplications.
...
Add a couple of tests for verifying XER[OV] updating code
for mullwo[.].
2020-02-10 18:36:28 +01:00
Maxim Poliakovski
a72e2fd67d
Simplify unsigned integer divisions.
2020-02-10 17:16:18 +01:00
Maxim Poliakovski
d4a2f400b5
Fix divw[.] and divwo[.] emulation.
...
Also adds a couple of tests for undocumented
CPU behaviour. Remove superfluous "sidiv".
2020-02-10 16:07:11 +01:00
dingusdev
a4d815344a
Patched up DIVW(U)O(.)
2020-02-09 13:59:30 -07:00
Maxim Poliakovski
b057a8373d
Simplify SUBF and remove not_this.
2020-02-09 08:05:20 +01:00
Maxim Poliakovski
32e64fc1b2
Make XER update code inline & private.
2020-02-09 08:01:26 +01:00
Maxim Poliakovski
49002860ed
Fix carry update for subfc(.) and subfco(.).
2020-02-09 07:41:03 +01:00
dingusdev
6f16ba8c57
Fixed SUBFME(O)(.)
2020-02-08 22:06:01 -07:00
dingusdev
051edd5e38
Subtraction operation fixes in progress
2020-02-08 20:35:11 -07:00
dingusdev
b364aa0ae4
Patching up Subtraction Opcodes
2020-02-03 22:32:56 -07:00
dingusdev
f52be627b5
Fixed subfo(.)
2020-02-03 17:28:41 -07:00
Maxim Poliakovski
03439b2a49
Placeholders for SUBFEO[.], SUBFMEO[.] and SUBFZEO[.].
2020-02-04 00:58:04 +01:00
Maxim Poliakovski
d25ce6a244
Add tests for shifts and fix their emulation.
2020-02-03 22:59:47 +01:00
Maxim Poliakovski
8c1c1e0a0d
Fix and refactor additions with OE=1.
2020-02-03 19:42:33 +01:00
dingusdev
eb476adf87
Small fix to addeo
2020-02-02 16:36:47 -07:00
dingusdev
60bf5dfa6a
ADDO(.) and ADDCO(.) fixed
...
Temp fix to look into the issues with the addition ops and overflow flag issues.
2020-02-02 11:54:33 -07:00
dingusdev
fe6ea7d9f6
Division ops fixed
2020-02-01 10:51:59 -07:00
dingusdev
0b2de4ac4c
Division Ops Fixes WIP
2020-01-31 21:06:06 -07:00
dingusdev
8c10004f52
Fixed all multiplication issues
2020-01-31 18:17:01 -07:00
Maxim Poliakovski
99e8bc98f3
Fix mulhw/mulhw. emulation.
2020-02-01 02:02:12 +01:00
dingusdev
ddae141c22
Overflow fixes in progress
2020-01-31 16:54:37 -07:00
Maxim Poliakovski
aad75266f7
Fix cntlzw emulation.
2020-01-31 18:03:27 +01:00
dingusdev
3dead1f65c
Updated TBRs correctly in mtspr
2020-01-29 21:08:42 -07:00
dingusdev
e1c0ec3dd2
Fixed MTSPR for time base regs
2020-01-29 20:47:12 -07:00