diff --git a/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/UserInterfaceState.xcuserstate b/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/UserInterfaceState.xcuserstate index a44dcfb..a0d29ea 100644 Binary files a/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/UserInterfaceState.xcuserstate and b/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist b/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist index 5b08e5b..a085337 100644 --- a/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist +++ b/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist @@ -3,10 +3,22 @@ version = "1.0"> + contextName = "HiRes.initMetal():HiRes.swift"> + value = "mtlBufferB"> + + + + + + + + @@ -14,53 +26,30 @@ contextName = "HiRes.compute():HiRes.swift"> + value = "UnsafeRawBufferPointer(result)"> + value = "computePipelineState.maxTotalThreadsPerThreadgroup"> - - - - - - - - - - - - - - - - - - + contextName = "AND:6502_instr_logic.h"> + contextName = "specialized closure #1 in DebuggerViewController.DisplayDisassembly():DebuggerViewController.swift"> + value = "line_number"> + value = "currentScrollLine"> + + @@ -85,10 +74,16 @@ + contextName = "ViewController.mouseMoved(with:):ViewController.swift"> + value = "oldLocation"> + + + + @@ -107,18 +102,30 @@ value = "disassLineRange[forLine]"> + value = "disassLineRange.count"> + value = "disassLineRange"> + contextName = "closure #1 in ViewController.Update():ViewController.swift"> + value = "MEMcfg.is_80STORE"> + + + + + + + + @@ -158,14 +165,17 @@ contextName = "HiRes.draw(_:):HiRes.swift"> + value = "HiRes.blockCols"> + value = "ctx?.data"> + + @@ -175,24 +185,21 @@ - - + + + + - - - - + value = "disass_addr_min"> @@ -228,7 +235,7 @@ value = "m6502.PC"> + value = "line_number"> @@ -317,6 +324,9 @@ + + @@ -353,6 +363,14 @@ + + + + + + @@ -370,17 +388,6 @@ - - - - - - - - @@ -452,12 +459,33 @@ + + + + + + + + + + + + + + @@ -506,7 +534,7 @@ value = "m6502_saved.PC"> + value = "isCurrentLine"> @@ -515,7 +543,7 @@ value = "m6502.PC"> + value = "scroll_line_number"> @@ -529,7 +557,7 @@ value = "textDisplay_height_diff"> + value = "textDisplay_width_diff"> @@ -541,7 +569,7 @@ value = "textDisplay.bounds"> + value = "textDisplay.frame"> @@ -607,10 +635,10 @@ contextName = "set_flags_NZC:common.h"> + value = "(unsigned)0xFF"> + value = "(unsigned)test "> @@ -720,10 +748,10 @@ value = "MEMcfg.int_Cx_ROM"> + value = "m6502.clkfrm"> + value = "(int)IOframe"> @@ -734,10 +762,10 @@ value = "Apple2_64K_AUX + 0xC600"> + value = "Apple2_64K_RAM + 0xC600"> + value = "(void*)rom"> @@ -840,9 +868,6 @@ - - @@ -851,6 +876,9 @@ + + @@ -869,16 +897,16 @@ contextName = "DisplayScrollView.scrollWheel(with:):DisplayScrollView.swift"> + value = "textView.defaultParagraphStyle?.lineSpacing"> + value = "subviews[1].subviews"> + value = "documentView"> @@ -978,25 +1006,25 @@ contextName = "_fetch_dbg:mmio.c"> + value = "disassembly.pOpcode"> + value = "memread8_low(m6502.PC)"> + + - - + value = "scroll_line_number"> @@ -1079,7 +1107,7 @@ value = "m6502.PC"> + value = "isCurrentLine"> @@ -1195,7 +1223,7 @@ contextName = "LoRes.Update():LoRes.swift"> + value = "UInt8( (block >> 4) & 0x0F )"> @@ -1204,7 +1232,7 @@ value = "UInt8(block & 4)"> + value = "blockChanged[ screenIdx ]"> @@ -1261,10 +1289,10 @@ value = "m6502"> + value = "m6502.PC"> + value = "m6502.clkfrm"> @@ -1273,10 +1301,10 @@ value = "Apple2_64K_AUX + 0x3600"> + value = "(void*)Apple2_64K_RAM"> + value = "Apple2_64K_RAM + 0x3600"> @@ -1290,7 +1318,7 @@ value = "pdl_value[pdl]"> + value = "normalized_time"> @@ -1302,7 +1330,7 @@ value = "1 * 512 * (1 - ( 3300 / 3300.0 ))"> + value = "normalized_time >= pdl_value[pdl] ? 255 : 0"> @@ -1321,10 +1349,10 @@ contextName = "ToolBarController.GamePort(_:):ToolBarController.swift"> + value = "ViewController.current?.mouseCursorHidden"> + value = "ViewController.current?.mouseCursorJoystickEmulation"> @@ -1547,7 +1575,7 @@ value = "m6502.PC"> + value = "m6502.debugger.on"> @@ -1556,7 +1584,7 @@ value = "frameCounter"> + value = "m6502.clkfrm"> @@ -1582,17 +1610,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + value = "m6502.debugger.SP"> + value = "m6502.SP"> @@ -1617,7 +1733,7 @@ value = "new"> + value = "WOZtmp.shift16"> @@ -1629,78 +1745,7 @@ value = "(1 << i) - 1"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + value = "WOZwrite.shift16"> diff --git a/A2Mac/A2Mac.entitlements b/A2Mac/A2Mac.entitlements index 19afff1..1046e77 100644 --- a/A2Mac/A2Mac.entitlements +++ b/A2Mac/A2Mac.entitlements @@ -3,7 +3,7 @@ com.apple.security.app-sandbox - + com.apple.security.files.user-selected.read-write diff --git a/A2Mac/ViewController.swift b/A2Mac/ViewController.swift index 242cd4d..9ea9f18 100644 --- a/A2Mac/ViewController.swift +++ b/A2Mac/ViewController.swift @@ -987,7 +987,12 @@ class ViewController: NSViewController { // 40 col if videoMode.col80 == 0 { if MEMcfg.txt_page_2 == 0 { - textBufferPointer = ViewController.textPage1Pointer + if (MEMcfg.RD_AUX_MEM == 0) { + textBufferPointer = ViewController.textPage1Pointer + } + else { + textBufferPointer = ViewController.textIntBufferPointer + } } else { textBufferPointer = ViewController.textPage2Pointer @@ -2018,6 +2023,8 @@ class ViewController: NSViewController { func openDiskImage( url: URL ) { + woz_eject() + switch url.pathExtension.uppercased() { case "WOZ": @@ -2031,8 +2038,6 @@ class ViewController: NSViewController { } case "DSK", "DO", "PO" : - woz_eject() - let err = dsk2woz( url.path ) if err == WOZ_ERR_OK { diff --git a/src/cpu/6502.h b/src/cpu/6502.h index 9f1c130..906cb4f 100644 --- a/src/cpu/6502.h +++ b/src/cpu/6502.h @@ -246,8 +246,8 @@ extern double mhz; //#define GAME_VIDEO_DIV 1U // (GAME_FPS / DEFAULT_FPS) //#define GAME_SPKR_DIV 6U // 16U #define GAME_FPS 180U // 300U // 240U // 180U // 120U -#define GAME_VIDEO_DIV 1U // 4U // (GAME_FPS / DEFAULT_FPS) -#define GAME_SPKR_DIV 1U // 8U // 16U +#define GAME_VIDEO_DIV 3U // 4U // (GAME_FPS / DEFAULT_FPS) +#define GAME_SPKR_DIV 3U // 8U // 16U extern unsigned int video_fps_divider; extern unsigned int fps; diff --git a/src/cpu/jit/instructions/6502_instr_load_store.h b/src/cpu/jit/instructions/6502_instr_load_store.h index f2fd20a..f831ddf 100644 --- a/src/cpu/jit/instructions/6502_instr_load_store.h +++ b/src/cpu/jit/instructions/6502_instr_load_store.h @@ -52,6 +52,16 @@ INSTR void LDA( uint8_t src ) { set_flags_NZ(m6502.A = src); #endif } +//INSTR void LDA_imm( uint8_t src ) { +// dbgPrintf("LDA(%02X) ", src); +// disPrintf(disassembly.inst, "LDA"); +//#ifndef DISASSEMBLER +// if (src == 0x4C) { +// m6502.interrupt = BREAK; +// } +// set_flags_NZ(m6502.A = src); +//#endif +//} /** LDX Load Index X with Memory diff --git a/src/dev/mem/mmio.c b/src/dev/mem/mmio.c index 4c57918..a89498a 100644 --- a/src/dev/mem/mmio.c +++ b/src/dev/mem/mmio.c @@ -1043,11 +1043,14 @@ INLINE uint16_t memread16_high( uint16_t addr ) { } INLINE uint16_t memread16( uint16_t addr ) { -// if (addr >= 0xC000) { -// return memread16_high(addr); -// } - - return memread16_low(addr); + if (addr >= 0xC000) { + return memread16_high(addr); + } + if (addr >= 0x200) { + return memread16_low(addr); + } + + return memread16_zp(addr); } INLINE uint16_t _memread16_dbg( uint16_t addr ) { check_mem_rd_bp(addr); @@ -1063,17 +1066,13 @@ INLINE uint8_t _memread( uint16_t addr ) { if (addr < 0xC100) { return ioRead(addr); } -// return memread8_paged(addr); return memread8_high(addr); } if (addr >= 0x200) { return memread8_low(addr); } -// return memread8_paged(addr); return memread8_zp(addr); - -// return memread8(addr); } INLINE uint8_t _memread_dbg( uint16_t addr ) { @@ -1083,17 +1082,13 @@ INLINE uint8_t _memread_dbg( uint16_t addr ) { INLINE uint8_t _memread_dis( uint16_t addr ) { if (addr >= 0xC000) { -// return memread8_paged(addr); return memread8_high(addr); } if (addr >= 0x200) { return memread8_low(addr); } -// return memread8_paged(addr); return memread8_zp(addr); - -// return memread8(addr); } @@ -1121,11 +1116,16 @@ INLINE void _memwrite8_zp( uint16_t addr, uint8_t data ) { shadowZPSTCKMEM[addr] = data; } INLINE void _memwrite8_low( uint16_t addr, uint8_t data ) { - if ((addr >= 0x400) && (addr < 0x800)) { - if ((data == 0x00) || (data == 0xFF)) { - m6502.interrupt = BREAK; - } - } +// if ((addr >= 0x400) && (addr < 0x800)) { +// if ((data == 0x00) || (data == 0xFF)) { +// m6502.interrupt = BREAK; +// } +// } +// if ((addr >= 0x3F5) && (addr <= 0x3F7)) { +// if (data == 0x4C) { +// m6502.interrupt = BREAK; +// } +// } WRLOMEM[addr] = data; } INLINE void _memwrite8_bank( uint16_t addr, uint8_t data ) { @@ -1173,7 +1173,14 @@ INLINE uint8_t _fetch(void) { m6502.clktime++; } #endif - return memread8_low( m6502.PC++ ); + if (m6502.PC >= 0xC000) { + return memread8_high( m6502.PC++ ); + } +// TODO: We might want to run code on the ZERO PAGE? +// if (m6502.PC >= 0x200) { + return memread8_low( m6502.PC++ ); +// } +// return memread8_zp( m6502.PC++ ); } INLINE uint8_t _fetch_dis(void) { @@ -1373,7 +1380,7 @@ INLINE uint8_t _addr_zp_dis(void) { return _fetch_dis(); } INLINE uint8_t _src_zp(void) { - return memread8(_addr_zp()); + return memread8_zp(_addr_zp()); } INLINE uint8_t _src_zp_dbg(void) { return _memread_dbg(_addr_zp_dbg()); @@ -1401,7 +1408,7 @@ INLINE uint8_t _src_zp_dis(void) { effective address is word in (LL, LL + 1), inc. without carry: C.w($00LL) **/ INLINE uint16_t _addr_ind(void) { - return memread16( _fetch() ); + return memread16_zp( _fetch() ); } INLINE uint16_t _addr_ind_dbg(void) { uint16_t addr = _memread16_dbg(_fetch()); @@ -1430,7 +1437,7 @@ INLINE uint8_t _src_ind_dis(void) { effective address is word in (LL + X, LL + X + 1), inc. without carry: C.w($00LL + X) **/ INLINE uint16_t _addr_ind_X(void) { - return memread16( (uint8_t)(_fetch() + m6502.X) ); + return memread16_zp( (uint8_t)(_fetch() + m6502.X) ); } INLINE uint16_t _addr_ind_X_rd_dbg(void) { return _memread16_dbg( (uint8_t)(_fetch() + m6502.X) ); @@ -1444,7 +1451,7 @@ INLINE uint16_t _addr_ind_X_dis(void) { _disPrintf(disassembly.oper, sizeof(disassembly.oper), "($%02X,X)", memread8(m6502.PC) ); _disPrintf(disassembly.comment, sizeof(disassembly.comment), "ind_addr:%04X", memread16( memread8(m6502.PC) + m6502.X) ); - return memread16( (uint8_t)(_fetch_dis() + m6502.X) ); + return memread16_zp( (uint8_t)(_fetch_dis() + m6502.X) ); } INLINE uint8_t _src_X_ind(void) { return _memread( _addr_ind_X() ); @@ -1491,7 +1498,7 @@ INLINE uint16_t _addr_ind_ind_X_dis(void) { effective address is word in (LL, LL + 1) incremented by Y with carry: C.w($00LL) + Y **/ INLINE uint16_t _addr_ind_Y(void) { - return memread16( _fetch() ) + m6502.Y; + return memread16_zp( _fetch() ) + m6502.Y; } INLINE uint16_t _addr_ind_Y_dbg(void) { uint16_t addr = _memread16_dbg( _fetch() ) + m6502.Y; @@ -1537,13 +1544,13 @@ INLINE uint8_t _addr_zp_X_dis(void) { return _fetch_dis() + m6502.X; } INLINE uint8_t _src_zp_X(void) { - return memread8(_addr_zp_X()); + return memread8_zp(_addr_zp_X()); } INLINE uint8_t _src_zp_X_dbg(void) { return _memread_dbg(_addr_zp_X()); } INLINE uint8_t _src_zp_X_dis(void) { - return memread8(_addr_zp_X_dis()); + return memread8_zp(_addr_zp_X_dis()); } //INLINE uint8_t * dest_zp_X() { // return WRLOMEM + addr_zp_X(); @@ -1568,13 +1575,13 @@ INLINE uint8_t _addr_zp_Y_dis(void) { return _fetch_dis() + m6502.Y; } INLINE uint8_t _src_zp_Y(void) { - return memread8(_addr_zp_Y()); + return memread8_zp(_addr_zp_Y()); } INLINE uint8_t _src_zp_Y_dbg(void) { return _memread_dbg(_addr_zp_Y()); } INLINE uint8_t _src_zp_Y_dis(void) { - return memread8(_addr_zp_Y_dis()); + return memread8_zp(_addr_zp_Y_dis()); } //INLINE uint8_t * dest_zp_Y() { // return WRLOMEM + addr_zp_Y(); @@ -1608,7 +1615,7 @@ void auxMemorySelect( MEMcfg_t newMEMcfg ) { // save old content to shadow memory - if ( ( newWriteMEM != currentLowWRMEM ) && (WRLOMEM == Apple2_64K_MEM) ) { + if ( ( newWriteMEM != WRLOMEM ) && (WRLOMEM == Apple2_64K_MEM) ) { // save the content of Shadow Memory memcpy( (void*) currentLowWRMEM + 0x200, WRLOMEM + 0x200, 0xBE00); }