SIM_CARD: Update to support IBM360 codes.
This commit is contained in:
parent
3f27200f88
commit
4ecb739cf6
1 changed files with 42 additions and 33 deletions
41
sim_card.c
41
sim_card.c
|
@ -93,8 +93,8 @@ static const uint16 ascii_to_hol_026[128] = {
|
||||||
/*Control*/
|
/*Control*/
|
||||||
0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,
|
0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,
|
||||||
/* sp ! " # $ % & ' */
|
/* sp ! " # $ % & ' */
|
||||||
/* none Y28 78 T28 Y38 T48 X 48 */
|
/* none Y28 78 T28 Y38 T48 XT 48 */
|
||||||
0x000, 0x482, 0x006, 0x282, 0x442, 0x222, 0x800, 0x022, /* 40 - 77 */
|
0x000, 0x600, 0x006, 0x282, 0x442, 0x222, 0xA00, 0x022, /* 40 - 77 */
|
||||||
/* ( ) * + , - . / */
|
/* ( ) * + , - . / */
|
||||||
/* T48 X48 Y48 X T38 T X38 T1 */
|
/* T48 X48 Y48 X T38 T X38 T1 */
|
||||||
0x222, 0x822, 0x422, 0x800, 0x242, 0x400, 0x842, 0x300,
|
0x222, 0x822, 0x422, 0x800, 0x242, 0x400, 0x842, 0x300,
|
||||||
|
@ -147,7 +147,7 @@ static const uint16 ascii_to_hol_029[128] = {
|
||||||
/* T 1 2 3 4 5 6 7 */
|
/* T 1 2 3 4 5 6 7 */
|
||||||
0x200, 0x100, 0x080, 0x040, 0x020, 0x010, 0x008, 0x004,
|
0x200, 0x100, 0x080, 0x040, 0x020, 0x010, 0x008, 0x004,
|
||||||
/* 8 9 : ; < = > ? */
|
/* 8 9 : ; < = > ? */
|
||||||
/* 8 9 58 Y68 X68 T85 68 28 */
|
/* 8 9 58 Y68 X68 T85 T68 28 */
|
||||||
0x002, 0x001, 0x012, 0x40A, 0x80A, 0x212, 0x00A, 0x082,
|
0x002, 0x001, 0x012, 0x40A, 0x80A, 0x212, 0x00A, 0x082,
|
||||||
/* @ A B C D E F G */
|
/* @ A B C D E F G */
|
||||||
/* 48 X1 X2 X3 X4 X5 X6 X7 */
|
/* 48 X1 X2 X3 X4 X5 X6 X7 */
|
||||||
|
@ -159,8 +159,8 @@ static const uint16 ascii_to_hol_029[128] = {
|
||||||
/* Y7 Y8 Y9 T2 T3 T4 T5 T6 */
|
/* Y7 Y8 Y9 T2 T3 T4 T5 T6 */
|
||||||
0x404, 0x402, 0x401, 0x280, 0x240, 0x220, 0x210, 0x208,
|
0x404, 0x402, 0x401, 0x280, 0x240, 0x220, 0x210, 0x208,
|
||||||
/* X Y Z [ \ ] ^ _ */
|
/* X Y Z [ \ ] ^ _ */
|
||||||
/* T7 T8 T9 X48 X68 T68 T78 T58 */
|
/* T7 T8 T9 X48 X68 T68 T78 68 */
|
||||||
0x204, 0x202, 0x201, 0x822, 0x20A, 0x20A, 0x406, 0xf000,
|
0x204, 0x202, 0x201, 0x822, 0x20A, 0x20A, 0x406, 0x00A,
|
||||||
/* ` a b c d e f g */
|
/* ` a b c d e f g */
|
||||||
0xf000,0xB00, 0xA80, 0xA40, 0xA20, 0xA10, 0xA08, 0xA04, /* 140 - 177 */
|
0xf000,0xB00, 0xA80, 0xA40, 0xA20, 0xA10, 0xA08, 0xA04, /* 140 - 177 */
|
||||||
/* h i j k l m n o */
|
/* h i j k l m n o */
|
||||||
|
@ -232,7 +232,7 @@ const char sim_ascii_to_six[128] = {
|
||||||
/* 0 1 2 3 4 5 6 7 */
|
/* 0 1 2 3 4 5 6 7 */
|
||||||
012, 001, 002, 003, 004, 005, 006, 007,
|
012, 001, 002, 003, 004, 005, 006, 007,
|
||||||
/* 8 9 : ; < = > ? */
|
/* 8 9 : ; < = > ? */
|
||||||
010, 011, 015, 056, 076, 013, 016, 032,
|
010, 011, 015, 056, 076, 013, 016, 072,
|
||||||
/* @ A B C D E F G */
|
/* @ A B C D E F G */
|
||||||
014, 061, 062, 063, 064, 065, 066, 067, /* 100 - 137 */
|
014, 061, 062, 063, 064, 065, 066, 067, /* 100 - 137 */
|
||||||
/* H I J K L M N O */
|
/* H I J K L M N O */
|
||||||
|
@ -278,12 +278,12 @@ static uint16 ebcdic_to_hol[256] = {
|
||||||
0xC03, 0x502, 0x482, 0x442, 0x422, 0x412, 0x40A, 0x406,
|
0xC03, 0x502, 0x482, 0x442, 0x422, 0x412, 0x40A, 0x406,
|
||||||
/* E 01 E092 E093 E094 E095 E096 E097 0x6x */
|
/* E 01 E092 E093 E094 E095 E096 E097 0x6x */
|
||||||
0x400, 0x300, 0x681, 0x641, 0x621, 0x611, 0x609, 0x605,
|
0x400, 0x300, 0x681, 0x641, 0x621, 0x611, 0x609, 0x605,
|
||||||
/* E098 018 TE 038 048 058 068 078 */
|
/* E098 018 TE 038 048 68 068 078 */
|
||||||
0x603, 0x302, 0xC00, 0x242, 0x222, 0x212, 0x20A, 0x206,
|
0x603, 0x302, 0xC00, 0x242, 0x222, 0x00A, 0x20A, 0x206,
|
||||||
/* TE0 TE091 TE092 TE093 TE094 TE095 TE096 TE097 0x7x */
|
/* TE0 TE091 TE092 TE093 TE094 TE095 TE096 TE097 0x7x */
|
||||||
0xE00, 0xF01, 0xE81, 0xE41, 0xE21, 0xE11, 0xE09, 0xE05,
|
0xE00, 0xF01, 0xE81, 0xE41, 0xE21, 0xE11, 0xE09, 0xE05,
|
||||||
/* TE098 18 28 38 48 58 68 78 */
|
/* TE098 18 28 38 48 58 T58 78 */
|
||||||
0xE03, 0x102, 0x082, 0x042, 0x022, 0x012, 0x00A, 0x006,
|
0xE03, 0x102, 0x082, 0x042, 0x022, 0x012, 0x212, 0x006,
|
||||||
/* T018 T01 T02 T03 T04 T05 T06 T07 0x8x */
|
/* T018 T01 T02 T03 T04 T05 T06 T07 0x8x */
|
||||||
0xB02, 0xB00, 0xA80, 0xA40, 0xA20, 0xA10, 0xA08, 0xA04,
|
0xB02, 0xB00, 0xA80, 0xA40, 0xA20, 0xA10, 0xA08, 0xA04,
|
||||||
/* T08 T09 T028 T038 T048 T058 T068 T078 */
|
/* T08 T09 T028 T038 T048 T058 T068 T078 */
|
||||||
|
@ -581,6 +581,7 @@ sim_read_card(UNIT * uptr)
|
||||||
mode = uptr->flags & UNIT_CARD_MODE;
|
mode = uptr->flags & UNIT_CARD_MODE;
|
||||||
|
|
||||||
switch(mode) {
|
switch(mode) {
|
||||||
|
default:
|
||||||
case MODE_TEXT:
|
case MODE_TEXT:
|
||||||
sim_debug(DEBUG_CARD, dptr, "text: [");
|
sim_debug(DEBUG_CARD, dptr, "text: [");
|
||||||
/* Check for special codes */
|
/* Check for special codes */
|
||||||
|
@ -610,6 +611,7 @@ sim_read_card(UNIT * uptr)
|
||||||
}
|
}
|
||||||
if (cmpcard(&data->cbuff[0], "raw")) {
|
if (cmpcard(&data->cbuff[0], "raw")) {
|
||||||
int j = 0;
|
int j = 0;
|
||||||
|
sim_debug(DEBUG_CARD, dptr, "-octal-");
|
||||||
for(col = 0, i = 4; col < 80; i++) {
|
for(col = 0, i = 4; col < 80; i++) {
|
||||||
if (data->cbuff[i] >= '0' && data->cbuff[i] <= '7') {
|
if (data->cbuff[i] >= '0' && data->cbuff[i] <= '7') {
|
||||||
data->image[col] = (data->image[col] << 3) |
|
data->image[col] = (data->image[col] << 3) |
|
||||||
|
@ -628,12 +630,15 @@ sim_read_card(UNIT * uptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (cmpcard(&data->cbuff[0], "eor")) {
|
} else if (cmpcard(&data->cbuff[0], "eor")) {
|
||||||
|
sim_debug(DEBUG_CARD, dptr, "-eor-");
|
||||||
data->image[0] = 07; /* 7/8/9 punch */
|
data->image[0] = 07; /* 7/8/9 punch */
|
||||||
i = 4;
|
i = 4;
|
||||||
} else if (cmpcard(&data->cbuff[0], "eof")) {
|
} else if (cmpcard(&data->cbuff[0], "eof")) {
|
||||||
|
sim_debug(DEBUG_CARD, dptr, "-eof-");
|
||||||
data->image[0] = 015; /* 6/7/9 punch */
|
data->image[0] = 015; /* 6/7/9 punch */
|
||||||
i = 4;
|
i = 4;
|
||||||
} else if (cmpcard(&data->cbuff[0], "eoi")) {
|
} else if (cmpcard(&data->cbuff[0], "eoi")) {
|
||||||
|
sim_debug(DEBUG_CARD, dptr, "-eoi-");
|
||||||
data->image[0] = 017; /* 6/7/8/9 punch */
|
data->image[0] = 017; /* 6/7/8/9 punch */
|
||||||
i = 4;
|
i = 4;
|
||||||
} else {
|
} else {
|
||||||
|
@ -656,7 +661,7 @@ sim_read_card(UNIT * uptr)
|
||||||
if ((uptr->flags & MODE_LOWER) == 0)
|
if ((uptr->flags & MODE_LOWER) == 0)
|
||||||
c = toupper(c);
|
c = toupper(c);
|
||||||
switch(uptr->flags & MODE_CHAR) {
|
switch(uptr->flags & MODE_CHAR) {
|
||||||
case 0:
|
default:
|
||||||
case MODE_026:
|
case MODE_026:
|
||||||
temp = ascii_to_hol_026[(int)c];
|
temp = ascii_to_hol_026[(int)c];
|
||||||
break;
|
break;
|
||||||
|
@ -707,7 +712,9 @@ sim_read_card(UNIT * uptr)
|
||||||
case MODE_CBN:
|
case MODE_CBN:
|
||||||
sim_debug(DEBUG_CARD, dptr, "cbn\n");
|
sim_debug(DEBUG_CARD, dptr, "cbn\n");
|
||||||
/* Check if first character is a tape mark */
|
/* Check if first character is a tape mark */
|
||||||
if (size == 1 && ((uint8)data->cbuff[0]) == 0217) {
|
if (((uint8)data->cbuff[0]) == 0217 &&
|
||||||
|
(size == 1 || (((uint8)data->cbuff[1]) & 0200) != 0)) {
|
||||||
|
i = 1;
|
||||||
r = SCPE_EOF;
|
r = SCPE_EOF;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -733,7 +740,7 @@ sim_read_card(UNIT * uptr)
|
||||||
data->image[col++] |= c;
|
data->image[col++] |= c;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (col >= 80 && (data->cbuff[i] & 0x80) == 0) {
|
if (i < data->len && col >= 80 && (data->cbuff[i] & 0x80) == 0) {
|
||||||
r = SCPE_IOERR;
|
r = SCPE_IOERR;
|
||||||
}
|
}
|
||||||
/* Record over length of card, skip until next */
|
/* Record over length of card, skip until next */
|
||||||
|
@ -747,7 +754,9 @@ sim_read_card(UNIT * uptr)
|
||||||
case MODE_BCD:
|
case MODE_BCD:
|
||||||
sim_debug(DEBUG_CARD, dptr, "bcd [");
|
sim_debug(DEBUG_CARD, dptr, "bcd [");
|
||||||
/* Check if first character is a tape mark */
|
/* Check if first character is a tape mark */
|
||||||
if (size == 1 && ((uint8)data->cbuff[0]) == 0217) {
|
if (((uint8)data->cbuff[0]) == 0217 &&
|
||||||
|
(size == 1 || (((uint8)data->cbuff[1]) & 0200) != 0)) {
|
||||||
|
i = 1;
|
||||||
r = SCPE_EOF;
|
r = SCPE_EOF;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -767,7 +776,7 @@ sim_read_card(UNIT * uptr)
|
||||||
data->image[col++] = sim_bcd_to_hol(c);
|
data->image[col++] = sim_bcd_to_hol(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (col >= 80 && (data->cbuff[i] & 0x80) == 0) {
|
if (i < data->len && col >= 80 && (data->cbuff[i] & 0x80) == 0) {
|
||||||
r = SCPE_IOERR;
|
r = SCPE_IOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,7 +904,7 @@ sim_punch_card(UNIT * uptr, UNIT *stkuptr)
|
||||||
case MODE_OCTAL:
|
case MODE_OCTAL:
|
||||||
sim_debug(DEBUG_CARD, dptr, "octal: [");
|
sim_debug(DEBUG_CARD, dptr, "octal: [");
|
||||||
out[outp++] = '~';
|
out[outp++] = '~';
|
||||||
for (i = 80; i > 0; i--) {
|
for (i = 79; i >= 0; i--) {
|
||||||
if (data->image[i] != 0)
|
if (data->image[i] != 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue