Subversion Repositories pentevo

Rev

Rev 716 | Blame | Last modification | View Log | Download | RSS feed

  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. }
  177.