-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathexample.vvmc
More file actions
48 lines (41 loc) · 1.36 KB
/
example.vvmc
File metadata and controls
48 lines (41 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
PROLOGUE:
MOV EDI ESP ;only what i know — device table before stack
MOV EAX EDI
SUB EAX 0x80
SUB EAX 0x14 ; we are at device table start
INC EAX ; first device is std lib so we just go to its address
MOV EAX [EAX]
PUSH EAX ; save GET_DEVICE_ADDR
INIT:
MOV ECX 0x12 ; 0x12 -- video device id
CALL [EAX] ; get VIDEO address into ECX
POP EAX ; restore GET_DEVICE_ADDR
PUSH ECX ; save VIDEO address
PUSH 0x01 ; pixel counter
JMP DRAW
RESET:
;; POP EBX
;; MOV EBX 0x01
;; PUSH EBX
DRAW:
MOV EBX 0x00
PUSH EAX
ADD EAX 0x38 ; GET_RANDOM_INT
CALL [EAX] ; store random int into ECX
POP EAX ; restore GET_DEVICE_ADDR address
POP EBX ; restore COUNTER
PUSH EAX
ADD EAX 0x59 ; WRITE_VIDEO
PUSH EBX ; store counter to use in WRITE_VIDEO
PUSH EBX ; store counter to use after WRITE_VIDEO
CALL [EAX] ; write color from ECX to VIDEO
POP EBX ; restore COUNTER
POP EAX ; restore GET_DEVICE_ADDR address
INCREMENT:
INC EBX
CMP EBX 0x08
PUSH EBX
JE RESET
LOOP:
;; CMP EAX 0x2F0
JNE DRAW