Skip to content

Commit 374df22

Browse files
committed
update clear screen example to support windows 10
1 parent 551e629 commit 374df22

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

examples/clearscreen.asm

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ main:
2323
.P5 dq ? ; fifth parameter
2424

2525
; some local space on the stack for temporary data:
26+
.hStdIn dq ?
2627
.hStdOut dq ?
2728
.dwTemp dd ?
29+
.mode dd ?
2830

2931
align.assume rsp, 16
3032
align 16 | 8
@@ -33,17 +35,49 @@ main:
3335
end virtual
3436
sub rsp, .stack_offset
3537

38+
mov rcx, -10 ; STD_INPUT_HANDLE
39+
call [GetStdHandle]
40+
mov [.hStdIn], rax
41+
3642
mov rcx, -11 ; STD_OUTPUT_HANDLE
3743
call [GetStdHandle]
3844
mov [.hStdOut], rax
3945

46+
; https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
47+
48+
lea rdx, [.mode]
49+
mov rcx, [.hStdIn]
50+
call [GetConsoleMode]
51+
xchg ecx, eax ; BOOL
52+
jrcxz .fail
53+
54+
mov edx, [.mode]
55+
or edx, 0x0200 ; ENABLE_VIRTUAL_TERMINAL_INPUT
56+
mov rcx, [.hStdIn]
57+
call [SetConsoleMode]
58+
xchg ecx, eax ; BOOL
59+
jrcxz .fail
60+
61+
lea rdx, [.mode]
62+
mov rcx, [.hStdOut]
63+
call [GetConsoleMode]
64+
xchg ecx, eax ; BOOL
65+
jrcxz .fail
66+
67+
mov edx, [.mode]
68+
or edx, 0x000C ; ENABLE_VIRTUAL_TERMINAL_PROCESSING or DISABLE_NEWLINE_AUTO_RETURN
69+
mov rcx, [.hStdOut]
70+
call [SetConsoleMode]
71+
xchg ecx, eax ; BOOL
72+
jrcxz .fail
73+
4074
mov [.P5], 0
4175
lea r9, [.dwTemp]
4276
mov r8d, _clear_screen.characters
4377
lea rdx, [_clear_screen]
4478
mov rcx, [.hStdOut]
4579
call [WriteConsoleA]
46-
80+
.fail:
4781
mov ecx, 0
4882
call [ExitProcess]
4983
int3
@@ -54,5 +88,7 @@ library kernel32, 'kernel32.dll'
5488

5589
import kernel32,\
5690
ExitProcess, 'ExitProcess',\
91+
GetConsoleMode, 'GetConsoleMode',\
5792
GetStdHandle, 'GetStdHandle',\
93+
SetConsoleMode, 'SetConsoleMode',\
5894
WriteConsoleA, 'WriteConsoleA'

0 commit comments

Comments
 (0)