Commit Graph

106 Commits

Author SHA1 Message Date
Mihai Parparita
7226fe5303 Ensure that video controller refresh task timer is stopped when the object is destroyed. 2024-03-07 23:31:56 -08:00
joevt
7b4d513e22 videoctrl: Add change resolution support.
PDM defaults to 640x480.
If you set --mon_id to MacRGB12in then it would draw 512x384 inside a 640x480 window.
If you set --mon_id to Multiscan20in then it would try to draw 832x624 inside a 640x480 window and crash.
If you set the Monitors control panel to switch multiscan display from 640x480 to 832x624 and  restart then it would crash.
Now it will correctly change the window size every time the mode changes.
2024-03-06 21:44:10 -07:00
joevt
5b51cd06c0 atimach64gx: Add register names.
For logging.
2024-03-06 21:20:23 -07:00
joevt
691fcfb657 atimach64gx: PCI BAR changes.
Support changing BAR address.
2024-03-06 18:58:15 -07:00
joevt
49f7da4402 atimach64gx: Remove second column.
It incorrectly implies a relationship between items on the same row.
2024-03-06 18:57:52 -07:00
joevt
6c0ca42fff atimach64defs: Add more registers and bit fields. 2024-03-06 18:57:30 -07:00
joevt
5a049642ea atirage: Add VBL callback. 2024-03-06 07:50:03 -07:00
joevt
b168459007 atirage: Calculate vert_blank. 2024-03-06 07:42:51 -07:00
joevt
d5c7b5f537 atirage: Add write CRTC_INT_CNTL. 2024-03-06 07:41:12 -07:00
joevt
506ed000a0 atirage: Add write CONFIG_STAT0. 2024-03-06 07:04:59 -07:00
joevt
b92e9216f4 atirage: Add write CRTC_VLINE_CRNT_VLINE.
For VLINE interrupt (but Mac OS X doesn't use enable VLINE interrupt).
2024-03-06 07:04:40 -07:00
joevt
6ff5079df8 atirage: Init CRTC_DISPLAY_DIS. 2024-03-06 07:04:25 -07:00
joevt
d686fc04f4 atirage: Fix crtc_update.
Add pixel format and pixel clock to the list of fields that will initiate a recalculation.
If frame rate is less than 24 or greater than 120 then assume 60Hz.
2024-03-05 08:02:50 -07:00
joevt
9aef78be4f atirage: Modify write CLOCK_CNTL.
Consider write-only bits: ATI_CLOCK_STROBE can't be read so clear it.
8 bits at Offset 2 is PLL_DATA. If we don't modify PLL_DATA, then insert the current value of PLL_DATA into the value that will be read from ATI_CLOCK_CNTL.
2024-03-05 08:02:20 -07:00
joevt
f6b1c080ad atirage: Init FIFO_CNT of GUI_STAT. 2024-03-05 07:54:19 -07:00
joevt
d4fa85688d atirage: Check both offset and size.
When checking if a particular byte of a register is accessed, check both the starting position (offset) and ending position (offset + size) of the bytes being access.
2024-03-05 07:52:12 -07:00
joevt
eef6d267c3 atirage: PCI BAR changes.
- Add BAR 2 decode. This BAR isn't actually used by Mac OS X, but decode it anyway just in case.
- Support updating of BARs (using change_one_bar method).
2024-03-04 21:13:07 -07:00
joevt
9c48c296c8 atirage: Register cleanup.
- Use register number instead of offset.
- Have one exit path from the read_reg and write_reg methods.
2024-03-04 21:11:56 -07:00
joevt
214c61669a videoctrl: Add pixel_format.
pixel_format is different than pixel_depth.
pixel_format depends on the GPU. A GPU might have multiple formats for the same depth.
We store this in videoctrl so that we can detect changes in pixel_format like we do for pixel_depth and active_width and active_height.
2024-03-04 21:11:42 -07:00
joevt
10053a8a1b atirage: Rename variable.
To match other occurrences in the same file.
2024-03-02 20:49:25 -07:00
joevt
9cefaec49c atirage: Spelling. 2024-03-02 20:44:39 -07:00
joevt
55b79c1518 atirage: Use register bit field names. 2024-03-02 20:44:08 -07:00
joevt
c2ab86d4ba atirage: Do something for hw cursor invert pixels.
Try a 50% alpha blend with black.
2024-03-02 20:43:54 -07:00
joevt
0e5fcde1e9 atirage: Add CUR_HORZ_VERT_OFF name. 2024-03-02 17:27:45 -07:00
joevt
002cce886c atirage: Indent. 2024-03-02 17:15:39 -07:00
joevt
151ea2ece4 atimach64defs: Add register bit fields. 2024-03-02 17:15:25 -07:00
joevt
568882a2ea atimach64defs: Sort addresses in descending order. 2024-03-02 17:14:59 -07:00
joevt
f38d6d73f4 atimach64defs: Add more device IDs. 2024-03-02 17:08:31 -07:00
joevt
1b147151f0 videoctrl: Rename get_palette_color.
So it matches set_palette_color.
2024-03-02 08:59:02 -07:00
joevt
b509df78df Don't allow vert_blank to be 0. 2024-03-02 08:37:44 -07:00
joevt
fe05b1de12 Fix compiler warnings.
Xcode build has compiler warnings involving loss of precision. Remove them by adding type casts. Check results in some cases for overflow.
2024-02-29 18:49:14 -07:00
joevt
18afe91a82 atirage: Use convert frame big-endian methods. 2024-02-26 14:46:31 +01:00
Maxim Poliakovski
b8d0ed39d9 atirage: fix FB pitch calculation. 2024-02-26 14:21:53 +01:00
joevt
57d919e424 appleramdac: HW cursor fixes.
- Add mask so that hardware cursor cannot be drawn beyond the right edge of the frame buffer.
- Add invert pixels. Invert pixels are used in the I-beam cursor and the Watch cursor.
2024-02-20 01:00:50 +01:00
Maxim Poliakovski
cb8c2cb450 Wire CONTROL interrupt. 2024-02-12 01:46:21 +01:00
Maxim Poliakovski
7d06c5b37a control: use RaDACal emulation from appleramdac. 2024-02-11 22:59:43 +01:00
Maxim Poliakovski
dd95468d74 New source for TNT RAMDAC emulation (DACula & RaDACal). 2024-02-11 22:59:43 +01:00
Maxim Poliakovski
44b1d34cc7 control: support interlaced modes. 2024-02-11 22:22:27 +01:00
Maxim Poliakovski
5f06be6226 control: implement HW cursor rendering. 2024-01-19 23:48:22 +01:00
Maxim Poliakovski
a68afbf79a videoctrl: add one more cursor rendering callback. 2024-01-19 23:48:22 +01:00
Maxim Poliakovski
7432369162 display_sdl.cpp: improve formatting and add license header. 2024-01-19 09:48:54 +01:00
Maxim Poliakovski
43dc9ed88a control: remove unused defines and variables. 2024-01-19 09:48:54 +01:00
Maxim Poliakovski
d413e4a278 control: incorporate recent HW knowledge. 2024-01-19 09:48:54 +01:00
joevt
5c460c9f3b videoctrl: Add VBL callback.
Allows overriding the method used to post interrupts.
2024-01-13 00:41:08 +01:00
joevt
cf9237f7d6 control: Fixes.
- Fix video vram endianness. It should behave like RAM.
- Add read for registers ENABLE, INT_STATUS, INT_ENABLE.
- Add write for registers CNTTST, INT_ENABLE.
- Add support for 16bpp and 32bpp.
- Add vbl interrupt.
2024-01-13 00:41:08 +01:00
Mihai Parparita
30ded5e803 Add support for more ATI Rage video modes
Cherrypicks a small piece of joevt/dingusppc@117ca1e449
so that booting from the 10.2 CD gets past it trying to change the video
mode to 15bpp.

Co-authored-by: joevt <joevt@shaw.ca>
2023-12-07 00:16:48 -08:00
joevt
0096d063dd pdmonboard: Add 2, 4, 15, 24 bpp support. 2023-12-03 20:38:01 +01:00
joevt
7c3bb41728 videoctrl: Add more convert frame methods.
Also rename 1bpp and 8bpp methods to 1bpp_indexed and 8bpp_indexed.
2023-12-03 20:38:01 +01: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
Mihai Parparita
1f7edfdb3b Make Emscripten build not depend on SDL2 or cubeb
While Emscripten has an SDL compabtility layer, it assumes that the
code is executing in the main browser process (and thus has access to
them DOM). The Infinite Mac project runs emulators in a worker thread
(for better performance) and has a custom API for the display, sound,
input, etc. Similarly, it does not need the cross-platform sound support
from cubeb, there there is a sound API as well.

This commit makes SDL (*_sdl.cpp) and cubeb-based (*_cubeb.cpp) code be
skipped when targeting Emscripten, and instead *_js.cpp files are used
instead (this is the cross-platform convention used by Chromium[^1], and
could be extended for other targets).

For hostevents.cpp and soundserver.cpp the entire file was replaced,
whereas for videoctrl.cpp there was enough shared logic that it was
kept, and the platform-specific bits were moved behind a Display class
that can have per-platform implementations. For cases where we need
additional private fields in the platform-specific classes, we use
a PIMPL pattern.

The *_js.cpp files with implementations are not included in this
commit, since they are closely tied to the Infinite Mac project, and
will live in its fork of DingusPPC.

[^1]: https://www.chromium.org/developers/design-documents/conventions-and-patterns-for-multi-platform-development/
2023-10-25 22:25:53 -07:00