-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathiohook.chai
More file actions
65 lines (55 loc) · 1.64 KB
/
iohook.chai
File metadata and controls
65 lines (55 loc) · 1.64 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
* Пример использования API отладчика для реализации перехвата
* портов ввода-вывода
* Для запуска:
* v06x --bootrom boot/boot.bin --fdd testroms/test.fdd \
* --script scripts/robotnik.chai --script scripts/iohook.chai
*/
global port33 = 0
def breakfunc(dummy)
{
var pc = read_register("pc")
var instr = read_memory(0xffff & (pc-2), 1)
var port = read_memory(0xffff & (pc-1), 1)
switch (instr) {
case (0xdb) {
puts("in " + to_string(port) + "\n")
set_register("ioread", ~port33)
break
}
case (0xd3) {
puts("out " + to_string(port) + "," +
to_string(read_register("a")) + "\n")
port33 = read_register("a")
break
}
}
debugger_continue()
}
def attach_io_hook() {
/* write watchpoint, port 0x33 */
insert_breakpoint(2, 0x80000033, 1);
/* read watchpoint, port 0x33 */
insert_breakpoint(3, 0x80000033, 1);
add_callback("breakpoint", breakfunc)
debugger_attached()
debugger_continue()
}
attach_io_hook()
add_callback("frame", fun(frameno) {
keytyper.onframe()
})
keytyper.types([100, "F12", 100,
"S","I","D","Return", 70, "A", "Return",10,
"M","V","I","Space","A",",","A","A","Return",10,
"O","U","T","Space","3","3","Return",10,
"I","N","Space","3","3","Return",10,
"Return",10,
"T","Return",10,
"T","Return",10,
"T","Return",10,
"X","A","Return",10,
fun() {
puts("You should be seeing A=55\n")
}
])