Subversion Repositories pentevo

Rev

Rev 796 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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