From b626864293a5cb4717303245095c6d6f39c52f7d Mon Sep 17 00:00:00 2001 From: Savely Skresanov Date: Sat, 15 Sep 2012 18:29:23 +0700 Subject: Some work on adding new hooks. diff --git a/src/virtualmachine/Operations.cpp b/src/virtualmachine/Operations.cpp index dcd2cb2..0c998a8 100644 --- a/src/virtualmachine/Operations.cpp +++ b/src/virtualmachine/Operations.cpp @@ -353,4 +353,4 @@ namespace vm Push(Pop()); return 0; } -} \ No newline at end of file +} diff --git a/src/virtualmachine/Syscalls.cpp b/src/virtualmachine/Syscalls.cpp index bc88fb2..692d4d0 100644 --- a/src/virtualmachine/Syscalls.cpp +++ b/src/virtualmachine/Syscalls.cpp @@ -68,4 +68,13 @@ namespace vm { sim->part_change_type(ARG(0).int4, ARG(1).int4, ARG(2).int4, ARG(3).int4); } -} \ No newline at end of file + + TRAPDEF(pmapData) + { + int xarg, yarg; + yarg = ARG(0).int4; + xarg = ARG(1).int4; + + Push(sim->pmap[yarg][xarg]); + } +} diff --git a/src/virtualmachine/Syscalls.inl b/src/virtualmachine/Syscalls.inl index 6338d11..5281fb3 100644 --- a/src/virtualmachine/Syscalls.inl +++ b/src/virtualmachine/Syscalls.inl @@ -1,11 +1,12 @@ -TRAPDEF(-104, sin) -TRAPDEF(-105, cos) -TRAPDEF(-106, atan2) -TRAPDEF(-107, sqrt) -TRAPDEF(-108, floor) -TRAPDEF(-109, ceil) +TRAPDEF(-1, sin) +TRAPDEF(-2, cos) +TRAPDEF(-3, atan2) +TRAPDEF(-4, sqrt) +TRAPDEF(-5, floor) +TRAPDEF(-6, ceil) -TRAPDEF(-110, error) -TRAPDEF(-111, print) -TRAPDEF(-112, partCreate) -TRAPDEF(-113, partChangeType) \ No newline at end of file +TRAPDEF(-7, error) +TRAPDEF(-8, print) +TRAPDEF(-9, partCreate) +TRAPDEF(-10, partChangeType) +TRAPDEF(-11, pmapData) diff --git a/src/virtualmachine/VirtualMachine.h b/src/virtualmachine/VirtualMachine.h index 04dd400..b295d02 100644 --- a/src/virtualmachine/VirtualMachine.h +++ b/src/virtualmachine/VirtualMachine.h @@ -279,4 +279,4 @@ public: }; }; -} \ No newline at end of file +} diff --git a/tptlibrary/tpt_syscalls.asm b/tptlibrary/tpt_syscalls.asm index 39d1f17..2da2627 100644 --- a/tptlibrary/tpt_syscalls.asm +++ b/tptlibrary/tpt_syscalls.asm @@ -1,13 +1,14 @@ code -equ sin -104 -equ cos -105 -equ atan2 -106 -equ sqrt -107 -equ floor -108 -equ ceil -109 +equ sin -1 +equ cos -2 +equ atan2 -3 +equ sqrt -4 +equ floor -5 +equ ceil -6 -equ error -110 -equ print -111 -equ partCreate -112 -equ partChangeType -113 \ No newline at end of file +equ error -7 +equ print -8 +equ partCreate -9 +equ partChangeType -10 +equ pmapData -11 diff --git a/tptlibrary/tpt_syscalls.h b/tptlibrary/tpt_syscalls.h index 6112306..a3adf41 100644 --- a/tptlibrary/tpt_syscalls.h +++ b/tptlibrary/tpt_syscalls.h @@ -13,5 +13,6 @@ void error(char * message); int partCreate(int i, int x, int y, int type); void partChangeType(int i, int x, int y, int type); +int pmapData(int x, int y); #endif -- cgit v0.9.2-21-gd62e From ec0dfa27e888461ec85012fa23d5a26e30f0e813 Mon Sep 17 00:00:00 2001 From: Savely Skresanov Date: Sat, 15 Sep 2012 21:31:55 +0700 Subject: Hooked more functions to VM. diff --git a/src/virtualmachine/Syscalls.cpp b/src/virtualmachine/Syscalls.cpp index 692d4d0..876fe52 100644 --- a/src/virtualmachine/Syscalls.cpp +++ b/src/virtualmachine/Syscalls.cpp @@ -71,10 +71,16 @@ namespace vm TRAPDEF(pmapData) { - int xarg, yarg; - yarg = ARG(0).int4; - xarg = ARG(1).int4; + Push(sim->pmap[ARG(1).int4][ARG(0).int4]); + } - Push(sim->pmap[yarg][xarg]); + TRAPDEF(deletePart) + { + sim->delete_part(ARG(0).int4, ARG(1).int4, ARG(2).int4); + } + + TRAPDEF(killPart) + { + sim->kill_part(ARG(0).int4); } } diff --git a/src/virtualmachine/Syscalls.inl b/src/virtualmachine/Syscalls.inl index 5281fb3..75455c1 100644 --- a/src/virtualmachine/Syscalls.inl +++ b/src/virtualmachine/Syscalls.inl @@ -10,3 +10,5 @@ TRAPDEF(-8, print) TRAPDEF(-9, partCreate) TRAPDEF(-10, partChangeType) TRAPDEF(-11, pmapData) +TRAPDEF(-12, deletePart) +TRAPDEF(-13, killPart) diff --git a/tptlibrary/file.c b/tptlibrary/file.c index b3ad278..67f2ca1 100644 --- a/tptlibrary/file.c +++ b/tptlibrary/file.c @@ -2,6 +2,14 @@ int update_TEST(int i, int x, int y, int nt, int ss) { - partCreate(-1, x, y-1, 2); + int k, j, index; + + for(k=-1; k<2; k++) + for(j=-1; j<2; j++) + { + index = pmapData(x+k, y+j); + if ((index&0xFF) == 2) + killPart(index>>8); + } return 0; } diff --git a/tptlibrary/tpt_syscalls.asm b/tptlibrary/tpt_syscalls.asm index 2da2627..fd86585 100644 --- a/tptlibrary/tpt_syscalls.asm +++ b/tptlibrary/tpt_syscalls.asm @@ -12,3 +12,5 @@ equ print -8 equ partCreate -9 equ partChangeType -10 equ pmapData -11 +equ deletePart -12 +equ killPart -13 diff --git a/tptlibrary/tpt_syscalls.h b/tptlibrary/tpt_syscalls.h index a3adf41..f72aeb5 100644 --- a/tptlibrary/tpt_syscalls.h +++ b/tptlibrary/tpt_syscalls.h @@ -14,5 +14,7 @@ void error(char * message); int partCreate(int i, int x, int y, int type); void partChangeType(int i, int x, int y, int type); int pmapData(int x, int y); +void deletePart(int x, int y, int flags); +void killPart(int i); #endif -- cgit v0.9.2-21-gd62e