tty two arg sgr

This commit is contained in:
minjaesong
2020-05-10 21:42:36 +09:00
parent c1f5944643
commit 80c1c25b4d
2 changed files with 28 additions and 20 deletions

View File

@@ -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]
} }

View File

@@ -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 = """