--- generator/main/uip-svgalib.c 2020/03/04 04:46:43 1.1 +++ generator/main/uip-svgalib.c 2020/03/04 04:47:07 1.1.1.3 @@ -2,38 +2,42 @@ /* user interface for svgalib (15/16 bit) */ +/* this part of generator is 'slaved' from the ui-console.c file - only + platform specific code is contained here */ + #include #include #include "generator.h" #include #include +#include #include "uip.h" #include "ui.h" #include "ui-console.h" #include "vdp.h" +#include "cpu68k.h" #include "mem68k.h" #define BANKSIZE 640*480*2 /*** forward reference declarations ***/ -static int uip_getshifts(t_uipinfo *uipinfo); - /*** static variables ***/ -static uint8 uip_vga = 0; /* flag for whether in VGA more or not */ -static uint8 uip_displaybanknum = 0; /* view this one, write to other one */ -static t_uipinfo *uip_uipinfo = NULL; /* uipinfo */ -static uint8 uip_key[256]; /* keyboard state */ -static int uip_forceredshift = -1; /* if set, forces red shift position */ -static int uip_forcegreenshift = -1; /* if set, forces green shift position */ -static int uip_forceblueshift = -1; /* if set, forces blue shift position */ +static uint8 uip_vga = 0; /* flag for whether in VGA mode */ +static uint8 uip_key[256]; /* keyboard state */ +static uint8 uip_displaybanknum = 0; /* view this one, write to other one */ +static t_uipinfo *uip_uipinfo = NULL; /* uipinfo */ +static int uip_forceredshift = -1; /* if set, forces red shift pos */ +static int uip_forcegreenshift = -1; /* if set, forces green shift pos */ +static int uip_forceblueshift = -1; /* if set, forces blue shift pos */ /*** Code ***/ -static void uip_keyboardhandler(int scancode, int press) { +static void uip_keyboardhandler(int scancode, int press) +{ if (scancode >= 256) return; if (uip_key[scancode] == press) @@ -41,37 +45,37 @@ static void uip_keyboardhandler(int scan uip_key[scancode] = press; if (press) { if (scancode == SCANCODE_F1) { - ui_fkeys|= 1<<1; + ui_fkeys |= 1 << 1; } else if (scancode == SCANCODE_F2) { - ui_fkeys|= 1<<2; + ui_fkeys |= 1 << 2; } else if (scancode == SCANCODE_F3) { - ui_fkeys|= 1<<3; + ui_fkeys |= 1 << 3; } else if (scancode == SCANCODE_F4) { - ui_fkeys|= 1<<4; + ui_fkeys |= 1 << 4; } else if (scancode == SCANCODE_F5) { - ui_fkeys|= 1<<5; + ui_fkeys |= 1 << 5; } else if (scancode == SCANCODE_F6) { - ui_fkeys|= 1<<6; + ui_fkeys |= 1 << 6; } else if (scancode == SCANCODE_F7) { - ui_fkeys|= 1<<7; + ui_fkeys |= 1 << 7; } else if (scancode == SCANCODE_F8) { - ui_fkeys|= 1<<8; + ui_fkeys |= 1 << 8; } else if (scancode == SCANCODE_F9) { - ui_fkeys|= 1<<9; + ui_fkeys |= 1 << 9; } else if (scancode == SCANCODE_F10) { - ui_fkeys|= 1<<10; + ui_fkeys |= 1 << 10; } else if (scancode == SCANCODE_F11) { - ui_fkeys|= 1<<11; + ui_fkeys |= 1 << 11; } else if (scancode == SCANCODE_F12) { - ui_fkeys|= 1<<12; + ui_fkeys |= 1 << 12; } } } -int uip_init(t_uipinfo *uipinfo) +int uip_init(t_uipinfo * uipinfo) { uip_uipinfo = uipinfo; - printf("Initialising svgalib...\n"); + LOG_REQUEST(("Initialising svgalib...")); sleep(1); if (vga_init()) { LOG_CRITICAL(("Failed to initialise SVGALib")); @@ -80,10 +84,25 @@ int uip_init(t_uipinfo *uipinfo) return 0; } +int uip_initjoysticks(void) +{ + LOG_REQUEST(("Checking for svgalib joysticks...")); + if (joystick_init(0, JOY_CALIB_STDOUT) < 0) { + LOG_VERBOSE(("Joystick 0 not found")); + return 0; + } + LOG_NORMAL(("Joystick 0 initialised")); + if (joystick_init(1, JOY_CALIB_STDOUT) < 0) { + LOG_VERBOSE(("Joystick 1 not found")); + return 1; + } + LOG_NORMAL(("Joystick 1 initialised")); + return 2; +} + int uip_vgamode(void) { vga_modeinfo *modeinfo; - int cardmemory; uip_vga = 1; if (vga_setmode(G640x480x32K) == -1) { @@ -93,16 +112,16 @@ int uip_vgamode(void) LOG_CRITICAL(("640x480 @ 64K colours not supported by hardware")); uip_textmode(); LOG_CRITICAL(("Unable to change SVGA mode, mode not supported by " - "hardware?")); + "hardware?")); LOG_CRITICAL(("Check /etc/vga/libvga.config to ensure your card " - "is not commented out")); + "is not commented out")); return 1; } } - if (vga_claimvideomemory(2*BANKSIZE) == -1) { + if (vga_claimvideomemory(2 * BANKSIZE) == -1) { uip_textmode(); LOG_CRITICAL(("Unable to allocated video memory - 2MB video card " - "required.")); + "required.")); return 1; } if ((modeinfo = vga_getmodeinfo(vga_getcurrentmode())) == NULL) { @@ -111,10 +130,10 @@ int uip_vgamode(void) return 1; } LOG_VERBOSE(("Resolution %dx%d bytesperpixel %d linewidth %d", - modeinfo->width, modeinfo->height, modeinfo->bytesperpixel, - modeinfo->linewidth)); + modeinfo->width, modeinfo->height, modeinfo->bytesperpixel, + modeinfo->linewidth)); if (modeinfo->width != 640 || modeinfo->height != 480 || - modeinfo->bytesperpixel != 2 || modeinfo->linewidth*480 > BANKSIZE || + modeinfo->bytesperpixel != 2 || modeinfo->linewidth * 480 > BANKSIZE || (modeinfo->startaddressrange & BANKSIZE) != BANKSIZE) { uip_textmode(); LOG_CRITICAL(("Unexpected mode settings")); @@ -131,7 +150,7 @@ int uip_vgamode(void) LOG_CRITICAL(("Failed to find start of screen memory")); return 1; } - uip_uipinfo->screenmem1 = uip_uipinfo->screenmem0+BANKSIZE; + uip_uipinfo->screenmem1 = uip_uipinfo->screenmem0 + BANKSIZE; if (uip_forceredshift != -1 && uip_forcegreenshift != -1 && uip_forceblueshift != -1) { uip_uipinfo->redshift = uip_forceredshift; @@ -156,12 +175,12 @@ int uip_vgamode(void) return 1; } } - uip_displaybank(0); /* set current to 0th bank */ - uip_clearscreen(); /* clear bank */ - ui_setupscreen(); /* setup bank */ - uip_displaybank(-1); /* toggle bank */ - uip_clearscreen(); /* clear bank */ - ui_setupscreen(); /* setup bank */ + uip_displaybank(0); /* set current to 0th bank */ + uip_clearscreen(); /* clear bank */ + ui_setupscreen(); /* setup bank */ + uip_displaybank(-1); /* toggle bank */ + uip_clearscreen(); /* clear bank */ + ui_setupscreen(); /* setup bank */ if (keyboard_init() == -1) { uip_textmode(); LOG_CRITICAL(("Unable to initialise keyboard")); @@ -180,7 +199,8 @@ int uip_setcolourbits(int red, int green return 0; } -void uip_displaybank(int bank) { +void uip_displaybank(int bank) +{ if (bank == -1) bank = uip_displaybanknum ^ 1; vga_setdisplaystart(bank ? BANKSIZE : 0); @@ -189,29 +209,33 @@ void uip_displaybank(int bank) { uip_displaybanknum = bank; } -void uip_clearscreen(void) { +void uip_clearscreen(void) +{ memset(uip_uipinfo->screenmem_w, 0, BANKSIZE); } -void uip_clearmiddle(void) { +void uip_clearmiddle(void) +{ int i; for (i = 0; i < 240; i++) { - memset(uip_uipinfo->screenmem_w+(uip_uipinfo->linewidth)*(120+i)+ - 160*2, 0, 2*320); + memset(uip_uipinfo->screenmem_w + + (uip_uipinfo->linewidth) * (120 + i) + 160 * 2, 0, 2 * 320); } } /* uip_singlebank sets write address to the current display screen */ -void uip_singlebank(void) { +void uip_singlebank(void) +{ uip_uipinfo->screenmem_w = uip_displaybanknum ? uip_uipinfo->screenmem1 : uip_uipinfo->screenmem0; } /* uip_doublebank sets write address to hidden display screen */ -void uip_doublebank(void) { +void uip_doublebank(void) +{ uip_uipinfo->screenmem_w = uip_displaybanknum ? uip_uipinfo->screenmem0 : uip_uipinfo->screenmem1; } @@ -227,17 +251,61 @@ void uip_textmode(void) int uip_checkkeyboard(void) { + int x, y; + int pad; + int joystick; + + joystick_update(); keyboard_update(); - mem68k_cont1_a = uip_key[SCANCODE_A] ? 1 : 0; - mem68k_cont1_b = (uip_key[SCANCODE_B] || - uip_key[SCANCODE_S]) ? 1 : 0; - mem68k_cont1_c = (uip_key[SCANCODE_C] || - uip_key[SCANCODE_D]) ? 1 : 0; - mem68k_cont1_left = uip_key[SCANCODE_CURSORBLOCKLEFT] ? 1 : 0; - mem68k_cont1_up = uip_key[SCANCODE_CURSORBLOCKUP] ? 1 : 0; - mem68k_cont1_right = uip_key[SCANCODE_CURSORBLOCKRIGHT] ? 1 : 0; - mem68k_cont1_down = uip_key[SCANCODE_CURSORBLOCKDOWN] ? 1 : 0; - mem68k_cont1_start = uip_key[SCANCODE_ENTER] ? 1 : 0; + for (pad = 0; pad < 2; pad++) { + if ((joystick = ui_bindings[pad].joystick) >= 0) { + x = joystick_getaxis(joystick, 0); + y = joystick_getaxis(joystick, 1); + mem68k_cont[pad].a = joystick_getbutton(joystick, 0); + mem68k_cont[pad].b = joystick_getbutton(joystick, 1); + mem68k_cont[pad].c = joystick_getbutton(joystick, 2); + mem68k_cont[pad].start = joystick_getbutton(joystick, 3); + mem68k_cont[pad].left = x < -64 ? 1 : 0; + mem68k_cont[pad].right = x > 64 ? 1 : 0; + mem68k_cont[pad].up = y < -64 ? 1 : 0; + mem68k_cont[pad].down = y > 64 ? 1 : 0; + } else { + switch (ui_bindings[pad].keyboard) { + case 0: /* main keys */ + mem68k_cont[pad].a = uip_key[SCANCODE_A] ? 1 : 0; + mem68k_cont[pad].b = (uip_key[SCANCODE_B] || + uip_key[SCANCODE_S]) ? 1 : 0; + mem68k_cont[pad].c = (uip_key[SCANCODE_C] || + uip_key[SCANCODE_D]) ? 1 : 0; + mem68k_cont[pad].left = uip_key[SCANCODE_CURSORBLOCKLEFT] ? 1 : 0; + mem68k_cont[pad].up = uip_key[SCANCODE_CURSORBLOCKUP] ? 1 : 0; + mem68k_cont[pad].right = uip_key[SCANCODE_CURSORBLOCKRIGHT] ? 1 : 0; + mem68k_cont[pad].down = uip_key[SCANCODE_CURSORBLOCKDOWN] ? 1 : 0; + mem68k_cont[pad].start = uip_key[SCANCODE_ENTER] ? 1 : 0; + break; + case 1: /* left side of keyboard */ + mem68k_cont[pad].a = uip_key[SCANCODE_Z] ? 1 : 0; + mem68k_cont[pad].b = uip_key[SCANCODE_X] ? 1 : 0; + mem68k_cont[pad].c = uip_key[SCANCODE_C] ? 1 : 0; + mem68k_cont[pad].left = uip_key[SCANCODE_D] ? 1 : 0; + mem68k_cont[pad].up = uip_key[SCANCODE_R] ? 1 : 0; + mem68k_cont[pad].right = uip_key[SCANCODE_G] ? 1 : 0; + mem68k_cont[pad].down = uip_key[SCANCODE_F] ? 1 : 0; + mem68k_cont[pad].start = uip_key[SCANCODE_V] ? 1 : 0; + break; + case 2: /* right side of keyboard */ + mem68k_cont[pad].a = uip_key[SCANCODE_COMMA] ? 1 : 0; + mem68k_cont[pad].b = uip_key[SCANCODE_PERIOD] ? 1 : 0; + mem68k_cont[pad].c = uip_key[SCANCODE_SLASH] ? 1 : 0; + mem68k_cont[pad].left = uip_key[SCANCODE_CURSORBLOCKLEFT] ? 1 : 0; + mem68k_cont[pad].up = uip_key[SCANCODE_CURSORBLOCKUP] ? 1 : 0; + mem68k_cont[pad].right = uip_key[SCANCODE_CURSORBLOCKRIGHT] ? 1 : 0; + mem68k_cont[pad].down = uip_key[SCANCODE_CURSORBLOCKDOWN] ? 1 : 0; + mem68k_cont[pad].start = uip_key[SCANCODE_ENTER] ? 1 : 0; + break; + } + } + } return (uip_key[SCANCODE_ESCAPE] ? 1 : 0); }