Refactor MTMCClock frame handling, enhance emulator performance, integrate immediateTimeout, and optimize rendering logic for RegisterView, MemoryView, and BufferedImage.

This commit is contained in:
2025-08-17 16:16:57 +02:00
parent 6acf781324
commit f169dce339
19 changed files with 5132 additions and 99 deletions

View File

@@ -3,11 +3,7 @@ package mtmc.emulator
import kotlin.math.min
class MTMCDisplay(private val computer: MonTanaMiniComputer) {
private val buffer = BufferedImage(
COLS,
ROWS,
1
) // BufferedImage.TYPE_INT_ARGB
private val buffer: BufferedImage? = null
private var currentColor: DisplayColor? = null
private var graphics: Array<BufferedImage> = arrayOf()
private var byteArray: ByteArray = ByteArray(0)
@@ -88,7 +84,7 @@ class MTMCDisplay(private val computer: MonTanaMiniComputer) {
}
graphics = Array(data.size) { index ->
loadImage(data[index]) ?: BufferedImage(160, 144, 1) //BufferedImage.TYPE_INT_RGB)
loadImage(data[index]) ?: createBufferedImage(160, 144) //BufferedImage.TYPE_INT_RGB)
}
}
@@ -111,12 +107,12 @@ class MTMCDisplay(private val computer: MonTanaMiniComputer) {
}
fun setPixel(col: Int, row: Int, color: DisplayColor) {
buffer.setRGB(col, row, color.intVal)
buffer?.setRGB(col, row, color.intVal)
}
fun getPixel(col: Int, row: Int): Short {
val rgb = buffer.getRGB(col, row)
return DisplayColor.Companion.indexFromInt(rgb)
val rgb = buffer?.getRGB(col, row) ?: 0
return DisplayColor.indexFromInt(rgb)
}
fun drawLine(startCol: Short, startRow: Short, endCol: Short, endRow: Short) {
@@ -231,7 +227,7 @@ class MTMCDisplay(private val computer: MonTanaMiniComputer) {
}
fun scaleImage(original: BufferedImage, scaleDimensions: Dimension): BufferedImage {
val resized = BufferedImage(scaleDimensions.width, scaleDimensions.height, original.type)
val resized = createBufferedImage(scaleDimensions.width, scaleDimensions.height)
/*
val g = resized.createGraphics()
g.setRenderingHint(
@@ -248,8 +244,7 @@ class MTMCDisplay(private val computer: MonTanaMiniComputer) {
}
fun convertImage(image: BufferedImage): BufferedImage {
val arbg =
BufferedImage(image.width, image.height, 2) //BufferedImage.TYPE_4BYTE_ABGR)
val arbg = createBufferedImage(image.width, image.height) //BufferedImage.TYPE_4BYTE_ABGR)
for (x in 0..<image.width) {
for (y in 0..<image.height) {
val rgb = image.getRGB(x, y)