src/mess/machine/upd1990a.c
| r4697 | r4698 | |
| 147 | 147 | |
| 148 | 148 | /* 1 Hz data out pulse */ |
| 149 | 149 | upd1990a->data_out = 1; |
| 150 | | timer_adjust_periodic(upd1990a->data_out_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/32768)*2)); |
| 150 | timer_adjust_periodic(upd1990a->data_out_timer, attotime_zero, 0, ATTOTIME_IN_HZ(1*2)); |
| 151 | 151 | |
| 152 | 152 | /* 64 Hz time pulse */ |
| 153 | | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/512)*2)); |
| 153 | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ(64*2)); |
| 154 | 154 | break; |
| 155 | 155 | |
| 156 | 156 | case UPD1990A_MODE_SHIFT: |
| r4697 | r4698 | |
| 167 | 167 | devcb_call_write_line(&upd1990a->out_data_func, upd1990a->data_out); |
| 168 | 168 | |
| 169 | 169 | /* 32 Hz time pulse */ |
| 170 | | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/1024)*2)); |
| 170 | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ(32*2)); |
| 171 | 171 | break; |
| 172 | 172 | |
| 173 | 173 | case UPD1990A_MODE_TIME_SET: |
| r4697 | r4698 | |
| 194 | 194 | } |
| 195 | 195 | |
| 196 | 196 | /* 32 Hz time pulse */ |
| 197 | | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/1024)*2)); |
| 197 | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ(32*2)); |
| 198 | 198 | } |
| 199 | 199 | break; |
| 200 | 200 | |
| r4697 | r4698 | |
| 217 | 217 | |
| 218 | 218 | /* 512 Hz data out pulse */ |
| 219 | 219 | upd1990a->data_out = 1; |
| 220 | | timer_adjust_periodic(upd1990a->data_out_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/64)*2)); |
| 220 | timer_adjust_periodic(upd1990a->data_out_timer, attotime_zero, 0, ATTOTIME_IN_HZ(512*2)); |
| 221 | 221 | |
| 222 | 222 | /* 32 Hz time pulse */ |
| 223 | | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/1024)*2)); |
| 223 | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ(32*2)); |
| 224 | 224 | } |
| 225 | 225 | break; |
| 226 | 226 | |
| r4697 | r4698 | |
| 228 | 228 | if (LOG) logerror("UPD1990A TP = 64 Hz Set Mode\n"); |
| 229 | 229 | |
| 230 | 230 | /* 64 Hz time pulse */ |
| 231 | | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/512)*2)); |
| 231 | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ(64*2)); |
| 232 | 232 | break; |
| 233 | 233 | |
| 234 | 234 | case UPD1990A_MODE_TP_256HZ_SET: |
| 235 | 235 | if (LOG) logerror("UPD1990A TP = 256 Hz Set Mode\n"); |
| 236 | 236 | |
| 237 | 237 | /* 256 Hz time pulse */ |
| 238 | | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/128)*2)); |
| 238 | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ(256*2)); |
| 239 | 239 | break; |
| 240 | 240 | |
| 241 | 241 | case UPD1990A_MODE_TP_2048HZ_SET: |
| 242 | 242 | if (LOG) logerror("UPD1990A TP = 2048 Hz Set Mode\n"); |
| 243 | 243 | |
| 244 | 244 | /* 2048 Hz time pulse */ |
| 245 | | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ((device->clock/16)*2)); |
| 245 | timer_adjust_periodic(upd1990a->tp_timer, attotime_zero, 0, ATTOTIME_IN_HZ(2048*2)); |
| 246 | 246 | break; |
| 247 | 247 | |
| 248 | 248 | case UPD1990A_MODE_TEST: |
src/mess/drivers/kyocera.c
| r4697 | r4698 | |
| 30 | 30 | |
| 31 | 31 | TODO: |
| 32 | 32 | |
| 33 | | - pc8201 halts after boot |
| 33 | - discrete sound |
| 34 | - pc8201 memory banking |
| 35 | - pc8201 I/O control registers |
| 36 | - NEC PC-8233 floppy controller |
| 37 | - NEC floppy disc drives (PC-8031-1W, PC-8031-2W, PC-80S31) |
| 38 | - NEC PC-8240 video monitor adapter |
| 39 | - Tandy Portable Disk Drive (TPDD: 100k 3½", TPDD2: 200k 3½") |
| 40 | - Chipmunk disk drive (384k 3½") |
| 34 | 41 | - soft power on/off |
| 35 | | - discrete sound |
| 36 | 42 | - RS232/modem select |
| 43 | - trsm200 RTC alarm |
| 44 | - trsm200 TCM5089 sound |
| 37 | 45 | - IM6042 UART |
| 38 | | - trsm200 TCM5089 sound |
| 39 | | - trsm200 RTC alarm |
| 40 | 46 | |
| 41 | 47 | */ |
| 42 | 48 | |
| r4697 | r4698 | |
| 58 | 64 | |
| 59 | 65 | /* Read/Write Handlers */ |
| 60 | 66 | |
| 67 | static UINT8 sio; |
| 68 | |
| 61 | 69 | static READ8_HANDLER( pc8201_bank_r ) |
| 62 | 70 | { |
| 63 | 71 | kyocera_state *state = space->machine->driver_data; |
| 64 | 72 | |
| 65 | | return state->bank; |
| 73 | return (sio & 0xc0) | state->bank; |
| 66 | 74 | } |
| 67 | 75 | |
| 68 | 76 | static void pc8201_bankswitch(running_machine *machine, UINT8 data) |
| r4697 | r4698 | |
| 92 | 100 | switch (ram_bank) |
| 93 | 101 | { |
| 94 | 102 | case 0: |
| 95 | | memory_install_readwrite8_handler(program, 0x8000, 0xbfff, 0, 0, SMH_UNMAP, SMH_UNMAP); |
| 96 | | memory_install_readwrite8_handler(program, 0xc000, 0xffff, 0, 0, SMH_BANK(2), SMH_BANK(2)); |
| 103 | if (mess_ram_size > 16 * 1024) |
| 104 | { |
| 105 | memory_install_readwrite8_handler(program, 0x8000, 0xffff, 0, 0, SMH_BANK(2), SMH_BANK(2)); |
| 106 | } |
| 107 | else |
| 108 | { |
| 109 | memory_install_readwrite8_handler(program, 0x8000, 0xbfff, 0, 0, SMH_UNMAP, SMH_UNMAP); |
| 110 | memory_install_readwrite8_handler(program, 0xc000, 0xffff, 0, 0, SMH_BANK(2), SMH_BANK(2)); |
| 111 | } |
| 97 | 112 | break; |
| 98 | 113 | |
| 99 | 114 | case 1: |
| r4697 | r4698 | |
| 101 | 116 | break; |
| 102 | 117 | |
| 103 | 118 | case 2: |
| 104 | | if (mess_ram_size > 16 * 1024) |
| 119 | if (mess_ram_size > 32 * 1024) |
| 105 | 120 | memory_install_readwrite8_handler(program, 0x8000, 0xffff, 0, 0, SMH_BANK(2), SMH_BANK(2)); |
| 106 | 121 | else |
| 107 | 122 | memory_install_readwrite8_handler(program, 0x8000, 0xffff, 0, 0, SMH_UNMAP, SMH_UNMAP); |
| 108 | 123 | break; |
| 109 | 124 | |
| 110 | 125 | case 3: |
| 111 | | if (mess_ram_size > 48 * 1024) |
| 112 | | memory_install_readwrite8_handler(program, 0x8000, 0xffff, 0, 0, SMH_BANK(2), SMH_BANK(2)); |
| 113 | | else |
| 114 | | memory_install_readwrite8_handler(program, 0x8000, 0xffff, 0, 0, SMH_UNMAP, SMH_UNMAP); |
| 126 | memory_install_readwrite8_handler(program, 0x8000, 0xffff, 0, 0, SMH_UNMAP, SMH_UNMAP); |
| 115 | 127 | break; |
| 116 | 128 | } |
| 117 | 129 | |
| r4697 | r4698 | |
| 133 | 145 | 1 |
| 134 | 146 | 2 |
| 135 | 147 | 3 |
| 136 | | 4 |
| 137 | | 5 STB RTC strobe |
| 148 | 4 STB RTC strobe |
| 149 | 5 |
| 138 | 150 | 6 |
| 139 | 151 | 7 |
| 140 | 152 | |
| 141 | 153 | */ |
| 142 | 154 | |
| 143 | 155 | kyocera_state *state = space->machine->driver_data; |
| 156 | |
| 157 | sio = data; |
| 144 | 158 | |
| 145 | | upd1990a_stb_w(state->upd1990a, BIT(data, 5)); |
| 159 | upd1990a_stb_w(state->upd1990a, BIT(data, 4)); |
| 146 | 160 | } |
| 147 | 161 | |
| 148 | 162 | static WRITE8_HANDLER( pc8201_e0_w ) |
| r4697 | r4698 | |
| 925 | 939 | /* configure ROM banking */ |
| 926 | 940 | memory_configure_bank(machine, 1, 0, 1, memory_region(machine, I8085_TAG), 0); |
| 927 | 941 | memory_configure_bank(machine, 1, 1, 1, memory_region(machine, "ext"), 0); |
| 928 | | memory_configure_bank(machine, 1, 2, 2, mess_ram + 0x4000, 0x8000); |
| 942 | memory_configure_bank(machine, 1, 2, 2, mess_ram + 0x8000, 0x8000); |
| 929 | 943 | memory_set_bank(machine, 1, 0); |
| 930 | 944 | |
| 931 | 945 | /* configure RAM banking */ |
| 932 | 946 | memory_configure_bank(machine, 2, 0, 1, mess_ram, 0); |
| 933 | | memory_configure_bank(machine, 2, 2, 2, mess_ram + 0x4000, 0x8000); |
| 947 | memory_configure_bank(machine, 2, 2, 2, mess_ram + 0x8000, 0x8000); |
| 934 | 948 | memory_set_bank(machine, 2, 0); |
| 935 | 949 | |
| 936 | 950 | pc8201_bankswitch(machine, 0); |
| r4697 | r4698 | |
| 1217 | 1231 | |
| 1218 | 1232 | static SYSTEM_CONFIG_START( pc8201 ) |
| 1219 | 1233 | CONFIG_RAM_DEFAULT (16 * 1024) |
| 1220 | | CONFIG_RAM (48 * 1024) |
| 1221 | | CONFIG_RAM (80 * 1024) |
| 1234 | CONFIG_RAM (32 * 1024) |
| 1235 | CONFIG_RAM (64 * 1024) |
| 1222 | 1236 | SYSTEM_CONFIG_END |
| 1223 | 1237 | |
| 1224 | 1238 | static SYSTEM_CONFIG_START( trsm100 ) |