72 lines
2.1 KiB
C
72 lines
2.1 KiB
C
// helloWindow.c - GS/OS app that opens a Window Manager window and
|
|
// draws a greeting in it. Runs under real GS/OS 6.0.2 in MAME.
|
|
//
|
|
// Phase 4.1 migration: NewWindowParm struct + manual zero+fill is now
|
|
// uiBuilderOpenWindow(). Event wait still uses raw GetNextEvent since
|
|
// this demo brings up only the minimal toolset chain (QD/EM/Sch/Wind)
|
|
// and TaskMaster needs Menu/Control/LE/Dialog. See orcaFrame.c for
|
|
// the startdesk-based version that uses iigsEventLoop.
|
|
|
|
#include "iigs/toolbox.h"
|
|
#include "iigs/uiBuilder.h"
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
static unsigned char gMsg[] = "\x14Hello from llvm816!";
|
|
|
|
|
|
static unsigned short blockAddr(void *handle) {
|
|
return (unsigned short)(unsigned long)*(void **)handle;
|
|
}
|
|
|
|
|
|
int main(void) {
|
|
unsigned short userId = MMStartUp();
|
|
|
|
void *dpH = NewHandle(0x900UL, userId, 0xC005, (void *)0);
|
|
unsigned short dpBase = blockAddr(dpH);
|
|
|
|
QDStartUp(dpBase, 0, 0xA0, userId);
|
|
EMStartUp((unsigned short)(dpBase + 0x100), 0x14, 0, 0,
|
|
0x14F, 0xC7, userId);
|
|
SchStartUp();
|
|
WindStartUp(userId);
|
|
|
|
// fVis+fMove only — fTitle requires Font Manager startup which
|
|
// this minimal demo skips. Title pointer is set anyway to
|
|
// exercise the R_W65816_BANK16 reloc path even though WM doesn't
|
|
// dereference it without fTitle.
|
|
UiWindowT spec = {
|
|
"llvm816!!",
|
|
UW_VIS | UW_MOVE,
|
|
{ 40, 30, 140, 290 }, // v1, h1, v2, h2
|
|
200, 320,
|
|
0,
|
|
(void *)0
|
|
};
|
|
void *win = uiBuilderOpenWindow(&spec);
|
|
if (win) {
|
|
SetPort(win);
|
|
ShowWindow(win);
|
|
MoveTo(20, 30);
|
|
DrawString(gMsg);
|
|
}
|
|
|
|
// Brief linger so screen-capture demos can grab a frame.
|
|
for (volatile unsigned long s = 0; s < 400000UL; s++) { }
|
|
|
|
// Wait for a keystroke. Uses raw GetNextEvent (no TaskMaster)
|
|
// because this demo does NOT start the Menu / Control / LE / Dialog
|
|
// chains required by iigsEventLoop's TaskMaster dispatch.
|
|
short evt[8];
|
|
while (1) {
|
|
if (GetNextEvent(0xFFFF, evt)) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
SysBeep();
|
|
*(volatile unsigned char *)0x70 = 0x99;
|
|
return 0;
|
|
}
|