Previous 15994 Revisions Next

r15041 Friday 27th April, 2012 at 02:10:23 UTC by R. Belmont
Apple II: Misc cleanup/modernization (nw)
[src/mess/includes]apple2.h apple2gs.h
[src/mess/machine]a2swyft.c apple2.c apple2gs.c

src/mess/machine/apple2gs.c
r15040r15041
476476
477477
478478
479static UINT8 adb_read_datareg(apple2gs_state *state)
479UINT8 apple2gs_state::adb_read_datareg()
480480{
481481   UINT8 result;
482482
483   switch(state->m_adb_state)
483   switch(m_adb_state)
484484   {
485485      case ADBSTATE_INRESPONSE:
486         result = state->m_adb_response_bytes[state->m_adb_response_pos++];
487         if (state->m_adb_response_pos >= state->m_adb_response_length)
486         result = m_adb_response_bytes[m_adb_response_pos++];
487         if (m_adb_response_pos >= m_adb_response_length)
488488         {
489            state->m_adb_state = ADBSTATE_IDLE;
490            state->m_adb_latent_result = result;
491            state->m_adb_kmstatus &= ~0x20;
489            m_adb_state = ADBSTATE_IDLE;
490            m_adb_latent_result = result;
491            m_adb_kmstatus &= ~0x20;
492492         }
493493         break;
494494
r15040r15041
624624
625625// real rom 3 h/w reads 0x90 when idle, 0x98 when key pressed
626626// current MESS reads back 0xb0 when idle
627static UINT8 adb_read_kmstatus(apple2gs_state *state)
627UINT8 apple2gs_state::adb_read_kmstatus()
628628{
629   return state->m_adb_kmstatus;
629   return m_adb_kmstatus;
630630}
631631
632632
r15040r15041
910910   return result;
911911}
912912
913static READ8_HANDLER( apple2gs_c0xx_r )
913READ8_MEMBER( apple2gs_state::apple2gs_c0xx_r )
914914{
915   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
916915   UINT8 result;
917916   scc8530_t *scc;
918917
919   if(space->debugger_access())
918   if(space.debugger_access())
920919    {
921920        return 0;
922921    }
r15040r15041
926925   switch(offset)
927926   {
928927      case 0x19:   /* C019 - RDVBLBAR */
929         result = (space->machine().primary_screen->vpos() >= (192+BORDER_TOP)) ? 0x80 : 0x00;
928         result = (space.machine().primary_screen->vpos() >= (192+BORDER_TOP)) ? 0x80 : 0x00;
930929         break;
931930
932931      case 0x22:   /* C022 - TBCOLOR */
933         result = (state->m_fgcolor << 4) | state->m_bgcolor;
932         result = (m_fgcolor << 4) | m_bgcolor;
934933         break;
935934
936935      case 0x23:   /* C023 - VGCINT */
937         result = state->m_vgcint;
936         result = m_vgcint;
938937         break;
939938
940939      case 0x24:   /* C024 - MOUSEDATA */
941         result = adb_read_mousedata(space->machine());
940         result = adb_read_mousedata(space.machine());
942941         break;
943942
944943      case 0x25:   /* C025 - KEYMODREG */
945         result = AY3600_keymod_r(space->machine());
944         result = AY3600_keymod_r(space.machine());
946945         break;
947946
948947      case 0x26:   /* C026 - DATAREG */
949         result = adb_read_datareg(state);
948         result = adb_read_datareg();
950949         break;
951950
952951      case 0x27:   /* C027 - KMSTATUS */
953         result = adb_read_kmstatus(state);
952         result = adb_read_kmstatus();
954953         break;
955954
956955      case 0x29:   /* C029 - NEWVIDEO */
957         result = state->m_newvideo;
956         result = m_newvideo;
958957         break;
959958
960959      case 0x2B:   /* C02B - LANGSEL */
961         result = state->m_langsel;
960         result = m_langsel;
962961         break;
963962
964963      case 0x2D:   /* C02D - SLTROMSEL */
965         result = state->m_sltromsel;
964         result = m_sltromsel;
966965         break;
967966
968967      case 0x2E:   /* C02E - VERTCNT */
969         result = apple2gs_get_vpos(space->machine()) >> 1;
968         result = apple2gs_get_vpos(space.machine()) >> 1;
970969         break;
971970
972971      case 0x2F:   /* C02F - HORIZCNT */
973         result = space->machine().primary_screen->hpos() / 11;
972         result = space.machine().primary_screen->hpos() / 11;
974973         if (result > 0)
975974         {
976975            result += 0x40;
977976         }
978977
979         if (apple2gs_get_vpos(space->machine()) & 1)
978         if (apple2gs_get_vpos(space.machine()) & 1)
980979         {
981980            result |= 0x80;
982981         }
983982         break;
984983
985984      case 0x31:   /* C031 - DISKREG */
986         result = state->m_fdc_diskreg;
985         result = m_fdc_diskreg;
987986         break;
988987
989988      case 0x33:   /* C033 - CLOCKDATA */
990         result = state->m_clock_data;
989         result = m_clock_data;
991990         break;
992991
993992      case 0x34:   /* C034 - CLOCKCTL */
994         result = state->m_clock_control;
993         result = m_clock_control;
995994         break;
996995
997996      case 0x35:   /* C035 - SHADOW */
998         result = state->m_shadow;
997         result = m_shadow;
999998         break;
1000999
10011000      case 0x36:   /* C036 - CYAREG */
1002         result = state->m_cyareg;
1001         result = m_cyareg;
10031002         break;
10041003
10051004      case 0x38:   /* C038 - SCCBREG */
10061005      case 0x39:   /* C039 - SCCAREG */
10071006      case 0x3A:   /* C03A - SCCBDATA */
10081007      case 0x3B:   /* C03B - SCCADATA */
1009         scc = space->machine().device<scc8530_t>("scc");
1010         result = scc->reg_r(*space, offset & 0x03);
1008         scc = space.machine().device<scc8530_t>("scc");
1009         result = scc->reg_r(space, offset & 0x03);
10111010         break;
10121011
10131012      case 0x3C:   /* C03C - SOUNDCTL */
10141013      case 0x3D:   /* C03D - SOUNDDATA */
10151014      case 0x3E:   /* C03E - SOUNDADRL */
10161015      case 0x3F:   /* C03F - SOUNDADRH */
1017         result = gssnd_r(space, offset & 0x03);
1016         result = gssnd_r(&space, offset & 0x03);
10181017         break;
10191018
10201019      case 0x41:   /* C041 - INTEN */
1021         result = state->m_inten;
1020         result = m_inten;
10221021         break;
10231022
10241023      case 0x46:   /* C046 - INTFLAG */
1025         result = state->m_intflag;
1024         result = m_intflag;
10261025         break;
10271026
10281027      case 0x68:   /* C068 - STATEREG */
1029         result = ((state->m_flags & VAR_ALTZP)   ? 0x80 : 0x00)
1030            |   ((state->m_flags & VAR_PAGE2)   ? 0x40 : 0x00)
1031            |   ((state->m_flags & VAR_RAMRD)   ? 0x20 : 0x00)
1032            |   ((state->m_flags & VAR_RAMWRT)   ? 0x10 : 0x00)
1033            |   ((state->m_flags & VAR_LCRAM)   ? 0x00 : 0x08)
1034            |   ((state->m_flags & VAR_LCRAM2)   ? 0x04 : 0x00)
1035            |   ((state->m_flags & VAR_INTCXROM)? 0x01 : 0x00);
1028         result = ((m_flags & VAR_ALTZP)   ? 0x80 : 0x00)
1029            |   ((m_flags & VAR_PAGE2)   ? 0x40 : 0x00)
1030            |   ((m_flags & VAR_RAMRD)   ? 0x20 : 0x00)
1031            |   ((m_flags & VAR_RAMWRT)   ? 0x10 : 0x00)
1032            |   ((m_flags & VAR_LCRAM)   ? 0x00 : 0x08)
1033            |   ((m_flags & VAR_LCRAM2)   ? 0x04 : 0x00)
1034            |   ((m_flags & VAR_INTCXROM)? 0x01 : 0x00);
10361035         break;
10371036
10381037      case 0x71: case 0x72: case 0x73:
10391038      case 0x74: case 0x75: case 0x76: case 0x77:
10401039      case 0x78: case 0x79: case 0x7a: case 0x7b:
10411040      case 0x7c: case 0x7d: case 0x7e: case 0x7f:
1042         offset |= (space->machine().root_device().memregion("maincpu")->bytes() - 1) & ~0x3FFF;
1043         result = space->machine().root_device().memregion("maincpu")->base()[offset];
1041         offset |= (space.machine().root_device().memregion("maincpu")->bytes() - 1) & ~0x3FFF;
1042         result = space.machine().root_device().memregion("maincpu")->base()[offset];
10441043         break;
10451044
10461045      case 0x21:   /* C021 - MONOCOLOR */
r15040r15041
10511050        // slot 6 registers should go to applefdc if slot 6 not "Your Card"
10521051        case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
10531052        case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
1054         if ((state->m_sltromsel & (1 << 6)) == 0)
1053         if ((m_sltromsel & (1 << 6)) == 0)
10551054         {
1056                result = applefdc_r(state->m_fdc, offset);
1055                result = applefdc_r(m_fdc, offset);
10571056            }
10581057            else
10591058            {
1060                result = apple2_c0xx_r(space, offset);
1059                result = apple2_c0xx_r(space, offset, 0);
10611060            }
10621061            break;
10631062
10641063        default:
10651064            if (offset < 0x80)
10661065            {
1067                result = apple2_c0xx_r(space, offset);
1066                result = apple2_c0xx_r(space, offset, 0);
10681067            }
10691068            else
10701069            {
1071                result = apple2_c080_r(space, offset);
1070                result = apple2_c080_r(space, offset, 0);
10721071            }
10731072         break;
10741073   }
r15040r15041
10801079
10811080
10821081
1083static WRITE8_HANDLER( apple2gs_c0xx_w )
1082WRITE8_MEMBER( apple2gs_state::apple2gs_c0xx_w )
10841083{
1085   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
10861084   scc8530_t *scc;
10871085
10881086   offset &= 0xFF;
r15040r15041
10931091   switch(offset)
10941092   {
10951093      case 0x22:   /* C022 - TBCOLOR */
1096         state->m_fgcolor = (data >> 4) & 0x0F;
1097         state->m_bgcolor = (data >> 0) & 0x0F;
1094         m_fgcolor = (data >> 4) & 0x0F;
1095         m_bgcolor = (data >> 0) & 0x0F;
10981096         break;
10991097
11001098      case 0x23:   /* C023 - VGCINT */
1101         state->m_vgcint &= ~0x0F;
1102         state->m_vgcint |= data & 0x0F;
1099         m_vgcint &= ~0x0F;
1100         m_vgcint |= data & 0x0F;
11031101         break;
11041102
11051103      case 0x24:   /* C024 - MOUSEDATA */
r15040r15041
11121110         break;
11131111
11141112      case 0x26:   /* C026 - DATAREG */
1115         adb_write_datareg(space->machine(), data);
1113         adb_write_datareg(space.machine(), data);
11161114         break;
11171115
11181116      case 0x27:   /* C027 - KMSTATUS */
1119         adb_write_kmstatus(state, data);
1117         adb_write_kmstatus(this, data);
11201118         break;
11211119
11221120      case 0x29:   /* C029 - NEWVIDEO */
1123         state->m_newvideo = data;
1121         m_newvideo = data;
11241122         break;
11251123
11261124      case 0x2B:   /* C02B - LANGSEL */
1127         state->m_langsel = data;
1125         m_langsel = data;
11281126         break;
11291127
11301128      case 0x2D:   /* C02D - SLTROMSEL */
1131         state->m_sltromsel = data;
1132         apple2_update_memory(space->machine());
1129         m_sltromsel = data;
1130         apple2_update_memory(space.machine());
11331131         break;
11341132
11351133      case 0x31:   /* C031 - DISKREG */
1136         apple2_iwm_setdiskreg(space->machine(), data);
1134         apple2_iwm_setdiskreg(space.machine(), data);
11371135         break;
11381136
11391137      case 0x32:   /* C032 - SCANINT */
1140         apple2gs_set_scanint(space->machine(), data);
1138         apple2gs_set_scanint(space.machine(), data);
11411139         break;
11421140
11431141      case 0x33:   /* C033 - CLOCKDATA */
1144         state->m_clock_data = data;
1142         m_clock_data = data;
11451143         break;
11461144
11471145      case 0x34:   /* C034 - CLOCKCTL */
1148         state->m_clock_control = data & 0x7F;
1149         state->m_bordercolor = data & 0x0F;
1146         m_clock_control = data & 0x7F;
1147         m_bordercolor = data & 0x0F;
11501148         if (data & 0x80)
1151            process_clock(space->machine());
1149            process_clock(space.machine());
11521150         break;
11531151
11541152      case 0x35:   /* C035 - SHADOW */
1155         if (state->m_shadow != data)
1153         if (m_shadow != data)
11561154         {
1157            state->m_shadow = data;
1158            apple2_update_memory(space->machine());
1155            m_shadow = data;
1156            apple2_update_memory(space.machine());
11591157         }
11601158         break;
11611159
11621160      case 0x36:   /* C036 - CYAREG */
1163         state->m_cyareg = data & ~0x20;
1164         space->machine().device("maincpu")->set_unscaled_clock((data & 0x80) ? APPLE2GS_14M/5 : APPLE2GS_7M/7);
1161         m_cyareg = data & ~0x20;
1162         space.machine().device("maincpu")->set_unscaled_clock((data & 0x80) ? APPLE2GS_14M/5 : APPLE2GS_7M/7);
11651163         break;
11661164
11671165      case 0x38:   /* C038 - SCCBREG */
11681166      case 0x39:   /* C039 - SCCAREG */
11691167      case 0x3A:   /* C03A - SCCBDATA */
11701168      case 0x3B:   /* C03B - SCCADATA */
1171         scc = space->machine().device<scc8530_t>("scc");
1172         scc->reg_w(*space, offset & 0x03, data);
1169         scc = space.machine().device<scc8530_t>("scc");
1170         scc->reg_w(space, offset & 0x03, data);
11731171         break;
11741172
11751173      case 0x3C:   /* C03C - SOUNDCTL */
11761174      case 0x3D:   /* C03D - SOUNDDATA */
11771175      case 0x3E:   /* C03E - SOUNDADRL */
11781176      case 0x3F:   /* C03F - SOUNDADRH */
1179         gssnd_w(space, offset & 0x03, data);
1177         gssnd_w(&space, offset & 0x03, data);
11801178         break;
11811179
11821180      case 0x41:   /* C041 - INTEN */
1183         state->m_inten = data & 0x1F;
1184         if ((state->m_inten & 0x10) == 0x00)
1185            apple2gs_remove_irq(space->machine(), IRQ_INTEN_QSECOND);
1186         if ((state->m_inten & 0x08) == 0x00)
1187            apple2gs_remove_irq(space->machine(), IRQ_INTEN_VBL);
1181         m_inten = data & 0x1F;
1182         if ((m_inten & 0x10) == 0x00)
1183            apple2gs_remove_irq(space.machine(), IRQ_INTEN_QSECOND);
1184         if ((m_inten & 0x08) == 0x00)
1185            apple2gs_remove_irq(space.machine(), IRQ_INTEN_VBL);
11881186         break;
11891187
11901188      case 0x47:   /* C047 - CLRVBLINT */
1191         state->m_intflag &= ~0x18;
1192         apple2gs_remove_irq(space->machine(), IRQ_INTEN_QSECOND);
1193         apple2gs_remove_irq(space->machine(), IRQ_INTEN_VBL);
1189         m_intflag &= ~0x18;
1190         apple2gs_remove_irq(space.machine(), IRQ_INTEN_QSECOND);
1191         apple2gs_remove_irq(space.machine(), IRQ_INTEN_VBL);
11941192         break;
11951193
11961194      case 0x68:   /* C068 - STATEREG */
1197         apple2_setvar(space->machine(),
1195         apple2_setvar(space.machine(),
11981196            ((data & 0x80) ? VAR_ALTZP : 0) |
11991197            ((data & 0x40) ? VAR_PAGE2 : 0) |
12001198            ((data & 0x20) ? VAR_RAMRD : 0) |
r15040r15041
12081206        // slot 6 registers should go to applefdc if slot 6 not "Your Card"
12091207        case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
12101208        case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
1211            if ((state->m_sltromsel & (1 << 6)) == 0)
1209            if ((m_sltromsel & (1 << 6)) == 0)
12121210            {
1213                applefdc_w(state->m_fdc, offset, data);
1211                applefdc_w(m_fdc, offset, data);
12141212            }
12151213            else
12161214            {
1217                apple2_c0xx_w(space, offset, data);
1215                apple2_c0xx_w(space, offset, data, 0);
12181216            }
12191217            break;
12201218
12211219      default:
12221220            if (offset < 0x80)
12231221            {
1224                apple2_c0xx_w(space, offset, data);
1222                apple2_c0xx_w(space, offset, data, 0);
12251223            }
12261224            else
12271225            {
1228                apple2_c080_w(space, offset, data);
1226                apple2_c080_w(space, offset, data, 0);
12291227            }
12301228         break;
12311229   }
r15040r15041
12371235 * Memory management
12381236 * ----------------------------------------------------------------------- */
12391237
1240static WRITE8_HANDLER( apple2gs_main0400_w )
1238WRITE8_MEMBER( apple2gs_state::apple2gs_main0400_w )
12411239{
1242   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
12431240   offset += 0x000400;
1244   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1241   m_rambase[offset] = data;
12451242
1246   if (!(state->m_shadow & 0x01))
1243   if (!(m_shadow & 0x01))
12471244   {
1248      state->m_slowmem[offset] = data;
1245      m_slowmem[offset] = data;
12491246   }
12501247}
12511248
1252static WRITE8_HANDLER( apple2gs_aux0400_w )
1249WRITE8_MEMBER( apple2gs_state::apple2gs_aux0400_w )
12531250{
1254   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
12551251   offset += 0x010400;
1256   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1252   m_rambase[offset] = data;
12571253
1258   if (!(state->m_shadow & 0x01))
1254   if (!(m_shadow & 0x01))
12591255   {
1260      state->m_slowmem[offset] = data;
1256      m_slowmem[offset] = data;
12611257   }
12621258}
12631259
1264static WRITE8_HANDLER( apple2gs_main2000_w )
1260WRITE8_MEMBER( apple2gs_state::apple2gs_main2000_w )
12651261{
1266   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
12671262   offset += 0x002000;
1268   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1263   m_rambase[offset] = data;
12691264
1270   if (!(state->m_shadow & 0x02))
1265   if (!(m_shadow & 0x02))
12711266   {
1272      state->m_slowmem[offset] = data;
1267      m_slowmem[offset] = data;
12731268   }
12741269}
12751270
1276static WRITE8_HANDLER( apple2gs_aux2000_w )
1271WRITE8_MEMBER( apple2gs_state::apple2gs_aux2000_w )
12771272{
1278   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
12791273   offset += 0x012000;
1280   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1274   m_rambase[offset] = data;
12811275
1282   if (!(state->m_shadow & 0x12) || !(state->m_shadow & 0x08))
1276   if (!(m_shadow & 0x12) || !(m_shadow & 0x08))
12831277   {
1284      state->m_slowmem[offset] = data;
1278      m_slowmem[offset] = data;
12851279   }
12861280}
12871281
1288static WRITE8_HANDLER( apple2gs_main4000_w )
1282WRITE8_MEMBER( apple2gs_state::apple2gs_main4000_w )
12891283{
1290   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
12911284   offset += 0x004000;
1292   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1285   m_rambase[offset] = data;
12931286
12941287   if ((offset >= 0x004000) && (offset <= 0x005FFF))
12951288   {
1296      if (!(state->m_shadow & 0x04))
1297         state->m_slowmem[offset] = data;
1289      if (!(m_shadow & 0x04))
1290         m_slowmem[offset] = data;
12981291   }
12991292}
13001293
1301static WRITE8_HANDLER( apple2gs_aux4000_w )
1294WRITE8_MEMBER( apple2gs_state::apple2gs_aux4000_w )
13021295{
1303   apple2gs_state *state = space->machine().driver_data<apple2gs_state>();
13041296   offset += 0x014000;
1305   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1297   m_rambase[offset] = data;
13061298
13071299   if ((offset >= 0x014000) && (offset <= 0x015FFF))
13081300   {
1309      if (!(state->m_shadow & 0x14) || !(state->m_shadow & 0x08))
1310         state->m_slowmem[offset] = data;
1301      if (!(m_shadow & 0x14) || !(m_shadow & 0x08))
1302         m_slowmem[offset] = data;
13111303   }
13121304   else if ((offset >= 0x016000) && (offset <= 0x019FFF))
13131305   {
1314      if (!(state->m_shadow & 0x08))
1306      if (!(m_shadow & 0x08))
13151307      {
1316         state->m_slowmem[offset] = data;
1308         m_slowmem[offset] = data;
13171309
13181310         if (offset >= 0x19e00)
13191311         {
13201312            int color = (offset - 0x19e00) >> 1;
13211313
1322            palette_set_color_rgb(space->machine(), color + 16,
1323               ((state->m_slowmem[0x19E00 + (color * 2) + 1] >> 0) & 0x0F) * 17,
1324               ((state->m_slowmem[0x19E00 + (color * 2) + 0] >> 4) & 0x0F) * 17,
1325               ((state->m_slowmem[0x19E00 + (color * 2) + 0] >> 0) & 0x0F) * 17);
1314            palette_set_color_rgb(space.machine(), color + 16,
1315               ((m_slowmem[0x19E00 + (color * 2) + 1] >> 0) & 0x0F) * 17,
1316               ((m_slowmem[0x19E00 + (color * 2) + 0] >> 4) & 0x0F) * 17,
1317               ((m_slowmem[0x19E00 + (color * 2) + 0] >> 0) & 0x0F) * 17);
13261318         }
13271319      }
13281320   }
r15040r15041
13321324
13331325static void apple2gs_mem_000000(running_machine &machine,offs_t begin, offs_t end, apple2_meminfo *meminfo)
13341326{
1335   apple2_state *state = machine.driver_data<apple2_state>();
1327   apple2gs_state *state = machine.driver_data<apple2gs_state>();
13361328   meminfo->read_mem         = (state->m_flags & VAR_ALTZP)   ? 0x010000 : 0x000000;
13371329   meminfo->write_mem         = (state->m_flags & VAR_ALTZP)   ? 0x010000 : 0x000000;
13381330}
13391331
13401332static void apple2gs_mem_000200(running_machine &machine,offs_t begin, offs_t end, apple2_meminfo *meminfo)
13411333{
1342   apple2_state *state = machine.driver_data<apple2_state>();
1334   apple2gs_state *state = machine.driver_data<apple2gs_state>();
13431335   meminfo->read_mem         = (state->m_flags & VAR_RAMRD)   ? 0x010200 : 0x000200;
13441336   meminfo->write_mem         = (state->m_flags & VAR_RAMWRT)   ? 0x010200 : 0x000200;
13451337}
13461338
13471339static void apple2gs_mem_000400(running_machine &machine,offs_t begin, offs_t end, apple2_meminfo *meminfo)
13481340{
1349   apple2_state *state = machine.driver_data<apple2_state>();
1341   apple2gs_state *state = machine.driver_data<apple2gs_state>();
1342    static write8_delegate write_delegates[] =
1343    {
1344        write8_delegate(FUNC(apple2gs_state::apple2gs_aux0400_w), state),
1345        write8_delegate(FUNC(apple2gs_state::apple2gs_main0400_w), state)
1346    };
1347
13501348   if (state->m_flags & VAR_80STORE)
13511349   {
13521350      meminfo->read_mem      = (state->m_flags & VAR_PAGE2)   ? 0x010400 : 0x000400;
13531351      meminfo->write_mem      = (state->m_flags & VAR_PAGE2)   ? 0x010400 : 0x000400;
1354      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? apple2gs_aux0400_w : apple2gs_main0400_w;
1352      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? &write_delegates[0] : &write_delegates[1]; 
13551353   }
13561354   else
13571355   {
13581356      meminfo->read_mem      = (state->m_flags & VAR_RAMRD)   ? 0x010400 : 0x000400;
13591357      meminfo->write_mem      = (state->m_flags & VAR_RAMWRT)   ? 0x010400 : 0x000400;
1360      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? apple2gs_aux0400_w : apple2gs_main0400_w;
1358      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? &write_delegates[0] : &write_delegates[1]; 
13611359   }
13621360}
13631361
13641362static void apple2gs_mem_000800(running_machine &machine,offs_t begin, offs_t end, apple2_meminfo *meminfo)
13651363{
1366   apple2_state *state = machine.driver_data<apple2_state>();
1364   apple2gs_state *state = machine.driver_data<apple2gs_state>();
13671365   meminfo->read_mem         = (state->m_flags & VAR_RAMRD)   ? 0x010800 : 0x000800;
13681366   meminfo->write_mem         = (state->m_flags & VAR_RAMWRT)   ? 0x010800 : 0x000800;
13691367}
13701368
13711369static void apple2gs_mem_002000(running_machine &machine,offs_t begin, offs_t end, apple2_meminfo *meminfo)
13721370{
1373   apple2_state *state = machine.driver_data<apple2_state>();
1371   apple2gs_state *state = machine.driver_data<apple2gs_state>();
1372    static write8_delegate write_delegates[] =
1373    {
1374        write8_delegate(FUNC(apple2gs_state::apple2gs_aux2000_w), state),
1375        write8_delegate(FUNC(apple2gs_state::apple2gs_main2000_w), state)
1376    };
13741377   if ((state->m_flags & (VAR_80STORE|VAR_HIRES)) == (VAR_80STORE|VAR_HIRES))
13751378   {
13761379      meminfo->read_mem      = (state->m_flags & VAR_PAGE2)   ? 0x012000 : 0x002000;
13771380      meminfo->write_mem      = (state->m_flags & VAR_PAGE2)   ? 0x012000 : 0x002000;
1378      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? apple2gs_aux2000_w : apple2gs_main2000_w;
1381      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? &write_delegates[0] : &write_delegates[1];   
13791382   }
13801383   else
13811384   {
13821385      meminfo->read_mem      = (state->m_flags & VAR_RAMRD)   ? 0x012000 : 0x002000;
13831386      meminfo->write_mem      = (state->m_flags & VAR_RAMWRT)   ? 0x012000 : 0x002000;
1384      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? apple2gs_aux2000_w : apple2gs_main2000_w;
1387      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? &write_delegates[0] : &write_delegates[1];   
13851388   }
13861389}
13871390
13881391static void apple2gs_mem_004000(running_machine &machine,offs_t begin, offs_t end, apple2_meminfo *meminfo)
13891392{
1390   apple2_state *state = machine.driver_data<apple2_state>();
1393   apple2gs_state *state = machine.driver_data<apple2gs_state>();
1394    static write8_delegate write_delegates[] =
1395    {
1396        write8_delegate(FUNC(apple2gs_state::apple2gs_aux4000_w), state),
1397        write8_delegate(FUNC(apple2gs_state::apple2gs_main4000_w), state)
1398    };
13911399   meminfo->read_mem         = (state->m_flags & VAR_RAMRD)   ? 0x014000 : 0x004000;
1392   meminfo->write_handler      = (state->m_flags & VAR_RAMWRT)   ? apple2gs_aux4000_w : apple2gs_main4000_w;
1400   meminfo->write_handler      = (state->m_flags & VAR_RAMWRT)   ? &write_delegates[0] : &write_delegates[1];   
13931401}
13941402
13951403static void apple2gs_mem_xxD000(running_machine &machine,apple2_meminfo *meminfo, UINT32 lcmem)
13961404{
1397   apple2_state *state = machine.driver_data<apple2_state>();
1405   apple2gs_state *state = machine.driver_data<apple2gs_state>();
13981406   if (state->m_flags & VAR_LCRAM)
13991407   {
14001408      if (state->m_flags & VAR_LCRAM2)
r15040r15041
14221430
14231431static void apple2gs_mem_xxE000(running_machine &machine,apple2_meminfo *meminfo, UINT32 lcmem)
14241432{
1425   apple2_state *state = machine.driver_data<apple2_state>();
1433   apple2gs_state *state = machine.driver_data<apple2gs_state>();
14261434   if (state->m_flags & VAR_LCRAM)
14271435      meminfo->read_mem      = lcmem | 0x00E000;
14281436   else
r15040r15041
15621570   }
15631571   else if ((address & 0x000F00) == 0x000000)   // accessing C0xx?
15641572   {
1565      result = apple2gs_c0xx_r(machine.device("maincpu")->memory().space(AS_PROGRAM), address);
1573      result = state->apple2gs_c0xx_r(*machine.device("maincpu")->memory().space(AS_PROGRAM), address, 0);
15661574   }
15671575   else
15681576   {
r15040r15041
16541662   }
16551663   else if ((address & 0x000F00) == 0x000000)
16561664   {
1657      apple2gs_c0xx_w(machine.device("maincpu")->memory().space(AS_PROGRAM), address, data);
1665      state->apple2gs_c0xx_w(*machine.device("maincpu")->memory().space(AS_PROGRAM), address, data, 0);
16581666   }
16591667   else
16601668   {
r15040r15041
18661874
18671875
18681876   /* install aux memory writes (for shadowing) */
1869   space->install_legacy_write_handler(0x010400, 0x0107FF, FUNC(apple2gs_aux0400_w));
1870   space->install_legacy_write_handler(0x012000, 0x013FFF, FUNC(apple2gs_aux2000_w));
1871   space->install_legacy_write_handler(0x014000, 0x019FFF, FUNC(apple2gs_aux4000_w));
1877   space->install_write_handler(0x010400, 0x0107FF, write8_delegate(FUNC(apple2gs_state::apple2gs_aux0400_w), state));
1878   space->install_write_handler(0x012000, 0x013FFF, write8_delegate(FUNC(apple2gs_state::apple2gs_aux2000_w), state));
1879   space->install_write_handler(0x014000, 0x019FFF, write8_delegate(FUNC(apple2gs_state::apple2gs_aux4000_w), state));
18721880
18731881   /* setup the Apple II memory system */
18741882   memset(&cfg, 0, sizeof(cfg));
src/mess/machine/a2swyft.c
r15040r15041
6666
6767   astring tempstring;
6868   m_rom = device().machine().root_device().memregion(this->subtag(tempstring, SWYFT_ROM_REGION))->base();
69
70   save_item(NAME(m_rombank));
6971}
7072
7173void a2bus_swyft_device::device_reset()
src/mess/machine/apple2.c
r15040r15041
3535#define PROFILER_C08X   PROFILER_USER2
3636#define PROFILER_A2INT   PROFILER_USER2
3737
38/* softswitch */
39
40/* before the softswitch is changed, these are applied */
41
42
43/* local */
44
45
46static WRITE8_HANDLER ( apple2_mainram0400_w );
47static WRITE8_HANDLER ( apple2_mainram2000_w );
48static WRITE8_HANDLER ( apple2_auxram0400_w );
49static WRITE8_HANDLER ( apple2_auxram2000_w );
50
51static READ8_HANDLER ( apple2_c1xx_r );
52static WRITE8_HANDLER ( apple2_c1xx_w );
53static READ8_HANDLER ( apple2_c3xx_r );
54static WRITE8_HANDLER ( apple2_c3xx_w );
55static READ8_HANDLER ( apple2_c4xx_r );
56static WRITE8_HANDLER ( apple2_c4xx_w );
57
58static READ8_HANDLER ( apple2_c800_r );
59static WRITE8_HANDLER ( apple2_c800_w );
60static READ8_HANDLER ( apple2_ce00_r );
61static WRITE8_HANDLER ( apple2_ce00_w );
62
63static READ8_HANDLER ( apple2_inh_d000_r );
64static WRITE8_HANDLER ( apple2_inh_d000_w );
65static READ8_HANDLER ( apple2_inh_e000_r );
66static WRITE8_HANDLER ( apple2_inh_e000_w );
67
6838/* -----------------------------------------------------------------------
6939 * New Apple II memory manager
7040 * ----------------------------------------------------------------------- */
7141
72
73
74static READ8_HANDLER(read_floatingbus)
42READ8_MEMBER(apple2_state::read_floatingbus)
7543{
76   return apple2_getfloatingbusvalue(space->machine());
44   return apple2_getfloatingbusvalue(space.machine());
7745}
7846
7947
r15040r15041
9664   char rbank[10], wbank[10];
9765   int full_update = 0;
9866   apple2_meminfo meminfo;
99   read8_space_func rh; const char *rh_name = NULL;
100   write8_space_func wh; const char *wh_name = NULL;
67   read8_delegate *rh;
68   write8_delegate *wh;
10169   offs_t begin, end_r, end_w;
10270   UINT8 *rbase, *wbase, *rom;
10371   UINT32 rom_length, offset;
10472   bank_disposition_t bank_disposition;
10573   int wh_nop = 0;
74    static read8_delegate read_delegates[] =
75    {
76        read8_delegate(FUNC(apple2_state::read_floatingbus), state),
77        read8_delegate(FUNC(apple2_state::apple2_c1xx_r), state),
78        read8_delegate(FUNC(apple2_state::apple2_c3xx_r), state),
79        read8_delegate(FUNC(apple2_state::apple2_c4xx_r), state)
80    };
81    static write8_delegate write_delegates[] =
82    {
83        write8_delegate(FUNC(apple2_state::apple2_c1xx_w), state),
84        write8_delegate(FUNC(apple2_state::apple2_c3xx_w), state),
85        write8_delegate(FUNC(apple2_state::apple2_c4xx_w), state)
86    };
10687
10788   /* need to build list of current info? */
10889   if (!state->m_current_meminfo)
r15040r15041
146127         {
147128            /* handler */
148129            rh = meminfo.read_handler;
149            rh_name = meminfo.read_handler_name;
150130         }
151131         else if (meminfo.read_mem == APPLE2_MEM_FLOATING)
152132         {
153133            /* floating RAM */
154            rh = read_floatingbus;
155            rh_name = "read_floatingbus";
134            rh = &read_delegates[0];
156135         }
157136         else if ((meminfo.read_mem & 0xC0000000) == APPLE2_MEM_AUX)
158137         {
r15040r15041
166145            // slots 1-2
167146            if ((meminfo.write_mem & APPLE2_MEM_MASK) == 0)
168147            {
169               rh = apple2_c1xx_r;
170               rh_name = "apple2_c1xx_r";
148                    rh = &read_delegates[1];
171149            }
172150            else if ((meminfo.write_mem & APPLE2_MEM_MASK) == 0x200)
173151            {   // slot 3
174               rh = apple2_c3xx_r;
175               rh_name = "apple2_c3xx_r";
152                    rh = &read_delegates[2];
176153            }
177154            else if ((meminfo.write_mem & APPLE2_MEM_MASK) == 0x300)
178155            {   // slots 4-7
179               rh = apple2_c4xx_r;
180               rh_name = "apple2_c4xx_r";
156                    rh = &read_delegates[3];
181157            }
182158                else
183159                {
r15040r15041
203179         /* install the actual handlers */
204180         if (begin <= end_r) {
205181            if (rh) {
206               space->install_legacy_read_handler(begin, end_r, rh, rh_name);
182               space->install_read_handler(begin, end_r, *rh);
207183            } else {
208184               space->install_read_bank(begin, end_r, rbank);
209185            }
r15040r15041
246222         {
247223            /* handler */
248224            wh = meminfo.write_handler;
249            wh_name = meminfo.write_handler_name;
250225         }
251226         else if ((meminfo.write_mem & 0xC0000000) == APPLE2_MEM_AUX)
252227         {
r15040r15041
262237            // slots 1-2
263238            if ((meminfo.write_mem & APPLE2_MEM_MASK) == 0)
264239            {
265               wh = apple2_c1xx_w;
266               wh_name = "apple2_c1xx_w";
240               wh = &write_delegates[0];
267241            }
268242            else if ((meminfo.write_mem & APPLE2_MEM_MASK) == 0x200)
269243            {   // slot 3
270               wh = apple2_c3xx_w;
271               wh_name = "apple2_c3xx_w";
244               wh = &write_delegates[1];
272245            }
273246            else if ((meminfo.write_mem & APPLE2_MEM_MASK) == 0x300)
274247            {   // slots 4-7
275               wh = apple2_c4xx_w;
276               wh_name = "apple2_c4xx_w";
248               wh = &write_delegates[2];
277249            }
278250         }
279251         else if ((meminfo.write_mem & 0xC0000000) == APPLE2_MEM_ROM)
r15040r15041
295267         /* install the actual handlers */
296268         if (begin <= end_w) {
297269            if (wh) {
298               space->install_legacy_write_handler(begin, end_w, wh ,wh_name);
270               space->install_write_handler(begin, end_w, *wh);
299271            } else {
300272               if (wh_nop) {
301273                  space->nop_write(begin, end_w);
r15040r15041
336308 * Apple II memory map
337309 * ----------------------------------------------------------------------- */
338310
339READ8_HANDLER(apple2_c0xx_r)
311READ8_MEMBER(apple2_state::apple2_c0xx_r)
340312{
341   apple2_state *state = space->machine().driver_data<apple2_state>();
342   if(!space->debugger_access())
313   if(!space.debugger_access())
343314   {
344      static const read8_delegate handlers[] =
315      static read8_delegate handlers[] =
345316      {
346         read8_delegate(FUNC(apple2_state::apple2_c00x_r), state),
347         read8_delegate(FUNC(apple2_state::apple2_c01x_r), state),
348         read8_delegate(FUNC(apple2_state::apple2_c02x_r), state),
349         read8_delegate(FUNC(apple2_state::apple2_c03x_r), state),
350         read8_delegate(FUNC(apple2_state::apple2_c03x_r), state),   // not called here, handled elsewhere
351         read8_delegate(FUNC(apple2_state::apple2_c05x_r), state),
352         read8_delegate(FUNC(apple2_state::apple2_c06x_r), state),
353         read8_delegate(FUNC(apple2_state::apple2_c07x_r), state)
317         read8_delegate(FUNC(apple2_state::apple2_c00x_r), this),
318         read8_delegate(FUNC(apple2_state::apple2_c01x_r), this),
319         read8_delegate(FUNC(apple2_state::apple2_c02x_r), this),
320         read8_delegate(FUNC(apple2_state::apple2_c03x_r), this),
321         read8_delegate(FUNC(apple2_state::apple2_c03x_r), this),   // not called here, handled elsewhere
322         read8_delegate(FUNC(apple2_state::apple2_c05x_r), this),
323         read8_delegate(FUNC(apple2_state::apple2_c06x_r), this),
324         read8_delegate(FUNC(apple2_state::apple2_c07x_r), this)
354325      };
355326
356327      offset &= 0x7F;
r15040r15041
358329        /* normal handler */
359330        if (offset / 0x10 != 4)
360331        {
361            return handlers[offset / 0x10](*space, offset % 0x10, 0);
332            return handlers[offset / 0x10](space, offset % 0x10, 0);
362333        }
363334   }
364335
r15040r15041
367338
368339
369340
370WRITE8_HANDLER(apple2_c0xx_w)
341WRITE8_MEMBER(apple2_state::apple2_c0xx_w)
371342{
372   apple2_state *state = space->machine().driver_data<apple2_state>();
373   static const write8_delegate handlers[] =
343   static write8_delegate handlers[] =
374344   {
375      write8_delegate(FUNC(apple2_state::apple2_c00x_w), state),
376      write8_delegate(FUNC(apple2_state::apple2_c01x_w), state),
377      write8_delegate(FUNC(apple2_state::apple2_c02x_w), state),
378      write8_delegate(FUNC(apple2_state::apple2_c03x_w), state),
379      write8_delegate(FUNC(apple2_state::apple2_c03x_w), state),      // unused
380      write8_delegate(FUNC(apple2_state::apple2_c05x_w), state),
381      write8_delegate(FUNC(apple2_state::apple2_c05x_w), state),      // unused
382      write8_delegate(FUNC(apple2_state::apple2_c07x_w), state)
345      write8_delegate(FUNC(apple2_state::apple2_c00x_w), this),
346      write8_delegate(FUNC(apple2_state::apple2_c01x_w), this),
347      write8_delegate(FUNC(apple2_state::apple2_c02x_w), this),
348      write8_delegate(FUNC(apple2_state::apple2_c03x_w), this),
349      write8_delegate(FUNC(apple2_state::apple2_c03x_w), this),      // unused
350      write8_delegate(FUNC(apple2_state::apple2_c05x_w), this),
351      write8_delegate(FUNC(apple2_state::apple2_c05x_w), this),      // unused
352      write8_delegate(FUNC(apple2_state::apple2_c07x_w), this)
383353   };
384354
385355   offset &= 0x7F;
r15040r15041
387357    /* normal handler */
388358    if (((offset / 0x10) != 4) && (offset / 0x10) != 6)
389359    {
390        handlers[offset / 0x10](*space, offset % 0x10, data, 0);
360        handlers[offset / 0x10](space, offset % 0x10, data, 0);
391361    }
392362}
393363
394READ8_HANDLER(apple2_c080_r)
364READ8_MEMBER(apple2_state::apple2_c080_r)
395365{
396   if(!space->debugger_access())
366   if(!space.debugger_access())
397367   {
398        apple2_state *state = space->machine().driver_data<apple2_state>();
399368      device_a2bus_card_interface *slotdevice;
400369
401370      offset &= 0x7F;
402371
403372        /* now identify the device */
404        slotdevice = state->m_a2bus->get_a2bus_card(offset / 0x10);
373        slotdevice = m_a2bus->get_a2bus_card(offset / 0x10);
405374
406375        /* and if we can, read from the slot */
407376        if (slotdevice != NULL)
408377        {
409            return slotdevice->read_c0nx(*space, offset % 0x10);
378            return slotdevice->read_c0nx(space, offset % 0x10);
410379        }
411380   }
412381
r15040r15041
414383}
415384
416385
417WRITE8_HANDLER(apple2_c080_w)
386WRITE8_MEMBER(apple2_state::apple2_c080_w)
418387{
419   apple2_state *state = space->machine().driver_data<apple2_state>();
420388   device_a2bus_card_interface *slotdevice;
421389
422390   offset &= 0x7F;
423391
424392    /* now identify the device */
425    slotdevice = state->m_a2bus->get_a2bus_card(offset / 0x10);
393    slotdevice = m_a2bus->get_a2bus_card(offset / 0x10);
426394
427395    /* and if we can, write to the slot */
428396    if (slotdevice != NULL)
429397    {
430        slotdevice->write_c0nx(*space, offset % 0x10, data);
398        slotdevice->write_c0nx(space, offset % 0x10, data);
431399    }
432400}
433401
r15040r15041
460428   return apple2_getfloatingbusvalue(space.machine());
461429}
462430
463static READ8_HANDLER( apple2_c1xx_r )
431READ8_MEMBER(apple2_state::apple2_c1xx_r )
464432{
465   apple2_state *state = space->machine().driver_data<apple2_state>();
466433   int slotnum;
467434   device_a2bus_card_interface *slotdevice;
468435
469436   slotnum = ((offset>>8) & 0xf) + 1;
470    slotdevice = state->m_a2bus->get_a2bus_card(slotnum);
437    slotdevice = m_a2bus->get_a2bus_card(slotnum);
471438
472439   if (slotdevice != NULL)
473440   {
474441      if (slotdevice->take_c800())
475442      {
476443//          printf("c1xx_r: taking cnxx_slot to %d\n", slotnum);
477         state->m_a2_cnxx_slot = slotnum;
478         apple2_update_memory(space->machine());
444         m_a2_cnxx_slot = slotnum;
445         apple2_update_memory(space.machine());
479446      }
480447
481      return slotdevice->read_cnxx(*space, offset&0xff);
448      return slotdevice->read_cnxx(space, offset&0xff);
482449   }
483450   else
484451   {
485      return apple2_slotram_r(*space, slotnum, offset);
452      return apple2_slotram_r(space, slotnum, offset);
486453   }
487454
488455   // else fall through to floating bus
489   return apple2_getfloatingbusvalue(space->machine());
456   return apple2_getfloatingbusvalue(space.machine());
490457}
491458
492static WRITE8_HANDLER ( apple2_c1xx_w )
459WRITE8_MEMBER(apple2_state::apple2_c1xx_w )
493460{
494461   int slotnum;
495   apple2_state *state = space->machine().driver_data<apple2_state>();
496462   device_a2bus_card_interface *slotdevice;
497463   UINT8 *rom, *slot_ram;
498464   UINT32 rom_length, slot_length;
499465
500466   // find slot_ram if any
501   rom = space->machine().root_device().memregion("maincpu")->base();
502   rom_length = space->machine().root_device().memregion("maincpu")->bytes() & ~0xFFF;
503   slot_length = state->memregion("maincpu")->bytes() - rom_length;
467   rom = space.machine().root_device().memregion("maincpu")->base();
468   rom_length = space.machine().root_device().memregion("maincpu")->bytes() & ~0xFFF;
469   slot_length = memregion("maincpu")->bytes() - rom_length;
504470   slot_ram = (slot_length > 0) ? &rom[rom_length] : NULL;
505471
506472   slotnum = ((offset>>8) & 0xf) + 1;
507473
508    slotdevice = state->m_a2bus->get_a2bus_card(slotnum);
474    slotdevice = m_a2bus->get_a2bus_card(slotnum);
509475
510476   if (slotdevice != NULL)
511477   {
512      slotdevice->write_cnxx(*space, offset&0xff, data);
478      slotdevice->write_cnxx(space, offset&0xff, data);
513479   }
514480   else
515481   {
r15040r15041
518484   }
519485}
520486
521static READ8_HANDLER( apple2_c3xx_r )
487READ8_MEMBER(apple2_state::apple2_c3xx_r )
522488{
523   apple2_state *state = space->machine().driver_data<apple2_state>();
524489   int slotnum;
525490   device_a2bus_card_interface *slotdevice;
526491
527492   slotnum = 3;
528    slotdevice = state->m_a2bus->get_a2bus_card(slotnum);
493    slotdevice = m_a2bus->get_a2bus_card(slotnum);
529494
530495   // is a card installed in this slot?
531496   if (slotdevice != NULL)
r15040r15041
533498      if (slotdevice->take_c800())
534499      {
535500//          printf("c3xx_r: taking cnxx_slot to %d\n", slotnum);
536         state->m_a2_cnxx_slot = slotnum;
537         apple2_update_memory(space->machine());
501         m_a2_cnxx_slot = slotnum;
502         apple2_update_memory(space.machine());
538503      }
539      return slotdevice->read_cnxx(*space, offset&0xff);
504      return slotdevice->read_cnxx(space, offset&0xff);
540505   }
541506   else
542507   {
543      return apple2_slotram_r(*space, slotnum, offset);
508      return apple2_slotram_r(space, slotnum, offset);
544509   }
545510
546511   // else fall through to floating bus
547   return apple2_getfloatingbusvalue(space->machine());
512   return apple2_getfloatingbusvalue(space.machine());
548513}
549514
550static WRITE8_HANDLER ( apple2_c3xx_w )
515WRITE8_MEMBER(apple2_state::apple2_c3xx_w )
551516{
552   apple2_state *state = space->machine().driver_data<apple2_state>();
553517   int slotnum;
554518   device_a2bus_card_interface *slotdevice;
555519   UINT8 *rom, *slot_ram;
556520   UINT32 rom_length, slot_length;
557521
558522   // find slot_ram if any
559   rom = space->machine().root_device().memregion("maincpu")->base();
560   rom_length = space->machine().root_device().memregion("maincpu")->bytes() & ~0xFFF;
561   slot_length = state->memregion("maincpu")->bytes() - rom_length;
523   rom = space.machine().root_device().memregion("maincpu")->base();
524   rom_length = space.machine().root_device().memregion("maincpu")->bytes() & ~0xFFF;
525   slot_length = memregion("maincpu")->bytes() - rom_length;
562526   slot_ram = (slot_length > 0) ? &rom[rom_length] : NULL;
563527
564528   slotnum = 3;
565    slotdevice = state->m_a2bus->get_a2bus_card(slotnum);
529    slotdevice = m_a2bus->get_a2bus_card(slotnum);
566530
567531   if (slotdevice != NULL)
568532   {
569533      if (slotdevice->take_c800())
570534      {
571535//          printf("c3xx_w: taking cnxx_slot to %d\n", slotnum);
572         state->m_a2_cnxx_slot = slotnum;
573         apple2_update_memory(space->machine());
536         m_a2_cnxx_slot = slotnum;
537         apple2_update_memory(space.machine());
574538      }
575      slotdevice->write_cnxx(*space, offset&0xff, data);
539      slotdevice->write_cnxx(space, offset&0xff, data);
576540   }
577541   else
578542   {
r15040r15041
581545   }
582546}
583547
584static READ8_HANDLER( apple2_c4xx_r )
548READ8_MEMBER(apple2_state::apple2_c4xx_r )
585549{
586   apple2_state *state = space->machine().driver_data<apple2_state>();
587550   int slotnum;
588551   device_a2bus_card_interface *slotdevice;
589552
590553   slotnum = ((offset>>8) & 0xf) + 4;
591    slotdevice = state->m_a2bus->get_a2bus_card(slotnum);
554    slotdevice = m_a2bus->get_a2bus_card(slotnum);
592555
593556   // is a card installed in this slot?
594557   if (slotdevice != NULL)
r15040r15041
596559      if (slotdevice->take_c800())
597560      {
598561//          printf("c4xx_r: taking cnxx_slot to %d\n", slotnum);
599         state->m_a2_cnxx_slot = slotnum;
600         apple2_update_memory(space->machine());
562         m_a2_cnxx_slot = slotnum;
563         apple2_update_memory(space.machine());
601564      }
602      return slotdevice->read_cnxx(*space, offset&0xff);
565      return slotdevice->read_cnxx(space, offset&0xff);
603566   }
604567   else
605568   {
606      return apple2_slotram_r(*space, slotnum, offset);
569      return apple2_slotram_r(space, slotnum, offset);
607570   }
608571
609572   // else fall through to floating bus
610   return apple2_getfloatingbusvalue(space->machine());
573   return apple2_getfloatingbusvalue(space.machine());
611574}
612575
613static WRITE8_HANDLER ( apple2_c4xx_w )
576WRITE8_MEMBER ( apple2_state::apple2_c4xx_w )
614577{
615   apple2_state *state = space->machine().driver_data<apple2_state>();
616578   int slotnum;
617579   device_a2bus_card_interface *slotdevice;
618580   UINT8 *rom, *slot_ram;
619581   UINT32 rom_length, slot_length;
620582
621583   // find slot_ram if any
622   rom = space->machine().root_device().memregion("maincpu")->base();
623   rom_length = space->machine().root_device().memregion("maincpu")->bytes() & ~0xFFF;
624   slot_length = state->memregion("maincpu")->bytes() - rom_length;
584   rom = space.machine().root_device().memregion("maincpu")->base();
585   rom_length = space.machine().root_device().memregion("maincpu")->bytes() & ~0xFFF;
586   slot_length = memregion("maincpu")->bytes() - rom_length;
625587   slot_ram = (slot_length > 0) ? &rom[rom_length] : NULL;
626588
627589   slotnum = ((offset>>8) & 0xf) + 4;
628    slotdevice = state->m_a2bus->get_a2bus_card(slotnum);
590    slotdevice = m_a2bus->get_a2bus_card(slotnum);
629591
630592   if (slotdevice != NULL)
631593   {
632594      if (slotdevice->take_c800())
633595      {
634596//          printf("c4xx_w: taking cnxx_slot to %d\n", slotnum);
635         state->m_a2_cnxx_slot = slotnum;
636         apple2_update_memory(space->machine());
597         m_a2_cnxx_slot = slotnum;
598         apple2_update_memory(space.machine());
637599      }
638      slotdevice->write_cnxx(*space, offset&0xff, data);
600      slotdevice->write_cnxx(space, offset&0xff, data);
639601   }
640602   else
641603   {
r15040r15041
644606   }
645607}
646608
647static READ8_HANDLER(apple2_cfff_r)
609READ8_MEMBER(apple2_state::apple2_cfff_r)
648610{
649611   // debugger guard
650   if (!space->debugger_access())
612   if (!space.debugger_access())
651613   {
652        apple2_state *state = space->machine().driver_data<apple2_state>();
653614//      printf("cfff_r: taking cnxx_slot to -1\n");
654      state->m_a2_cnxx_slot = -1;
655      apple2_update_memory(space->machine());
615      m_a2_cnxx_slot = -1;
616      apple2_update_memory(space.machine());
656617   }
657618
658   return apple2_getfloatingbusvalue(space->machine());
619   return apple2_getfloatingbusvalue(space.machine());
659620}
660621
661static WRITE8_HANDLER(apple2_cfff_w)
622WRITE8_MEMBER(apple2_state::apple2_cfff_w)
662623{
663   if (!space->debugger_access())
624   if (!space.debugger_access())
664625   {
665        apple2_state *state = space->machine().driver_data<apple2_state>();
666626//      printf("cfff_w: taking cnxx_slot to -1\n");
667        state->m_a2_cnxx_slot = -1;
668        apple2_update_memory(space->machine());
627        m_a2_cnxx_slot = -1;
628        apple2_update_memory(space.machine());
669629    }
670630}
671631
672static READ8_HANDLER ( apple2_c800_r )
632READ8_MEMBER(apple2_state::apple2_c800_r )
673633{
674   apple2_state *state = space->machine().driver_data<apple2_state>();
675634   device_a2bus_card_interface *slotdevice;
676635
677    slotdevice = state->m_a2bus->get_a2bus_card(state->m_a2_cnxx_slot);
636    slotdevice = m_a2bus->get_a2bus_card(m_a2_cnxx_slot);
678637
679638   if (slotdevice != NULL)
680639   {
681      return slotdevice->read_c800(*space, offset&0xfff);
640      return slotdevice->read_c800(space, offset&0xfff);
682641   }
683642
684   return apple2_getfloatingbusvalue(space->machine());
643   return apple2_getfloatingbusvalue(space.machine());
685644}
686645
687static WRITE8_HANDLER ( apple2_c800_w )
646WRITE8_MEMBER(apple2_state::apple2_c800_w )
688647{
689   apple2_state *state = space->machine().driver_data<apple2_state>();
690648   device_a2bus_card_interface *slotdevice;
691649
692    slotdevice = state->m_a2bus->get_a2bus_card(state->m_a2_cnxx_slot);
650    slotdevice = m_a2bus->get_a2bus_card(m_a2_cnxx_slot);
693651
694652   if (slotdevice != NULL)
695653   {
696      slotdevice->write_c800(*space, offset&0xfff, data);
654      slotdevice->write_c800(space, offset&0xfff, data);
697655   }
698656}
699657
700static READ8_HANDLER ( apple2_ce00_r )
658READ8_MEMBER(apple2_state::apple2_ce00_r )
701659{
702   apple2_state *state = space->machine().driver_data<apple2_state>();
703660   device_a2bus_card_interface *slotdevice;
704661
705    slotdevice = state->m_a2bus->get_a2bus_card(state->m_a2_cnxx_slot);
662    slotdevice = m_a2bus->get_a2bus_card(m_a2_cnxx_slot);
706663
707664   if (slotdevice != NULL)
708665   {
709      return slotdevice->read_c800(*space, (offset&0xfff) + 0x600);
666      return slotdevice->read_c800(space, (offset&0xfff) + 0x600);
710667   }
711668
712   return apple2_getfloatingbusvalue(space->machine());
669   return apple2_getfloatingbusvalue(space.machine());
713670}
714671
715static WRITE8_HANDLER ( apple2_ce00_w )
672WRITE8_MEMBER(apple2_state::apple2_ce00_w )
716673{
717   apple2_state *state = space->machine().driver_data<apple2_state>();
718674   device_a2bus_card_interface *slotdevice;
719675
720    slotdevice = state->m_a2bus->get_a2bus_card(state->m_a2_cnxx_slot);
676    slotdevice = m_a2bus->get_a2bus_card(m_a2_cnxx_slot);
721677
722678   if (slotdevice != NULL)
723679   {
724        slotdevice->write_c800(*space, (offset&0xfff)+0x600, data);
680        slotdevice->write_c800(space, (offset&0xfff)+0x600, data);
725681   }
726682}
727683
728static READ8_HANDLER ( apple2_inh_d000_r )
684READ8_MEMBER(apple2_state::apple2_inh_d000_r )
729685{
730   apple2_state *state = space->machine().driver_data<apple2_state>();
731686   device_a2bus_card_interface *slotdevice;
732687
733    slotdevice = state->m_a2bus->get_a2bus_card(state->m_inh_slot);
688    slotdevice = m_a2bus->get_a2bus_card(m_inh_slot);
734689
735690   if (slotdevice != NULL)
736691   {
737      return slotdevice->read_inh_rom(*space, offset & 0xfff);
692      return slotdevice->read_inh_rom(space, offset & 0xfff);
738693   }
739694
740   return apple2_getfloatingbusvalue(space->machine());
695   return apple2_getfloatingbusvalue(space.machine());
741696}
742697
743static WRITE8_HANDLER ( apple2_inh_d000_w )
698WRITE8_MEMBER(apple2_state::apple2_inh_d000_w )
744699{
745   apple2_state *state = space->machine().driver_data<apple2_state>();
746700   device_a2bus_card_interface *slotdevice;
747701
748    slotdevice = state->m_a2bus->get_a2bus_card(state->m_inh_slot);
702    slotdevice = m_a2bus->get_a2bus_card(m_inh_slot);
749703
750704   if (slotdevice != NULL)
751705   {
752      return slotdevice->write_inh_rom(*space, offset & 0xfff, data);
706      return slotdevice->write_inh_rom(space, offset & 0xfff, data);
753707   }
754708}
755709
756static READ8_HANDLER ( apple2_inh_e000_r )
710READ8_MEMBER(apple2_state::apple2_inh_e000_r )
757711{
758   apple2_state *state = space->machine().driver_data<apple2_state>();
759712   device_a2bus_card_interface *slotdevice;
760713
761    slotdevice = state->m_a2bus->get_a2bus_card(state->m_inh_slot);
714    slotdevice = m_a2bus->get_a2bus_card(m_inh_slot);
762715
763716   if (slotdevice != NULL)
764717   {
765      return slotdevice->read_inh_rom(*space, (offset & 0x1fff) + 0x1000);
718      return slotdevice->read_inh_rom(space, (offset & 0x1fff) + 0x1000);
766719   }
767720
768   return apple2_getfloatingbusvalue(space->machine());
721   return apple2_getfloatingbusvalue(space.machine());
769722}
770723
771static WRITE8_HANDLER ( apple2_inh_e000_w )
724WRITE8_MEMBER(apple2_state::apple2_inh_e000_w )
772725{
773   apple2_state *state = space->machine().driver_data<apple2_state>();
774726   device_a2bus_card_interface *slotdevice;
775727
776    slotdevice = state->m_a2bus->get_a2bus_card(state->m_inh_slot);
728    slotdevice = m_a2bus->get_a2bus_card(m_inh_slot);
777729
778730   if (slotdevice != NULL)
779731   {
780      slotdevice->write_inh_rom(*space, (offset & 0x1fff) + 0x1000, data);
732      slotdevice->write_inh_rom(space, (offset & 0x1fff) + 0x1000, data);
781733   }
782734}
783735
r15040r15041
798750static void apple2_mem_0400(running_machine &machine, offs_t begin, offs_t end, apple2_meminfo *meminfo)
799751{
800752   apple2_state *state = machine.driver_data<apple2_state>();
753    static write8_delegate write_delegates[] =
754    {
755        write8_delegate(FUNC(apple2_state::apple2_auxram0400_w), state),
756        write8_delegate(FUNC(apple2_state::apple2_mainram0400_w), state)
757    };
801758   if (state->m_flags & VAR_80STORE)
802759   {
803760      meminfo->read_mem      = (state->m_flags & VAR_PAGE2)   ? 0x010400 : 0x000400;
804761      meminfo->write_mem      = (state->m_flags & VAR_PAGE2)   ? 0x010400 : 0x000400;
805      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? apple2_auxram0400_w : apple2_mainram0400_w;
762      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? &write_delegates[0] : &write_delegates[1];
806763   }
807764   else
808765   {
809766      meminfo->read_mem      = (state->m_flags & VAR_RAMRD)   ? 0x010400 : 0x000400;
810767      meminfo->write_mem      = (state->m_flags & VAR_RAMWRT)   ? 0x010400 : 0x000400;
811      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? apple2_auxram0400_w : apple2_mainram0400_w;
768      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? &write_delegates[0] : &write_delegates[1];
812769   }
813770}
814771
r15040r15041
822779static void apple2_mem_2000(running_machine &machine, offs_t begin, offs_t end, apple2_meminfo *meminfo)
823780{
824781   apple2_state *state = machine.driver_data<apple2_state>();
782    static write8_delegate write_delegates[] =
783    {
784        write8_delegate(FUNC(apple2_state::apple2_auxram2000_w), state),
785        write8_delegate(FUNC(apple2_state::apple2_mainram2000_w), state)
786    };
825787   if ((state->m_flags & (VAR_80STORE|VAR_HIRES)) == (VAR_80STORE|VAR_HIRES))
826788   {
827789      meminfo->read_mem      = (state->m_flags & VAR_PAGE2)   ? 0x012000 : 0x002000;
828790      meminfo->write_mem      = (state->m_flags & VAR_PAGE2)   ? 0x012000 : 0x002000;
829      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? apple2_auxram2000_w : apple2_mainram2000_w;
791      meminfo->write_handler   = (state->m_flags & VAR_PAGE2)   ? &write_delegates[0] : &write_delegates[1];
830792   }
831793   else
832794   {
833795      meminfo->read_mem      = (state->m_flags & VAR_RAMRD)   ? 0x012000 : 0x002000;
834796      meminfo->write_mem      = (state->m_flags & VAR_RAMWRT)   ? 0x012000 : 0x002000;
835      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? apple2_auxram2000_w : apple2_mainram2000_w;
797      meminfo->write_handler   = (state->m_flags & VAR_RAMWRT)   ? &write_delegates[0] : &write_delegates[1];
836798   }
837799}
838800
r15040r15041
845807
846808static void apple2_mem_C000(running_machine &machine, offs_t begin, offs_t end, apple2_meminfo *meminfo)
847809{
848   meminfo->read_handler = apple2_c0xx_r;
849   meminfo->write_handler = apple2_c0xx_w;
810   apple2_state *state = machine.driver_data<apple2_state>();
811    static read8_delegate rd = read8_delegate(FUNC(apple2_state::apple2_c0xx_r), state);
812    static write8_delegate wd = write8_delegate(FUNC(apple2_state::apple2_c0xx_w), state);
813
814   meminfo->read_handler = &rd;
815   meminfo->write_handler = &wd;
850816}
851817
852818static void apple2_mem_C080(running_machine &machine, offs_t begin, offs_t end, apple2_meminfo *meminfo)
853819{
854   meminfo->read_handler = apple2_c080_r;
855   meminfo->write_handler = apple2_c080_w;
820   apple2_state *state = machine.driver_data<apple2_state>();
821    static read8_delegate rd = read8_delegate(FUNC(apple2_state::apple2_c080_r), state);
822    static write8_delegate wd = write8_delegate(FUNC(apple2_state::apple2_c080_w), state);
823
824   meminfo->read_handler = &rd;
825   meminfo->write_handler = &wd;
856826}
857827
858828static void apple2_mem_CFFF(running_machine &machine, offs_t begin, offs_t end, apple2_meminfo *meminfo)
859829{
860   meminfo->read_handler = apple2_cfff_r;
861   meminfo->write_handler = apple2_cfff_w;
830   apple2_state *state = machine.driver_data<apple2_state>();
831    static read8_delegate rd = read8_delegate(FUNC(apple2_state::apple2_cfff_r), state);
832    static write8_delegate wd = write8_delegate(FUNC(apple2_state::apple2_cfff_w), state);
833
834   meminfo->read_handler = &rd;
835   meminfo->write_handler = &wd;
862836}
863837
864838static void apple2_mem_Cx00(running_machine &machine, offs_t begin, offs_t end, apple2_meminfo *meminfo)
r15040r15041
901875   }
902876   else
903877   {
904      meminfo->read_handler = apple2_c800_r;
905      meminfo->write_handler = apple2_c800_w;
878        static read8_delegate rd = read8_delegate(FUNC(apple2_state::apple2_c800_r), state);
879        static write8_delegate wd = write8_delegate(FUNC(apple2_state::apple2_c800_w), state);
880
881        meminfo->read_handler = &rd;
882      meminfo->write_handler = &wd;
906883   }
907884}
908885
r15040r15041
923900      }
924901      else
925902      {
926         meminfo->read_handler = apple2_ce00_r;
927         meminfo->write_handler = apple2_ce00_w;
903            static read8_delegate rd = read8_delegate(FUNC(apple2_state::apple2_ce00_r), state);
904            static write8_delegate wd = write8_delegate(FUNC(apple2_state::apple2_ce00_w), state);
905
906            meminfo->read_handler = &rd;
907            meminfo->write_handler = &wd;
928908      }
929909   }
930910}
r15040r15041
962942    }
963943    else
964944    {
965        meminfo->read_handler = apple2_inh_d000_r;
966        meminfo->write_handler = apple2_inh_d000_w;
945        static read8_delegate rd = read8_delegate(FUNC(apple2_state::apple2_inh_d000_r), state);
946        static write8_delegate wd = write8_delegate(FUNC(apple2_state::apple2_inh_d000_w), state);
947
948        meminfo->read_handler = &rd;
949      meminfo->write_handler = &wd;
967950    }
968951}
969952
r15040r15041
994977    }
995978    else
996979    {
997        meminfo->read_handler = apple2_inh_e000_r;
998        meminfo->write_handler = apple2_inh_e000_w;
980        static read8_delegate rd = read8_delegate(FUNC(apple2_state::apple2_inh_e000_r), state);
981        static write8_delegate wd = write8_delegate(FUNC(apple2_state::apple2_inh_e000_w), state);
982
983        meminfo->read_handler = &rd;
984      meminfo->write_handler = &wd;
999985    }
1000986}
1001987
r15040r15041
12071193   apple2_state *state = machine.driver_data<apple2_state>();
12081194   int need_intcxrom;
12091195
1196    state->m_rambase = state->m_ram->pointer();
1197
12101198   need_intcxrom = !strcmp(machine.system().name, "apple2c")
12111199      || !strcmp(machine.system().name, "apple2c0")
12121200      || !strcmp(machine.system().name, "apple2c3")
r15040r15041
12531241    apple2_auxram2000_w
12541242***************************************************************************/
12551243
1256static WRITE8_HANDLER ( apple2_mainram0400_w )
1244WRITE8_MEMBER ( apple2_state::apple2_mainram0400_w )
12571245{
12581246   offset += 0x400;
1259   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1247   m_rambase[offset] = data;
12601248}
12611249
1262static WRITE8_HANDLER ( apple2_mainram2000_w )
1250WRITE8_MEMBER ( apple2_state::apple2_mainram2000_w )
12631251{
12641252   offset += 0x2000;
1265   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1253   m_rambase[offset] = data;
12661254}
12671255
1268static WRITE8_HANDLER ( apple2_auxram0400_w )
1256WRITE8_MEMBER ( apple2_state::apple2_auxram0400_w )
12691257{
12701258   offset += 0x10400;
1271   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1259   m_rambase[offset] = data;
12721260}
12731261
1274static WRITE8_HANDLER ( apple2_auxram2000_w )
1262WRITE8_MEMBER ( apple2_state::apple2_auxram2000_w )
12751263{
12761264   offset += 0x12000;
1277   space->machine().device<ram_device>(RAM_TAG)->pointer()[offset] = data;
1265   m_rambase[offset] = data;
12781266}
12791267
12801268
src/mess/includes/apple2gs.h
r15040r15041
117117    UINT8 m_echo_bank;
118118
119119   DECLARE_DIRECT_UPDATE_MEMBER(apple2gs_opbase);
120
121    READ8_MEMBER( apple2gs_c0xx_r );
122    WRITE8_MEMBER( apple2gs_c0xx_w );
123    WRITE8_MEMBER( apple2gs_main0400_w );
124    WRITE8_MEMBER( apple2gs_aux0400_w );
125    WRITE8_MEMBER( apple2gs_main2000_w );
126    WRITE8_MEMBER( apple2gs_aux2000_w );
127    WRITE8_MEMBER( apple2gs_main4000_w );
128    WRITE8_MEMBER( apple2gs_aux4000_w );
129
130    UINT8 adb_read_datareg();
131    UINT8 adb_read_kmstatus();
120132};
121133
122134
src/mess/includes/apple2.h
r15040r15041
8080struct _apple2_meminfo
8181{
8282   UINT32 read_mem;
83   read8_space_func read_handler;
84   const char *read_handler_name;
83   read8_delegate *read_handler;
8584   UINT32 write_mem;
86   write8_space_func write_handler;
87   const char *write_handler_name;
85   write8_delegate *write_handler;
8886};
8987
9088typedef struct _apple2_memmap_entry apple2_memmap_entry;
r15040r15041
153151    bool m_monochrome_dhr;
154152    int m_inh_slot;
155153
154    UINT8 *m_rambase;
155
156    READ8_MEMBER(apple2_c0xx_r);
157    WRITE8_MEMBER(apple2_c0xx_w);
158    READ8_MEMBER(apple2_c080_r);
159    WRITE8_MEMBER(apple2_c080_w);
160
156161    READ8_MEMBER ( apple2_c00x_r );
157162    READ8_MEMBER ( apple2_c01x_r );
158163    READ8_MEMBER ( apple2_c02x_r );
r15040r15041
166171    WRITE8_MEMBER ( apple2_c03x_w );
167172    WRITE8_MEMBER ( apple2_c05x_w );
168173    WRITE8_MEMBER ( apple2_c07x_w );
174
175    WRITE8_MEMBER ( apple2_mainram0400_w );
176    WRITE8_MEMBER ( apple2_mainram2000_w );
177    WRITE8_MEMBER ( apple2_auxram0400_w );
178    WRITE8_MEMBER ( apple2_auxram2000_w );
179
180    READ8_MEMBER ( apple2_c1xx_r );
181    WRITE8_MEMBER ( apple2_c1xx_w );
182    READ8_MEMBER ( apple2_c3xx_r );
183    WRITE8_MEMBER ( apple2_c3xx_w );
184    READ8_MEMBER ( apple2_c4xx_r );
185    WRITE8_MEMBER ( apple2_c4xx_w );
186
187    READ8_MEMBER ( apple2_c800_r );
188    WRITE8_MEMBER ( apple2_c800_w );
189    READ8_MEMBER ( apple2_ce00_r );
190    WRITE8_MEMBER ( apple2_ce00_w );
191
192    READ8_MEMBER ( apple2_inh_d000_r );
193    WRITE8_MEMBER ( apple2_inh_d000_w );
194    READ8_MEMBER ( apple2_inh_e000_r );
195    WRITE8_MEMBER ( apple2_inh_e000_w );
196
197    READ8_MEMBER(read_floatingbus);
198
199    READ8_MEMBER(apple2_cfff_r);
200    WRITE8_MEMBER(apple2_cfff_w);
201
169202};
170203
171204

Previous 15994 Revisions Next


© 1998-2018 The MESS Team