But it could be if you're using a Backronym.Just so you know, and sorry about that, but: Mac is short for Macintosh. You do not write it in ALL CAPS. Thank you.
But it could be if you're using a Backronym.Just so you know, and sorry about that, but: Mac is short for Macintosh. You do not write it in ALL CAPS. Thank you.
Indeed there is no support for hardware cursor in 6/7/8. I also have the hardware cursor (albeit smaller at IIRC 32x32, a clone of what available in Brooktree DACs in SPARCstations, also with a limited number of colors) but it's only useful in X11.
At that size, if the sprite is full-color (same depth and CLUT as the display), then it could replace the SW implementation.
Maybe it could be used by hijacking some of the QD functions - but it's likely going to be quite difficult to implement.
"True" hardware cursor, in the style of Brooktree, don't rely on a blitter - do you use what I would describe as an "offscreen cursor" ? (stored in additional VRAM beyond the picture, perhaps alongside a copy of the area it replaces?)Even if the sprite is too shallow, you could limit it to black-and-white cursors — which is most of them. A more significant limitation would be the lack of XOR mode in the blitter, used in the I-beam cursor for example.
Interesting. Does your reimplementation only cover the original QD, or the entire Color QD ? It appears to be mostly C/C++ (with a tiny bit of 68k ASM), and it makes me wonder whether some of it could be used as the basis for acceleration code. I limited myself to low-level variant(s) of BitBlit because the upper level stuff was too complex to reimplement, but if you already have done the work it might bear revisiting...It's not out of the question. Here's a proof of concept for how it could work:
QuickDraw per se is untouched, and no traps are patched — only some jump vectors in low memory are rerouted. That is, in fact, how it works in my reimplementation of classic Mac OS — though just how closely it resembles the real thing is a topic I haven't investigated.![]()
metamage_1/68k/modules/ams-core/cursor-core.cc at master · jjuran/metamage_1
Metamage open source, general repository, iteration 1 - jjuran/metamage_1github.com
Indeed there is no support for hardware cursor in 6/7/8. I also have the hardware cursor (albeit smaller at IIRC 32x32, a clone of what available in Brooktree DACs in SPARCstations, also with a limited number of colors) but it's only useful in X11.
At that size, if the sprite is full-color (same depth and CLUT as the display), then it could replace the SW implementation. Maybe it could be used by hijacking some of the QD functions - but it's likely going to be quite difficult to implement.
What does that mean and what is it used for on Amigas, practically?


Thinking of screens, plural, on Mac, QD basically define a massive 64Ki*64Ki (16-bits signed values) area, and each display is just a small subset of that - obviously the primary screen is anchored at (0,0). They can have their own resolution and depth independently. It's very convenient for the user but as mentioned previously, makes it less than obvious what's going on if you don't go through QD.



"True" hardware cursor, in the style of Brooktree, don't rely on a blitter - do you use what I would describe as an "offscreen cursor" ? (stored in additional VRAM beyond the picture, perhaps alongside a copy of the area it replaces?)
In the Brooktree style, the cursor bitmap is stored directly in the DAC, alongside its coordinate. When the HW cursor is active, inside the cursor area the DAC simply ignores the data coming from the framebuffer and use those from the cursor bitmap instead wherever the cursor bitmap is not set to "transparent". The content of the framebuffer underneath the cursor is never changed at all. It's very efficient.
Interesting. Does your reimplementation only cover the original QD, or the entire Color QD ?
It appears to be mostly C/C++ (with a tiny bit of 68k ASM), and it makes me wonder whether some of it could be used as the basis for acceleration code.
I limited myself to low-level variant(s) of BitBlit because the upper level stuff was too complex to reimplement, but if you already have done the work it might bear revisiting...
There was support added, as documented in "Designing PCI Cards and Drivers for Power Macintosh Computers" (p513). However, I have never seen the relevant status/control codes called on any 68K version of the system I've tried :-(Most PCI PowerMacs have a hardware cursor, and I believe MacOS *does* use it. @joevt or @dingusdev would know more though.
Similar to X11; the Mac is much more simple - an application can change the screen settings if it really wants to (usually, games), but everything is displayed with whichever parameters are currently set on the display(s) they are on. So a large enough window could spread over three displays and have a part displayed in B&W, a part in 4-bits and a part in 8-bits... provided it was written entirely to Apple's specifications. Some applications (again - usually, games) would take shortcuts and don't play so nice on multi-display.On Amiga, any application can open its idividual screen with its own display parameters
Thanks for the explanations.(...) you can select the menu bar, click and hold the left mouse button, and then you can move the screen up- and downwards, like a curtain.
Which was a distinct benefits at the time; however, it probably didn't help with multiple displays where you have no choice but to copy data from one to the other. Multi-display/multi-screen was a big selling point of NuBus Macintoshes in some markets that were critical for Apple at the time. Workstations with X11 could do multiple displays, but before Xinerama (1998) they couldn't move from one to another easily. It was new when on a '87 Mac II you could just drag a window from one display to another, and even leave it in the middle with parts on both displays.And this all being accomplished WITHOUT moving a single pixel byte in memory.![]()
Yes, I think that one you can save some area in the FPGAI'm not suggesting that these features are applicable in MacOS, it's basically what this graphics card is going to get "for free", since the core has already been developed.
True. DingusPPC has hardware cursor emulation for ATI graphics cards, and built-in graphics controllers (Most PCI PowerMacs have a hardware cursor, and I believe MacOS *does* use it. @joevt or @dingusdev would know more though.
control and platinum) used by Power Macs. sixty6 doesn't use a hardware cursor. Other graphics controllers aren't implemented yet.Nice looking card - the internal HDMI port will be handy for in a few more years when all the CRTs are dead due to failed flybacks and worn out tubes and we're all fitting LCDs under curved perspex bowlsSo, first prototype assembled….
View attachment 95274
And it already makes a great addition to my soon to be completed SE/30 restpration project.
View attachment 95275
To be continued….
Nice looking card - the internal HDMI port will be handy for in a few more years when all the CRTs are dead due to failed flybacks and worn out tubes and we're all fitting LCDs under curved perspex bowls![]()
Out of curiosity - how are you finding it writing software targeting the Mac OS, as in user facing software? I'm an absolute amateur, but have always found it a weird mix of super easy and supper obstructive. Things like GUI tools to lay out a dialogue box, but then you have to faff about converting things into Pascal format to pass to toolbox functions and it is technically the application's responsibility to run the Mac GUI.
You're welcome, it's really fun doing something different besides my Amiga projects.This project is groovy! Hyped to see where this goes. Thank you for everything you do for the retro computing community![]()
![]()
So I guess it depends which "virtual" NuBUS Slot range I am using, right? This is, btw, something I can keep configuratble by using the FPGA flash.
Beware the pseudo-slot range is "associated" to an IRQ (loosely, but it's easier to do the SW when respecting it), as those you're supposed to use are connected to a VIA - you're not supposed to use /IPL[2..0] directly, only IRQ[3..1]. The unused one should be high-Z to play nice with other cards/functions. You can't skip the VBL interrupt it's required for the mouse to function. You can share the IRQ between multiple functions in the same range if you want to (example in my DeclRom).
If you don't have onboard switches, then yes you'll likely need a different bitstream for each of the three possibilities (hardwired)
, but that should be trivial as except for the IRQ pin and which address range to match, nothing else will change if the SW is correctly written. On NuBus you can do this dynamically as NuBus slots have a few pins that are either floating or pulled down as "geographical address" so the hardware/ROM can easily identify where they're supposed to be, rather than hardwiring anything.
Does a video declaration ROM need a dedicated IRQ at all?
Even easier, the FPGA has a specific 32K area where I can store code and data. So when I have a cold or warmstart, a state-machine fetches the parameters and updates the registers. Works very well on my sound card to store mixer settings.
Where would you recommend to put the 32MB framebuffer? I was considering to use a location outside of the NuBUS range (e.g. 0xfc000000 - 0xfdffffff), only putting the declaration rom and hardware registers in the NuBUS area.
Since I can snoop pretty much every memory access from the 68030 on the FPGA, that might be another method to decide where I map my ressources.