#pentagram@irc.freenode.net logs for 14 Oct 2002 (GMT)

Archive Today Yesterday Tomorrow
Pentagram homepage

[00:10:43] <-- Dark-Star has left #pentagram ()
[03:21:56] --> Kirben has joined #pentagram
[03:21:56] --- ChanServ gives channel operator status to Kirben
[07:01:06] --- Darke|afk is now known as Darke
[08:30:13] <-- Kirben has left IRC (Read error: 104 (Connection reset by peer))
[08:34:27] --> Kirben has joined #pentagram
[08:34:27] --- ChanServ gives channel operator status to Kirben
[10:21:14] <Darke> For reference, I officially have Not A Clue(tm) as to how the u8 loop opcodes work, or don't work. *grin* Also is there more detail known then is listed in disasm with the 0x70, 0x73 and 0x74 opcodes? Like what 'type' means, and what string 'num bytes in string' refers to? *grin*
[12:11:59] <Darke> Class 79 (0x47 KEYRING) Func_5AE is a very short function with an equally short loop in it.
[12:32:38] <Darke> Ok, after one relatively standard function startup from the looks of it we've got something that looks like a C for() loop.
[12:32:53] <Darke> set [BP-04h]==0;
[12:34:45] <Darke> We setup a loop script that on the stack looks something like: 12500 5200 4000 3D00 2400` or in ascii-like `% 0x52 @ = $`.
[12:35:01] <Darke> s/12500/`2500/
[12:36:39] <Darke> Then we push dword [BP+06h] and push indirect 02h, as if we were going to call set info, but push 0xFFFF afterwards instead. Don't know why, but we really don't know what set info does either.
[12:40:05] <Darke> Then we loop, using [BP-02h] as some form of counter, with two numbers, 06 and 04 in addition. Neither 06 nor 04 would appear to be the 'size' of the loopscript (10 bytes total, or 5 words) unless you add them, but adding them doesn't work in other calls to loop, so I think I can scratch that theory.
[12:41:05] <Darke> (Before you ask, the push indirect+push 0xFFFF are 4 bytes total, so I still can't 'get' the correct number from that. *grin*)
[12:54:02] * Darke boggles and considers it would appear that they've violated the Cardinal Rule of the Stack(tm), that everything must be word aligned. When building up the loopscript, the 'loopscr' opcodes appear to push literal bytes to the stack, rather then bytes converted to words to the stack.
[12:54:35] <Darke> This would explain the '06', from a `25 52 00 40 3D 24`.
[12:56:52] <Darke> And this from one of PYROS' functions where it's '08': `C 0x0190 0x0139 0x27A $`.
[12:59:50] <Darke> Class PENT (124) has an 0x0C length one: "% 0x7C @ = % 0x02 ` = & $"
[13:03:10] * Darke bleahs. Sleep must be heeded. If you're unlucky I'll continue my ramblings another time.
[13:03:30] --- Darke is now known as Darke|afk
[15:03:06] <-- Kirben has left IRC ("System Meltdown")
[17:35:45] --> wjp has joined #pentagram
[17:35:45] --- ChanServ gives channel operator status to wjp
[20:42:52] * Darke|afk half asleep bleahs again at the non-word aligned loopscr opcodes.
[22:53:44] --> Dark-Star has joined #pentagram
[23:52:19] <-- Dark-Star has left #pentagram ()