Previous 199869 Revisions Next

r29383 Sunday 6th April, 2014 at 20:46:17 UTC by Curt Coder
(MESS) tandy2k: Tries to load DOS now. (nw)
[src/emu/machine]upd765.c upd765.h
[src/lib]lib.mak
[src/lib/formats]tandy2k_dsk.c* tandy2k_dsk.h*
[src/mess/drivers]tandy2k.c
[src/mess/includes]tandy2k.h

trunk/src/emu/machine/upd765.c
r29382r29383
101101upd765_family_device::upd765_family_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
102102   pc_fdc_interface(mconfig, type, name, tag, owner, clock, shortname, source),
103103   intrq_cb(*this),
104   drq_cb(*this)
104   drq_cb(*this),
105   hdl_cb(*this)
105106{
106107   ready_polled = true;
107108   ready_connected = true;
r29382r29383
129130
130131void upd765_family_device::device_start()
131132{
132   intrq_cb.resolve();
133   drq_cb.resolve();
133   intrq_cb.resolve_safe();
134   drq_cb.resolve_safe();
135   hdl_cb.resolve_safe();
134136   
135137   for(int i=0; i != 4; i++) {
136138      char name[2];
r29382r29383
442444{
443445   if(state != drq) {
444446      drq = state;
445      if(!drq_cb.isnull())
446         drq_cb(drq);
447      drq_cb(drq);
447448   }
448449}
449450
r29382r29383
14421443
14431444   if(fi.dev)
14441445      fi.dev->ss_w(command[1] & 4 ? 1 : 0);
1446   hdl_cb(1);
14451447   read_data_continue(fi);
14461448}
14471449
r29382r29383
16191621   st1 = ST1_MA;
16201622   st2 = 0x00;
16211623
1624   hdl_cb(1);
16221625   write_data_continue(fi);
16231626}
16241627
r29382r29383
17271730
17281731   if(fi.dev)
17291732      fi.dev->ss_w(command[1] & 4 ? 1 : 0);
1733   hdl_cb(1);
17301734   read_track_continue(fi);
17311735}
17321736
r29382r29383
18411845      fi.dev->ss_w(command[1] & 4 ? 1 : 0);
18421846   sector_size = calc_sector_size(command[2]);
18431847
1848   hdl_cb(1);
18441849   format_track_continue(fi);
18451850}
18461851
r29382r29383
19031908   for(int i=0; i<4; i++)
19041909      cur_live.idbuf[i] = 0x00;
19051910
1911   hdl_cb(1);
19061912   read_id_continue(fi);
19071913}
19081914
r29382r29383
19551961   bool old_irq = cur_irq;
19561962   cur_irq = data_irq || other_irq || internal_drq;
19571963   cur_irq = cur_irq && (dor & 4) && (mode != MODE_AT || (dor & 8));
1958   if(cur_irq != old_irq && !intrq_cb.isnull()) {
1964   if(cur_irq != old_irq) {
19591965      logerror("%s: irq = %d\n", tag(), cur_irq);
19601966      intrq_cb(cur_irq);
19611967   }
trunk/src/emu/machine/upd765.h
r29382r29383
6161#define MCFG_UPD765_DRQ_CALLBACK(_write) \
6262   devcb = &upd765_family_device::set_drq_wr_callback(*device, DEVCB2_##_write);
6363
64#define MCFG_UPD765_HDL_CALLBACK(_write) \
65   devcb = &upd765_family_device::set_hdl_wr_callback(*device, DEVCB2_##_write);
66
6467/* Interface required for PC ISA wrapping */
6568class pc_fdc_interface : public device_t {
6669public:
r29382r29383
9194
9295   template<class _Object> static devcb2_base &set_intrq_wr_callback(device_t &device, _Object object) { return downcast<upd765_family_device &>(device).intrq_cb.set_callback(object); }
9396   template<class _Object> static devcb2_base &set_drq_wr_callback(device_t &device, _Object object) { return downcast<upd765_family_device &>(device).drq_cb.set_callback(object); }
97   template<class _Object> static devcb2_base &set_hdl_wr_callback(device_t &device, _Object object) { return downcast<upd765_family_device &>(device).hdl_cb.set_callback(object); }
9498
9599   virtual DECLARE_ADDRESS_MAP(map, 8) = 0;
96100
r29382r29383
304308   int main_phase;
305309
306310   live_info cur_live, checkpoint_live;
307   devcb2_write_line intrq_cb, drq_cb;
311   devcb2_write_line intrq_cb, drq_cb, hdl_cb;
308312   bool cur_irq, other_irq, data_irq, drq, internal_drq, tc, tc_done, locked, mfm;
309313   floppy_info flopi[4];
310314
trunk/src/lib/formats/tandy2k_dsk.c
r0r29383
1// license:BSD-3-Clause
2// copyright-holders:Curt Coder
3/*********************************************************************
4
5    formats/tandy2k_dsk.c
6
7    Tandy 2000 disk format
8
9*********************************************************************/
10
11#include "emu.h"
12#include "formats/tandy2k_dsk.h"
13
14tandy2k_format::tandy2k_format() : upd765_format(formats)
15{
16}
17
18const char *tandy2k_format::name() const
19{
20   return "tandy2k";
21}
22
23const char *tandy2k_format::description() const
24{
25   return "Tandy 2000 disk image";
26}
27
28const char *tandy2k_format::extensions() const
29{
30   return "dsk";
31}
32
33const tandy2k_format::format tandy2k_format::formats[] = {
34   {   // 720K 5.25 inch quad density - gaps unverified
35      floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
36      2000, 9, 80, 2, 512, {}, 1, {}, 80, 50, 22, 80
37   },
38   {}
39};
40
41const floppy_format_type FLOPPY_TANDY_2000_FORMAT = &floppy_image_format_creator<tandy2k_format>;
Property changes on: trunk/src/lib/formats/tandy2k_dsk.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/lib/formats/tandy2k_dsk.h
r0r29383
1// license:BSD-3-Clause
2// copyright-holders:Curt Coder
3/*********************************************************************
4
5    formats/tandy2k_dsk.h
6
7    Tandy 2000 disk format
8
9*********************************************************************/
10
11#ifndef BW2_DSK_H_
12#define BW2_DSK_H_
13
14#include "upd765_dsk.h"
15
16class tandy2k_format : public upd765_format {
17public:
18   tandy2k_format();
19
20   virtual const char *name() const;
21   virtual const char *description() const;
22   virtual const char *extensions() const;
23
24private:
25   static const format formats[];
26};
27
28extern const floppy_format_type FLOPPY_TANDY_2000_FORMAT;
29
30#endif
Property changes on: trunk/src/lib/formats/tandy2k_dsk.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/lib/lib.mak
r29382r29383
192192   $(LIBOBJ)/formats/st_dsk.o      \
193193   $(LIBOBJ)/formats/svi_cas.o     \
194194   $(LIBOBJ)/formats/svi_dsk.o     \
195   $(LIBOBJ)/formats/tandy2k_dsk.o \
195196   $(LIBOBJ)/formats/td0_dsk.o     \
196197   $(LIBOBJ)/formats/thom_cas.o    \
197198   $(LIBOBJ)/formats/thom_dsk.o    \
trunk/src/mess/includes/tandy2k.h
r29382r29383
88#include "bus/rs232/rs232.h"
99#include "cpu/i86/i186.h"
1010#include "cpu/mcs48/mcs48.h"
11#include "formats/tandy2k_dsk.h"
1112#include "imagedev/harddriv.h"
1213#include "machine/i8255.h"
1314#include "machine/i8251.h"
r29382r29383
161162   DECLARE_WRITE_LINE_MEMBER( kbdclk_w );
162163   DECLARE_WRITE_LINE_MEMBER( kbddat_w );
163164   DECLARE_READ8_MEMBER( irq_callback );
164   DECLARE_WRITE_LINE_MEMBER( fdc_drq );
165   DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
166   DECLARE_WRITE_LINE_MEMBER( fdc_hdl_w );
165167   DECLARE_WRITE_LINE_MEMBER(write_centronics_ack);
166168   DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
167169   DECLARE_WRITE_LINE_MEMBER(write_centronics_perror);
r29382r29383
169171   DECLARE_WRITE_LINE_MEMBER(write_centronics_fault);
170172   CRT9021_DRAW_CHARACTER_MEMBER( vac_draw_character );
171173   TIMER_DEVICE_CALLBACK_MEMBER( vidldsh_tick );
174   DECLARE_FLOPPY_FORMATS( floppy_formats );
172175
173176   enum
174177   {
trunk/src/mess/drivers/tandy2k.c
r29382r29383
44
55    Tandy 2000
66
7    Skeleton driver.
8
97****************************************************************************/
108
119/*
1210
1311    TODO:
1412
13    - floppy
14       - HDL is also connected to WP/TS input where TS is used to detect motor status
15       - 3 second motor off delay timer
16    - DMA
1517   - video (video RAM is at memory top - 0x1400, i.e. 0x1ec00)
16    - DMA
17    - floppy
1818    - keyboard ROM
1919    - hires graphics board
2020    - WD1010
r29382r29383
146146   m_pit->write_gate2(BIT(data, 4));
147147
148148   // FDC reset
149   if(BIT(data, 5))
149   if(!BIT(data, 5))
150150      m_fdc->reset();
151151
152152   // timer 0 enable
r29382r29383
665665
666666// Intel 8272 Interface
667667
668WRITE_LINE_MEMBER( tandy2k_state::fdc_drq )
668WRITE_LINE_MEMBER( tandy2k_state::fdc_drq_w )
669669{
670670   dma_request(0, state);
671671}
672672
673WRITE_LINE_MEMBER( tandy2k_state::fdc_hdl_w )
674{
675   m_floppy0->mon_w(!state);
676   m_floppy1->mon_w(!state);
677}
678
679FLOPPY_FORMATS_MEMBER( tandy2k_state::floppy_formats )
680   FLOPPY_TANDY_2000_FORMAT
681FLOPPY_FORMATS_END
682
673683static SLOT_INTERFACE_START( tandy2k_floppies )
674684   SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
675685SLOT_INTERFACE_END
r29382r29383
715725
716726   m_char_ram.allocate(0x1000);
717727
718   // HACK these should be connected to FDC HLD output
719   m_floppy0->mon_w(0);
720   m_floppy1->mon_w(0);
721
722728   // register for state saving
723729   save_item(NAME(m_dma_mux));
724730   save_item(NAME(m_kbdclk));
r29382r29383
810816   MCFG_PIT8253_OUT2_HANDLER(WRITELINE(tandy2k_state, rfrqpulse_w))
811817
812818   MCFG_PIC8259_ADD(I8259A_0_TAG, DEVWRITELINE(I80186_TAG, i80186_cpu_device, int0_w), VCC, NULL)
819   
813820   MCFG_PIC8259_ADD(I8259A_1_TAG, DEVWRITELINE(I80186_TAG, i80186_cpu_device, int1_w), VCC, NULL)
821   
814822   MCFG_I8272A_ADD(I8272A_TAG, true)
815823   downcast<i8272a_device *>(device)->set_select_lines_connected(true);
816824   MCFG_UPD765_INTRQ_CALLBACK(DEVWRITELINE(I8259A_0_TAG, pic8259_device, ir4_w))
817   MCFG_UPD765_DRQ_CALLBACK(WRITELINE(tandy2k_state, fdc_drq))
818   MCFG_FLOPPY_DRIVE_ADD(I8272A_TAG ":0", tandy2k_floppies, "525qd", floppy_image_device::default_floppy_formats)
819   MCFG_FLOPPY_DRIVE_ADD(I8272A_TAG ":1", tandy2k_floppies, "525qd", floppy_image_device::default_floppy_formats)
825   MCFG_UPD765_DRQ_CALLBACK(WRITELINE(tandy2k_state, fdc_drq_w))
826   MCFG_UPD765_HDL_CALLBACK(WRITELINE(tandy2k_state, fdc_hdl_w))
827   MCFG_FLOPPY_DRIVE_ADD(I8272A_TAG ":0", tandy2k_floppies, "525qd", tandy2k_state::floppy_formats)
828   MCFG_FLOPPY_DRIVE_ADD(I8272A_TAG ":1", tandy2k_floppies, "525qd", tandy2k_state::floppy_formats)
820829
821830   MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "image")
822831   MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tandy2k_state, write_centronics_ack))

Previous 199869 Revisions Next


© 1997-2024 The MAME Team