Merge branch 'master' of https://github.com/86Box/86Box
This commit is contained in:
@@ -1112,7 +1112,7 @@ read_toc_session(cdrom_t *dev, unsigned char *b, int msf)
|
||||
b[len++] = 0;
|
||||
|
||||
/* NEC CDR-260 speaks BCD. */
|
||||
if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) { /*NEC*/
|
||||
if ((dev->type == CDROM_TYPE_NEC_260_100) || (dev->type == CDROM_TYPE_NEC_260_101)) { /*NEC*/
|
||||
m = ti.m;
|
||||
s = ti.s;
|
||||
f = ti.f;
|
||||
@@ -1374,6 +1374,7 @@ cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, in
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
uint32_t temp;
|
||||
|
||||
dev->ops->get_tracks(dev, &first_track, &last_track);
|
||||
|
||||
@@ -1413,11 +1414,32 @@ cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, in
|
||||
b[3] = ti.attr;
|
||||
cdrom_log("CD-ROM %i: Returned Toshiba/NEC disc information (type 2) at %02i:%02i.%02i, track=%d, m=%02i,s=%02i,f=%02i, tno=%02x.\n", dev->id, b[0], b[1], b[2], bcd2bin(track), m, s, f, ti.attr);
|
||||
break;
|
||||
case 3:
|
||||
b[0] = 0x00; /*TODO: correct it further, mark it as CD-Audio/CD-ROM disc for now*/
|
||||
b[1] = 0;
|
||||
b[2] = 0;
|
||||
b[3] = 0;
|
||||
case 3: /*Undocumented on NEC CD-ROM's, from information based on sr_vendor.c from Android's source code*/
|
||||
switch (dev->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105:
|
||||
dev->ops->get_track_info(dev, 1, 0, &ti);
|
||||
b[0x0e] = 0;
|
||||
temp = MSFtoLBA(ti.m, ti.s, ti.f) - 150;
|
||||
b[0x0f] = temp >> 24;
|
||||
b[0x10] = temp >> 16;
|
||||
b[0x11] = temp >> 8;
|
||||
b[0x12] = temp;
|
||||
break;
|
||||
|
||||
default:
|
||||
dev->ops->get_track_info(dev, 1, 0, &ti);
|
||||
b[0] = 0;
|
||||
temp = MSFtoLBA(ti.m, ti.s, ti.f) - 150;
|
||||
b[1] = temp >> 24;
|
||||
b[2] = temp >> 16;
|
||||
b[3] = temp >> 8;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@@ -86,7 +86,10 @@ enum
|
||||
CDROM_TYPE_CHINON_CDS431_H42,
|
||||
CDROM_TYPE_DEC_RRD45_0436,
|
||||
CDROM_TYPE_MATSHITA_501_10b,
|
||||
CDROM_TYPE_NEC_25_10a,
|
||||
CDROM_TYPE_NEC_38_103,
|
||||
CDROM_TYPE_NEC_75_103,
|
||||
CDROM_TYPE_NEC_77_106,
|
||||
CDROM_TYPE_NEC_211_100,
|
||||
CDROM_TYPE_NEC_464_105,
|
||||
CDROM_TYPE_SONY_CDU541_10i,
|
||||
@@ -121,47 +124,50 @@ static const struct
|
||||
const char *internal_name;
|
||||
const int bus_type;
|
||||
} cdrom_drive_types[] = {
|
||||
{ "86BOX", "CD-ROM", "1.00", "86BOX CD-ROM 1.00", "86BOX_CD-ROM_1.00", BUS_TYPE_BOTH }, /*1*/
|
||||
{ "AZT", "CDA46802I", "1.15", "AZT CDA46802I 1.15", "AZT_CDA46802I_1.15", BUS_TYPE_IDE }, /*2*/
|
||||
{ "BTC", "CD-ROM BCD36XH", "U1.0", "BTC CD-ROM BCD36XH U1.0", "BTC_CD-ROM_BCD36XH_U1.0", BUS_TYPE_IDE }, /*3*/
|
||||
{ "GOLDSTAR", "CRD-8160B", "3.14", "GOLDSTAR CRD-8160B 3.14", "GOLDSTAR_CRD-8160B_3.14", BUS_TYPE_IDE }, /*4*/
|
||||
{ "HITACHI", "CDR-8130", "0020", "HITACHI CDR-8130 0020", "HITACHI_CDR-8130_0020", BUS_TYPE_IDE }, /*5*/
|
||||
{ "KENWOOD", "CD-ROM UCR-421", "208E", "KENWOOD CD-ROM UCR-421 208E", "KENWOOD_CD-ROM_UCR-421_208E", BUS_TYPE_IDE }, /*6*/
|
||||
{ "MATSHITA", "CD-ROM CR-587", "7S13", "MATSHITA CD-ROM CR-587 7S13", "MATSHITA_CD-ROM_CR-587_7S13", BUS_TYPE_IDE }, /*7*/
|
||||
{ "MATSHITA", "CD-ROM CR-588", "LS15", "MATSHITA CD-ROM CR-588 LS15", "MATSHITA_CD-ROM_CR-588_LS15", BUS_TYPE_IDE }, /*8*/
|
||||
{ "MATSHITA", "CR-571", "1.0e", "MATSHITA CR-571 1.0e", "MATSHITA_CR-571_1.0e", BUS_TYPE_IDE }, /*9*/
|
||||
{ "MATSHITA", "CR-572", "1.0j", "MATSHITA CR-572 1.0j", "MATSHITA_CR-572_1.0j", BUS_TYPE_IDE }, /*10*/
|
||||
{ "MITSUMI", "CRMC-FX4820T", "D02A", "MITSUMI CRMC-FX4820T D02A", "MITSUMI_CRMC-FX4820T_D02A", BUS_TYPE_IDE }, /*11*/
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.00", "NEC CD-ROM DRIVE:260 1.00", "NEC_CD-ROM_DRIVE260_1.00", BUS_TYPE_IDE }, /*12*/
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.01", "NEC CD-ROM DRIVE:260 1.01", "NEC_CD-ROM_DRIVE260_1.01", BUS_TYPE_IDE }, /*13*/
|
||||
{ "NEC", "CD-ROM DRIVE:273", "4.20", "NEC CD-ROM DRIVE:273 4.20", "NEC_CD-ROM_DRIVE273_4.20", BUS_TYPE_IDE }, /*14*/
|
||||
{ "NEC", "CD-ROM DRIVE:280", "1.05", "NEC CD-ROM DRIVE:280 1.05", "NEC_CD-ROM_DRIVE280_1.05", BUS_TYPE_IDE }, /*15*/
|
||||
{ "NEC", "CD-ROM DRIVE:280", "3.08", "NEC CD-ROM DRIVE:280 3.08", "NEC_CD-ROM_DRIVE280_3.08", BUS_TYPE_IDE }, /*16*/
|
||||
{ "PHILIPS", "CD-ROM PCA403CD", "U31P", "PHILIPS CD-ROM PCA403CD U31P", "PHILIPS_CD-ROM_PCA403CD_U31P", BUS_TYPE_IDE }, /*17*/
|
||||
{ "SONY", "CD-ROM CDU76", "1.0i", "SONY CD-ROM CDU76 1.0i", "SONY_CD-ROM_CDU76_1.0i", BUS_TYPE_IDE }, /*18*/
|
||||
{ "SONY", "CD-ROM CDU311", "3.0h", "SONY CD-ROM CDU311 3.0h", "SONY_CD-ROM_CDU311_3.0h", BUS_TYPE_IDE }, /*19*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5302TA", "0305", "TOSHIBA CD-ROM XM-5302TA 0305", "TOSHIBA_CD-ROM_XM-5302TA_0305", BUS_TYPE_IDE }, /*20*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5702B", "TA70", "TOSHIBA CD-ROM XM-5702B TA70", "TOSHIBA_CD-ROM_XM-5702B_TA70", BUS_TYPE_IDE }, /*21*/
|
||||
{ "CHINON", "CD-ROM CDS-431", "H42 ", "CHINON CD-ROM CDS-431 H42", "CHINON_CD-ROM_CDS-431_H42", BUS_TYPE_SCSI }, /*22*/
|
||||
{ "DEC", "RRD45 (C) DEC", "0436", "DEC RRD45 0436", "DEC_RRD45_0436", BUS_TYPE_SCSI }, /*23*/
|
||||
{ "MATSHITA", "CD-ROM CR-501", "1.0b", "MATSHITA CD-ROM CR-501 1.0b", "MATSHITA_CD-ROM_CR-501_1.0b", BUS_TYPE_SCSI }, /*24*/
|
||||
{ "NEC", "CD-ROM DRIVE:38", "1.03", "NEC CD-ROM DRIVE:38 1.03", "NEC_CD-ROM_DRIVE38_1.03", BUS_TYPE_SCSI }, /*25*/
|
||||
{ "NEC", "CD-ROM DRIVE:211", "1.00", "NEC CD-ROM DRIVE:211 1.00", "NEC_CD-ROM_DRIVE211_1.00", BUS_TYPE_SCSI }, /*26*/
|
||||
{ "NEC", "CD-ROM DRIVE:464", "1.05", "NEC CD-ROM DRIVE:464 1.05", "NEC_CD-ROM_DRIVE464_1.05", BUS_TYPE_SCSI }, /*27*/
|
||||
{ "SONY", "CD-ROM CDU-541", "1.0i", "SONY CD-ROM CDU-541 1.0i", "SONY_CD-ROM_CDU-541_1.0i", BUS_TYPE_SCSI }, /*28*/
|
||||
{ "SONY", "CD-ROM CDU-561", "1.8k", "SONY CD-ROM CDU-561 1.8k", "SONY_CD-ROM_CDU-561_1.8k", BUS_TYPE_SCSI }, /*29*/
|
||||
{ "SONY", "CD-ROM CDU-76S", "1.00", "SONY CD-ROM CDU-76S 1.00", "SONY_CD-ROM_CDU-76S_1.00", BUS_TYPE_SCSI }, /*30*/
|
||||
{ "PHILIPS", "CDD2600", "1.07", "PHILIPS CDD2600 1.07", "PHILIPS_CDD2600_1.07", BUS_TYPE_SCSI }, /*31*/
|
||||
{ "PIONEER", "CD-ROM DRM-604X", "2403", "PIONEER CD-ROM DRM-604X 2403", "PIONEER_CD-ROM_DRM-604X_2403", BUS_TYPE_SCSI }, /*32*/
|
||||
{ "PLEXTOR", "CD-ROM PX-32TS", "1.03", "PLEXTOR CD-ROM PX-32TS 1.03", "PLEXTOR_CD-ROM_PX-32TS_1.03", BUS_TYPE_SCSI }, /*33*/
|
||||
{ "TEAC", "CD 50", "1.00", "TEAC CD 50 1.00", "TEAC_CD_50_1.00", BUS_TYPE_SCSI }, /*34*/
|
||||
{ "TEAC", "CD-ROM R55S", "1.0R", "TEAC CD-ROM R55S 1.0R", "TEAC_CD-ROM_R55S_1.0R", BUS_TYPE_SCSI }, /*35*/
|
||||
{ "TEXEL", "CD-ROM DM-XX24", "1.00", "TEXEL CD-ROM DM-XX24 1.00", "TEXEL_CD-ROM_DM-XX24_1.00", BUS_TYPE_SCSI }, /*36*/
|
||||
{ "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "TOSHIBA CD-ROM DRIVE:XM 3433", "TOSHIBA_CD-ROM_DRIVEXM_3433", BUS_TYPE_SCSI }, /*37*/
|
||||
{ "TOSHIBA", "CD-ROM XM-3201B", "3232", "TOSHIBA CD-ROM XM-3201B 3232", "TOSHIBA_CD-ROM_XM-3201B_3232", BUS_TYPE_SCSI }, /*38*/
|
||||
{ "TOSHIBA", "CD-ROM XM-3301TA", "0272", "TOSHIBA CD-ROM XM-3301TA 0272", "TOSHIBA_CD-ROM_XM-3301TA_0272", BUS_TYPE_SCSI }, /*39*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5701TA", "3136", "TOSHIBA CD-ROM XM-5701TA 3136", "TOSHIBA_CD-ROM_XM-5701TA_3136", BUS_TYPE_SCSI }, /*40*/
|
||||
{ "TOSHIBA", "DVD-ROM SD-M1401", "1008", "TOSHIBA DVD-ROM SD-M1401 1008", "TOSHIBA_DVD-ROM_SD-M1401_1008", BUS_TYPE_SCSI }, /*41*/
|
||||
{ "86BOX", "CD-ROM", "1.00", "86BOX CD-ROM 1.00", "86BOX_CD-ROM_1.00", BUS_TYPE_BOTH },
|
||||
{ "AZT", "CDA46802I", "1.15", "AZT CDA46802I 1.15", "AZT_CDA46802I_1.15", BUS_TYPE_IDE },
|
||||
{ "BTC", "CD-ROM BCD36XH", "U1.0", "BTC CD-ROM BCD36XH U1.0", "BTC_CD-ROM_BCD36XH_U1.0", BUS_TYPE_IDE },
|
||||
{ "GOLDSTAR", "CRD-8160B", "3.14", "GOLDSTAR CRD-8160B 3.14", "GOLDSTAR_CRD-8160B_3.14", BUS_TYPE_IDE },
|
||||
{ "HITACHI", "CDR-8130", "0020", "HITACHI CDR-8130 0020", "HITACHI_CDR-8130_0020", BUS_TYPE_IDE },
|
||||
{ "KENWOOD", "CD-ROM UCR-421", "208E", "KENWOOD CD-ROM UCR-421 208E", "KENWOOD_CD-ROM_UCR-421_208E", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CD-ROM CR-587", "7S13", "MATSHITA CD-ROM CR-587 7S13", "MATSHITA_CD-ROM_CR-587_7S13", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CD-ROM CR-588", "LS15", "MATSHITA CD-ROM CR-588 LS15", "MATSHITA_CD-ROM_CR-588_LS15", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CR-571", "1.0e", "MATSHITA CR-571 1.0e", "MATSHITA_CR-571_1.0e", BUS_TYPE_IDE },
|
||||
{ "MATSHITA", "CR-572", "1.0j", "MATSHITA CR-572 1.0j", "MATSHITA_CR-572_1.0j", BUS_TYPE_IDE },
|
||||
{ "MITSUMI", "CRMC-FX4820T", "D02A", "MITSUMI CRMC-FX4820T D02A", "MITSUMI_CRMC-FX4820T_D02A", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.00", "NEC CD-ROM DRIVE:260 1.00", "NEC_CD-ROM_DRIVE260_1.00", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.01", "NEC CD-ROM DRIVE:260 1.01", "NEC_CD-ROM_DRIVE260_1.01", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:273", "4.20", "NEC CD-ROM DRIVE:273 4.20", "NEC_CD-ROM_DRIVE273_4.20", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:280", "1.05", "NEC CD-ROM DRIVE:280 1.05", "NEC_CD-ROM_DRIVE280_1.05", BUS_TYPE_IDE },
|
||||
{ "NEC", "CD-ROM DRIVE:280", "3.08", "NEC CD-ROM DRIVE:280 3.08", "NEC_CD-ROM_DRIVE280_3.08", BUS_TYPE_IDE },
|
||||
{ "PHILIPS", "CD-ROM PCA403CD", "U31P", "PHILIPS CD-ROM PCA403CD U31P", "PHILIPS_CD-ROM_PCA403CD_U31P", BUS_TYPE_IDE },
|
||||
{ "SONY", "CD-ROM CDU76", "1.0i", "SONY CD-ROM CDU76 1.0i", "SONY_CD-ROM_CDU76_1.0i", BUS_TYPE_IDE },
|
||||
{ "SONY", "CD-ROM CDU311", "3.0h", "SONY CD-ROM CDU311 3.0h", "SONY_CD-ROM_CDU311_3.0h", BUS_TYPE_IDE },
|
||||
{ "TOSHIBA", "CD-ROM XM-5302TA", "0305", "TOSHIBA CD-ROM XM-5302TA 0305", "TOSHIBA_CD-ROM_XM-5302TA_0305", BUS_TYPE_IDE },
|
||||
{ "TOSHIBA", "CD-ROM XM-5702B", "TA70", "TOSHIBA CD-ROM XM-5702B TA70", "TOSHIBA_CD-ROM_XM-5702B_TA70", BUS_TYPE_IDE },
|
||||
{ "CHINON", "CD-ROM CDS-431", "H42 ", "CHINON CD-ROM CDS-431 H42", "CHINON_CD-ROM_CDS-431_H42", BUS_TYPE_SCSI },
|
||||
{ "DEC", "RRD45 (C) DEC", "0436", "DEC RRD45 0436", "DEC_RRD45_0436", BUS_TYPE_SCSI },
|
||||
{ "MATSHITA", "CD-ROM CR-501", "1.0b", "MATSHITA CD-ROM CR-501 1.0b", "MATSHITA_CD-ROM_CR-501_1.0b", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:25", "1.0a", "NEC CD-ROM DRIVE:25 1.0a", "NEC_CD-ROM_DRIVE25_1.0a", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:38", "1.00", "NEC CD-ROM DRIVE:38 1.00", "NEC_CD-ROM_DRIVE38_1.00", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:75", "1.03", "NEC CD-ROM DRIVE:75 1.03", "NEC_CD-ROM_DRIVE75_1.03", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:77", "1.06", "NEC CD-ROM DRIVE:77 1.06", "NEC_CD-ROM_DRIVE77_1.06", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:211", "1.00", "NEC CD-ROM DRIVE:211 1.00", "NEC_CD-ROM_DRIVE211_1.00", BUS_TYPE_SCSI },
|
||||
{ "NEC", "CD-ROM DRIVE:464", "1.05", "NEC CD-ROM DRIVE:464 1.05", "NEC_CD-ROM_DRIVE464_1.05", BUS_TYPE_SCSI },
|
||||
{ "SONY", "CD-ROM CDU-541", "1.0i", "SONY CD-ROM CDU-541 1.0i", "SONY_CD-ROM_CDU-541_1.0i", BUS_TYPE_SCSI },
|
||||
{ "SONY", "CD-ROM CDU-561", "1.8k", "SONY CD-ROM CDU-561 1.8k", "SONY_CD-ROM_CDU-561_1.8k", BUS_TYPE_SCSI },
|
||||
{ "SONY", "CD-ROM CDU-76S", "1.00", "SONY CD-ROM CDU-76S 1.00", "SONY_CD-ROM_CDU-76S_1.00", BUS_TYPE_SCSI },
|
||||
{ "PHILIPS", "CDD2600", "1.07", "PHILIPS CDD2600 1.07", "PHILIPS_CDD2600_1.07", BUS_TYPE_SCSI },
|
||||
{ "PIONEER", "CD-ROM DRM-604X", "2403", "PIONEER CD-ROM DRM-604X 2403", "PIONEER_CD-ROM_DRM-604X_2403", BUS_TYPE_SCSI },
|
||||
{ "PLEXTOR", "CD-ROM PX-32TS", "1.03", "PLEXTOR CD-ROM PX-32TS 1.03", "PLEXTOR_CD-ROM_PX-32TS_1.03", BUS_TYPE_SCSI },
|
||||
{ "TEAC", "CD 50", "1.00", "TEAC CD 50 1.00", "TEAC_CD_50_1.00", BUS_TYPE_SCSI },
|
||||
{ "TEAC", "CD-ROM R55S", "1.0R", "TEAC CD-ROM R55S 1.0R", "TEAC_CD-ROM_R55S_1.0R", BUS_TYPE_SCSI },
|
||||
{ "TEXEL", "CD-ROM DM-XX24", "1.00", "TEXEL CD-ROM DM-XX24 1.00", "TEXEL_CD-ROM_DM-XX24_1.00", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "TOSHIBA CD-ROM DRIVE:XM 3433", "TOSHIBA_CD-ROM_DRIVEXM_3433", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM XM-3201B", "3232", "TOSHIBA CD-ROM XM-3201B 3232", "TOSHIBA_CD-ROM_XM-3201B_3232", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM XM-3301TA", "0272", "TOSHIBA CD-ROM XM-3301TA 0272", "TOSHIBA_CD-ROM_XM-3301TA_0272", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "CD-ROM XM-5701TA", "3136", "TOSHIBA CD-ROM XM-5701TA 3136", "TOSHIBA_CD-ROM_XM-5701TA_3136", BUS_TYPE_SCSI },
|
||||
{ "TOSHIBA", "DVD-ROM SD-M1401", "1008", "TOSHIBA DVD-ROM SD-M1401 1008", "TOSHIBA_DVD-ROM_SD-M1401_1008", BUS_TYPE_SCSI },
|
||||
{ "", "", "", "", "", BUS_TYPE_NONE },
|
||||
};
|
||||
|
||||
|
@@ -149,6 +149,7 @@
|
||||
#define GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12_MATSUSHITA 0xe9 /* Matsushita Vendor Unique command */
|
||||
|
||||
/* Mode page codes for mode sense/set */
|
||||
#define GPMODE_UNIT_ATN_PAGE 0x00
|
||||
#define GPMODE_R_W_ERROR_PAGE 0x01
|
||||
#define GPMODE_DISCONNECT_PAGE 0x02 /* Disconnect/reconnect page */
|
||||
#define GPMODE_FORMAT_DEVICE_PAGE 0x03
|
||||
@@ -165,6 +166,7 @@
|
||||
#define GPMODE_ALL_PAGES 0x3f
|
||||
|
||||
/* Mode page codes for presence */
|
||||
#define GPMODEP_UNIT_ATN_PAGE 0x0000000000000001LL
|
||||
#define GPMODEP_R_W_ERROR_PAGE 0x0000000000000002LL
|
||||
#define GPMODEP_DISCONNECT_PAGE 0x0000000000000004LL
|
||||
#define GPMODEP_FORMAT_DEVICE_PAGE 0x0000000000000008LL
|
||||
|
@@ -186,7 +186,7 @@ uint8_t scsi_cdrom_command_flags[0x100] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0xF0-0xFF */
|
||||
};
|
||||
|
||||
static uint64_t scsi_cdrom_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE | GPMODEP_DISCONNECT_PAGE | GPMODEP_CDROM_PAGE | GPMODEP_CDROM_AUDIO_PAGE | (1ULL << 0x0fULL) | GPMODEP_CAPABILITIES_PAGE | GPMODEP_ALL_PAGES);
|
||||
static uint64_t scsi_cdrom_mode_sense_page_flags = (GPMODEP_UNIT_ATN_PAGE | GPMODEP_R_W_ERROR_PAGE | GPMODEP_DISCONNECT_PAGE | GPMODEP_FORMAT_DEVICE_PAGE | GPMODEP_CDROM_PAGE | GPMODEP_CDROM_AUDIO_PAGE | (1ULL << 0x0fULL) | GPMODEP_CAPABILITIES_PAGE | GPMODEP_ALL_PAGES);
|
||||
static uint64_t scsi_cdrom_mode_sense_page_flags_sony = (GPMODEP_R_W_ERROR_PAGE | GPMODEP_DISCONNECT_PAGE | GPMODEP_CDROM_PAGE_SONY | GPMODEP_CDROM_AUDIO_PAGE_SONY | (1ULL << 0x0fULL) | GPMODEP_CAPABILITIES_PAGE | GPMODEP_ALL_PAGES);
|
||||
static uint64_t scsi_cdrom_drive_status_page_flags = ((1ULL << 0x01ULL) | (1ULL << 0x02ULL) | (1ULL << 0x0fULL) | GPMODEP_ALL_PAGES);
|
||||
|
||||
@@ -283,10 +283,10 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default = {
|
||||
};
|
||||
|
||||
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default_scsi = {
|
||||
{{ 0, 0 },
|
||||
{{ GPMODE_UNIT_ATN_PAGE, 6, 0, 0, 0, 0, 0, 0 }, /*Guess-work*/
|
||||
{ GPMODE_R_W_ERROR_PAGE, 6, 0, 5, 0, 0, 0, 0 },
|
||||
{ GPMODE_DISCONNECT_PAGE, 0x0e, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0 },
|
||||
{ GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0 },
|
||||
{ 0, 0 },
|
||||
{ 0, 0 },
|
||||
@@ -375,10 +375,10 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_default_sony_scsi =
|
||||
};
|
||||
|
||||
static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_changeable = {
|
||||
{{ 0, 0 },
|
||||
{{ GPMODE_UNIT_ATN_PAGE, 6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, /*Guess-work*/
|
||||
{ GPMODE_R_W_ERROR_PAGE, 6, 0xFF, 0xFF, 0, 0, 0, 0 },
|
||||
{ GPMODE_DISCONNECT_PAGE, 0x0E, 0xFF, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 },
|
||||
{ 0, 0 },
|
||||
{ GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0 },
|
||||
{ 0, 0 },
|
||||
{ 0, 0 },
|
||||
@@ -1043,7 +1043,10 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
||||
}
|
||||
case 0xdd ... 0xde:
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105:
|
||||
bytes_per_second = 176.0 * 1024.0;
|
||||
@@ -1846,7 +1849,10 @@ begin:
|
||||
|
||||
case 0xDA: /*GPCMD_SPEED_ALT*/
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105: /*GPCMD_STILL_NEC*/
|
||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
@@ -1984,11 +1990,14 @@ begin:
|
||||
|
||||
case 0xDE:
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105: /*GPCMD_READ_DISC_INFORMATION_NEC*/
|
||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN);
|
||||
scsi_cdrom_buf_alloc(dev, 4);
|
||||
scsi_cdrom_buf_alloc(dev, 22); /*NEC manual claims 4 bytes, but the Android source code (namely sr_vendor.c) actually states otherwise.*/
|
||||
|
||||
if (!dev->drv->ops) {
|
||||
scsi_cdrom_not_ready(dev);
|
||||
@@ -1996,7 +2005,7 @@ begin:
|
||||
}
|
||||
|
||||
ret = cdrom_read_disc_info_toc(dev->drv, dev->buffer, cdb[2], cdb[1] & 3);
|
||||
len = 4;
|
||||
len = 22;
|
||||
if (!ret) {
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
scsi_cdrom_buf_free(dev);
|
||||
@@ -2119,7 +2128,10 @@ begin:
|
||||
|
||||
if ((cdb[0] == GPCMD_READ_10) || (cdb[0] == GPCMD_READ_12)) {
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105:
|
||||
case CDROM_TYPE_TOSHIBA_XM_3433:
|
||||
@@ -2561,7 +2573,10 @@ begin:
|
||||
|
||||
case 0xD8:
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105: /*GPCMD_AUDIO_TRACK_SEARCH_NEC*/
|
||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
@@ -2664,7 +2679,10 @@ begin:
|
||||
|
||||
case 0xD9:
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105: /*GPCMD_PLAY_AUDIO_NEC*/
|
||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
@@ -2904,7 +2922,10 @@ begin:
|
||||
|
||||
case 0xDD:
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105: /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_NEC*/
|
||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN);
|
||||
@@ -3071,7 +3092,10 @@ begin:
|
||||
|
||||
case 0xDC:
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105: /*GPCMD_CADDY_EJECT_NEC*/
|
||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
@@ -3170,17 +3194,23 @@ begin:
|
||||
case CDROM_TYPE_CHINON_CDS431_H42:
|
||||
case CDROM_TYPE_DEC_RRD45_0436:
|
||||
case CDROM_TYPE_MATSHITA_501_10b:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_SONY_CDU541_10i:
|
||||
case CDROM_TYPE_SONY_CDU76S_100:
|
||||
case CDROM_TYPE_TEAC_CD50_100:
|
||||
case CDROM_TYPE_TEAC_R55S_10R:
|
||||
case CDROM_TYPE_TEXEL_DMXX24_100:
|
||||
case CDROM_TYPE_TOSHIBA_XM3201B_3232:
|
||||
dev->buffer[2] = 0x01;
|
||||
dev->buffer[2] = 0x00;
|
||||
dev->buffer[3] = 0x01; /*SCSI-1 compliant*/
|
||||
break;
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105:
|
||||
dev->buffer[3] = 0x00; /*SCSI unknown version per NEC manuals*/
|
||||
break;
|
||||
default:
|
||||
dev->buffer[2] = 0x02; /*SCSI-2 compliant*/
|
||||
break;
|
||||
@@ -3203,6 +3233,13 @@ begin:
|
||||
case CDROM_TYPE_PIONEER_DRM604X_2403:
|
||||
dev->buffer[4] = 42;
|
||||
break;
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105:
|
||||
break;
|
||||
default:
|
||||
dev->buffer[6] = 0x01; /* 16-bit transfers supported */
|
||||
dev->buffer[7] = 0x20; /* Wide bus supported */
|
||||
@@ -3323,7 +3360,10 @@ atapi_out:
|
||||
|
||||
case 0xDB:
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105: /*GPCMD_SET_STOP_TIME_NEC*/
|
||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
@@ -3437,7 +3477,10 @@ atapi_out:
|
||||
dev->drv->seek_diff = ABS((int) (pos - dev->drv->seek_pos));
|
||||
if (cdb[0] == GPCMD_SEEK_10) {
|
||||
switch (dev->drv->type) {
|
||||
case CDROM_TYPE_NEC_25_10a:
|
||||
case CDROM_TYPE_NEC_38_103:
|
||||
case CDROM_TYPE_NEC_75_103:
|
||||
case CDROM_TYPE_NEC_77_106:
|
||||
case CDROM_TYPE_NEC_211_100:
|
||||
case CDROM_TYPE_NEC_464_105:
|
||||
case CDROM_TYPE_TOSHIBA_XM_3433:
|
||||
|
@@ -113,7 +113,7 @@ typedef struct tgui_t {
|
||||
|
||||
struct
|
||||
{
|
||||
int32_t src_x, src_y;
|
||||
int16_t src_x, src_y;
|
||||
int16_t src_x_clip, src_y_clip;
|
||||
int16_t dst_x, dst_y;
|
||||
int16_t dst_y_clip, dst_x_clip;
|
||||
@@ -129,9 +129,9 @@ typedef struct tgui_t {
|
||||
int offset;
|
||||
uint16_t ger22;
|
||||
|
||||
int32_t err;
|
||||
int16_t err;
|
||||
int16_t top, left, bottom, right;
|
||||
int x, y, dx, dy;
|
||||
int16_t x, y, cx, cy, dx, dy;
|
||||
uint32_t src, dst, src_old, dst_old;
|
||||
int pat_x, pat_y;
|
||||
int use_src;
|
||||
@@ -1699,49 +1699,47 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
break;
|
||||
|
||||
case TGUI_SCANLINE:
|
||||
{
|
||||
if (count == -1) {
|
||||
tgui->accel.src_old = tgui->accel.src_x + (tgui->accel.src_y * tgui->accel.pitch);
|
||||
tgui->accel.src = tgui->accel.src_old;
|
||||
if (count == -1) {
|
||||
tgui->accel.src_old = tgui->accel.src_x + (tgui->accel.src_y * tgui->accel.pitch);
|
||||
tgui->accel.src = tgui->accel.src_old;
|
||||
|
||||
tgui->accel.dst_old = tgui->accel.dst_x + (tgui->accel.dst_y * tgui->accel.pitch);
|
||||
tgui->accel.dst = tgui->accel.dst_old;
|
||||
tgui->accel.dst_old = tgui->accel.dst_x + (tgui->accel.dst_y * tgui->accel.pitch);
|
||||
tgui->accel.dst = tgui->accel.dst_old;
|
||||
|
||||
tgui->accel.pat_x = tgui->accel.dst_x;
|
||||
tgui->accel.pat_y = tgui->accel.dst_y;
|
||||
tgui->accel.pat_x = tgui->accel.dst_x;
|
||||
tgui->accel.pat_y = tgui->accel.dst_y;
|
||||
}
|
||||
|
||||
while (count--) {
|
||||
READ(tgui->accel.src, src_dat);
|
||||
READ(tgui->accel.dst, dst_dat);
|
||||
|
||||
pat_dat = pattern_data[((tgui->accel.pat_y & 7) * 8) + (tgui->accel.pat_x & 7)];
|
||||
|
||||
if (tgui->accel.bpp == 0)
|
||||
pat_dat &= 0xff;
|
||||
else if (tgui->accel.bpp == 1)
|
||||
pat_dat &= 0xffff;
|
||||
|
||||
if (!(tgui->accel.flags & TGUI_TRANSENA) || (src_dat != trans_col)) {
|
||||
MIX();
|
||||
|
||||
WRITE(tgui->accel.dst, out);
|
||||
}
|
||||
|
||||
while (count--) {
|
||||
READ(tgui->accel.src, src_dat);
|
||||
READ(tgui->accel.dst, dst_dat);
|
||||
tgui->accel.src += xdir;
|
||||
tgui->accel.dst += xdir;
|
||||
tgui->accel.pat_x += xdir;
|
||||
|
||||
pat_dat = pattern_data[((tgui->accel.pat_y & 7) * 8) + (tgui->accel.pat_x & 7)];
|
||||
tgui->accel.x++;
|
||||
if (tgui->accel.x > tgui->accel.size_x) {
|
||||
tgui->accel.x = 0;
|
||||
|
||||
if (tgui->accel.bpp == 0)
|
||||
pat_dat &= 0xff;
|
||||
else if (tgui->accel.bpp == 1)
|
||||
pat_dat &= 0xffff;
|
||||
|
||||
if (!(tgui->accel.flags & TGUI_TRANSENA) || (src_dat != trans_col)) {
|
||||
MIX();
|
||||
|
||||
WRITE(tgui->accel.dst, out);
|
||||
}
|
||||
|
||||
tgui->accel.src += xdir;
|
||||
tgui->accel.dst += xdir;
|
||||
tgui->accel.pat_x += xdir;
|
||||
|
||||
tgui->accel.x++;
|
||||
if (tgui->accel.x > tgui->accel.size_x) {
|
||||
tgui->accel.x = 0;
|
||||
|
||||
tgui->accel.pat_x = tgui->accel.dst_x;
|
||||
tgui->accel.src = tgui->accel.src_old = tgui->accel.src_old + (ydir * tgui->accel.pitch);
|
||||
tgui->accel.dst = tgui->accel.dst_old = tgui->accel.dst_old + (ydir * tgui->accel.pitch);
|
||||
tgui->accel.pat_y += ydir;
|
||||
return;
|
||||
}
|
||||
tgui->accel.pat_x = tgui->accel.dst_x;
|
||||
tgui->accel.src = tgui->accel.src_old = tgui->accel.src_old + (ydir * tgui->accel.pitch);
|
||||
tgui->accel.dst = tgui->accel.dst_old = tgui->accel.dst_old + (ydir * tgui->accel.pitch);
|
||||
tgui->accel.pat_y += ydir;
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1750,11 +1748,7 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
if (count == -1) {
|
||||
tgui->accel.dx = tgui->accel.dst_x & 0xfff;
|
||||
tgui->accel.dy = tgui->accel.dst_y & 0xfff;
|
||||
|
||||
if (tgui->accel.dst_x & 0x1000)
|
||||
tgui->accel.dx |= ~0xfff;
|
||||
if (tgui->accel.dst_y & 0x1000)
|
||||
tgui->accel.dy |= ~0xfff;
|
||||
tgui->accel.y = tgui->accel.size_y;
|
||||
|
||||
tgui->accel.left = tgui->accel.src_x_clip & 0xfff;
|
||||
tgui->accel.right = tgui->accel.dst_x_clip & 0xfff;
|
||||
@@ -1770,113 +1764,74 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
pclog("TGUI bres = %04x, err = %d, sizex = %d, sizey = %d, srcx = %d, srcy = %d.\n", tgui->accel.flags & 0x700, err, tgui->accel.size_x, tgui->accel.size_y, cx, tgui->accel.src_y);
|
||||
#endif
|
||||
while (count-- && (tgui->accel.y <= (tgui->accel.size_y))) {
|
||||
#if 0
|
||||
READ(tgui->accel.src_x + (tgui->accel.src_y * tgui->accel.pitch), src_dat);
|
||||
#endif
|
||||
|
||||
while (count--) {
|
||||
/*Note by TC1995: I suppose the x/y clipping max is always more than 0 in the TGUI 96xx, but the TGUI 9440 lacks clipping*/
|
||||
if ((tgui->type == TGUI_9440) || ((tgui->type >= TGUI_9660) && tgui->accel.dx >= tgui->accel.left && tgui->accel.dx <= tgui->accel.right && tgui->accel.dy >= tgui->accel.top && tgui->accel.dy <= tgui->accel.bottom)) {
|
||||
if ((tgui->type == TGUI_9440) || ((tgui->type >= TGUI_9660) && ((tgui->accel.dx & 0xfff) >= tgui->accel.left) && ((tgui->accel.dx & 0xfff) <= tgui->accel.right) && ((tgui->accel.dy & 0xfff) >= tgui->accel.top) && ((tgui->accel.dy & 0xfff) <= tgui->accel.bottom))) {
|
||||
READ(tgui->accel.dx + (tgui->accel.dy * tgui->accel.pitch), dst_dat);
|
||||
|
||||
pat_dat = tgui->accel.fg_col;
|
||||
|
||||
if (tgui->accel.bpp == 0)
|
||||
pat_dat &= 0xff;
|
||||
else if (tgui->accel.bpp == 1)
|
||||
pat_dat &= 0xffff;
|
||||
|
||||
MIX();
|
||||
|
||||
WRITE(tgui->accel.dx + (tgui->accel.dy * tgui->accel.pitch), out);
|
||||
}
|
||||
|
||||
if (tgui->accel.y == (tgui->accel.size_y & 0xfff)) {
|
||||
if (!tgui->accel.y)
|
||||
break;
|
||||
}
|
||||
|
||||
if (tgui->accel.err >= (tgui->accel.size_y & 0xfff)) {
|
||||
#if 0
|
||||
pclog("Bres DEC: destx = %d, desty = %d, err = %d, sizey = %d.\n", tgui->accel.src_x, tgui->accel.src_y, tgui->accel.err, tgui->accel.size_y);
|
||||
#endif
|
||||
if ((tgui->accel.src_x >= 2048) && (tgui->accel.src_x < 4096))
|
||||
tgui->accel.err -= (4096 - tgui->accel.src_x);
|
||||
else if ((tgui->accel.src_x >= 4096) && (tgui->accel.src_x < 32768))
|
||||
tgui->accel.err -= (32768 - tgui->accel.src_x);
|
||||
else
|
||||
tgui->accel.err += tgui->accel.src_x;
|
||||
if (tgui->accel.size_x >= 0) {
|
||||
tgui->accel.size_x += tgui->accel.src_x;
|
||||
/*Step minor axis*/
|
||||
switch (tgui->accel.flags & 0x700) {
|
||||
case 0x300:
|
||||
tgui->accel.dy--;
|
||||
break;
|
||||
case 0x100:
|
||||
tgui->accel.dy--;
|
||||
break;
|
||||
case 0x700:
|
||||
tgui->accel.dx--;
|
||||
break;
|
||||
case 0x500:
|
||||
tgui->accel.dx++;
|
||||
break;
|
||||
case 0x200:
|
||||
switch ((tgui->accel.flags >> 8) & 7) {
|
||||
case 0:
|
||||
case 2:
|
||||
tgui->accel.dy++;
|
||||
break;
|
||||
case 0x000:
|
||||
tgui->accel.dy++;
|
||||
case 1:
|
||||
case 3:
|
||||
tgui->accel.dy--;
|
||||
break;
|
||||
case 0x600:
|
||||
tgui->accel.dx--;
|
||||
break;
|
||||
case 0x400:
|
||||
case 4:
|
||||
case 5:
|
||||
tgui->accel.dx++;
|
||||
break;
|
||||
case 6:
|
||||
case 7:
|
||||
tgui->accel.dx--;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
#if 0
|
||||
pclog("Bres INC: desty = %d, destx = %d, err = %d, sizey = %d.\n", tgui->accel.src_y, tgui->accel.src_x, tgui->accel.err, tgui->accel.size_y);
|
||||
#endif
|
||||
tgui->accel.err += tgui->accel.src_y;
|
||||
}
|
||||
}
|
||||
} else
|
||||
tgui->accel.size_x += tgui->accel.src_y;
|
||||
|
||||
/*Step major axis*/
|
||||
switch (tgui->accel.flags & 0x700) {
|
||||
case 0x300:
|
||||
tgui->accel.dx--;
|
||||
break;
|
||||
case 0x100:
|
||||
switch ((tgui->accel.flags >> 8) & 7) {
|
||||
case 0:
|
||||
case 1:
|
||||
tgui->accel.dx++;
|
||||
break;
|
||||
case 0x700:
|
||||
tgui->accel.dy--;
|
||||
break;
|
||||
case 0x500:
|
||||
tgui->accel.dy--;
|
||||
break;
|
||||
case 0x200:
|
||||
case 2:
|
||||
case 3:
|
||||
tgui->accel.dx--;
|
||||
break;
|
||||
case 0x000:
|
||||
tgui->accel.dx++;
|
||||
break;
|
||||
case 0x600:
|
||||
case 4:
|
||||
case 6:
|
||||
tgui->accel.dy++;
|
||||
break;
|
||||
case 0x400:
|
||||
tgui->accel.dy++;
|
||||
case 5:
|
||||
case 7:
|
||||
tgui->accel.dy--;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
tgui->accel.y++;
|
||||
tgui->accel.y--;
|
||||
tgui->accel.dx &= 0xfff;
|
||||
tgui->accel.dy &= 0xfff;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1884,11 +1839,7 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
if (count == -1) {
|
||||
tgui->accel.dx = tgui->accel.dst_x & 0xfff;
|
||||
tgui->accel.dy = tgui->accel.dst_y & 0xfff;
|
||||
|
||||
if (tgui->accel.dst_x & 0x1000)
|
||||
tgui->accel.dx |= ~0xfff;
|
||||
if (tgui->accel.dst_y & 0x1000)
|
||||
tgui->accel.dy |= ~0xfff;
|
||||
tgui->accel.y = tgui->accel.sv_size_y & 0xfff;
|
||||
|
||||
tgui->accel.left = tgui->accel.src_x_clip & 0xfff;
|
||||
tgui->accel.right = tgui->accel.dst_x_clip & 0xfff;
|
||||
@@ -1904,28 +1855,19 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
}
|
||||
}
|
||||
|
||||
while (count-- && (tgui->accel.y <= (tgui->accel.sv_size_y & 0xfff))) {
|
||||
#if 0
|
||||
READ(tgui->accel.src_x + (tgui->accel.src_y * tgui->accel.pitch), src_dat);
|
||||
#endif
|
||||
|
||||
while (count--) {
|
||||
/*Note by TC1995: I suppose the x/y clipping max is always more than 0 in the TGUI 96xx, but the TGUI 9440 lacks clipping*/
|
||||
if ((tgui->type == TGUI_9440) || ((tgui->type >= TGUI_9660) && tgui->accel.dx >= tgui->accel.left && tgui->accel.dx <= tgui->accel.right && tgui->accel.dy >= tgui->accel.top && tgui->accel.dy <= tgui->accel.bottom)) {
|
||||
if ((tgui->type == TGUI_9440) || ((tgui->type >= TGUI_9660) && ((tgui->accel.dx & 0xfff) >= tgui->accel.left) && ((tgui->accel.dx & 0xfff) <= tgui->accel.right) && ((tgui->accel.dy & 0xfff) >= tgui->accel.top) && ((tgui->accel.dy & 0xfff) <= tgui->accel.bottom))) {
|
||||
READ(tgui->accel.dx + (tgui->accel.dy * tgui->accel.pitch), dst_dat);
|
||||
|
||||
pat_dat = tgui->accel.fg_col;
|
||||
|
||||
if (tgui->accel.bpp == 0)
|
||||
pat_dat &= 0xff;
|
||||
else if (tgui->accel.bpp == 1)
|
||||
pat_dat &= 0xffff;
|
||||
|
||||
MIX();
|
||||
|
||||
WRITE(tgui->accel.dx + (tgui->accel.dy * tgui->accel.pitch), out);
|
||||
}
|
||||
|
||||
if (tgui->accel.y == (tgui->accel.sv_size_y & 0xfff))
|
||||
if (!tgui->accel.y)
|
||||
break;
|
||||
|
||||
switch ((tgui->accel.sv_size_y >> 8) & 0xe0) {
|
||||
@@ -1962,7 +1904,9 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
break;
|
||||
}
|
||||
|
||||
tgui->accel.y++;
|
||||
tgui->accel.y--;
|
||||
tgui->accel.dx &= 0xfff;
|
||||
tgui->accel.dy &= 0xfff;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1973,11 +1917,7 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
if (count == -1) {
|
||||
tgui->accel.dx = tgui->accel.dst_x & 0xfff;
|
||||
tgui->accel.dy = tgui->accel.dst_y & 0xfff;
|
||||
|
||||
if (tgui->accel.dst_x & 0x1000)
|
||||
tgui->accel.dx |= ~0xfff;
|
||||
if (tgui->accel.dst_y & 0x1000)
|
||||
tgui->accel.dy |= ~0xfff;
|
||||
tgui->accel.y = tgui->accel.size_y;
|
||||
|
||||
tgui->accel.left = tgui->accel.src_x_clip & 0xfff;
|
||||
tgui->accel.right = tgui->accel.dst_x_clip & 0xfff;
|
||||
@@ -1993,28 +1933,19 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
}
|
||||
}
|
||||
|
||||
while (count-- && (tgui->accel.y <= (tgui->accel.size_y & 0xfff))) {
|
||||
#if 0
|
||||
READ(tgui->accel.src_x + (tgui->accel.src_y * tgui->accel.pitch), src_dat);
|
||||
#endif
|
||||
|
||||
while (count--) {
|
||||
/*Note by TC1995: I suppose the x/y clipping max is always more than 0 in the TGUI 96xx, but the TGUI 9440 lacks clipping*/
|
||||
if (tgui->accel.dx >= tgui->accel.left && tgui->accel.dx <= tgui->accel.right && tgui->accel.dy >= tgui->accel.top && tgui->accel.dy <= tgui->accel.bottom) {
|
||||
if ((tgui->type == TGUI_9440) || ((tgui->type >= TGUI_9660) && ((tgui->accel.dx & 0xfff) >= tgui->accel.left) && ((tgui->accel.dx & 0xfff) <= tgui->accel.right) && ((tgui->accel.dy & 0xfff) >= tgui->accel.top) && ((tgui->accel.dy & 0xfff) <= tgui->accel.bottom))) {
|
||||
READ(tgui->accel.dx + (tgui->accel.dy * tgui->accel.pitch), dst_dat);
|
||||
|
||||
pat_dat = tgui->accel.fg_col;
|
||||
|
||||
if (tgui->accel.bpp == 0)
|
||||
pat_dat &= 0xff;
|
||||
else if (tgui->accel.bpp == 1)
|
||||
pat_dat &= 0xffff;
|
||||
|
||||
MIX();
|
||||
|
||||
WRITE(tgui->accel.dx + (tgui->accel.dy * tgui->accel.pitch), out);
|
||||
}
|
||||
|
||||
if (tgui->accel.y == (tgui->accel.size_y & 0xfff))
|
||||
if (!tgui->accel.y)
|
||||
break;
|
||||
|
||||
switch ((tgui->accel.size_y >> 8) & 0xe0) {
|
||||
@@ -2051,7 +1982,9 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
break;
|
||||
}
|
||||
|
||||
tgui->accel.y++;
|
||||
tgui->accel.y--;
|
||||
tgui->accel.dx &= 0xfff;
|
||||
tgui->accel.dy &= 0xfff;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2182,36 +2115,37 @@ tgui_accel_out(uint16_t addr, uint8_t val, void *priv)
|
||||
tgui->accel.dst_y = (tgui->accel.dst_y & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
case 0x213c: /*Src X*/
|
||||
tgui->accel.src_x = (tgui->accel.src_x & 0xff00) | val;
|
||||
case 0x213c: /*Src X, Diagonal Step Constant*/
|
||||
tgui->accel.src_x = (tgui->accel.src_x & 0x3f00) | val;
|
||||
break;
|
||||
case 0x213d: /*Src X*/
|
||||
tgui->accel.src_x = (tgui->accel.src_x & 0xff) | (val << 8);
|
||||
case 0x213d: /*Src X, Diagonal Step Constant*/
|
||||
tgui->accel.src_x = (tgui->accel.src_x & 0xff) | ((val & 0x3f) << 8);
|
||||
if (val & 0x20)
|
||||
tgui->accel.src_x |= ~0x3fff;
|
||||
break;
|
||||
case 0x213e: /*Src Y*/
|
||||
tgui->accel.src_y = (tgui->accel.src_y & 0xff00) | val;
|
||||
case 0x213e: /*Src Y, Axial Step Constant*/
|
||||
tgui->accel.src_y = (tgui->accel.src_y & 0x3f00) | val;
|
||||
break;
|
||||
case 0x213f: /*Src Y*/
|
||||
tgui->accel.src_y = (tgui->accel.src_y & 0xff) | (val << 8);
|
||||
case 0x213f: /*Src Y, Axial Step Constant*/
|
||||
tgui->accel.src_y = (tgui->accel.src_y & 0xff) | ((val & 0x3f) << 8);
|
||||
if (val & 0x20)
|
||||
tgui->accel.src_y |= ~0x3fff;
|
||||
break;
|
||||
|
||||
case 0x2140: /*Size X*/
|
||||
tgui->accel.size_x = (tgui->accel.size_x & 0xff00) | val;
|
||||
case 0x2140: /*Size X, Line Error Term*/
|
||||
tgui->accel.size_x = (tgui->accel.size_x & 0x3f00) | val;
|
||||
break;
|
||||
case 0x2141: /*Size X*/
|
||||
tgui->accel.size_x = (tgui->accel.size_x & 0xff) | (val << 8);
|
||||
tgui->accel.err = tgui->accel.size_x;
|
||||
if ((tgui->accel.err >= 2048) && (tgui->accel.err < 4096))
|
||||
tgui->accel.err -= 4096;
|
||||
else if ((tgui->accel.err >= 4096) && (tgui->accel.err < 32768))
|
||||
tgui->accel.err -= 32768;
|
||||
case 0x2141: /*Size X, Line Error Term*/
|
||||
tgui->accel.size_x = (tgui->accel.size_x & 0xff) | ((val & 0x3f) << 8);
|
||||
if (val & 0x20)
|
||||
tgui->accel.size_x |= ~0x1fff;
|
||||
break;
|
||||
case 0x2142: /*Size Y*/
|
||||
tgui->accel.size_y = (tgui->accel.size_y & 0xff00) | val;
|
||||
case 0x2142: /*Size Y, Major Axis Pixel Count*/
|
||||
tgui->accel.size_y = (tgui->accel.size_y & 0xf00) | val;
|
||||
tgui->accel.sv_size_y = (tgui->accel.sv_size_y & 0xff00) | val;
|
||||
break;
|
||||
case 0x2143: /*Size Y*/
|
||||
tgui->accel.size_y = (tgui->accel.size_y & 0xff) | (val << 8);
|
||||
case 0x2143: /*Size Y, Major Axis Pixel Count*/
|
||||
tgui->accel.size_y = (tgui->accel.size_y & 0xff) | ((val & 0x0f) << 8);
|
||||
tgui->accel.sv_size_y = (tgui->accel.sv_size_y & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
@@ -2717,311 +2651,7 @@ tgui_accel_write(uint32_t addr, uint8_t val, void *priv)
|
||||
return;
|
||||
}
|
||||
|
||||
switch (addr & 0xff) {
|
||||
case 0x22:
|
||||
tgui_accel_out(0x2122, val, tgui);
|
||||
break;
|
||||
|
||||
case 0x23:
|
||||
tgui_accel_out(0x2123, val, tgui);
|
||||
break;
|
||||
|
||||
case 0x24: /*Command*/
|
||||
tgui->accel.command = val;
|
||||
tgui_accel_command(-1, 0, tgui);
|
||||
break;
|
||||
|
||||
case 0x27: /*ROP*/
|
||||
tgui->accel.rop = val;
|
||||
tgui->accel.use_src = (val & 0x33) ^ ((val >> 2) & 0x33);
|
||||
break;
|
||||
|
||||
case 0x28: /*Flags*/
|
||||
tgui->accel.flags = (tgui->accel.flags & 0xffffff00) | val;
|
||||
break;
|
||||
case 0x29: /*Flags*/
|
||||
tgui->accel.flags = (tgui->accel.flags & 0xffff00ff) | (val << 8);
|
||||
break;
|
||||
case 0x2a: /*Flags*/
|
||||
tgui->accel.flags = (tgui->accel.flags & 0xff00ffff) | (val << 16);
|
||||
break;
|
||||
case 0x2b: /*Flags*/
|
||||
tgui->accel.flags = (tgui->accel.flags & 0x0000ffff) | (val << 24);
|
||||
break;
|
||||
|
||||
case 0x2c: /*Foreground colour*/
|
||||
case 0x78:
|
||||
tgui->accel.fg_col = (tgui->accel.fg_col & 0xffffff00) | val;
|
||||
break;
|
||||
case 0x2d: /*Foreground colour*/
|
||||
case 0x79:
|
||||
tgui->accel.fg_col = (tgui->accel.fg_col & 0xffff00ff) | (val << 8);
|
||||
break;
|
||||
case 0x2e: /*Foreground colour*/
|
||||
case 0x7a:
|
||||
tgui->accel.fg_col = (tgui->accel.fg_col & 0xff00ffff) | (val << 16);
|
||||
break;
|
||||
case 0x2f: /*Foreground colour*/
|
||||
case 0x7b:
|
||||
tgui->accel.fg_col = (tgui->accel.fg_col & 0x00ffffff) | (val << 24);
|
||||
break;
|
||||
|
||||
case 0x30: /*Background colour*/
|
||||
case 0x7c:
|
||||
tgui->accel.bg_col = (tgui->accel.bg_col & 0xffffff00) | val;
|
||||
break;
|
||||
case 0x31: /*Background colour*/
|
||||
case 0x7d:
|
||||
tgui->accel.bg_col = (tgui->accel.bg_col & 0xffff00ff) | (val << 8);
|
||||
break;
|
||||
case 0x32: /*Background colour*/
|
||||
case 0x7e:
|
||||
tgui->accel.bg_col = (tgui->accel.bg_col & 0xff00ffff) | (val << 16);
|
||||
break;
|
||||
case 0x33: /*Background colour*/
|
||||
case 0x7f:
|
||||
tgui->accel.bg_col = (tgui->accel.bg_col & 0x00ffffff) | (val << 24);
|
||||
break;
|
||||
|
||||
case 0x34: /*Pattern location*/
|
||||
tgui->accel.patloc = (tgui->accel.patloc & 0xff00) | val;
|
||||
break;
|
||||
case 0x35: /*Pattern location*/
|
||||
tgui->accel.patloc = (tgui->accel.patloc & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
case 0x38: /*Dest X*/
|
||||
tgui->accel.dst_x = (tgui->accel.dst_x & 0xff00) | val;
|
||||
break;
|
||||
case 0x39: /*Dest X*/
|
||||
tgui->accel.dst_x = (tgui->accel.dst_x & 0xff) | (val << 8);
|
||||
break;
|
||||
case 0x3a: /*Dest Y*/
|
||||
tgui->accel.dst_y = (tgui->accel.dst_y & 0xff00) | val;
|
||||
break;
|
||||
case 0x3b: /*Dest Y*/
|
||||
tgui->accel.dst_y = (tgui->accel.dst_y & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
case 0x3c: /*Src X*/
|
||||
tgui->accel.src_x = (tgui->accel.src_x & 0xff00) | val;
|
||||
break;
|
||||
case 0x3d: /*Src X*/
|
||||
tgui->accel.src_x = (tgui->accel.src_x & 0xff) | (val << 8);
|
||||
break;
|
||||
case 0x3e: /*Src Y*/
|
||||
tgui->accel.src_y = (tgui->accel.src_y & 0xff00) | val;
|
||||
break;
|
||||
case 0x3f: /*Src Y*/
|
||||
tgui->accel.src_y = (tgui->accel.src_y & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
case 0x40: /*Size X*/
|
||||
tgui->accel.size_x = (tgui->accel.size_x & 0xff00) | val;
|
||||
break;
|
||||
case 0x41: /*Size X*/
|
||||
tgui->accel.size_x = (tgui->accel.size_x & 0xff) | (val << 8);
|
||||
tgui->accel.err = tgui->accel.size_x;
|
||||
if ((tgui->accel.err >= 2048) && (tgui->accel.err < 4096))
|
||||
tgui->accel.err -= 4096;
|
||||
else if ((tgui->accel.err >= 4096) && (tgui->accel.err < 32768))
|
||||
tgui->accel.err -= 32768;
|
||||
break;
|
||||
case 0x42: /*Size Y*/
|
||||
tgui->accel.size_y = (tgui->accel.size_y & 0xff00) | val;
|
||||
tgui->accel.sv_size_y = (tgui->accel.sv_size_y & 0xff00) | val;
|
||||
break;
|
||||
case 0x43: /*Size Y*/
|
||||
tgui->accel.size_y = (tgui->accel.size_y & 0xff) | (val << 8);
|
||||
tgui->accel.sv_size_y = (tgui->accel.sv_size_y & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
case 0x44: /*Style*/
|
||||
tgui->accel.style = (tgui->accel.style & 0xffffff00) | val;
|
||||
break;
|
||||
case 0x45: /*Style*/
|
||||
tgui->accel.style = (tgui->accel.style & 0xffff00ff) | (val << 8);
|
||||
break;
|
||||
case 0x46: /*Style*/
|
||||
tgui->accel.style = (tgui->accel.style & 0xff00ffff) | (val << 16);
|
||||
break;
|
||||
case 0x47: /*Style*/
|
||||
tgui->accel.style = (tgui->accel.style & 0x00ffffff) | (val << 24);
|
||||
break;
|
||||
|
||||
case 0x48: /*Clip Src X*/
|
||||
tgui->accel.src_x_clip = (tgui->accel.src_x_clip & 0xff00) | val;
|
||||
break;
|
||||
case 0x49: /*Clip Src X*/
|
||||
tgui->accel.src_x_clip = (tgui->accel.src_x_clip & 0xff) | (val << 8);
|
||||
break;
|
||||
case 0x4a: /*Clip Src Y*/
|
||||
tgui->accel.src_y_clip = (tgui->accel.src_y_clip & 0xff00) | val;
|
||||
break;
|
||||
case 0x4b: /*Clip Src Y*/
|
||||
tgui->accel.src_y_clip = (tgui->accel.src_y_clip & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
case 0x4c: /*Clip Dest X*/
|
||||
tgui->accel.dst_x_clip = (tgui->accel.dst_x_clip & 0xff00) | val;
|
||||
break;
|
||||
case 0x4d: /*Clip Dest X*/
|
||||
tgui->accel.dst_x_clip = (tgui->accel.dst_x_clip & 0xff) | (val << 8);
|
||||
break;
|
||||
case 0x4e: /*Clip Dest Y*/
|
||||
tgui->accel.dst_y_clip = (tgui->accel.dst_y_clip & 0xff00) | val;
|
||||
break;
|
||||
case 0x4f: /*Clip Dest Y*/
|
||||
tgui->accel.dst_y_clip = (tgui->accel.dst_y_clip & 0xff) | (val << 8);
|
||||
break;
|
||||
|
||||
case 0x68: /*CKey*/
|
||||
tgui->accel.ckey = (tgui->accel.ckey & 0xffffff00) | val;
|
||||
break;
|
||||
case 0x69: /*CKey*/
|
||||
tgui->accel.ckey = (tgui->accel.ckey & 0xffff00ff) | (val << 8);
|
||||
break;
|
||||
case 0x6a: /*CKey*/
|
||||
tgui->accel.ckey = (tgui->accel.ckey & 0xff00ffff) | (val << 16);
|
||||
break;
|
||||
case 0x6b: /*CKey*/
|
||||
tgui->accel.ckey = (tgui->accel.ckey & 0x00ffffff) | (val << 24);
|
||||
break;
|
||||
|
||||
case 0x80:
|
||||
case 0x81:
|
||||
case 0x82:
|
||||
case 0x83:
|
||||
case 0x84:
|
||||
case 0x85:
|
||||
case 0x86:
|
||||
case 0x87:
|
||||
case 0x88:
|
||||
case 0x89:
|
||||
case 0x8a:
|
||||
case 0x8b:
|
||||
case 0x8c:
|
||||
case 0x8d:
|
||||
case 0x8e:
|
||||
case 0x8f:
|
||||
case 0x90:
|
||||
case 0x91:
|
||||
case 0x92:
|
||||
case 0x93:
|
||||
case 0x94:
|
||||
case 0x95:
|
||||
case 0x96:
|
||||
case 0x97:
|
||||
case 0x98:
|
||||
case 0x99:
|
||||
case 0x9a:
|
||||
case 0x9b:
|
||||
case 0x9c:
|
||||
case 0x9d:
|
||||
case 0x9e:
|
||||
case 0x9f:
|
||||
case 0xa0:
|
||||
case 0xa1:
|
||||
case 0xa2:
|
||||
case 0xa3:
|
||||
case 0xa4:
|
||||
case 0xa5:
|
||||
case 0xa6:
|
||||
case 0xa7:
|
||||
case 0xa8:
|
||||
case 0xa9:
|
||||
case 0xaa:
|
||||
case 0xab:
|
||||
case 0xac:
|
||||
case 0xad:
|
||||
case 0xae:
|
||||
case 0xaf:
|
||||
case 0xb0:
|
||||
case 0xb1:
|
||||
case 0xb2:
|
||||
case 0xb3:
|
||||
case 0xb4:
|
||||
case 0xb5:
|
||||
case 0xb6:
|
||||
case 0xb7:
|
||||
case 0xb8:
|
||||
case 0xb9:
|
||||
case 0xba:
|
||||
case 0xbb:
|
||||
case 0xbc:
|
||||
case 0xbd:
|
||||
case 0xbe:
|
||||
case 0xbf:
|
||||
case 0xc0:
|
||||
case 0xc1:
|
||||
case 0xc2:
|
||||
case 0xc3:
|
||||
case 0xc4:
|
||||
case 0xc5:
|
||||
case 0xc6:
|
||||
case 0xc7:
|
||||
case 0xc8:
|
||||
case 0xc9:
|
||||
case 0xca:
|
||||
case 0xcb:
|
||||
case 0xcc:
|
||||
case 0xcd:
|
||||
case 0xce:
|
||||
case 0xcf:
|
||||
case 0xd0:
|
||||
case 0xd1:
|
||||
case 0xd2:
|
||||
case 0xd3:
|
||||
case 0xd4:
|
||||
case 0xd5:
|
||||
case 0xd6:
|
||||
case 0xd7:
|
||||
case 0xd8:
|
||||
case 0xd9:
|
||||
case 0xda:
|
||||
case 0xdb:
|
||||
case 0xdc:
|
||||
case 0xdd:
|
||||
case 0xde:
|
||||
case 0xdf:
|
||||
case 0xe0:
|
||||
case 0xe1:
|
||||
case 0xe2:
|
||||
case 0xe3:
|
||||
case 0xe4:
|
||||
case 0xe5:
|
||||
case 0xe6:
|
||||
case 0xe7:
|
||||
case 0xe8:
|
||||
case 0xe9:
|
||||
case 0xea:
|
||||
case 0xeb:
|
||||
case 0xec:
|
||||
case 0xed:
|
||||
case 0xee:
|
||||
case 0xef:
|
||||
case 0xf0:
|
||||
case 0xf1:
|
||||
case 0xf2:
|
||||
case 0xf3:
|
||||
case 0xf4:
|
||||
case 0xf5:
|
||||
case 0xf6:
|
||||
case 0xf7:
|
||||
case 0xf8:
|
||||
case 0xf9:
|
||||
case 0xfa:
|
||||
case 0xfb:
|
||||
case 0xfc:
|
||||
case 0xfd:
|
||||
case 0xfe:
|
||||
case 0xff:
|
||||
tgui->accel.pattern[addr & 0x7f] = val;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
tgui_accel_out((addr & 0xff) + 0x2100, val, tgui);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Reference in New Issue
Block a user