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 0f13248..ad4caae 100644 --- a/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist +++ b/A2Mac.xcodeproj/project.xcworkspace/xcuserdata/trudnai.xcuserdatad/xcdebugger/Expressions.xcexplist @@ -13,9 +13,6 @@ - - @@ -36,6 +33,9 @@ + + @@ -142,6 +142,20 @@ + + + + + + + + + + @@ -177,17 +191,6 @@ - - - - - - - - @@ -256,7 +259,7 @@ contextName = "HiRes.draw(_:):HiRes.swift"> + value = "(blockH7 | ( block & bitMask ))"> @@ -283,13 +286,21 @@ value = "shadowScreen"> + value = "ctx?.height"> + value = "ctx?.bitsPerComponent"> + + + + + + @@ -377,6 +388,14 @@ + + + + + + diff --git a/A2Mac.xcodeproj/xcshareddata/xcschemes/A2Mac.xcscheme b/A2Mac.xcodeproj/xcshareddata/xcschemes/A2Mac.xcscheme index 4ed658a..57b4eb1 100644 --- a/A2Mac.xcodeproj/xcshareddata/xcschemes/A2Mac.xcscheme +++ b/A2Mac.xcodeproj/xcshareddata/xcschemes/A2Mac.xcscheme @@ -61,8 +61,8 @@ @@ -369,8 +369,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "923" - endingLineNumber = "923" + startingLineNumber = "879" + endingLineNumber = "879" landmarkName = "draw(_:)" landmarkType = "7"> @@ -385,8 +385,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "954" - endingLineNumber = "954" + startingLineNumber = "910" + endingLineNumber = "910" landmarkName = "draw(_:)" landmarkType = "7"> @@ -401,8 +401,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "951" - endingLineNumber = "951" + startingLineNumber = "907" + endingLineNumber = "907" landmarkName = "draw(_:)" landmarkType = "7"> @@ -417,8 +417,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "928" - endingLineNumber = "928" + startingLineNumber = "884" + endingLineNumber = "884" landmarkName = "draw(_:)" landmarkType = "7"> @@ -433,10 +433,10 @@ filePath = "A2Mac/ViewController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "341" - endingLineNumber = "341" - landmarkName = "keyUp(with:)" - landmarkType = "7"> + startingLineNumber = "344" + endingLineNumber = "344" + landmarkName = "ViewController" + landmarkType = "3"> @@ -481,8 +481,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "189" - endingLineNumber = "189" + startingLineNumber = "190" + endingLineNumber = "190" landmarkName = "HiRes" landmarkType = "3"> @@ -497,8 +497,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "164" - endingLineNumber = "164" + startingLineNumber = "165" + endingLineNumber = "165" landmarkName = "compute()" landmarkType = "7"> @@ -657,10 +657,10 @@ filePath = "A2Mac/ViewController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "558" - endingLineNumber = "558" - landmarkName = "ViewController" - landmarkType = "3"> + startingLineNumber = "611" + endingLineNumber = "611" + landmarkName = "viewDidLoad()" + landmarkType = "7"> @@ -939,8 +939,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "937" - endingLineNumber = "937" + startingLineNumber = "893" + endingLineNumber = "893" landmarkName = "draw(_:)" landmarkType = "7"> @@ -955,8 +955,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "950" - endingLineNumber = "950" + startingLineNumber = "906" + endingLineNumber = "906" landmarkName = "draw(_:)" landmarkType = "7"> @@ -971,8 +971,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "960" - endingLineNumber = "960" + startingLineNumber = "916" + endingLineNumber = "916" landmarkName = "draw(_:)" landmarkType = "7"> @@ -987,8 +987,8 @@ filePath = "A2Mac/HiRes.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "654" - endingLineNumber = "654" + startingLineNumber = "585" + endingLineNumber = "585" landmarkName = "hiresColorPixel(pixelAddr:pixel:prev:)" landmarkType = "7"> @@ -1003,8 +1003,8 @@ filePath = "src/cpu/6502.c" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "773" - endingLineNumber = "773" + startingLineNumber = "787" + endingLineNumber = "787" landmarkName = "read_rom(bundlePath, filename, rom, addr)" landmarkType = "9"> @@ -1019,8 +1019,8 @@ filePath = "src/cpu/6502.c" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "813" - endingLineNumber = "813" + startingLineNumber = "827" + endingLineNumber = "827" landmarkName = "rom_loadFile(bundlePath, filename)" landmarkType = "9"> @@ -1035,10 +1035,10 @@ filePath = "A2Mac/ViewController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "211" - endingLineNumber = "211" - landmarkName = "ViewController" - landmarkType = "3"> + startingLineNumber = "212" + endingLineNumber = "212" + landmarkName = "keyDown(with:)" + landmarkType = "7"> @@ -1067,8 +1067,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "490" - endingLineNumber = "490" + startingLineNumber = "491" + endingLineNumber = "491" landmarkName = "ioRead(addr)" landmarkType = "9"> @@ -1083,8 +1083,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "808" - endingLineNumber = "808" + startingLineNumber = "815" + endingLineNumber = "815" landmarkName = "unknown" landmarkType = "0"> @@ -1099,8 +1099,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "812" - endingLineNumber = "812" + startingLineNumber = "819" + endingLineNumber = "819" landmarkName = "memread16_low(addr)" landmarkType = "9"> @@ -1115,8 +1115,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "791" - endingLineNumber = "791" + startingLineNumber = "798" + endingLineNumber = "798" landmarkName = "unknown" landmarkType = "0"> @@ -1131,8 +1131,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "501" - endingLineNumber = "501" + startingLineNumber = "502" + endingLineNumber = "502" landmarkName = "ioRead(addr)" landmarkType = "9"> @@ -1147,8 +1147,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "816" - endingLineNumber = "816" + startingLineNumber = "823" + endingLineNumber = "823" landmarkName = "memread16(addr)" landmarkType = "9"> @@ -1163,8 +1163,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "820" - endingLineNumber = "820" + startingLineNumber = "827" + endingLineNumber = "827" landmarkName = "memread16(addr)" landmarkType = "9"> @@ -1179,8 +1179,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "534" - endingLineNumber = "534" + startingLineNumber = "535" + endingLineNumber = "535" landmarkName = "ioRead(addr)" landmarkType = "9"> @@ -1195,8 +1195,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "538" - endingLineNumber = "538" + startingLineNumber = "539" + endingLineNumber = "539" landmarkName = "ioRead(addr)" landmarkType = "9"> @@ -1211,8 +1211,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "430" - endingLineNumber = "430" + startingLineNumber = "431" + endingLineNumber = "431" landmarkName = "ioRead(addr)" landmarkType = "9"> @@ -1227,8 +1227,8 @@ filePath = "src/cpu/6502.c" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "748" - endingLineNumber = "748" + startingLineNumber = "762" + endingLineNumber = "762" landmarkName = "m6502_Run()" landmarkType = "9"> @@ -1243,8 +1243,8 @@ filePath = "src/dev/mem/mmio.h" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "418" - endingLineNumber = "418" + startingLineNumber = "419" + endingLineNumber = "419" landmarkName = "ioRead(addr)" landmarkType = "9"> @@ -1259,9 +1259,9 @@ filePath = "src/cpu/6502.c" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "788" - endingLineNumber = "788" - landmarkName = "read_rom(bundlePath, filename, rom, addr)" + startingLineNumber = "802" + endingLineNumber = "802" + landmarkName = "getFileSize(fullPath)" landmarkType = "9"> @@ -1275,8 +1275,8 @@ filePath = "A2Mac/ViewController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "407" - endingLineNumber = "407" + startingLineNumber = "410" + endingLineNumber = "410" landmarkName = "Update()" landmarkType = "7"> @@ -1291,8 +1291,8 @@ filePath = "A2Mac/ViewController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "524" - endingLineNumber = "524" + startingLineNumber = "575" + endingLineNumber = "575" landmarkName = "Update()" landmarkType = "7"> @@ -1307,8 +1307,8 @@ filePath = "A2Mac/ViewController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "516" - endingLineNumber = "516" + startingLineNumber = "519" + endingLineNumber = "519" landmarkName = "Update()" landmarkType = "7"> @@ -1323,8 +1323,8 @@ filePath = "A2Mac/ViewController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "477" - endingLineNumber = "477" + startingLineNumber = "480" + endingLineNumber = "480" landmarkName = "Update()" landmarkType = "7"> @@ -1349,7 +1349,7 @@ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1409,5 +1936,85 @@ landmarkType = "9"> + + + + + + + + + + + + + + + + + + diff --git a/A2Mac/HiRes.swift b/A2Mac/HiRes.swift index 39af683..28b19d8 100644 --- a/A2Mac/HiRes.swift +++ b/A2Mac/HiRes.swift @@ -134,7 +134,8 @@ class HiRes: NSView { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initHiResLineAddresses() - + HiRes.context?.clear( CGRect(x: 0, y: 0, width: frame.width, height: frame.height) ) + // currentContext?.setShouldAntialias(false) // currentContext?.interpolationQuality = CGInterpolationQuality.none @@ -586,17 +587,11 @@ class HiRes: NSView { } } + - override func draw(_ rect: CGRect) { - // print("HIRESSLOW\n") - -// if was > 100 { -// return -// } -// was += 1 - + func Update() { var height = HiRes.PixelHeight - + // do not even render it... if videoMode.text == 1 { return @@ -612,17 +607,13 @@ class HiRes: NSView { HiResBufferPointer = HiResBuffer1 } } - + var pixelAddr = 0 - -// var minX = 9999 -// var minY = 9999 -// var maxX = 0 -// var maxY = 0 -// -// var x = 0 + var y = 0 - + + blockChanged = [Bool](repeating: false, count: HiRes.blockRows * HiRes.blockCols / 2) + HiRes.context?.clear( CGRect(x: 0, y: 0, width: frame.width, height: frame.height) ) for lineAddr in HiResLineAddrTbl { @@ -636,67 +627,80 @@ class HiRes: NSView { var prev = 0 for blockHorIdx in 0 ..< HiRes.blockCols / 2 { +// print("blockVertIdx:", blockVertIdx, " blockHorIdx:", blockHorIdx) + let blockH = Int(HiResBufferPointer[ Int(lineAddr + blockHorIdx * 2) ]) let blockH7 = ( blockH >> 5 ) & 0x04 let blockL = Int(HiResBufferPointer[ Int(lineAddr + blockHorIdx * 2) + 1 ]) let blockL7 = ( blockL >> 5 ) & 0x04 let block = ( blockL << 7 ) | ( blockH & 0x7F ) & 0x3FFF + let block8 = ( blockL << 8 ) | blockH let screenIdx = y * HiRes.blockCols + blockHorIdx - if ( shadowScreen[ screenIdx ] != block ) { - blockChanged[ blockVertIdx + blockHorIdx ] = true - } - else { - blockChanged[ blockVertIdx + blockHorIdx ] = false - } - - shadowScreen[ screenIdx ] = block - for px in 0 ... 2 { -// let bitMask = 3 << ( px * 2 ) - let pixel = blockH7 | ( (block >> (px * 2)) & 3 ) - hiresColorPixel(pixelAddr: pixelAddr, pixel: pixel, prev: prev ) - pixelAddr += 8 - prev = pixel - -// if ( minX > x ) { minX = x } -// if ( minY > y ) { minY = y } -// if ( maxX < x ) { maxX = x } -// if ( maxY < y ) { maxY = y } -// -// x += 2 - } - - let pixel = blockH7 | ( (block >> (3 * 2)) & 3 ) + + // get all changed blocks + blockChanged[ blockVertIdx + blockHorIdx ] = blockChanged[ blockVertIdx + blockHorIdx ] || shadowScreen[ screenIdx ] != block8 + shadowScreen[ screenIdx ] = block8 + + for px in 0 ... 2 { + // let bitMask = 3 << ( px * 2 ) + let pixel = blockH7 | ( (block >> (px * 2)) & 3 ) hiresColorPixel(pixelAddr: pixelAddr, pixel: pixel, prev: prev ) pixelAddr += 8 prev = pixel - - for px in 4 ... 6 { - // let bitMask = 3 << ( px * 2 ) - let pixel = blockL7 | ( (block >> (px * 2)) & 3 ) - hiresColorPixel(pixelAddr: pixelAddr, pixel: pixel, prev: prev ) - pixelAddr += 8 - prev = pixel - -// if ( minX > x ) { minX = x } -// if ( minY > y ) { minY = y } -// if ( maxX < x ) { maxX = x } -// if ( maxY < y ) { maxY = y } -// -// x += 2 - } } -// else { -// pixelAddr += 4 * 7 -// x += 7 -// } -// } - + + let pixel = blockH7 | ( (block >> (3 * 2)) & 3 ) + hiresColorPixel(pixelAddr: pixelAddr, pixel: pixel, prev: prev ) + pixelAddr += 8 + prev = pixel + + for px in 4 ... 6 { + // let bitMask = 3 << ( px * 2 ) + let pixel = blockL7 | ( (block >> (px * 2)) & 3 ) + hiresColorPixel(pixelAddr: pixelAddr, pixel: pixel, prev: prev ) + pixelAddr += 8 + prev = pixel + } + } y += 1 -// x = 0 } + + // refresh changed block only + + let blockScreenWidth = Int(frame.width) / HiRes.blockCols * 2 + let blockScreenHeigth = Int(frame.height) / HiRes.blockRows + + for blockVertIdx in 0 ..< HiRes.blockRows { + for blockHorIdx in 0 ..< HiRes.blockCols / 2 { + if blockChanged[ blockVertIdx * HiRes.blockCols / 2 + blockHorIdx ] { + // refresh the entire screen + let boundingBox = CGRect( + x: blockHorIdx * blockScreenWidth - 2, + y: Int(frame.height) - blockVertIdx * blockScreenHeigth - blockScreenHeigth - 2, + width: blockScreenWidth + 4, + height: blockScreenHeigth + 4) + + self.setNeedsDisplay( boundingBox ) + } + } + } + +// needsDisplay = true // refresh the entire screen + + } + + override func draw(_ rect: CGRect) { + // print("HIRESSLOW\n") + +// if was > 100 { +// return +// } +// was += 1 + + // HiRes.context?.setShouldAntialias(true) // HiRes.context?.interpolationQuality = CGInterpolationQuality.low diff --git a/A2Mac/ViewController.swift b/A2Mac/ViewController.swift index fff5da4..6495609 100644 --- a/A2Mac/ViewController.swift +++ b/A2Mac/ViewController.swift @@ -332,6 +332,8 @@ class ViewController: NSViewController { } #endif + kbdUp() + } // override func flagsChanged(with event: NSEvent) { // switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) { @@ -564,7 +566,8 @@ class ViewController: NSViewController { // only refresh graphics view when needed (aka not in text mode) if ( videoMode.text == 0 ) { - self.hires.needsDisplay = true +// self.hires.needsDisplay = true + self.hires.Update() } // } #endif @@ -601,6 +604,8 @@ class ViewController: NSViewController { // txtClear[ y * (textCols + lineEndChars) + textCols * 2 + 1 ] = "\n" // } + hires.needsDisplay = true; + woz_loadFile( Bundle.main.resourcePath, "Apple DOS 3.3 January 1983.woz" ) diff --git a/src/cpu/6502.h b/src/cpu/6502.h index 55ebbd8..2f7dff6 100644 --- a/src/cpu/6502.h +++ b/src/cpu/6502.h @@ -159,6 +159,7 @@ extern void tst6502(void); extern void m6502_ColdReset( const char * bundlePath, const char * romFilePath ); extern void m6502_Run(void); extern void kbdInput ( uint8_t code ); +extern void kbdUp (); extern void setIO ( uint16_t ioaddr, uint8_t val ); extern void interrupt_IRQ(void); diff --git a/src/cpu/instructions/6502_instr_branch.h b/src/cpu/instructions/6502_instr_branch.h index eb5fe7c..8827975 100644 --- a/src/cpu/instructions/6502_instr_branch.h +++ b/src/cpu/instructions/6502_instr_branch.h @@ -10,9 +10,9 @@ #define __6502_INSTR_BRANCH_H__ INLINE void BRA( int8_t reladdr ) { - uint8_t pg = m6502.PC >> 8; m6502.PC += reladdr; #ifdef CLK_ABSOLUTE_PRECISE + uint8_t pg = m6502.PC >> 8; m6502.clktime += m6502.PC >> 8 == pg ? 1 : 2; #else m6502.clktime++; diff --git a/src/dev/mem/mmio.h b/src/dev/mem/mmio.h index a134d60..5ee9ecd 100644 --- a/src/dev/mem/mmio.h +++ b/src/dev/mem/mmio.h @@ -402,17 +402,18 @@ INLINE uint8_t ioRead( uint16_t addr ) { uint8_t currentMagnet = 0; - switch (addr) { - case io_KBD: + switch ( (uint8_t)addr ) { + case (uint8_t)io_KBD: // if ( RAM[io_KBD] > 0x7F ) printf("io_KBD:%04X\n", addr); return Apple2_64K_RAM[io_KBD]; - case io_KBDSTRB: + case (uint8_t)io_KBDSTRB: // TODO: This is very slow! // printf("io_KBDSTRB\n"); - return Apple2_64K_RAM[io_KBD] &= 0x7F; + Apple2_64K_RAM[io_KBD] &= 0x7F; + return Apple2_64K_RAM[io_KBDSTRB]; - case io_SPKR: + case (uint8_t)io_SPKR: // TODO: This is very slow! // printf("io_KBDSTRB\n"); @@ -428,93 +429,93 @@ INLINE uint8_t ioRead( uint16_t addr ) { // videoMode.col80 = 1; // break; // - case io_VID_RDTEXT: + case (uint8_t)io_VID_RDTEXT: return videoMode.text << 7; - case io_VID_ALTCHAR: + case (uint8_t)io_VID_ALTCHAR: return videoMode.altChr << 7; - case io_VID_RD80VID: + case (uint8_t)io_VID_RD80VID: return videoMode.col80 << 7; - case io_TAPEIN: + case (uint8_t)io_TAPEIN: return MEMcfg.txt_page_2 << 7; - case io_RDCXROM: + case (uint8_t)io_RDCXROM: return MEMcfg.int_Cx_ROM << 7; - case io_RDALTZP: + case (uint8_t)io_RDALTZP: return MEMcfg.ALT_ZP << 7; - case io_RDC3ROM: + case (uint8_t)io_RDC3ROM: return MEMcfg.slot_C3_ROM << 7; - case io_RD80STORE: + case (uint8_t)io_RD80STORE: return MEMcfg.is_80STORE << 7; - case io_VID_TXTPAGE1: + case (uint8_t)io_VID_TXTPAGE1: // printf("io_VID_TXTPAGE1\n"); MEMcfg.txt_page_2 = 0; textPageSelect(); break; - case io_VID_TXTPAGE2: + case (uint8_t)io_VID_TXTPAGE2: // printf("io_VID_TXTPAGE2\n"); MEMcfg.txt_page_2 = 1; textPageSelect(); break; - case io_VID_Text_OFF: + case (uint8_t)io_VID_Text_OFF: videoMode.text = 0; break; - case io_VID_Text_ON: + case (uint8_t)io_VID_Text_ON: videoMode.text = 1; break; - case io_VID_Mixed_OFF: + case (uint8_t)io_VID_Mixed_OFF: videoMode.mixed = 0; break; - case io_VID_Mixed_ON: + case (uint8_t)io_VID_Mixed_ON: videoMode.mixed = 1; break; - case io_VID_Hires_OFF: + case (uint8_t)io_VID_Hires_OFF: videoMode.hires = 0; break; - case io_VID_Hires_ON: + case (uint8_t)io_VID_Hires_ON: videoMode.hires = 1; break; - case io_PDL0: - case io_PDL1: - case io_PDL2: - case io_PDL3: + case (uint8_t)io_PDL0: + case (uint8_t)io_PDL1: + case (uint8_t)io_PDL2: + case (uint8_t)io_PDL3: // if ( RAM[addr] > 127 ) { // RAM[addr]--; // } return Apple2_64K_RAM[addr]; - case io_MEM_RDRAM_NOWR_2: - case io_MEM_RDROM_WRAM_2: - case io_MEM_RDROM_NOWR_2: - case io_MEM_RDRAM_WRAM_2: - case io_MEM_RDRAM_NOWR_1: - case io_MEM_RDROM_WRAM_1: - case io_MEM_RDROM_NOWR_1: - case io_MEM_RDRAM_WRAM_1: + case (uint8_t)io_MEM_RDRAM_NOWR_2: + case (uint8_t)io_MEM_RDROM_WRAM_2: + case (uint8_t)io_MEM_RDROM_NOWR_2: + case (uint8_t)io_MEM_RDRAM_WRAM_2: + case (uint8_t)io_MEM_RDRAM_NOWR_1: + case (uint8_t)io_MEM_RDROM_WRAM_1: + case (uint8_t)io_MEM_RDROM_NOWR_1: + case (uint8_t)io_MEM_RDRAM_WRAM_1: if ( MEMcfg.RAM_16K || MEMcfg.RAM_128K ) { uint8_t * RAM_BANK = Apple2_64K_AUX + 0xC000; // RAM Bank 1 or 2? - switch (addr) { - case io_MEM_RDRAM_NOWR_2: - case io_MEM_RDROM_WRAM_2: - case io_MEM_RDROM_NOWR_2: - case io_MEM_RDRAM_WRAM_2: + switch ((uint8_t)addr) { + case (uint8_t)io_MEM_RDRAM_NOWR_2: + case (uint8_t)io_MEM_RDROM_WRAM_2: + case (uint8_t)io_MEM_RDROM_NOWR_2: + case (uint8_t)io_MEM_RDRAM_WRAM_2: MEMcfg.RAM_BANK_2 = 1; RAM_BANK = Apple2_64K_AUX + 0xD000; break; @@ -526,11 +527,11 @@ INLINE uint8_t ioRead( uint16_t addr ) { } // is RAM to read or ROM? - switch (addr) { - case io_MEM_RDRAM_NOWR_2: - case io_MEM_RDRAM_WRAM_2: - case io_MEM_RDRAM_NOWR_1: - case io_MEM_RDRAM_WRAM_1: + switch ((uint8_t)addr) { + case (uint8_t)io_MEM_RDRAM_NOWR_2: + case (uint8_t)io_MEM_RDRAM_WRAM_2: + case (uint8_t)io_MEM_RDRAM_NOWR_1: + case (uint8_t)io_MEM_RDRAM_WRAM_1: MEMcfg.RD_RAM = 1; uint8_t * shadow = Apple2_64K_MEM + 0xD000; @@ -556,11 +557,11 @@ INLINE uint8_t ioRead( uint16_t addr ) { } // is RAM Writeable? - switch (addr) { - case io_MEM_RDROM_WRAM_2: - case io_MEM_RDRAM_WRAM_2: - case io_MEM_RDROM_WRAM_1: - case io_MEM_RDRAM_WRAM_1: + switch ((uint8_t)addr) { + case (uint8_t)io_MEM_RDROM_WRAM_2: + case (uint8_t)io_MEM_RDRAM_WRAM_2: + case (uint8_t)io_MEM_RDROM_WRAM_1: + case (uint8_t)io_MEM_RDRAM_WRAM_1: MEMcfg.WR_RAM = 1; // set the RAM extension to read from the upper memory area break; @@ -575,10 +576,10 @@ INLINE uint8_t ioRead( uint16_t addr ) { break; // TODO: Make code "card insertable to slot" / aka slot independent and dynamically add/remove - case io_DISK_PHASE0_OFF + SLOT6: - case io_DISK_PHASE1_OFF + SLOT6: - case io_DISK_PHASE2_OFF + SLOT6: - case io_DISK_PHASE3_OFF + SLOT6: + case (uint8_t)io_DISK_PHASE0_OFF + SLOT6: + case (uint8_t)io_DISK_PHASE1_OFF + SLOT6: + case (uint8_t)io_DISK_PHASE2_OFF + SLOT6: + case (uint8_t)io_DISK_PHASE3_OFF + SLOT6: currentMagnet = (addr - io_DISK_PHASE0_OFF - SLOT6) / 2; disk.phase.magnet &= ~(1 << currentMagnet); printf("io_DISK_PHASE%u_OFF (S%u, ps:%X) ", currentMagnet, 6, disk.phase.magnet); @@ -586,10 +587,10 @@ INLINE uint8_t ioRead( uint16_t addr ) { disk_phase(); return 0; - case io_DISK_PHASE0_ON + SLOT6: - case io_DISK_PHASE1_ON + SLOT6: - case io_DISK_PHASE2_ON + SLOT6: - case io_DISK_PHASE3_ON + SLOT6: { + case (uint8_t)io_DISK_PHASE0_ON + SLOT6: + case (uint8_t)io_DISK_PHASE1_ON + SLOT6: + case (uint8_t)io_DISK_PHASE2_ON + SLOT6: + case (uint8_t)io_DISK_PHASE3_ON + SLOT6: { currentMagnet = (addr - io_DISK_PHASE0_ON - SLOT6) / 2; disk.phase.magnet |= 1 << currentMagnet; printf("io_DISK_PHASE%u_ON (S%u, ps:%X) ", currentMagnet, 6, disk.phase.magnet); @@ -598,35 +599,35 @@ INLINE uint8_t ioRead( uint16_t addr ) { return 0; } - case io_DISK_POWER_OFF + SLOT6: + case (uint8_t)io_DISK_POWER_OFF + SLOT6: dbgPrintf2("io_DISK_POWER_OFF (S%u)\n", 6); return 0; - case io_DISK_POWER_ON + SLOT6: + case (uint8_t)io_DISK_POWER_ON + SLOT6: dbgPrintf2("io_DISK_POWER_ON (S%u)\n", 6); return 0; - case io_DISK_SELECT_1 + SLOT6: + case (uint8_t)io_DISK_SELECT_1 + SLOT6: dbgPrintf2("io_DISK_SELECT_1 (S%u)\n", 6); return 0; - case io_DISK_SELECT_2 + SLOT6: + case (uint8_t)io_DISK_SELECT_2 + SLOT6: dbgPrintf2("io_DISK_SELECT_2 (S%u)\n", 6); return 0; - case io_DISK_READ + SLOT6: + case (uint8_t)io_DISK_READ + SLOT6: return disk_read(); - case io_DISK_WRITE + SLOT6: + case (uint8_t)io_DISK_WRITE + SLOT6: dbgPrintf2("io_DISK_WRITE (S%u)\n", 6); return 0; - case io_DISK_CLEAR + SLOT6: + case (uint8_t)io_DISK_CLEAR + SLOT6: dbgPrintf2("io_DISK_CLEAR (S%u)\n", 6); return 0; - case io_DISK_SHIFT + SLOT6: + case (uint8_t)io_DISK_SHIFT + SLOT6: dbgPrintf2("io_DISK_SHIFT (S%u)\n", 6); return 0; @@ -672,6 +673,12 @@ void kbdInput ( uint8_t code ) { } +void kbdUp () { + RAM[io_KBDSTRB] &= 0x7F; +} + + + INLINE void ioWrite( uint16_t addr, uint8_t val ) { // if (outdev) fprintf(outdev, "ioWrite:%04X (A:%02X)\n", addr, m6502.A); switch (addr) {