diff --git a/platforms/amiga/pistorm-dev/pistorm-dev.c b/platforms/amiga/pistorm-dev/pistorm-dev.c index d722577..96418a1 100644 --- a/platforms/amiga/pistorm-dev/pistorm-dev.c +++ b/platforms/amiga/pistorm-dev/pistorm-dev.c @@ -641,6 +641,14 @@ uint32_t handle_pistorm_dev_read(uint32_t addr_, uint8_t type) { DEBUG("[PISTORM-DEV] %s Read from RTGSTATUS\n", op_type_names[type]); return (rtg_on << 1) | rtg_enabled; break; + case PI_CMD_RTG_SCALING: + DEBUG("[PISTORM-DEV] %s Read from RTG_SCALING\n", op_type_names[type]); + return rtg_get_scale_mode(); + break; + case PI_CMD_RTG_SCALE_FILTER: + DEBUG("[PISTORM-DEV] %s Read from RTG_SCALE_FILTER\n", op_type_names[type]); + return rtg_get_scale_filter(); + break; case PI_CMD_NETSTATUS: DEBUG("[PISTORM-DEV] %s Read from NETSTATUS\n", op_type_names[type]); return pinet_enabled; diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/CopyMems b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/CopyMems index 85f9b5e..c1b2dc9 100755 Binary files a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/CopyMems and b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/CopyMems differ diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple index c626888..fb2eb52 100755 Binary files a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple and b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple differ diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiStorm b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiStorm index 09f238d..847ffbe 100755 Binary files a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiStorm and b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiStorm differ diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/gui_interact.c b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/gui_interact.c index 4d3f098..f0023e7 100644 --- a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/gui_interact.c +++ b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/gui_interact.c @@ -19,7 +19,7 @@ extern unsigned int pistorm_base_addr; struct ReqToolsBase *ReqToolsBase; -#define VERSION "v0.3.7" +#define VERSION "v0.4.0" #define button1w 54 #define button1h 11 @@ -128,6 +128,44 @@ struct Border SharedBordersInvert[] = 0, 0, 2, 0, JAM2, 5, (SHORT *) &SharedBordersPairs10[0], NULL, }; +UBYTE RTG_filter_buf[64] = ""; + +struct IntuiText RTG_filter_text = +{ + 1, 0, JAM2, 8, 2, &font, (UBYTE *)RTG_filter_buf, NULL +}; + +#define GADRTGFILTERBUTTON 16 + +struct Gadget RTGFilterButton = +{ + NULL, 410, 19, button3w, button3h, + GADGHIMAGE, + RELVERIFY, + BOOLGADGET, + (APTR) &SharedBorders[2], (APTR) &SharedBordersInvert[2], + &RTG_filter_text, 0, NULL, GADRTGFILTERBUTTON, NULL +}; + +UBYTE RTG_scale_buf[64] = ""; + +struct IntuiText RTG_scale_text = +{ + 1, 0, JAM2, 8, 2, &font, (UBYTE *)RTG_scale_buf, NULL +}; + +#define GADRTGSCALEBUTTON 15 + +struct Gadget RTGScaleButton = +{ + &RTGFilterButton, 300, 19, button3w, button3h, + GADGHIMAGE, + RELVERIFY, + BOOLGADGET, + (APTR) &SharedBorders[2], (APTR) &SharedBordersInvert[2], + &RTG_scale_text, 0, NULL, GADRTGSCALEBUTTON, NULL +}; + struct IntuiText KickstartCommit_text = { 1, 0, JAM2, 2, 2, &font, (UBYTE *)"Commit", NULL @@ -137,7 +175,7 @@ struct IntuiText KickstartCommit_text = struct Gadget KickstartCommit = { - NULL, 433, 49, button1w, button1h, + &RTGScaleButton, 433, 49, button1w, button1h, GADGHIMAGE, RELVERIFY, BOOLGADGET, @@ -483,6 +521,53 @@ static void updateRTG(struct Window *window) WriteGadgetText("Enable RTG", RTG_buf, window, &RTGButton, RTGENABLE_TXT_SIZE); WriteGadgetText("RTG disabled", RTGStatus_buf, window, &RTGStatus, RTGSTATUS_TXT_SIZE); } + unsigned short filter = pi_get_rtg_scale_mode(); + switch (filter) + { + case PIGFX_SCALE_NONE: + WriteGadgetText("None", RTG_scale_buf, window, &RTGScaleButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_SCALE_INTEGER_MAX: + WriteGadgetText("Max integer", RTG_scale_buf, window, &RTGScaleButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_SCALE_FULL_ASPECT: + WriteGadgetText("Full aspect", RTG_scale_buf, window, &RTGScaleButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_SCALE_FULL_43: + WriteGadgetText("Full 4:3", RTG_scale_buf, window, &RTGScaleButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_SCALE_FULL_169: + WriteGadgetText("Full 16:9", RTG_scale_buf, window, &RTGScaleButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_SCALE_FULL: + WriteGadgetText("Full", RTG_scale_buf, window, &RTGScaleButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_SCALE_CUSTOM: + case PIGFX_SCALE_CUSTOM_RECT: + case PIGFX_SCALE_NUM: + default: + WriteGadgetText("Custom", RTG_scale_buf, window, &RTGScaleButton, RTGENABLE_TXT_SIZE); + break; + } + + unsigned short scale = pi_get_rtg_scale_filter(); + switch (scale) + { + case PIGFX_FILTER_POINT: + WriteGadgetText("Point", RTG_filter_buf, window, &RTGFilterButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_FILTER_SMOOTH: + WriteGadgetText("Smooth", RTG_filter_buf, window, &RTGFilterButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_FILTER_SHADER: + WriteGadgetText("Shader", RTG_filter_buf, window, &RTGFilterButton, RTGENABLE_TXT_SIZE); + break; + case PIGFX_FILTER_NUM: + default: + WriteGadgetText("Custom", RTG_filter_buf, window, &RTGFilterButton, RTGENABLE_TXT_SIZE); + break; + } + } static char *GetSavePath() @@ -775,6 +860,53 @@ int main() } break; } + case GADRTGSCALEBUTTON: + { + unsigned short scale = pi_get_rtg_scale_mode(); + switch (scale) + { + case PIGFX_SCALE_NONE: + pi_set_rtg_scale_mode(PIGFX_SCALE_INTEGER_MAX); + break; + case PIGFX_SCALE_INTEGER_MAX: + pi_set_rtg_scale_mode(PIGFX_SCALE_FULL_ASPECT); + break; + case PIGFX_SCALE_FULL_ASPECT: + pi_set_rtg_scale_mode(PIGFX_SCALE_FULL_43); + break; + case PIGFX_SCALE_FULL_43: + pi_set_rtg_scale_mode(PIGFX_SCALE_FULL_169); + break; + case PIGFX_SCALE_FULL_169: + pi_set_rtg_scale_mode(PIGFX_SCALE_FULL); + break; + case PIGFX_SCALE_FULL: + case PIGFX_SCALE_CUSTOM: + case PIGFX_SCALE_CUSTOM_RECT: + case PIGFX_SCALE_NUM: + default: + pi_set_rtg_scale_mode(PIGFX_SCALE_NONE); + break; + } + updateRTG(myWindow); + } + case GADRTGFILTERBUTTON: + { + unsigned short filter = pi_get_rtg_scale_filter(); + switch (filter) + { + case PIGFX_FILTER_POINT: + pi_set_rtg_scale_filter(PIGFX_FILTER_SMOOTH); + break; + case PIGFX_FILTER_SMOOTH: + case PIGFX_FILTER_SHADER: + case PIGFX_FILTER_NUM: + default: + pi_set_rtg_scale_filter(PIGFX_FILTER_POINT); + break; + } + updateRTG(myWindow); + } } } if (closewin) diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.c b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.c index ee9bf60..2cf814a 100644 --- a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.c +++ b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.c @@ -257,6 +257,18 @@ unsigned short pi_get_temperature(void) return short_val; } +unsigned short pi_get_rtg_scale_mode(void) +{ + READSHORT(PI_CMD_RTG_SCALING, short_val); + return short_val; +} + +unsigned short pi_get_rtg_scale_filter(void) +{ + READSHORT(PI_CMD_RTG_SCALE_FILTER, short_val); + return short_val; +} + // Generic feature status setting function. // Example: pi_set_feature_status(PI_CMD_RTGSTATUS, 1) to enable RTG // pi_set_feature_status(PI_CMD_PISCSI_CTRL, PISCSI_CTRL_ENABLE) to enable PiSCSI diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h index 22614b3..46dc467 100644 --- a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h +++ b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h @@ -13,6 +13,8 @@ void pi_enable_net(unsigned short val); void pi_enable_piscsi(unsigned short val); unsigned short pi_get_temperature(void); +unsigned short pi_get_rtg_scale_mode(void); +unsigned short pi_get_rtg_scale_filter(void); void pi_reset_amiga(unsigned short reset_code); unsigned short pi_handle_config(unsigned char cmd, char *str); diff --git a/platforms/amiga/pistorm.hdf b/platforms/amiga/pistorm.hdf index 9f2340d..d0f1006 100644 Binary files a/platforms/amiga/pistorm.hdf and b/platforms/amiga/pistorm.hdf differ diff --git a/platforms/amiga/rtg/rtg-output-raylib.c b/platforms/amiga/rtg/rtg-output-raylib.c index 4934111..3417c6c 100644 --- a/platforms/amiga/rtg/rtg-output-raylib.c +++ b/platforms/amiga/rtg/rtg-output-raylib.c @@ -527,6 +527,10 @@ void rtg_set_scale_mode(uint16_t _scale_mode) { } } +uint16_t rtg_get_scale_mode() { + return scale_mode; +} + void rtg_set_scale_rect(uint16_t _scale_mode, int16_t x1, int16_t y1, int16_t x2, int16_t y2) { scale_mode = _scale_mode; @@ -554,3 +558,7 @@ void rtg_set_scale_rect(uint16_t _scale_mode, int16_t x1, int16_t y1, int16_t x2 void rtg_set_scale_filter(uint16_t _filter_mode) { filter_mode = _filter_mode; } + +uint16_t rtg_get_scale_filter() { + return filter_mode; +} diff --git a/platforms/amiga/rtg/rtg.h b/platforms/amiga/rtg/rtg.h index 7bbdb88..8f08351 100644 --- a/platforms/amiga/rtg/rtg.h +++ b/platforms/amiga/rtg/rtg.h @@ -25,8 +25,10 @@ void rtg_set_mouse_cursor_image(uint8_t *src, uint8_t w, uint8_t h); void rtg_show_fps(uint8_t enable); void rtg_set_scale_mode(uint16_t scale_mode); +uint16_t rtg_get_scale_mode(); void rtg_set_scale_rect(uint16_t scale_mode, int16_t x1, int16_t y1, int16_t x2, int16_t y2); void rtg_set_scale_filter(uint16_t _filter_mode); +uint16_t rtg_get_scale_filter(); void rtg_palette_debug(uint8_t enable); int init_rtg_data(struct emulator_config *cfg);