Commit Graph

951 Commits

Author SHA1 Message Date
joevt 6e4544450e platinum: Add register _4B. 2024-03-12 07:07:43 -07:00
joevt d4922beefe platinum: Don't ignore read/write of size != 4.
For reading, we'll return values such that dumping bytes or words or longs in Open Firmware will produce the same info in all cases.
2024-03-12 07:07:36 -07:00
joevt 6f37ff9ea3 platinum: Convert register offset to index.
Same as control.
2024-03-12 07:06:05 -07:00
joevt 1dfa671405 hammerhead: Add Motherboard ID Burst ROM flag. 2024-03-12 07:05:09 -07:00
joevt eb1d5d0a6d atimach64gx: Make sure refresh rate is reasonable. 2024-03-11 20:27:00 -07:00
joevt a190d5cbd9 atimach64gx: Handle all pixel formats. 2024-03-11 20:26:07 -07:00
joevt ab647ec0eb atimach64gx: Move pixel clock calculation. 2024-03-11 20:25:32 -07:00
joevt 1fb9e37ec5 scsidevice: Add check_lun.
This will create a CHECK_CONDITON if the LUN doesn't match.
2024-03-11 20:24:24 -07:00
joevt bcd057d45b atimach64gx: Don't recalculate if nothing changed. 2024-03-11 19:25:42 -07:00
joevt 0a63e2946d atimach64gx: Init some fields. 2024-03-11 19:25:18 -07:00
dingusdev b63e42ecf2 Temporarily removing SOFT RESET ATA command
Not implemented properly. Will re-implement soon.
2024-03-11 19:05:13 -07:00
joevt ee2ec7fe54 atimach64gx: Update VGA unsupported mode message. 2024-03-11 08:00:48 -07:00
joevt 1f63342c96 atimach64gx: Handle disabled display. 2024-03-11 08:00:38 -07:00
joevt 6e094a8edb atirage: Remove crtc_enable. 2024-03-11 07:55:15 -07:00
joevt 2ece059c5e atapi: Add ATAPI_SOFT_RESET command.
I don't know if this is correct.
2024-03-11 07:19:11 -07:00
joevt a0ce1efabe display_sdl: Add Mouse Grabbed to window title.
Necessary when the window is created after a restart while mouse is grabbed.
2024-03-11 07:10:26 -07:00
leap123 c1b557fbb9
Fix build on Fedora 2024-03-11 13:01:43 +07:00
joevt babefd09f3 atimach64gx: Rename enable_crtc_internal. 2024-03-10 17:02:38 -07:00
joevt 578e5dc063 atimach64gx: Remove disable_crtc_internal. 2024-03-10 17:02:29 -07:00
joevt 2a290ff9c1 atimach64gx: Remove crtc_enable. 2024-03-10 17:02:18 -07:00
joevt bfd60155b6 atimach64gx: Fix DAC_CNTL for non-byte access.
If offset is 2, a size of 2 will also overwrite byte 3.
2024-03-10 17:00:47 -07:00
joevt df09a1e3bf atimach64gx: Register cleanup.
- Use register number instead of offset.
- Have one exit path from the read_reg and write_reg methods.
2024-03-10 16:59:11 -07:00
joevt 3cced5e29b atimach64gx: Use register field names. 2024-03-10 16:58:36 -07:00
joevt bd5ecf8cbb atimach64gx: Init CRTC_DISPLAY_DIS. 2024-03-10 16:54:48 -07:00
joevt 3e6f7ef541 atimach64gx: Init FIFO_CNT. 2024-03-10 16:54:31 -07:00
joevt ac5b434641 atimach64gx: Add verbose_pixel_format.
It is used to log the pixel format/depth.
2024-03-09 17:57:27 -07:00
joevt 00f917f52e atimach64gx: Add io_access_allowed.
This method is used by both pci_io_read and pci_io_write to determine if ISA type I/O access is allowed.
The SPARSE_IO_BASE I/O address is defined. This I/O range is not defined by an I/O BAR.
2024-03-09 17:54:05 -07:00
joevt a11770961e Add pci_find_device for pci type 0 requests. 2024-03-09 17:49:51 -07:00
joevt 2d8f2422b3 dbmda: Fix dma output res_count update.
Use this->res_count to track amount of data transferred.
2024-03-09 06:47:48 -07:00
joevt 0166059d1b dbdma: Add set_stat method.
A hardware device may have status flags connected to 8 status bits of the DBDMA engine.
2024-03-09 06:45:06 -07:00
joevt 50fcb45b88 awacs: Add dma input stub. 2024-03-09 06:20:24 -07:00
joevt 29d13aef09 dma: Add is_active method for input channels.
Since DBDMA contains an input and output channel, rename the existing is_active method to is_out_active.
2024-03-09 06:20:13 -07:00
joevt 31036b8dee grandcentral: Add sound in DMA. 2024-03-09 06:03:33 -07:00
joevt 6f231f3367 grandcentral: IOBus changes.
- Add IOBusDevice (nvram_addr_hi_dev) for NVRAM addr hi.
- Add IOBusDevice (nvram_dev) for NVRAM data.
- Make all IOBusDevices use the same code.
- Log error if 4 least significant bits of offset are not zero.
- Correctly byte swap the value before passing it to the IOBusDevice.
- When reading, duplicate the bytes in a word or dword like a real Power Mac does.
2024-03-09 06:02:23 -07:00
joevt 97f08f21b7 appleramdac: Add get_clut_entry_cb. 2024-03-08 21:02:41 -07:00
joevt 9a26016ed4 memctrlbase: Clear RAM to zero. 2024-03-08 20:58:41 -07:00
joevt f541613c6b mpc106: Fix RAM allocation.
Fix bank_end calculation (left shift 28 instead of 30).
Handle unorderred and discontinous ranges.
2024-03-08 20:58:04 -07:00
joevt 6931b2944b mpc106: Allow multiple of the same PCI device.
Grackle allows attaching different PCI devices. This change allows attach multiple of the same PCI device. To make the name unique in the machine map, the name of the PCI slot is appended to the device name.
2024-03-08 20:57:47 -07:00
joevt 0af9d0c972 chario: Cleanup. 2024-03-08 19:27:42 -07:00
joevt 5d9194d03d atimach64gx: Add config read/write stub. 2024-03-08 08:00:21 -07:00
Mihai Parparita 57e6e90002 Add support for the CUDA_RESTART_SYSTEM command
There are cases where when it's necessary (e.g. given uninitialized NVRAM,
the Beige G3 with the 10.2 install CD inserted will update the boot
device and restart to boot from it).

Restart support was done by wrapping the ppc_exec function in a loop and
checking for a restart power off reason. We also need to disconnect all
event listeners, since they will be recreated when the machine is
re-initialized.
2024-03-07 23:32:23 -08:00
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
Mihai Parparita 10af336cd1 Ensure that VIA timers are stopped when the object is destroyed. 2024-03-07 23:31:56 -08:00
Mihai Parparita f218a38294 Ensure that AMIC pseudo-VBL timer is stopped when the object is destroyed. 2024-03-07 23:31:44 -08:00
dingusdev 2f326a8199 Compile fix for CharIO in VS2022
For some reason, it wouldn't define the symbol when trying to compile with Clang.
2024-03-07 20:57:40 -07:00
joevt 04526012f9 grandcentral: Add Ethernet ROM. 2024-03-07 07:59:13 -07:00
joevt b5bb214920 ohare: Interrupt fixes.
Based on work done for grandcentral.
2024-03-07 07:58:54 -07:00
joevt 1e587b0848 chario: Move static variable to class. 2024-03-07 07:48:11 -07:00
joevt 97727e0d1e escc: Return NULL if nothing to read. 2024-03-07 07:47:41 -07:00
joevt 723eab59d6 escc: Include port name in log messages. 2024-03-07 07:40:30 -07:00
joevt 1421ccc81e escc: Add dma stub. 2024-03-07 07:30:06 -07: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 052a47734f macio: Add DMA interrupts. 2024-03-06 21:19:04 -07:00
joevt 54767bf97d More interrupts.
- Add all the interrupts including DMA.
- Modify the Interrupt to IRQ_ID translation so the interrupts belonging to the first set of 32 interrupts don't need to be shifted.
2024-03-06 19:17:16 -07:00
joevt e5bace03f7 Abort if register_dma_int.
Make register_dma_int cause Abort for heathrow and ohare like it does for amic.
2024-03-06 19:17:03 -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 777a02cbe9 pci: Use SIZE_ARG for logging arg size.
The SIZE_ARG macro defined in pcibase can be used outside pcibase with a small modification.
2024-03-04 21:16:46 -07:00
joevt 61b1940397 pci: Add command register mask.
The mask represents the list of bits that are allowed to change in the command register of PCI config space.
2024-03-04 21:16:38 -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 fb0396923f Fix dma STORE_QUAD and LOAD_QUAD.
When fetching DMA command, make sure to convert little endian fields to host endianness (i.e. don't use memcpy).
When fetching DMA command, return the host address of the DMA command for LOAD_QUAD. Maybe this address should be cached whenever this->cmdptr changes?
When fetching DMA command, return whether the DMA command is writable.
For LOAD_QUAD, pass the address of the DMA command to xfer_quad.
Always log unexpected DMA command values.
Write full 32-bit value for LOAD_QUAD.
Write reqCount to resCount.
2024-03-04 20:38:07 -07:00
joevt 6503a300cc Add PCI interrupt method.
A PCI device passes an interrupt to its host. The host will determine from the PCI device which interrupt to trigger.
2024-03-04 07:47:20 -07:00
joevt be80595834 Remove obsolete pci config type 1 methods.
pci_find_device is the method used to pass pci config type 1 methods to child PCI devices.
2024-03-04 07:47:08 -07:00
joevt 54bda0ea95 pci: Change pci_conv_rd_data unaligned.
pci_conv_rd_data can be used to handle unaligned or 64-bit accesses in mmio regions if it's modified to include the next 32-bit value.
For pci config accesses, grackle repeats the 32-bit value. bandit uses a seemingly random number for the next 32-bit value, but we'll make it work like grackle.
2024-03-03 20:06:13 -07:00
joevt 6d23e18c11 pci: Add PCI CardBus bridge.
PCCard is used by PowerBook G3 Wallstreet in Open Firmware 2.0.1.
CardBus is probed in New World Macs starting from at least Open Firmware 4.1.9f1 sometime after Open Firmware 3.1.1.

- Create PCIBase from common stuff in PCIDevice.
- Add PCIBridgeBase. These have a primary bus number, secondary bus number, and subordinate bus number which are used to determine if PCI type 1 config cycle should be passed.
- Change PCIBridge to use PCIBridgeBase instead of PCIDevice.
- Add PCICardBusBridge which uses PCIBridgeBase.
2024-03-03 16:00:55 -07:00
joevt 5f8e7fcb73 pci: Log invalid BAR values.
For example, Old World Macs have versions of Open Firmware that don't support 512 MB BARs correctly. They may attempt to set such a BAR to 0x90000000 (a 256 MB boundary) instead of 0xA0000000 (the next available 512 MB boundary).
2024-03-03 15:49:59 -07:00
joevt d426d0faeb Add settings when adding pci device. 2024-03-03 15:01:39 -07:00
joevt c64fab6ecb heathrow: Align read/write messages. 2024-03-03 12:03:06 -07:00
joevt 696bd6f316 mpc106: Remove pci_read and pci_write.
Because they are only called once and are small enough to include in read and write methods like they are in BanditHost.
2024-03-03 11:56:37 -07:00
joevt 7a3a661e2a platinum: Allow reading swatch registers. 2024-03-03 11:47:03 -07:00
joevt f0949d296d platinum: Don't abort. 2024-03-03 11:46:40 -07:00
joevt d2ebcb24b9 platinum: Use calculated fb_ptr for HW cursor. 2024-03-03 10:43:57 -07:00
joevt 644087b592 platinum: Fix fb_ptr calculation. 2024-03-03 10:43:40 -07:00
joevt be2f5273d1 platinum: Init bank_base.
Because the constructor doesn't do it.
2024-03-03 10:43:25 -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 569893861d heathrow: Don't set lat_timer.
It will be set by firmware.
2024-03-02 16:42:49 -07:00
joevt e81ac6f61e Add PERCH slot.
So you can connect a USB controller or whatever to it.
2024-03-02 16:02:19 -07:00
joevt 1e78512c95 Rename Curio and Mesh. 2024-03-02 11:12:45 -07:00
joevt 1b147151f0 videoctrl: Rename get_palette_color.
So it matches set_palette_color.
2024-03-02 08:59:02 -07:00
joevt ad8a26616f scsidevice: Add LUN field.
This may make it possible for multiple LUNs to be added to the same target ID.
For now just use LUN #0.
2024-03-02 08:52:09 -07:00
joevt 8f28823217 scsi: Initialize cur_phase. 2024-03-02 08:51:45 -07:00
joevt b509df78df Don't allow vert_blank to be 0. 2024-03-02 08:37:44 -07:00
joevt 5876cc7e17 bandit: Fix indent. 2024-03-02 08:09:42 -07:00
joevt 15e132c824 cmake: Add header files in CMakeLists.txt.
So they will appear in Xcode project.

mkdir -p dingusppc/build-xcode
cd       dingusppc/build-xcode
cmake -G Xcode ..
xcodebuild -configuration Release
2024-03-01 19:41:43 -07:00
joevt 2998796c2c pci: Fix log message for PCI rom exceptions.
It should log device name, not just "PCIDevice".
2024-03-01 08:02:01 -07:00
joevt 3978d0754d CD-ROM: Add max blocks check.
The code does not support more than 2^32 - 2 blocks because of this expression: static_cast<uint32_t>(this->size_blocks + 1)
2024-03-01 08:01:31 -07:00
joevt 655b9a17e1 psx: Set name of Psx memory controller.
For the logs.
2024-03-01 07:59:33 -07:00
joevt 84a694d4c2 nvram: Output nvram file name in error message.
So that you don't see identical messages "Could not restore NVRAM content from the given file."
Instead, one will mention nvram.bin and the other will mention pram.bin.
2024-03-01 07:59:19 -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
dingusdev 2e3e65f3e7 Moving vid_enable_seq
Visual C complains about this being in the wrong place
2024-02-21 07:07:18 -07:00
dingusdev fb9b6886fa Add stdio for Windows serial 2024-02-20 18:05:11 -07:00
joevt 8baf722343 Spelling. 2024-02-20 01:53:32 +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
joevt b0dc893a05 dma: Add name to dma classes.
For logging purposes, each DMA channel should have a name.
2024-02-19 15:30:20 +01:00
Maxim Poliakovski f5bb484226 sc53c94: fix interrupt reporting. 2024-02-19 15:30:20 +01:00
Maxim Poliakovski bc2714ab2a platinum: handle non-DWORD register accesses. 2024-02-15 15:35:17 +01:00
joevt 8a800062dd grandcentral: Add DMA channel enum. 2024-02-12 14:06:19 +01:00
Maxim Poliakovski 28e7a806b4 grandcentral: use MeshStub on machines without MESH. 2024-02-12 02:38:38 +01:00
Maxim Poliakovski a0e56aa4cf grandcentral: connect external SCSI HW. 2024-02-12 02:17:09 +01:00
Maxim Poliakovski b3e3b73159 grandcentral: connect MESH HW. 2024-02-12 02:17:09 +01:00
Maxim Poliakovski 046452fc56 mesh: various improvements. 2024-02-12 02:17:09 +01:00
Maxim Poliakovski e77b8785ff grandcentral: wire SWIM3 DMA interrupt. 2024-02-12 02:01:01 +01:00
Maxim Poliakovski 061fc5a24d hwinterrupt: remove deprecated SCSI0 & SCSI1. 2024-02-12 01:46:21 +01:00
Maxim Poliakovski cb8c2cb450 Wire CONTROL interrupt. 2024-02-12 01:46:21 +01:00
Maxim Poliakovski 98d661eda1 Wire PLATINUM interrupt. 2024-02-12 01:46:21 +01:00
Maxim Poliakovski 8ddbc9c427 Wire SCSI_MESH interrupt. 2024-02-12 01:46:21 +01:00
Maxim Poliakovski 5902cd5c28 Wire SCSI_CURIO interrupt. 2024-02-12 01:46:21 +01:00
Maxim Poliakovski ce2f6ddadd grandcentral: cleanup interrupt acknowledgement. 2024-02-12 01:46:21 +01:00
Maxim Poliakovski cdc5589bcf hwinterrupt: new interrupt definitions (joevt's work). 2024-02-12 01:42:59 +01:00
Maxim Poliakovski 8d30fea63b platinum: implement video emulation. 2024-02-11 22:59:43 +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 478bd31dc7 dbdma.h: add missing include. 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
dingusdev 79ee8543f5
Merge pull request #77 from mihaip/upstream-machineid
machinepdm: fix machine ID
2024-01-03 07:44:38 -07:00
Maxim Poliakovski 679e80a7c3 atahd: basic commands for disk I/O. 2023-12-30 16:23:00 +01:00
Maxim Poliakovski ebdefb5acd atabasedevice: transfer data in chunks. 2023-12-30 16:23:00 +01:00
Mihai Parparita e36e1cf282 machinepdm: fix machine ID
Handle 4 byte reads from the machine ID MMIO region. Also change the 6100
machine ID to match the one used by MAME.
2023-12-29 23:31:16 +00:00
Mihai Parparita ae0bb838bf Add basic support for the extended ADB mouse protocol.
We now respond to the switch to device handler ID 4 and the register 1
read (as described by https://developer.apple.com/library/archive/technotes/hw/hw_01.html#Extended).

We don't yet use the extra precision bits in the register 0.
2023-12-15 16:04:27 -08:00
Maxim Poliakovski fd92d86954 mesh: add MESH TNT variant. 2023-12-11 08:05:39 +01:00
Mihai Parparita ea9de4feaf Fix uninitialized value read in the ScsiHardDisk constructor
The call to the ScsiDevice superclass was using the name field (which
was not initialized yet) instead of the name constructor argument
2023-12-10 08:58:12 -08:00
Maxim Poliakovski 114737db41 scsicdrom: use CdromDrive as base class. 2023-12-10 00:19:44 +01:00
Maxim Poliakovski bf278af950 scsidevice: add get_more_data() method.
It is required for supporting large data transfers split
into multiple chunks.
2023-12-10 00:19:44 +01:00
Maxim Poliakovski e1b231882e cdromdrive: declare some methods virtual. 2023-12-10 00:19:44 +01:00
Maxim Poliakovski 705dd390e9 grandcentral: respect size when reading from IOBus devices. 2023-12-10 00:19:44 +01:00
Maxim Poliakovski 078aa79270 grandcentral: remove board register 1 stub. 2023-12-10 00:19:44 +01:00
Maxim Poliakovski a1ad0a3e07 machineid: implement BoardRegister class. 2023-12-10 00:19:44 +01:00
Maxim Poliakovski 858f699750 hammerhead: add configuration accessors. 2023-12-10 00:19:44 +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
Maxim Poliakovski 65a343ce5c Clean up names for SCSI devices. 2023-12-04 22:41:01 +01:00
Maxim Poliakovski 8841c3e7f9 scsihd: more commands. 2023-12-04 21:41:55 +01:00
Maxim Poliakovski 1e4579a076 Improve SCSI state machine. 2023-12-04 21:41:55 +01:00
Maxim Poliakovski be2721cd67 scsihd: cleanup, fixes and more commands. 2023-12-04 21:41:55 +01:00
Maxim Poliakovski 58281520d3 Implement writes to SCSI Pseudo-DMA register. 2023-12-04 21:41:55 +01:00
Maxim Poliakovski 58dacfa263 amic: improve VIA2_IFR and VIA2_IER emulation. 2023-12-04 21:41:55 +01:00
Maxim Poliakovski ae903082d8 amic: implement SCSI DRQ callback. 2023-12-04 21:41:55 +01:00
Mihai Parparita 1a859669eb Remove obsolete ADB_Bus class
Superseded by e9d91175c4 and subsequent
changes.
2023-12-03 23:15:25 -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
dingusdev 7eb2fd23c3 Fixing typos 2023-12-01 14:04:26 -07:00
Maxim Poliakovski 46961711e4 amic: stub for Ch-B serial xmit DMA. 2023-12-01 22:01:48 +01:00
dingusdev 07030378c8 Non-US keyboard support started
This is quite unfinished, but should get some of the major targets started.
2023-12-01 10:23:41 -07:00
Maxim Poliakovski 94872b3ebb Store SCSI bus object pointer during registration. 2023-11-24 19:48:07 +01:00
Maxim Poliakovski 9ae863d7c4 sc53c94: add is_dma_cmd member variable. 2023-11-24 19:48:07 +01:00
Maxim Poliakovski 457accf329 scsi: define READ_BUFFER and WRITE_BUFFER commands. 2023-11-24 19:48:07 +01:00
Mihai Parparita d08b486db0 Fix keyboard events occasionally being dropped
AdbKeyboard would copy the event into its own fields and set the
changed field, so that we could return the event when register was 0.
However, if a subsequent event was received before ADB polling, the
previous event would be overwritten and lost.

Fix this by maintaining a queue of events, so that we can return
everything since the last poll.
2023-11-24 10:08:16 -08:00
Maxim Poliakovski d37d83c5b6
Merge pull request #64 from mihaip/upstream-a-key
Fix "a" key always being as as a keyup
2023-11-24 11:35:18 +01:00
Mihai Parparita d45bba924d Fix "a" key always being as as a keyup
We were using an empty value on the second byte of the ADB keyboard
register 0, but that maps to the "a" key. This manifested itself
as the Key Caps DA never showing the "a" key as being down.

Switch to a non-existent key for the second byte.
2023-11-23 22:39:06 -08:00
Maxim Poliakovski 446b1b8d99 atahd: various improvements implementing basic commands. 2023-11-22 17:35:14 +01:00
Maxim Poliakovski 27ff05607c atadefs: bit definitions for the device/head register. 2023-11-22 17:35:14 +01:00
Maxim Poliakovski f2558cd379 atabasedevice: data transfers to host. 2023-11-22 17:35:14 +01:00
Maxim Poliakovski 4f76a4ead2 Move signal_data_ready() to atabasedevice. 2023-11-22 17:35:14 +01:00
Maxim Poliakovski be633d3872 soundserver_cubeb: remove soundio code. 2023-11-15 19:01:54 +01:00
Maxim Poliakovski 453930ff75 awacs: pausing sound output DMA channel. 2023-11-15 19:01:54 +01:00
Maxim Poliakovski b7341d0ab8 amic: implement sound out DMA IRQ. 2023-11-15 19:01:54 +01:00
Maxim Poliakovski c3f2c9e84c awac-pdm: improve read_stat(). 2023-11-15 19:01:54 +01:00
Mihai Parparita d4c9db7fcf Move disk image reading to be behind an ImgFile class
Allows different implementations for different platforms (the JS
build relies on browser APIs to stream disk images over the network).

Setting aside the JS build, this also reduces some code duplication.
2023-11-09 21:49:28 -08:00
Maxim Poliakovski 04956c19d5
Fix tiny tipo in adbdevice.h 2023-11-09 11:51:33 +01:00
Mihai Parparita 73272b28dd Implement the ADB keyboard
Besides generating KeyboardEvents in the SDL event handler and
returning the key state in the register 0 reads of the AdbKeyboard
device, we also needed to generalize the ADB bus polling a bit. We now
check all devices that have the service request bit set, instead of
hardcoding the mouse.

The SDL key event -> ADB raw key code mapping is based on BasiliskII/
SheepShaver's, but cleaned up a bit.
2023-10-11 23:43:20 -07:00
Mihai Parparita e011d86742 amic: don't reset cur_buf_pos if we've drained the DMA buffer
Otherwise if pull_data is called again, it will think that it still
has data available in the buffer (rem_len will be non-zero) and
random data at the buffer location will be returned.

This manifested itself as noise being played back in the JS
implementation of the SoundServer. The cubeb implementation was not
affected because it stops polling once it's told it has no more
data in the buffer. Both approaches are valid (the JS version pads
data with silence), and the DMA buffer should support both.
2023-11-06 22:33:00 -08: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
Mihai Parparita ea0eae467d Add assertion for valid SCSI IDs when updating control lines
Would have flagged the out-of-bounds write fixed by
dingusdev/dingusppc@36cb84eaaa sooner.
2023-10-19 07:49:23 -07:00
Maxim Poliakovski cfb1999caf soundserver: fix double freeing. 2023-10-18 16:18:54 +02:00
Maxim Poliakovski 36cb84eaaa mesh: fix write-out-of-bounds to BusStatus1. 2023-10-18 11:21:38 +02:00
Maxim Poliakovski aa5ef742f6 atirage: return meaningful value for GUI_STAT:GUI_FIFO. 2023-10-10 02:31:09 +02:00
Maxim Poliakovski 47d2e235a3 atirage: prevent big-endian accesses outside VRAM.
The simplest solution is to cut the aperture size by the amount
of video RAM installed. This way, accesses to the big-endian
aperture located above the installed VRAM will be catched and
reported by the MMU.
2023-10-03 14:18:12 +02:00
Maxim Poliakovski 576912dd55 displayid: prevent reading past EDID data. 2023-10-03 00:42:03 +02:00
Maxim Poliakovski 63b10175bf mesh: stubs for BusFree and EnaReselect commands. 2023-10-02 15:01:27 +02:00
Maxim Poliakovski a5fb124e69 pdmonboard: switch to mmu_map_dma_mem. 2023-10-02 15:00:12 +02:00
Maxim Poliakovski 72d45fb0de amic: switch DMA code to mmu_map_dma_mem. 2023-10-02 14:48:25 +02:00
Maxim Poliakovski f754f63f8f dbdma: fix LOAD_QUAD and STORE_QUAD to work with MMIO. 2023-10-02 14:46:52 +02:00
Maxim Poliakovski b408a02ef9 dbdma: implement LOAD_QUAD, STORE_QUAD and NOP. 2023-09-30 17:09:45 +02:00
Maxim Poliakovski 99f596ea19 cdromdrive: clean-up and extend READ_TOC command. 2023-09-25 23:17:57 +02:00
joevt 637844269f atapicdrom: Implement sector areas for Read CD.
The disk cache is unchanged. data_ptr continues to be only used for the user data sector area for each block. The other sector areas (synch, header, etc.) are filled in while reading.

has_data and get_data exist as a way to bypass data_ptr for parts of the transfer outside the user data sector area of each block. The default behaviour is defined in atabasedevice and is overridden by atapicdrom for the Read CD command. atapicdrom has a flag doing_sector_areas to control the behavior of the get_data method. When the flag is true, the sector_areas, current_block, and current_block_byte are used for selecting the correct data from one of the sector areas. The Read CD command initializes those variables. xfer_cnt remains the total number of bytes to be transferred and is now not necessarily the same as the number of disk image blocks read into the disk cache.

lba_to_msf is used to fill in the header. The values was not verified using a real CD.

Mac OS X just cares about the Mode in the header. For now, only the synch and header and user data areas are filled in. The other areas read as all zeros.
2023-09-25 12:22:17 +02:00
joevt ec5bf8e985 atapicdrom: Implement READ(6) and READ(10). 2023-09-25 12:22:17 +02:00
joevt 4bbc5ab0af CD-ROM: Fix interpretation of session number.
In Read TOC format 2, Mac OS X passes zero for Session Number. I believe Read TOC is supposed to return the first session starting from that number so it should return info for Session 1 as it would if Mac OS X passed 1 for the Session Number.
2023-09-25 12:22:17 +02:00
Maxim Poliakovski 6cfde29f00 heathrow: implement native interrupt mode. 2023-09-25 12:22:17 +02:00
Maxim Poliakovski c115a887d8 heathrow: fix processing of emulated interrupts. 2023-09-25 02:14:29 +02:00
Maxim Poliakovski 4cdb81e822 mesh: fix Arbitrate command for OS X. 2023-09-24 22:36:44 +02:00
Maxim Poliakovski f4f7edcc28 heathrow: add Ethernet DBDMA channels. 2023-09-22 00:11:19 +02:00
Maxim Poliakovski 5f48a3ab5b bigmac: support more registers. 2023-09-22 00:09:17 +02:00
Maxim Poliakovski 9db3076a48 dbdma: support INT_SELECT & WAIT_SELECT registers. 2023-09-20 00:45:39 +02:00
Maxim Poliakovski 6eb6a5892d bigmac: fix/improve PHY interface. 2023-09-20 00:44:08 +02:00
Maxim Poliakovski 0ebcd15a3d heathrow: connect DMA channel for MESH. 2023-09-19 14:19:15 +02:00
Maxim Poliakovski 04acf120d6 dbdma: support optinal CommandPtrHi register.
It's written with zero in OS X. This dummy implementation
is meant to reduce log warnings.
2023-09-19 14:16:13 +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
Maxim Poliakovski c690049246
Merge pull request #47 from joevt/ofnvram-branch
ofnvram changes
2023-08-22 08:24:57 +02:00
dingusdev a7ef177164 Preliminary DBDMA expansion 2023-08-13 16:38:15 -07:00
Maxim Poliakovski ee9c692115 mesh: implement more register reads. 2023-08-09 01:40:09 +02:00
Maxim Poliakovski cd9ccb66ed adbkeyboard: fix compiler warning. 2023-08-07 12:51:09 +02:00
joevt 439509b408 Fix New World NVRAM limits calculations.
It was possible to corrupt New World nvram using dingusppc setenv command.

- setenv must call get_config_vars to set data_length so that it can calculate free space.
- data_length represents the number of bytes taken by nvram variables including the terminating null for the value (name, '=', value, '\0'). Previously, it did not include the terminating null.
- The list of variables and values ends at a '\0' or at pos == 4096 bytes. Previously, data_length wouldn't get set if pos >= 4096.
- Allow setenv to create new nvram variables.
- Since data_length now represents the total number of used bytes, free_space now represents the actual free space, so use > free_space (instead of >= free_space) to determine insufficient space.
- While parsing nvram variable name, do not read beyond 4096 bytes.
- Use a different error message for each problem that can occur while parsing nvram variable name.
2023-08-04 20:11:59 -07:00
joevt 07f57a1e9b Remove extra semi-colons. 2023-08-04 20:11:59 -07:00
joevt 0c9ddaccf7 Fix dppc debugger printenv of multiline variables.
If a nvram variable has CRLF or CR, replace them with LF so each line appears on a new line in the console output.
Also, add indent to each line so that each line appears only in the value column and not in the name column.
2023-08-04 20:11:59 -07:00
dingusdev b23bb04dac Start fix for SCSI Hard Drive 2023-08-02 07:53:19 -07:00
dingusdev a7601c36bd Started work on keyboard input 2023-08-01 22:43:11 -07:00
Maxim Poliakovski 1a883ba73e viacuda: implement basic autopolling. 2023-08-02 00:07:17 +02:00
Maxim Poliakovski 2e50b364c4 adbmouse: emulate single button mouse. 2023-08-01 23:58:29 +02:00
Maxim Poliakovski 5b90a3e21d AMIC: rework and improve interrupts. 2023-08-01 17:42:52 +02:00
Maxim Poliakovski ca83f7e8ef pdmonboard: switch to new video controller API. 2023-08-01 17:41:02 +02:00
Maxim Poliakovski 337a9d6dd0 videoctrl: generate VBL interrupts. 2023-08-01 17:37:50 +02:00
Maxim Poliakovski 233ab778b6 adbmouse: support for movement data in R0. 2023-08-01 17:18:46 +02:00
Maxim Poliakovski 4872af1053 control: use new refresh task control. 2023-07-31 03:53:13 +02:00
Maxim Poliakovski 0ca1ebf724 atimach64gx: use new refresh task control. 2023-07-31 03:52:17 +02:00
Maxim Poliakovski 632479b1ba atirage: use new refresh task control. 2023-07-31 03:46:16 +02:00
Maxim Poliakovski 9b81891467 pdmonboard: use new refresh task control. 2023-07-31 03:36:17 +02:00
Maxim Poliakovski 7b2e1d90e6 Move refresh task control to VideoCtrlBase. 2023-07-31 03:34:02 +02:00
Maxim Poliakovski 6fa6b4d4dc Rework the EventManager to use CoreSignal. 2023-07-27 02:40:32 +02:00
Maxim Poliakovski c254749493 viacuda: connect to new AdbBus device. 2023-07-26 04:50:05 +02:00
Maxim Poliakovski fd9f8c90a5 Basic ADB mouse device emulation.
For now, it solely handles the basic ADB commands.
2023-07-26 04:40:20 +02:00
Maxim Poliakovski 0a0761c7e0 AdbDevice - the base class for ADB devices. 2023-07-26 04:35:07 +02:00
Maxim Poliakovski e9d91175c4 Add AdbBus class and device. 2023-07-26 04:29:08 +02:00
Maxim Poliakovski 0c0166b565 viacuda: fix packet response protocol.
Cuda needs to negate TREQ before sending the last byte of a
fixed-length response to avoid transfering an extraneous byte.
2023-07-26 04:22:08 +02:00
Maxim Poliakovski 7bb7ff9f0f heathrow: human-readable DBDMA channel names. 2023-07-24 15:20:52 +02:00
Maxim Poliakovski a9f73e7384 hwcomponent: fix size of the component type enum. 2023-07-23 16:32:00 +02:00
Maxim Poliakovski 14c7d18bdb Revert "Prevents crashing for Big Mac"
This reverts commit 5787d49e9b.
2023-07-23 16:28:31 +02:00
dingusdev 5787d49e9b Prevents crashing for Big Mac
For some reason, on Windows, whether it be VS2022 or Clang, it will crash when trying to write to a Big Mac register if you don't specify the exact name of the component within Heathrow.

This commit fixes that.
2023-07-22 15:15:33 -07:00
Maxim Poliakovski f7a1412ec7 atapibasedevice: fix task file initialization on reset. 2023-07-09 02:10:48 +02:00