Previous 199869 Revisions Next

r31037 Thursday 19th June, 2014 at 11:38:57 UTC by O. Galibert
nscsi_cd: I told'ya, there's no disk in the drive [O. Galibert]
[src/emu/machine]nscsi_bus.c nscsi_bus.h nscsi_cd.c nscsi_cd.h nscsi_hd.c

trunk/src/emu/machine/nscsi_bus.c
r31036r31037
178178{
179179}
180180
181
182const char *const nscsi_full_device::command_names[256] = {
183   /* 00 */ "TEST_UNIT_READY", "REZERO", "?", "REQUEST_SENSE", "FORMAT_UNIT", "?", "?", "REASSIGN_BLOCKS",
184   /* 08 */ "READ_6/RECIEVE", "?", "WRITE_6/SEND", "SEEK", "?", "?", "?", "?",
185   /* 10 */ "?", "?", "INQUIRY", "?", "?", "MODE_SELECT_6", "RESERVE_6", "RELEASE_6",
186   /* 18 */ "?", "?", "MODE_SENSE_6", "START_STOP_UNIT", "RECIEVE_DIAG_RES", "SEND_DIAGNOSTICS", "PREVENT_ALLOW_MEDIUM_REMOVAL", "?",
187   /* 20 */ "?", "?", "?", "READ_FORMAT_CAPACITIES", "?", "READ_CAPACITY", "?", "?",
188
189   /* 28 */ "READ_10", "READ_GENERATION", "WRITE_10", "SEEK_10", "ERASE_10", "READ_UPDATED_BLOCK_10", "WRITE_VERIFY", "VERIFY",
190   /* 30 */ "SEARCH_DATA_HIGH_10", "SEARCH_DATA_EQUAL_10", "SEARCH_DATA_LOW_10", "SET_LIMITS_10", "PREFETCH", "SYNC_CACHE", "LOCK_UNLOCK_CACHE", "READ_DEFECT_DATA",
191   /* 38 */ "MEDIUM_SCAN", "COMPARE", "COPY_AND_VERIFY", "WRITE_BUFFER", "READ_DATA_BUFFER", "UPDATE_BLOCK", "READ_LONG", "WRITE_LONG",
192   /* 40 */ "CHANGE_DEFINITION", "WRITE_SAME", "READ_SUB_CHANNEL", "READ_TOC_PMA_ATIP", "READ_HEADER", "PLAY_AUDIO_10", "GET_CONFIGURATION", "PLAY_AUDIO_MSF",
193   /* 48 */ "PLAY_AUDIO_TRACK_INDEX", "PLAY_RELATIVE_10", "GET_EVENT_STATUS_NOTIFICATION", "PAUSE_RESUME", "LOG_SELECT", "LOG_SENSE", "STOP_PLAY_SCAN", "?",
194   /* 50 */ "XDWRITE", "READ_DISC_INFORMATION/XPWRITE", "READ_TRACK_INFORMATION/XDREAD", "RESERVE_TRACK", "SEND_OPC_INFORMATION", "MODE_SELECT_10", "RESERVE_10", "RELEASE_10",
195   /* 58 */ "REPAIR_TRACK", "READ_MASTER_CUE", "MODE_SENSE_10", "CLOSE_TRACK_SESSION", "READ_BUFFER_CAPACITY", "SEND_CUE_SHEET", "PERSISTENT_RESERVE_IN", "PERSISTENT_RESERVE_OUT",
196   /* 80 */ "XDWRITE_EXTENDED", "REBUILD", "REGENERATE", "EXTENDED_COPY", "RECEIVE_COPY_RESULTS", "?", "?", "?",
197   /* 88 */ "?", "?", "?", "?", "?", "?", "?", "?",
198   /* 90 */ "?", "?", "?", "?", "?", "?", "?", "?",
199   /* 98 */ "?", "?", "?", "?", "?", "?", "?", "?",
200   /* a0 */ "REPORT_LUNS", "BLANK", "SEND_EVENT", "REPORT_DEVICE_IDENTIFIER/SEND_KEY", "SET_DEVICE_IDENTIFIER/REPORT_KEY", "PLAY_AUDIO_12", "LOAD_UNLOAD_MEDIUM", "MOVE_MEDIUM_ATTACHED/SET_READ_AHEAD",
201   /* a8 */ "READ_12", "PLAY_RELATIVE_12", "WRITE_12", "?", "ERASE_12/GET_PERFORMANCE", "READ_DVD_STRUCTURE", "WRITE_AND_VERIFY_12", "VERIFY_12",
202   /* b0 */ "SEARCH_DATA_HIGH_12", "SEARCH_DATA_EQUAL_12", "SEARCH_DATA_LOW_12", "SET_LIMITS_12", "READ_ELEMENT_STATUS_ATTACHED", "?", "SET_STREAMING", "READ_DEFECT_DATA_12",
203   /* b8 */ "?", "READ_CD_MSF", "SCAN_MMC", "SET_CD_SPEED", "PLAY_CD", "MECHANISM_STATUS", "READ_CD", "SEND_DVD_STRUCTURE",
204   /* c0 */ "?", "?", "?", "?", "?", "?", "?", "?",
205   /* c8 */ "?", "?", "?", "?", "?", "?", "?", "?",
206   /* d0 */ "?", "?", "?", "?", "?", "?", "?", "?",
207   /* d8 */ "?", "?", "?", "?", "?", "?", "?", "?",
208   /* e0 */ "?", "?", "?", "?", "?", "?", "?", "?",
209   /* e8 */ "?", "?", "?", "?", "?", "?", "?", "?",
210   /* f0 */ "?", "?", "?", "?", "?", "?", "?", "?",
211   /* f8 */ "?", "?", "?", "?", "?", "?", "?", "?",
212};
213
181214void nscsi_full_device::device_start()
182215{
183216   nscsi_device::device_start();
r31036r31037
537570
538571void nscsi_full_device::scsi_unknown_command()
539572{
540   logerror("%s: Unknown command", tag());
573   logerror("%s: Unhandled command %s", tag(), command_names[scsi_cmdbuf[0]]);
541574   for(int i=0; i != scsi_cmdsize; i++)
542575      logerror(" %02x", scsi_cmdbuf[i]);
543576   logerror("\n");
trunk/src/emu/machine/nscsi_bus.h
r31036r31037
107107
108108   // SCSI status returns
109109   enum {
110      SS_GOOD              = 0x00,
111      SS_CHECK_CONDITION   = 0x02,
112      SS_CONDITION_MET     = 0x04,
113      SS_BUSY              = 0x08,
114      SS_INT_GOOD          = 0x10,
115      SS_INT_CONDITION_MET = 0x14,
116      SS_RESV_CONFLICT     = 0x18,
117      SS_TERMINATED        = 0x22,
118      SS_QUEUE_FULL        = 0x28,
110      SS_GOOD                          = 0x00,
111      SS_CHECK_CONDITION               = 0x02,
112      SS_CONDITION_MET                 = 0x04,
113      SS_BUSY                          = 0x08,
114      SS_INT_GOOD                      = 0x10,
115      SS_INT_CONDITION_MET             = 0x14,
116      SS_RESV_CONFLICT                 = 0x18,
117      SS_TERMINATED                    = 0x22,
118      SS_QUEUE_FULL                    = 0x28,
119119   };
120120
121121   // SCSI commands
122   static const char *const command_names[256];
122123   enum {
123      SC_TEST_UNIT_READY   = 0x00,
124      SC_REZERO            = 0x01,
125      SC_REQUEST_SENSE     = 0x03,
126      SC_FORMAT_UNIT       = 0x04,
127      SC_REASSIGN_BLOCKS   = 0x07,
128      SC_READ              = 0x08,
129      SC_WRITE             = 0x0a,
130      SC_SEEK              = 0x0b,
131      SC_INQUIRY           = 0x12,
132      SC_MODE_SELECT_6     = 0x15,
133      SC_RESERVE_6         = 0x16,
134      SC_RELEASE_6         = 0x17,
135      SC_MODE_SENSE_6      = 0x1a,
136      SC_START_STOP_UNIT   = 0x1b,
137      SC_RECIEVE_DIAG_RES  = 0x1c,
138      SC_SEND_DIAGNOSTICS  = 0x1d,
139      SC_READ_CAPACITY     = 0x25,
140      SC_READ_EXTENDED     = 0x28,
141      SC_WRITE_EXTENDED    = 0x2a,
142      SC_SEEK_EXTENDED     = 0x2b,
143      SC_WRITE_VERIFY      = 0x2e,
144      SC_VERIFY            = 0x2f,
145      SC_SYNC_CACHE        = 0x35,
146      SC_READ_DEFECT_DATA  = 0x37,
147      SC_READ_DATA_BUFFER  = 0x3c,
148      SC_READ_LONG         = 0x3e,
149      SC_WRITE_LONG        = 0x3f,
150      SC_CHANGE_DEFINITION = 0x40,
151      SC_LOG_SELECT        = 0x4c,
152      SC_LOG_SENSE         = 0x4d,
153      SC_MODE_SELECT_10    = 0x55,
154      SC_RESERVE_10        = 0x56,
155      SC_RELEASE_10        = 0x57,
156      SC_MODE_SENSE_10     = 0x5a,
124      SC_TEST_UNIT_READY               = 0x00,
125      SC_REZERO                        = 0x01,
126      SC_REQUEST_SENSE                 = 0x03,
127      SC_FORMAT_UNIT                   = 0x04,
128      SC_REASSIGN_BLOCKS               = 0x07,
129      SC_READ_6                        = 0x08,
130      SC_RECIEVE                       = 0x08,
131      SC_WRITE_6                       = 0x0a,
132      SC_SEND                          = 0x0a,
133      SC_SEEK                          = 0x0b,
134      SC_INQUIRY                       = 0x12,
135      SC_MODE_SELECT_6                 = 0x15,
136      SC_RESERVE_6                     = 0x16,
137      SC_RELEASE_6                     = 0x17,
138      SC_MODE_SENSE_6                  = 0x1a,
139      SC_START_STOP_UNIT               = 0x1b,
140      SC_RECIEVE_DIAG_RES              = 0x1c,
141      SC_SEND_DIAGNOSTICS              = 0x1d,
142      SC_PREVENT_ALLOW_MEDIUM_REMOVAL  = 0x1e,
143      SC_READ_FORMAT_CAPACITIES        = 0x23,
144      SC_READ_CAPACITY                 = 0x25,
145      SC_READ_10                       = 0x28,
146      SC_READ_GENERATION               = 0x29,
147      SC_WRITE_10                      = 0x2a,
148      SC_SEEK_10                       = 0x2b,
149      SC_ERASE_10                      = 0x2c,
150      SC_READ_UPDATED_BLOCK_10         = 0x2d,
151      SC_WRITE_VERIFY                  = 0x2e,
152      SC_VERIFY                        = 0x2f,
153      SC_SEARCH_DATA_HIGH_10           = 0x30,
154      SC_SEARCH_DATA_EQUAL_10          = 0x31,
155      SC_SEARCH_DATA_LOW_10            = 0x32,
156      SC_SET_LIMITS_10                 = 0x33,
157      SC_PREFETCH                      = 0x34,
158      SC_SYNC_CACHE                    = 0x35,
159      SC_LOCK_UNLOCK_CACHE             = 0x36,
160      SC_READ_DEFECT_DATA              = 0x37,
161      SC_MEDIUM_SCAN                   = 0x38,
162      SC_COMPARE                       = 0x39,
163      SC_COPY_AND_VERIFY               = 0x3a,
164      SC_WRITE_BUFFER                  = 0x3b,
165      SC_READ_DATA_BUFFER              = 0x3c,
166      SC_UPDATE_BLOCK                  = 0x3d,
167      SC_READ_LONG                     = 0x3e,
168      SC_WRITE_LONG                    = 0x3f,
169      SC_CHANGE_DEFINITION             = 0x40,
170      SC_WRITE_SAME                    = 0x41,
171      SC_READ_SUB_CHANNEL              = 0x42,
172      SC_READ_TOC_PMA_ATIP             = 0x43,
173      SC_READ_HEADER                   = 0x44,
174      SC_PLAY_AUDIO_10                 = 0x45,
175      SC_GET_CONFIGURATION             = 0x46,
176      SC_PLAY_AUDIO_MSF                = 0x47,
177      SC_PLAY_AUDIO_TRACK_INDEX        = 0x48,
178      SC_PLAY_RELATIVE_10              = 0x49,
179      SC_GET_EVENT_STATUS_NOTIFICATION = 0x4a,
180      SC_PAUSE_RESUME                  = 0x4b,
181      SC_LOG_SELECT                    = 0x4c,
182      SC_LOG_SENSE                     = 0x4d,
183      SC_STOP_PLAY_SCAN                = 0x4e,
184      SC_XDWRITE                       = 0x50,
185      SC_XPWRITE                       = 0x51,
186      SC_READ_DISC_INFORMATION         = 0x51,
187      SC_READ_TRACK_INFORMATION        = 0x52,
188      SC_XDREAD                        = 0x52,
189      SC_RESERVE_TRACK                 = 0x53,
190      SC_SEND_OPC_INFORMATION          = 0x54,
191      SC_MODE_SELECT_10                = 0x55,
192      SC_RESERVE_10                    = 0x56,
193      SC_RELEASE_10                    = 0x57,
194      SC_REPAIR_TRACK                  = 0x58,
195      SC_READ_MASTER_CUE               = 0x59,
196      SC_MODE_SENSE_10                 = 0x5a,
197      SC_CLOSE_TRACK_SESSION           = 0x5b,
198      SC_READ_BUFFER_CAPACITY          = 0x5c,
199      SC_SEND_CUE_SHEET                = 0x5d,
200      SC_PERSISTENT_RESERVE_IN         = 0x5e,
201      SC_PERSISTENT_RESERVE_OUT        = 0x5f,
202      SC_XDWRITE_EXTENDED              = 0x80,
203      SC_REBUILD                       = 0x81,
204      SC_REGENERATE                    = 0x82,
205      SC_EXTENDED_COPY                 = 0x83,
206      SC_RECEIVE_COPY_RESULTS          = 0x84,
207      SC_REPORT_LUNS                   = 0xa0,
208      SC_BLANK                         = 0xa1,
209      SC_SEND_EVENT                    = 0xa2,
210      SC_REPORT_DEVICE_IDENTIFIER      = 0xa3,
211      SC_SEND_KEY                      = 0xa3,
212      SC_REPORT_KEY                    = 0xa4,
213      SC_SET_DEVICE_IDENTIFIER         = 0xa4,
214      SC_PLAY_AUDIO_12                 = 0xa5,
215      SC_LOAD_UNLOAD_MEDIUM            = 0xa6,
216      SC_MOVE_MEDIUM_ATTACHED          = 0xa7,
217      SC_SET_READ_AHEAD                = 0xa7,
218      SC_READ_12                       = 0xa8,
219      SC_PLAY_RELATIVE_12              = 0xa9,
220      SC_WRITE_12                      = 0xaa,
221      SC_ERASE_12                      = 0xac,
222      SC_GET_PERFORMANCE               = 0xac,
223      SC_READ_DVD_STRUCTURE            = 0xad,
224      SC_WRITE_AND_VERIFY_12           = 0xae,
225      SC_VERIFY_12                     = 0xaf,
226      SC_SEARCH_DATA_HIGH_12           = 0xb0,
227      SC_SEARCH_DATA_EQUAL_12          = 0xb1,
228      SC_SEARCH_DATA_LOW_12            = 0xb2,
229      SC_SET_LIMITS_12                 = 0xb3,
230      SC_READ_ELEMENT_STATUS_ATTACHED  = 0xb4,
231      SC_SET_STREAMING                 = 0xb6,
232      SC_READ_DEFECT_DATA_12           = 0xb7,
233      SC_READ_CD_MSF                   = 0xb9,
234      SC_SCAN_MMC                      = 0xba,
235      SC_SET_CD_SPEED                  = 0xbb,
236      SC_PLAY_CD                       = 0xbc,
237      SC_MECHANISM_STATUS              = 0xbd,
238      SC_READ_CD                       = 0xbe,
239      SC_SEND_DVD_STRUCTURE            = 0xbf,
157240   };
158241
159242   // SCSI Messages
160243   enum {
161      SM_COMMAND_COMPLETE  = 0x00,
162      SM_EXTENDED_MSG      = 0x01,
163      SM_SAVE_DATA_PTR     = 0x02,
164      SM_RESTORE_PTR       = 0x03,
165      SM_DISCONNECT        = 0x04,
166      SM_INITIATOR_ERROR   = 0x05,
167      SM_ABORT             = 0x06,
168      SM_MSG_REJECT        = 0x07,
169      SM_NOP               = 0x08,
170      SM_MSG_PARITY        = 0x09,
171      SM_LCMD_COMPLETE     = 0x0a,
172      SM_LCMD_COMPLETE_F   = 0x0b,
173      SM_BUS_DEVICE_RESET  = 0x0c,
174      SM_ABORT_TAG         = 0x0d,
175      SM_CLEAR_QUEUE       = 0x0e,
176      SM_INIT_RECOVERY     = 0x0f,
177      SM_RELEASE_RECOVERY  = 0x10,
178      SM_TERMINATE_IO      = 0x11,
179      SM_SIMPLE_QUEUE      = 0x20,
180      SM_HEAD_QUEUE        = 0x21,
181      SM_ORDERED_QUEUE     = 0x22,
182      SM_IGNORE_WIDE_RES   = 0x23,
244      SM_COMMAND_COMPLETE              = 0x00,
245      SM_EXTENDED_MSG                  = 0x01,
246      SM_SAVE_DATA_PTR                 = 0x02,
247      SM_RESTORE_PTR                   = 0x03,
248      SM_DISCONNECT                    = 0x04,
249      SM_INITIATOR_ERROR               = 0x05,
250      SM_ABORT                         = 0x06,
251      SM_MSG_REJECT                    = 0x07,
252      SM_NOP                           = 0x08,
253      SM_MSG_PARITY                    = 0x09,
254      SM_LCMD_COMPLETE                 = 0x0a,
255      SM_LCMD_COMPLETE_F               = 0x0b,
256      SM_BUS_DEVICE_RESET              = 0x0c,
257      SM_ABORT_TAG                     = 0x0d,
258      SM_CLEAR_QUEUE                   = 0x0e,
259      SM_INIT_RECOVERY                 = 0x0f,
260      SM_RELEASE_RECOVERY              = 0x10,
261      SM_TERMINATE_IO                  = 0x11,
262      SM_SIMPLE_QUEUE                  = 0x20,
263      SM_HEAD_QUEUE                    = 0x21,
264      SM_ORDERED_QUEUE                 = 0x22,
265      SM_IGNORE_WIDE_RES               = 0x23,
183266   };
184267
185268   enum {
trunk/src/emu/machine/nscsi_hd.c
r31036r31037
9999      scsi_status_complete(SS_GOOD);
100100      break;
101101
102   case SC_READ:
102   case SC_READ_6:
103103      lba = ((scsi_cmdbuf[1] & 0x1f)<<16) | (scsi_cmdbuf[2]<<8) | scsi_cmdbuf[3];
104104      blocks = scsi_cmdbuf[4];
105105      if(!blocks)
r31036r31037
112112      scsi_status_complete(SS_GOOD);
113113      break;
114114
115   case SC_WRITE:
115   case SC_WRITE_6:
116116      lba = ((scsi_cmdbuf[1] & 0x1f)<<16) | (scsi_cmdbuf[2]<<8) | scsi_cmdbuf[3];
117117      blocks = scsi_cmdbuf[4];
118118      if(!blocks)
r31036r31037
337337      break;
338338   }
339339
340   case SC_READ_EXTENDED:
340   case SC_READ_10:
341341      lba = (scsi_cmdbuf[2]<<24) | (scsi_cmdbuf[3]<<16) | (scsi_cmdbuf[4]<<8) | scsi_cmdbuf[5];
342342      blocks = (scsi_cmdbuf[7] << 8) | scsi_cmdbuf[8];
343343
r31036r31037
348348      scsi_status_complete(SS_GOOD);
349349      break;
350350
351   case SC_WRITE_EXTENDED:
351   case SC_WRITE_10:
352352      lba = (scsi_cmdbuf[2]<<24) | (scsi_cmdbuf[3]<<16) | (scsi_cmdbuf[4]<<8) | scsi_cmdbuf[5];
353353      blocks = (scsi_cmdbuf[7] << 8) | scsi_cmdbuf[8];
354354
trunk/src/emu/machine/nscsi_cd.c
r31036r31037
5353   return block[pos & (bytes_per_sector - 1)];
5454}
5555
56void nscsi_cdrom_device::return_no_cd()
57{
58   sense(false, 3);
59   scsi_status_complete(SS_CHECK_CONDITION);
60}
61
5662void nscsi_cdrom_device::scsi_command()
5763{
5864   switch(scsi_cmdbuf[0]) {
5965   case SC_TEST_UNIT_READY:
6066      logerror("%s: command TEST UNIT READY\n", tag());
61      scsi_status_complete(SS_GOOD);
67      if(cdrom)
68         scsi_status_complete(SS_GOOD);
69      else
70         return_no_cd();
6271      break;
6372
64   case SC_READ:
73   case SC_READ_6:
74      if(!cdrom) {
75         return_no_cd();
76         break;
77      }
78
6579      lba = ((scsi_cmdbuf[1] & 0x1f)<<16) | (scsi_cmdbuf[2]<<8) | scsi_cmdbuf[3];
6680      blocks = scsi_cmdbuf[4];
6781      if(!blocks)
r31036r31037
113127      break;
114128
115129   case SC_READ_CAPACITY: {
130      if(!cdrom) {
131         return_no_cd();
132         break;
133      }
134
116135      logerror("%s: command READ CAPACITY\n", tag());
117136
118137      UINT32 temp = cdrom_get_track_start(cdrom, 0xaa);
r31036r31037
132151      break;
133152   }
134153
135   case SC_READ_EXTENDED:
154   case SC_READ_10:
155      if(!cdrom) {
156         return_no_cd();
157         break;
158      }
159
136160      lba = (scsi_cmdbuf[2]<<24) | (scsi_cmdbuf[3]<<16) | (scsi_cmdbuf[4]<<8) | scsi_cmdbuf[5];
137161      blocks = (scsi_cmdbuf[7] << 8) | scsi_cmdbuf[8];
138162
r31036r31037
143167      scsi_status_complete(SS_GOOD);
144168      break;
145169
170   case SC_MODE_SENSE_6: {
171      int lun = get_lun(scsi_cmdbuf[1] >> 5);
172      logerror("%s: command MODE SENSE 6 lun=%d page=%02x alloc=%02x link=%02x\n",
173               tag(),
174               lun, scsi_cmdbuf[2] & 0x3f, scsi_cmdbuf[4], scsi_cmdbuf[5]);
175      if(lun) {
176         bad_lun();
177         return;
178      }
179
180      int page = scsi_cmdbuf[2] & 0x3f;
181      int size = scsi_cmdbuf[4];
182      int pos = 1;
183      scsi_cmdbuf[pos++] = 0x00; // medium type
184      scsi_cmdbuf[pos++] = 0x80; // WP, cache
185
186      UINT32 temp = cdrom_get_track_start(cdrom, 0xaa);
187      temp--; // return the last used block on the disc
188      scsi_cmdbuf[pos++] = 0x08; // Block descriptor length
189
190      scsi_cmdbuf[pos++] = (temp>>24) & 0xff;
191      scsi_cmdbuf[pos++] = (temp>>16) & 0xff;
192      scsi_cmdbuf[pos++] = (temp>>8) & 0xff;
193      scsi_cmdbuf[pos++] = (temp & 0xff);
194      scsi_cmdbuf[pos++] = 0;
195      scsi_cmdbuf[pos++] = 0;
196      scsi_cmdbuf[pos++] = (bytes_per_sector>>8)&0xff;
197      scsi_cmdbuf[pos++] = (bytes_per_sector & 0xff);
198
199      int pmax = page == 0x3f ? 0x3e : page;
200      int pmin = page == 0x3f ? 0x00 : page;
201      for(int page=pmax; page >= pmin; page--) {
202         switch(page) {
203         case 0x00: // Unit attention parameters page (weird)
204            scsi_cmdbuf[pos++] = 0x80; // PS, page id
205            scsi_cmdbuf[pos++] = 0x02; // Page length
206            scsi_cmdbuf[pos++] = 0x00; // Meh
207            scsi_cmdbuf[pos++] = 0x00; // Double meh
208            break;
209
210         case 0x02: // Disconnect/reconnect control parameters (guessed)
211            scsi_cmdbuf[pos++] = 0x82; // PS, page id
212            scsi_cmdbuf[pos++] = 0x0e; // Page length
213            scsi_cmdbuf[pos++] = 0xe6; // Buffer full ratio, 90%
214            scsi_cmdbuf[pos++] = 0x1a; // Buffer empty ratio, 10%
215            scsi_cmdbuf[pos++] = 0x00; // Bus inactivity limit, 0
216            scsi_cmdbuf[pos++] = 0x00;
217            scsi_cmdbuf[pos++] = 0x00; // Disconnect time limit, 0
218            scsi_cmdbuf[pos++] = 0x00;
219            scsi_cmdbuf[pos++] = 0x00; // Connect time limit, 0
220            scsi_cmdbuf[pos++] = 0x00;
221            scsi_cmdbuf[pos++] = 0x00; // Maximum burst size, 0
222            scsi_cmdbuf[pos++] = 0x00;
223            scsi_cmdbuf[pos++] = 0x00; // EMDP, Dimm, DTDC
224            scsi_cmdbuf[pos++] = 0x00; // Reserved
225            scsi_cmdbuf[pos++] = 0x00; // Reserved
226            scsi_cmdbuf[pos++] = 0x00; // Reserved
227            break;
228
229         default:
230            logerror("%s: mode sense page %02x unhandled\n", tag(), page);
231            break;
232         }
233      }
234      scsi_cmdbuf[0] = pos;
235      if(pos > size)
236         pos = size;
237
238      scsi_data_in(0, pos);
239      scsi_status_complete(SS_GOOD);
240      break;
241   }
242
146243   default:
244      fprintf(stderr, "scsi %02x\n", scsi_cmdbuf[0]);
245
147246      nscsi_full_device::scsi_command();
148247      break;
149248   }
trunk/src/emu/machine/nscsi_cd.h
r31036r31037
2222   cdrom_file *cdrom;
2323   int bytes_per_sector;
2424   int lba, cur_lba, blocks;
25
26   void return_no_cd();
2527};
2628
2729extern const device_type NSCSI_CDROM;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team