115 lines
4.6 KiB
Python
115 lines
4.6 KiB
Python
import t, c
|
|
|
|
CREATE_WINDOW: t.CDefine = 1
|
|
DRAW_TEXT: t.CDefine = 2
|
|
EXIT: t.CDefine = 3
|
|
OPEN: t.CDefine = 4
|
|
CLOSE: t.CDefine = 5
|
|
READ: t.CDefine = 6
|
|
WRITE: t.CDefine = 7
|
|
SEEK: t.CDefine = 8
|
|
TELL: t.CDefine = 9
|
|
SIZE: t.CDefine = 10
|
|
MKDIR: t.CDefine = 11
|
|
REMOVE: t.CDefine = 12
|
|
OPENDIR: t.CDefine = 13
|
|
READDIR: t.CDefine = 14
|
|
CLOSEDIR: t.CDefine = 15
|
|
STAT: t.CDefine = 16
|
|
WAIT_WINDOW: t.CDefine = 17
|
|
SERIAL_PUTS: t.CDefine = 18
|
|
LOAD_SO: t.CDefine = 19
|
|
SO_CALL1: t.CDefine = 20
|
|
GET_WINBUF: t.CDefine = 21
|
|
WIN_FLUSH: t.CDefine = 22
|
|
POLL_EVENT: t.CDefine = 23
|
|
SET_CURSOR: t.CDefine = 24
|
|
|
|
YIELD: t.CDefine = 25
|
|
SET_TITLE: t.CDefine = 26
|
|
SET_GEOMETRY: t.CDefine = 27
|
|
SPAWN: t.CDefine = 28
|
|
MMAP: t.CDefine = 29
|
|
MUNMAP: t.CDefine = 30
|
|
SET_RESIZABLE: t.CDefine = 31
|
|
GET_WIN_SIZE: t.CDefine = 32
|
|
THREAD_CREATE: t.CDefine = 33
|
|
|
|
def _syscall0(num: t.CUInt64T) -> t.CUInt64T:
|
|
ret: t.CUInt64T
|
|
c.Asm(f"""mov rax, {c.AsmInp(num, t.ASM_DESCR.REG_ANY)}
|
|
syscall""",
|
|
out=[c.AsmOut(ret, t.ASM_DESCR.OUTPUT_REG)],
|
|
op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RCX,
|
|
t.ASM_DESCR.CLOBBER_R11])
|
|
return ret
|
|
|
|
def _syscall1(num: t.CUInt64T, a1: t.CUInt64T) -> t.CUInt64T:
|
|
ret: t.CUInt64T
|
|
c.Asm(f"""mov rdi, {c.AsmInp(a1, t.ASM_DESCR.REG_ANY)}
|
|
mov rax, {c.AsmInp(num, t.ASM_DESCR.REG_ANY)}
|
|
syscall""",
|
|
out=[c.AsmOut(ret, t.ASM_DESCR.OUTPUT_REG)],
|
|
op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RCX,
|
|
t.ASM_DESCR.CLOBBER_R11, t.ASM_DESCR.CLOBBER_RDI])
|
|
return ret
|
|
|
|
def _syscall2(num: t.CUInt64T, a1: t.CUInt64T, a2: t.CUInt64T) -> t.CUInt64T:
|
|
ret: t.CUInt64T
|
|
c.Asm(f"""mov rdi, {c.AsmInp(a1, t.ASM_DESCR.REG_ANY)}
|
|
mov rsi, {c.AsmInp(a2, t.ASM_DESCR.REG_ANY)}
|
|
mov rax, {c.AsmInp(num, t.ASM_DESCR.REG_ANY)}
|
|
syscall""",
|
|
out=[c.AsmOut(ret, t.ASM_DESCR.OUTPUT_REG)],
|
|
op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RCX,
|
|
t.ASM_DESCR.CLOBBER_R11, t.ASM_DESCR.CLOBBER_RDI,
|
|
t.ASM_DESCR.CLOBBER_RSI])
|
|
return ret
|
|
|
|
def _syscall3(num: t.CUInt64T, a1: t.CUInt64T, a2: t.CUInt64T, a3: t.CUInt64T) -> t.CUInt64T:
|
|
ret: t.CUInt64T
|
|
c.Asm(f"""mov rdi, {c.AsmInp(a1, t.ASM_DESCR.REG_ANY)}
|
|
mov rsi, {c.AsmInp(a2, t.ASM_DESCR.REG_ANY)}
|
|
mov rdx, {c.AsmInp(a3, t.ASM_DESCR.REG_ANY)}
|
|
mov rax, {c.AsmInp(num, t.ASM_DESCR.REG_ANY)}
|
|
syscall""",
|
|
out=[c.AsmOut(ret, t.ASM_DESCR.OUTPUT_REG)],
|
|
op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RCX,
|
|
t.ASM_DESCR.CLOBBER_R11, t.ASM_DESCR.CLOBBER_RDI,
|
|
t.ASM_DESCR.CLOBBER_RSI, t.ASM_DESCR.CLOBBER_RDX])
|
|
return ret
|
|
|
|
def _syscall5(num: t.CUInt64T, a1: t.CUInt64T, a2: t.CUInt64T, a3: t.CUInt64T, a4: t.CUInt64T, a5: t.CUInt64T) -> t.CUInt64T:
|
|
ret: t.CUInt64T
|
|
c.Asm(f"""mov rdi, {c.AsmInp(a1, t.ASM_DESCR.REG_ANY)}
|
|
mov rsi, {c.AsmInp(a2, t.ASM_DESCR.REG_ANY)}
|
|
mov rdx, {c.AsmInp(a3, t.ASM_DESCR.REG_ANY)}
|
|
mov r10, {c.AsmInp(a4, t.ASM_DESCR.REG_ANY)}
|
|
mov r8, {c.AsmInp(a5, t.ASM_DESCR.REG_ANY)}
|
|
mov rax, {c.AsmInp(num, t.ASM_DESCR.REG_ANY)}
|
|
syscall""",
|
|
out=[c.AsmOut(ret, t.ASM_DESCR.OUTPUT_REG)],
|
|
op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RCX,
|
|
t.ASM_DESCR.CLOBBER_R11, t.ASM_DESCR.CLOBBER_RDI,
|
|
t.ASM_DESCR.CLOBBER_RSI, t.ASM_DESCR.CLOBBER_RDX,
|
|
t.ASM_DESCR.CLOBBER_R10, t.ASM_DESCR.CLOBBER_R8])
|
|
return ret
|
|
|
|
def _syscall6(num: t.CUInt64T, a1: t.CUInt64T, a2: t.CUInt64T, a3: t.CUInt64T, a4: t.CUInt64T, a5: t.CUInt64T, a6: t.CUInt64T) -> t.CUInt64T:
|
|
ret: t.CUInt64T
|
|
c.Asm(f"""mov rdi, {c.AsmInp(a1, t.ASM_DESCR.REG_ANY)}
|
|
mov rsi, {c.AsmInp(a2, t.ASM_DESCR.REG_ANY)}
|
|
mov rdx, {c.AsmInp(a3, t.ASM_DESCR.REG_ANY)}
|
|
mov r10, {c.AsmInp(a4, t.ASM_DESCR.REG_ANY)}
|
|
mov r8, {c.AsmInp(a5, t.ASM_DESCR.REG_ANY)}
|
|
mov r9, {c.AsmInp(a6, t.ASM_DESCR.REG_ANY)}
|
|
mov rax, {c.AsmInp(num, t.ASM_DESCR.REG_ANY)}
|
|
syscall""",
|
|
out=[c.AsmOut(ret, t.ASM_DESCR.OUTPUT_REG)],
|
|
op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RCX,
|
|
t.ASM_DESCR.CLOBBER_R11, t.ASM_DESCR.CLOBBER_RDI,
|
|
t.ASM_DESCR.CLOBBER_RSI, t.ASM_DESCR.CLOBBER_RDX,
|
|
t.ASM_DESCR.CLOBBER_R10, t.ASM_DESCR.CLOBBER_R8,
|
|
t.ASM_DESCR.CLOBBER_R9])
|
|
return ret
|