POV-Ray : Newsgroups : povray.beta-test : How to Unexpire POV Ray Beta : Re: How to Unexpire POV Ray Beta Server Time
30 Jul 2024 08:15:00 EDT (-0400)
  Re: How to Unexpire POV Ray Beta  
From: Thorsten Froehlich
Date: 16 Jan 2002 17:11:18
Message: <3c45fa86@news.povray.org>
In article <slr### [at] fwicom> , Ron Parker 
<ron### [at] povrayorg>  wrote:

>> Oh, I could reproduce it on my Mac!  So it will be fixed in the next beta.
>> I had to make the code a bit harder to reverse engineer anyway so simple
>> patches like Ron uses for Windows won't work either...
>
> Good luck. :)

Sharing global data in two (cooperative) threads and a bit of platform
specific C code, plus a RISC processor as target, together with a heavily
optimizing compiler.  This is the "easy" version (PowerPC code, sorry!) of
the not-yet-linked code, with all symbols in plain text:

RTOC, SP - integer registers with special names
cr0 - special condition code "register"

bl - branch and link (subroutine call)
b - branch unconditional
li(s) - load immediate (signed), extended to 32-bit
lwz - load word
lfd - load floating-point double
stw - store word, 32-bit
srwi - shift right word immediate
mfcr - move from condition code register

Order of instruction parameters is destination followed by one or more
sources, store instructions use reverse order.

Tip:  The function is a big while loop and inside a try-catch block.

Hunk: Kind=HUNK_LOCAL_CODE     Align=16  Class=PR
Name=".Mac__ThreadProc"(135)  Size=520
00000000: 7C0802A6  mflr       r0
00000004: BF01FFE0  stmw       r24,-32(SP)
00000008: 83220000  lwz        r25,gThetmPtr(RTOC)
0000000C: 83420000  lwz        r26,gTimeoutFlag(RTOC)
00000010: 83620000  lwz        r27,@doubleBase0(RTOC)
00000014: 83820000  lwz        r28,gMacThreadStopFlag(RTOC)
00000018: 83020000  lwz        r24,Mac__ReceiveHandler__FP9PO...tai(RTOC)
0000001C: 83A20000  lwz        r29,gMacMemoryCache(RTOC)
00000020: 83C20000  lwz        r30,@stringBase0(RTOC)
00000024: 90010008  stw        r0,8(SP)
00000028: 9421FF80  stwu       SP,-128(SP)
0000002C: 7C3F0B78  mr         r31,SP
00000030: 48000001  bl         .povray_init__FPv
00000034: 60000000  nop
00000038: 3C804D69  lis        r4,19817
0000003C: 3CA02A2A  lis        r5,10794
00000040: 7F03C378  mr         r3,r24
00000044: 38847363  addi       r4,r4,29539
00000048: 38A52A2A  addi       r5,r5,10794
0000004C: 48000001  bl         .POVMS_InstallReceiver
00000050: 60000000  nop
00000054: 3C804F75  lis        r4,20341
00000058: 3CA02A2A  lis        r5,10794
0000005C: 7F03C378  mr         r3,r24
00000060: 38847470  addi       r4,r4,29808
00000064: 38A52A2A  addi       r5,r5,10794
00000068: 48000001  bl         .POVMS_InstallReceiver
0000006C: 60000000  nop
00000070: 389E00B0  addi       r4,r30,176
00000074: 38600000  li         r3,0
00000078: 48000001  bl         .Warning__FUiPce
0000007C: 60000000  nop
00000080: 903F0050  stw        SP,80(r31)
00000084: 48000020  b          *+32                    ; $000000A4
00000088: C83B0000  lfd        fp1,0(r27)
0000008C: C01A0000  lfs        fp0,0(r26)
00000090: FC010000  fcmpu      cr0,fp1,fp0
00000094: 7C000026  mfcr       r0
00000098: 54001FFE  extrwi     r0,r0,1,2
0000009C: 68000001  xori       r0,r0,$0001
000000A0: 981C0000  stb        r0,0(r28)
000000A4: 387F0038  addi       r3,r31,56
000000A8: 48000001  bl         .time
000000AC: 60000000  nop
000000B0: 387F0038  addi       r3,r31,56
000000B4: 48000001  bl         .localtime
000000B8: 60000000  nop
000000BC: 90790000  stw        r3,0(r25)
000000C0: 3C004330  lis        r0,17200
000000C4: 3C80000B  lis        r4,11
000000C8: C85B0008  lfd        fp2,8(r27)
000000CC: 80C30014  lwz        r6,20(r3)
000000D0: 38A45D71  addi       r5,r4,23921
000000D4: 901F0054  stw        r0,84(r31)
000000D8: 54A40FFE  srwi       r4,r5,31
000000DC: 3806076C  addi       r0,r6,1900
000000E0: C83B0000  lfd        fp1,0(r27)
000000E4: 90030014  stw        r0,20(r3)
000000E8: 80D90000  lwz        r6,0(r25)
000000EC: 80660010  lwz        r3,16(r6)
000000F0: 38030001  addi       r0,r3,1
000000F4: 90060010  stw        r0,16(r6)
000000F8: 80F90000  lwz        r7,0(r25)
000000FC: 80C7000C  lwz        r6,12(r7)
00000100: 80670014  lwz        r3,20(r7)
00000104: 80070010  lwz        r0,16(r7)
00000108: 1C630174  mulli      r3,r3,372
0000010C: 1C00001F  mulli      r0,r0,31
00000110: 7C003214  add        r0,r0,r6
00000114: 7C030214  add        r0,r3,r0
00000118: 7C03FE70  srawi      r3,r0,31
0000011C: 7C050010  subfc      r0,r5,r0
00000120: 7C032114  adde       r0,r3,r4
00000124: 5400063E  clrlwi     r0,r0,24
00000128: 901F0058  stw        r0,88(r31)
0000012C: C81F0054  lfd        fp0,84(r31)
00000130: EC001028  fsubs      fp0,fp0,fp2
00000134: D01A0000  stfs       fp0,0(r26)
00000138: C01A0000  lfs        fp0,0(r26)
0000013C: FC010000  fcmpu      cr0,fp1,fp0
00000140: 41820014  beq        *+20                    ; $00000154
00000144: 387E00B0  addi       r3,r30,176
00000148: 48000001  bl         .PossibleError__FPce
0000014C: 60000000  nop
00000150: 4800003C  b          *+60                    ; $0000018C
00000154: 48000001  bl         .povray_cooperate__Fv
00000158: 60000000  nop
0000015C: 48000001  bl         .YieldToAnyThread
00000160: 60000000  nop
00000164: 881C0000  lbz        r0,0(r28)
00000168: 28000000  cmplwi     r0,$0000
0000016C: 4182FF1C  beq        *-228                   ; $00000088
00000170: 4800001C  b          *+28                    ; $0000018C
00000174: 387F003C  addi       r3,r31,60
00000178: 48000001  bl         .__end__catch
0000017C: 60000000  nop
00000180: 80010000  lwz        r0,0(SP)
00000184: 803F0050  lwz        SP,80(r31)
00000188: 90010000  stw        r0,0(SP)
0000018C: 3C604D69  lis        r3,19817
00000190: 3C802A2A  lis        r4,10794
00000194: 38637363  addi       r3,r3,29539
00000198: 38842A2A  addi       r4,r4,10794
0000019C: 48000001  bl         .POVMS_RemoveReceiver
000001A0: 60000000  nop
000001A4: 3C604F75  lis        r3,20341
000001A8: 3C802A2A  lis        r4,10794
000001AC: 38637470  addi       r3,r3,29808
000001B0: 38842A2A  addi       r4,r4,10794
000001B4: 48000001  bl         .POVMS_RemoveReceiver
000001B8: 60000000  nop
000001BC: 48000001  bl         .povray_terminate__Fv
000001C0: 60000000  nop
000001C4: 80820000  lwz        r4,gMacCallbackBlock(RTOC)
000001C8: 807D0000  lwz        r3,0(r29)
000001CC: 80840000  lwz        r4,0(r4)
000001D0: 81840064  lwz        r12,100(r4)
000001D4: 48000001  bl         .__ptr_glue
000001D8: 60000000  nop
000001DC: 80820000  lwz        r4,gPOVRayMacThread(RTOC)
000001E0: 38000000  li         r0,0
000001E4: 901D0000  stw        r0,0(r29)
000001E8: 38600000  li         r3,0
000001EC: 981C0000  stb        r0,0(r28)
000001F0: 90040000  stw        r0,0(r4)
000001F4: 801F0088  lwz        r0,136(r31)
000001F8: 80210000  lwz        SP,0(SP)
000001FC: 7C0803A6  mtlr       r0
00000200: BB01FFE0  lmw        r24,-32(SP)
00000204: 4E800020  blr

____________________________________________________
Thorsten Froehlich, Duisburg, Germany
e-mail: tho### [at] trfde

Visit POV-Ray on the web: http://mac.povray.org


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.