Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
716 lvd 1
#include "std.h"
2
 
3
#include "emul.h"
4
#include "vars.h"
5
#include "draw.h"
6
#include "memory.h"
7
#include "tape.h"
8
#include "debug.h"
9
#include "sound.h"
10
#include "atm.h"
11
#include "gs.h"
12
#include "emulkeys.h"
13
#include "z80/op_system.h"
14
#include "z80/op_noprefix.h"
15
#include "fontatm2.h"
16
#include "sdcard.h"
17
#include "zc.h"
18
 
19
#include "util.h"
20
 
21
namespace z80gs
22
{
23
void flush_gs_z80();
24
}
25
 
26
#ifdef MOD_FASTCORE
27
   namespace z80fast
28
   {
29
      #include "z80_main.inl"
30
   }
31
#else
32
   #define z80fast z80dbg
33
#endif
34
 
35
#ifdef MOD_DEBUGCORE
36
   namespace z80dbg
37
   {
38
      #define Z80_DBG
39
      #include "z80_main.inl"
40
      #undef Z80_DBG
41
   }
42
#else
43
   #define z80dbg z80fast
44
#endif
45
 
46
void out(unsigned port, unsigned char val);
47
 
48
u8 __fastcall Xm(u32 addr)
49
{
50
    return z80fast::xm(addr);
51
}
52
 
53
u8 __fastcall Rm(u32 addr)
54
{
55
    return z80fast::rm(addr);
56
}
57
 
58
void __fastcall Wm(u32 addr, u8 val)
59
{
60
    z80fast::wm(addr, val);
61
}
62
 
63
u8 __fastcall DbgXm(u32 addr)
64
{
65
    return z80dbg::xm(addr);
66
}
67
 
68
u8 __fastcall DbgRm(u32 addr)
69
{
70
    return z80dbg::rm(addr);
71
}
72
 
73
void __fastcall DbgWm(u32 addr, u8 val)
74
{
75
    z80dbg::wm(addr, val);
76
}
77
 
78
void reset(ROM_MODE mode)
79
{
80
   comp.pEFF7 &= conf.EFF7_mask;
81
   comp.pEFF7 |= EFF7_GIGASCREEN; // [vv] disable turbo
82
   {
83
                conf.frame = frametime;
84
                cpu.SetTpi(conf.frame);
85
//                if ((conf.mem_model == MM_PENTAGON)&&(comp.pEFF7 & EFF7_GIGASCREEN))conf.frame = 71680; //removed 0.37
86
                apply_sound();
87
   } //Alone Coder 0.36.4
88
   comp.t_states = 0; comp.frame_counter = 0;
89
   comp.p7FFD = comp.pDFFD = comp.pFDFD = comp.p1FFD = 0;
90
   comp.p7EFD = 0;
91
 
92
   comp.p00 = comp.p80FD = 0; // quorum
93
 
94
   comp.pBF = 0; // ATM3
95
   comp.pBE = 0; // ATM3
96
 
97
   if (conf.mem_model == MM_ATM710 || conf.mem_model == MM_ATM3)
98
   {
99
       switch(mode)
100
       {
101
       case RM_DOS:
102
           // ������ �������, ������ cpm, ��������� ���������� ������
103
           // ��������� ������������ ����������, ���������� �������� ����������
104
           set_atm_FF77(0x4000 | 0x200 | 0x100, 0x80 | 0x40 | 0x20 | 3);
105
           comp.pFFF7[0] = 0x100 | 1; // trdos
106
           comp.pFFF7[1] = 0x200 | 5; // ram 5
107
           comp.pFFF7[2] = 0x200 | 2; // ram 2
108
           comp.pFFF7[3] = 0x200;     // ram 0
109
 
110
           comp.pFFF7[4] = 0x100 | 1; // trdos
111
           comp.pFFF7[5] = 0x200 | 5; // ram 5
112
           comp.pFFF7[6] = 0x200 | 2; // ram 2
113
           comp.pFFF7[7] = 0x200;     // ram 0
114
       break;
115
       default:
116
           set_atm_FF77(0,0);
117
       }
118
   }
119
 
120
   if (conf.mem_model == MM_ATM450)
121
   {
122
       switch(mode)
123
       {
124
       case RM_DOS:
125
           set_atm_aFE(0x80|0x60);
126
           comp.aFB = 0;
127
       break;
128
       default:
129
           set_atm_aFE(0x80);
130
           comp.aFB = 0x80;
131
       }
132
   }
133
 
134
   comp.flags = 0;
135
   comp.active_ay = 0;
136
 
137
   cpu.reset();
138
   reset_tape();
139
   ay[0].reset();
140
   ay[1].reset();
141
   Saa1099.reset();
142
 
143
   if (conf.sound.ay_scheme == AY_SCHEME_CHRV)
144
   {
145
        out(0xfffd,0xff); //0.36.7
146
        //printf("tfmstatuson0=%d\n",tfmstatuson0);
147
   };//Alone Coder
148
 
149
   #ifdef MOD_GS
150
   if (conf.sound.gsreset)
151
       reset_gs();
152
   #endif
153
 
154
   #ifdef MOD_VID_VD
155
   comp.vdbase = 0; comp.pVD = 0;
156
   #endif
157
 
158
   if (conf.mem_model == MM_ATM450 ||
159
       conf.mem_model == MM_ATM710 ||
160
       conf.mem_model == MM_ATM3 ||
161
       conf.mem_model == MM_PROFI)
162
       load_spec_colors();
163
 
164
   comp.ide_hi_byte_r = 0;
165
   comp.ide_hi_byte_w = 0;
166
   comp.ide_hi_byte_w1 = 0;
167
   hdd.reset();
168
   input.atm51.reset();
169
   Zc.Reset();
170
 
171
   if ((!conf.trdos_present && mode == RM_DOS) ||
172
       (!conf.cache && mode == RM_CACHE))
173
       mode = RM_SOS;
174
 
175
   set_mode(mode);
176
}