diff --git a/src/emucore/CartMVC.cxx b/src/emucore/CartMVC.cxx index 4397c0a96..3fc716772 100755 --- a/src/emucore/CartMVC.cxx +++ b/src/emucore/CartMVC.cxx @@ -30,16 +30,22 @@ @author Rob Bairos */ -#define LO_JUMP_BYTE(X) ((X) & 0xff) -#define HI_JUMP_BYTE(X) ((((X) & 0xff00) >> 8) | 0x10) +namespace { + static constexpr uInt8 LO_JUMP_BYTE(uInt16 b) { + return b & 0xff; + } + static constexpr uInt8 HI_JUMP_BYTE(uInt16 b) { + return ((b & 0xff00) >> 8) | 0x10; + } -#define COLOR_BLUE 0x9A -// #define COLOR_WHITE 0x0E + static constexpr uInt8 COLOR_BLUE = 0x9A; + // static constexpr uInt8 COLOR_WHITE = 0x0E; -#define OSD_FRAMES 180 -#define BACK_SECONDS 10 + static constexpr uInt8 OSD_FRAMES = 180; + static constexpr int BACK_SECONDS = 10; -#define TITLE_CYCLES 1000000 + static constexpr int TITLE_CYCLES = 1000000; +} // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /** @@ -48,7 +54,7 @@ class StreamReader : public Serializable { public: - StreamReader() = default; + StreamReader() { myBuffer1.fill(0); myBuffer2.fill(0); } bool open(const string& path) { myFile = Serializer(path, Serializer::Mode::ReadOnly); @@ -83,7 +89,7 @@ class StreamReader : public Serializable } void swapField(bool index, bool odd) { - uInt8* offset = index ? myBuffer1 : myBuffer2; + uInt8* offset = index ? myBuffer1.data() : myBuffer2.data(); myVersion = offset + VERSION_DATA_OFFSET; myFrame = offset + FRAME_DATA_OFFSET; @@ -106,9 +112,9 @@ class StreamReader : public Serializable { myFile.setPosition(offset); if(index) - myFile.getByteArray(myBuffer1, CartridgeMVC::MVC_FIELD_SIZE); + myFile.getByteArray(myBuffer1.data(), myBuffer1.size()); else - myFile.getByteArray(myBuffer2, CartridgeMVC::MVC_FIELD_SIZE); + myFile.getByteArray(myBuffer2.data(), myBuffer2.size()); return true; } @@ -136,8 +142,8 @@ class StreamReader : public Serializable bool save(Serializer& out) const override { try { - out.putByteArray(myBuffer1, CartridgeMVC::MVC_FIELD_SIZE); - out.putByteArray(myBuffer2, CartridgeMVC::MVC_FIELD_SIZE); + out.putByteArray(myBuffer1.data(), myBuffer1.size()); + out.putByteArray(myBuffer2.data(), myBuffer2.size()); #if 0 // FIXME - determine whether we need to load/save this const uInt8* myAudio @@ -160,8 +166,8 @@ class StreamReader : public Serializable bool load(Serializer& in) override { try { - in.getByteArray(myBuffer1, CartridgeMVC::MVC_FIELD_SIZE); - in.getByteArray(myBuffer2, CartridgeMVC::MVC_FIELD_SIZE); + in.getByteArray(myBuffer1.data(), myBuffer1.size()); + in.getByteArray(myBuffer2.data(), myBuffer2.size()); #if 0 // FIXME - determine whether we need to load/save this const uInt8* myAudio @@ -203,8 +209,8 @@ class StreamReader : public Serializable const uInt8* myVersion{nullptr}; const uInt8* myFrame{nullptr}; - uInt8 myBuffer1[CartridgeMVC::MVC_FIELD_SIZE]; - uInt8 myBuffer2[CartridgeMVC::MVC_FIELD_SIZE]; + std::array<uInt8, CartridgeMVC::MVC_FIELD_SIZE> myBuffer1; + std::array<uInt8, CartridgeMVC::MVC_FIELD_SIZE> myBuffer2; Serializer myFile; size_t myFileSize{0}; @@ -292,66 +298,51 @@ class MovieInputs : public Serializable Various kernel, OSD and scale definitions @author Rob Bairos */ - -#define TIMECODE_HEIGHT 12 -#define MAX_LEVEL 11 -#define DEFAULT_LEVEL 6 -#define BLANK_LINE_SIZE (30+3+37-1) // 70-1 - +static constexpr uInt8 + TIMECODE_HEIGHT = 12, + MAX_LEVEL = 11, + DEFAULT_LEVEL = 6, + BLANK_LINE_SIZE = (30+3+37-1); // 70-1 // Automatically generated // Several not used -// #define addr_kernel_48 0x800 -#define addr_transport_direction 0x880 -#define addr_transport_buttons 0x894 -#define addr_right_line 0x948 -#define addr_set_gdata6 0x948 -#define addr_set_aud_right 0x94e -#define addr_set_gdata9 0x950 -#define addr_set_gcol9 0x954 -#define addr_set_gcol6 0x956 -#define addr_set_gdata5 0x95a -#define addr_set_gcol5 0x95e -#define addr_set_gdata8 0x962 -#define addr_set_colubk_r 0x966 -#define addr_set_gcol7 0x96a -#define addr_set_gdata7 0x96e -#define addr_set_gcol8 0x972 -// #define addr_left_line 0x980 -#define addr_set_gdata1 0x982 -#define addr_set_gcol1 0x988 -#define addr_set_aud_left 0x98c -#define addr_set_gdata4 0x990 -#define addr_set_gcol4 0x992 -#define addr_set_gdata0 0x994 -#define addr_set_gcol0 0x998 -#define addr_set_gdata3 0x99c -#define addr_set_colupf_l 0x9a0 -#define addr_set_gcol2 0x9a4 -#define addr_set_gdata2 0x9a8 -#define addr_set_gcol3 0x9ac -#define addr_pick_continue 0x9be -// #define addr_main_start 0xa00 -// #define addr_aud_bank_setup 0xa0c -// #define addr_tg0 0xa24 -// #define addr_title_again 0xa3b -// #define addr_wait_cnt 0xa77 -#define addr_end_lines 0xa80 -#define addr_set_aud_endlines 0xa80 -#define addr_set_overscan_size 0xa9a -#define addr_set_vblank_size 0xab0 -#define addr_pick_extra_lines 0xab9 -#define addr_pick_transport 0xac6 -// #define addr_wait_lines 0xac9 -// #define addr_transport_done1 0xada -// #define addr_draw_title 0xb00 -#define addr_title_loop 0xb50 -// #define addr_black_bar 0xb52 -// #define addr_animate_bar1 0xb58 -// #define addr_animate_bar_again1 0xb5a -// #define addr_animate_dex1 0xb65 -#define addr_audio_bank 0xb80 -// #define addr_reset_loop 0xbfa +static constexpr uInt16 + addr_transport_direction = 0x880, + addr_transport_buttons = 0x894, + addr_right_line = 0x948, + addr_set_gdata6 = 0x948, + addr_set_aud_right = 0x94e, + addr_set_gdata9 = 0x950, + addr_set_gcol9 = 0x954, + addr_set_gcol6 = 0x956, + addr_set_gdata5 = 0x95a, + addr_set_gcol5 = 0x95e, + addr_set_gdata8 = 0x962, + addr_set_colubk_r = 0x966, + addr_set_gcol7 = 0x96a, + addr_set_gdata7 = 0x96e, + addr_set_gcol8 = 0x972, + addr_set_gdata1 = 0x982, + addr_set_gcol1 = 0x988, + addr_set_aud_left = 0x98c, + addr_set_gdata4 = 0x990, + addr_set_gcol4 = 0x992, + addr_set_gdata0 = 0x994, + addr_set_gcol0 = 0x998, + addr_set_gdata3 = 0x99c, + addr_set_colupf_l = 0x9a0, + addr_set_gcol2 = 0x9a4, + addr_set_gdata2 = 0x9a8, + addr_set_gcol3 = 0x9ac, + addr_pick_continue = 0x9be, + addr_end_lines = 0xa80, + addr_set_aud_endlines = 0xa80, + addr_set_overscan_size = 0xa9a, + addr_set_vblank_size = 0xab0, + addr_pick_extra_lines = 0xab9, + addr_pick_transport = 0xac6, + addr_title_loop = 0xb50, + addr_audio_bank = 0xb80; // scale adjustments, automatically generated static constexpr uInt8 scale0[16] = { @@ -399,7 +390,7 @@ static constexpr uInt8 shiftBright[16 + MAX_LEVEL - 1] = { }; // Compiled kernel -static constexpr unsigned char kernelROM[] = { +static constexpr uInt8 kernelROM[] = { 133, 2, 185, 50, 248, 133, 27, 185, 62, 248, 133, 28, 185, 74, 248, 133, 27, 185, 86, 248, 133, 135, 185, 98, 248, 190, 110, 248, 132, 136, 164, 135, 132, 28, 133, 27, 134, 28, 134, 27, 164, 136, 102, 137, 176, 210, 136, 16, @@ -745,7 +736,7 @@ static constexpr uInt8 levelBarsOddData[] = { class MovieCart : public Serializable { public: - MovieCart() = default; + MovieCart() { myROM.fill(0); } bool init(const string& path); bool process(uInt16 address); @@ -803,7 +794,7 @@ class MovieCart : public Serializable void updateTransport(); // data - uInt8 myROM[1024]; + std::array<uInt8, 1_KB> myROM; // title screen state int myTitleCycles{0}; @@ -848,7 +839,7 @@ class MovieCart : public Serializable // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool MovieCart::init(const string& path) { - memcpy(myROM, kernelROM, 1024); + std::copy_n(kernelROM, 1_KB, myROM.data()); myTitleCycles = 0; myTitleState = TitleState::Display; @@ -1463,7 +1454,7 @@ bool MovieCart::save(Serializer& out) const { try { - out.putByteArray(myROM, 1024); + out.putByteArray(myROM.data(), myROM.size()); // title screen state out.putInt(myTitleCycles); @@ -1517,7 +1508,7 @@ bool MovieCart::load(Serializer& in) { try { - in.getByteArray(myROM, 1024); + in.getByteArray(myROM.data(), myROM.size()); // title screen state myTitleCycles = in.getInt();