mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-13 08:04:03 +09:00
tty two arg sgr
This commit is contained in:
@@ -50,8 +50,6 @@ abstract class GlassTty(val TEXT_ROWS: Int, val TEXT_COLS: Int) {
|
|||||||
ttyEscArguments.push(ttyEscArguments.pop() * 10 + (newnum.toInt() - 0x30))
|
ttyEscArguments.push(ttyEscArguments.pop() * 10 + (newnum.toInt() - 0x30))
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO()
|
|
||||||
|
|
||||||
when (ttyEscState) {
|
when (ttyEscState) {
|
||||||
TTY_ESC_STATE.INITIAL -> {
|
TTY_ESC_STATE.INITIAL -> {
|
||||||
if (char == ESC) {
|
if (char == ESC) {
|
||||||
@@ -117,6 +115,11 @@ abstract class GlassTty(val TEXT_ROWS: Int, val TEXT_COLS: Int) {
|
|||||||
val arg1 = ttyEscArguments.pop()
|
val arg1 = ttyEscArguments.pop()
|
||||||
cursorXY(arg1, arg2)
|
cursorXY(arg1, arg2)
|
||||||
}
|
}
|
||||||
|
'm' -> return accept {
|
||||||
|
val arg2 = ttyEscArguments.pop()
|
||||||
|
val arg1 = ttyEscArguments.pop()
|
||||||
|
sgrTwoArg(arg1, arg2)
|
||||||
|
}
|
||||||
';' -> ttyEscState = TTY_ESC_STATE.SEP2
|
';' -> ttyEscState = TTY_ESC_STATE.SEP2
|
||||||
else -> return reject()
|
else -> return reject()
|
||||||
}
|
}
|
||||||
@@ -140,6 +143,10 @@ abstract class GlassTty(val TEXT_ROWS: Int, val TEXT_COLS: Int) {
|
|||||||
val arg1 = ttyEscArguments.pop()
|
val arg1 = ttyEscArguments.pop()
|
||||||
cursorXY(arg1, 0)
|
cursorXY(arg1, 0)
|
||||||
}
|
}
|
||||||
|
'm' -> return accept {
|
||||||
|
val arg1 = ttyEscArguments.pop()
|
||||||
|
sgrTwoArg(arg1, 0)
|
||||||
|
}
|
||||||
';' -> {
|
';' -> {
|
||||||
ttyEscArguments.push(0)
|
ttyEscArguments.push(0)
|
||||||
ttyEscState = TTY_ESC_STATE.SEP2
|
ttyEscState = TTY_ESC_STATE.SEP2
|
||||||
@@ -176,15 +183,14 @@ abstract class GlassTty(val TEXT_ROWS: Int, val TEXT_COLS: Int) {
|
|||||||
abstract fun scrollUp(arg: Int = 1)
|
abstract fun scrollUp(arg: Int = 1)
|
||||||
abstract fun scrollDown(arg: Int = 1)
|
abstract fun scrollDown(arg: Int = 1)
|
||||||
abstract fun sgrOneArg(arg: Int = 0)
|
abstract fun sgrOneArg(arg: Int = 0)
|
||||||
|
abstract fun sgrTwoArg(arg1: Int, arg2: Int)
|
||||||
abstract fun sgrThreeArg(arg1: Int, arg2: Int, arg3: Int)
|
abstract fun sgrThreeArg(arg1: Int, arg2: Int, arg3: Int)
|
||||||
abstract fun cursorXY(arg1: Int, arg2: Int)
|
abstract fun cursorXY(arg1: Int, arg2: Int)
|
||||||
|
abstract fun ringBell()
|
||||||
|
abstract fun insertTab()
|
||||||
|
|
||||||
private val ESC = 0x1B.toByte()
|
private val ESC = 0x1B.toByte()
|
||||||
|
|
||||||
private val FORE_DEFAULT = 254
|
|
||||||
private val BACK_DEFAULT = 255
|
|
||||||
|
|
||||||
|
|
||||||
private enum class TTY_ESC_STATE {
|
private enum class TTY_ESC_STATE {
|
||||||
INITIAL, ESC, CSI, NUM1, SEP1, NUM2, SEP2, NUM3
|
INITIAL, ESC, CSI, NUM1, SEP1, NUM2, SEP2, NUM3
|
||||||
}
|
}
|
||||||
@@ -234,16 +240,18 @@ digraph G {
|
|||||||
separator1 -> numeral2 [label="0..9"]
|
separator1 -> numeral2 [label="0..9"]
|
||||||
separator1 -> separator2 [label="; (zero)"]
|
separator1 -> separator2 [label="; (zero)"]
|
||||||
separator1 -> CursorPos [label="H (zero)"]
|
separator1 -> CursorPos [label="H (zero)"]
|
||||||
|
separator1 -> SGR2 [label="m (zero)"]
|
||||||
|
|
||||||
numeral2 -> numeral2 [label="0..9"]
|
numeral2 -> numeral2 [label="0..9"]
|
||||||
numeral2 -> CursorPos [label="H"]
|
numeral2 -> CursorPos [label="H"]
|
||||||
numeral2 -> separator2 [label=";"]
|
numeral2 -> SGR2 [label="m"]
|
||||||
|
numeral2 -> separator2 [label="; (zero)"]
|
||||||
|
|
||||||
separator2 -> numeral3 [label="0..9"]
|
separator2 -> numeral3 [label="0..9"]
|
||||||
numeral3 -> numeral3 [label="0..9"]
|
numeral3 -> numeral3 [label="0..9"]
|
||||||
|
|
||||||
separator2 -> "SGR-Colour" [label="m (zero)"]
|
separator2 -> SGR3 [label="m (zero)"]
|
||||||
numeral3 -> "SGR-Colour" [label="m"]
|
numeral3 -> SGR3 [label="m"]
|
||||||
|
|
||||||
ESC [shape=Mdiamond]
|
ESC [shape=Mdiamond]
|
||||||
Reset -> end
|
Reset -> end
|
||||||
@@ -260,7 +268,8 @@ digraph G {
|
|||||||
ScrollDown -> end
|
ScrollDown -> end
|
||||||
CursorPos -> end
|
CursorPos -> end
|
||||||
SGR -> end
|
SGR -> end
|
||||||
"SGR-Colour" -> end
|
SGR2 -> end
|
||||||
|
SGR3 -> end
|
||||||
end [shape=Msquare]
|
end [shape=Msquare]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ class GraphicsAdapter(val lcdMode: Boolean = false) : GlassTty(Companion.TEXT_RO
|
|||||||
private var chrWidth = 7f
|
private var chrWidth = 7f
|
||||||
private var chrHeight = 14f
|
private var chrHeight = 14f
|
||||||
|
|
||||||
override var ttyFore: Int = 254 // cannot be Byte
|
override var ttyFore: Int = TTY_FORE_DEFAULT // cannot be Byte
|
||||||
override var ttyBack: Int = 255 // cannot be Byte
|
override var ttyBack: Int = TTY_BACK_DEFAULT // cannot be Byte
|
||||||
|
|
||||||
private val textForePixmap = Pixmap(TEXT_COLS, TEXT_ROWS, Pixmap.Format.RGBA8888)
|
private val textForePixmap = Pixmap(TEXT_COLS, TEXT_ROWS, Pixmap.Format.RGBA8888)
|
||||||
private val textBackPixmap = Pixmap(TEXT_COLS, TEXT_ROWS, Pixmap.Format.RGBA8888)
|
private val textBackPixmap = Pixmap(TEXT_COLS, TEXT_ROWS, Pixmap.Format.RGBA8888)
|
||||||
@@ -182,14 +182,10 @@ class GraphicsAdapter(val lcdMode: Boolean = false) : GlassTty(Companion.TEXT_RO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
override fun resetTtyStatus() {
|
||||||
* @param from memory address (pointer) on the VM's user memory. Because of how the VM is coded, only the user space is eligible for move.
|
ttyFore = TTY_FORE_DEFAULT
|
||||||
* @param to memory "offset" in Graphics Adapter's memory space, starts from zero.
|
ttyBack = TTY_BACK_DEFAULT
|
||||||
* @param length how many bytes should be moved
|
}
|
||||||
*/
|
|
||||||
/*fun bulkLoad(vm: VM, from: Long, to: Long, length: Long) {
|
|
||||||
UnsafeHelper.unsafe.copyMemory(null, vm.usermem.ptr + from, (framebuffer.pixels as DirectBuffer).address(), to, length)
|
|
||||||
}*/
|
|
||||||
|
|
||||||
override fun putChar(x: Int, y: Int, text: Byte, foreColour: Byte, backColour: Byte) {
|
override fun putChar(x: Int, y: Int, text: Byte, foreColour: Byte, backColour: Byte) {
|
||||||
val textOff = toTtyTextOffset(x, y)
|
val textOff = toTtyTextOffset(x, y)
|
||||||
@@ -364,6 +360,9 @@ class GraphicsAdapter(val lcdMode: Boolean = false) : GlassTty(Companion.TEXT_RO
|
|||||||
const val TEXT_ROWS = 32
|
const val TEXT_ROWS = 32
|
||||||
val VRAM_SIZE = 256.kB()
|
val VRAM_SIZE = 256.kB()
|
||||||
|
|
||||||
|
const val TTY_FORE_DEFAULT = 254
|
||||||
|
const val TTY_BACK_DEFAULT = 255
|
||||||
|
|
||||||
private val LCD_BASE_COL = Color(0xa1a99cff.toInt())
|
private val LCD_BASE_COL = Color(0xa1a99cff.toInt())
|
||||||
|
|
||||||
val DRAW_SHADER_FRAG = """
|
val DRAW_SHADER_FRAG = """
|
||||||
|
|||||||
Reference in New Issue
Block a user