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) {