Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.129 - CLIENT : 54.80.169.119

 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Randamn (Magnum Software, 1983)

 
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Ven 19 Oct 2012, 20:43    Sujet du message: Randamn (Magnum Software, 1983) Répondre en citant

So we begin with the usual hook:

Code:
8600<C600.C6FCM
86F9:69 FF
8600G


and we have the stage 0 boot.
Yes, it's a standard DOS bootsector, including all of the unused bytes at $85D-$8FC.

Code:
0800       .BYTE    1
0801       LDA    $27
0803       CMP    #9
0805       BNE    loc_81F
0807       LDA    $2B
0809       LSR    A
080A       LSR    A
080B       LSR    A
080C       LSR    A
080D       ORA    #$C0
080F       STA    $3F
0811       LDA    #$5C
0813       STA    $3E
0815       CLC
0816       LDA    byte_8FE
0819       ADC    byte_8FF
081C       STA    byte_8FE
081F loc_81F:
081F       LDX    byte_8FF
0822       BMI    loc_839
0824       LDA    byte_84D,X
0827       STA    $3D
0829       DEC    byte_8FF
082C       LDA    byte_8FE
082F       STA    $27
0831       DEC    byte_8FE
0834       LDX    $2B
0836       JMP    ($3E)
0839 loc_839:
0839       INC    byte_8FE
083C       INC    byte_8FE
083F       JSR    $FE89
0842       JSR    $FE93
0845       JSR    $FB2F
0848       LDX    $2B
084A       JMP    (byte_8FD)
084D byte_84D:    .BYTE     0,  $D,  $B,    9,   7,   5,   3,   1,    $E,  $C,  $A,    8,   6,   4,   2,  $F
085D       .BYTE     0, $20, $64, $A7, $B0,   8, $A9,   0,   $A8, $8D, $5D, $B6, $91, $40, $AD, $C5
085D       .BYTE   $B5, $4C, $D2, $A6, $AD, $5D, $B6, $F0,     8, $EE, $BD, $B5, $D0,   3, $EE, $BE
085D       .BYTE   $B5, $A9,   0, $8D, $5D, $B6, $4C, $46,   $A5, $8D, $BC, $B5, $20, $A8, $A6, $20
085D       .BYTE   $EA, $A2, $4C, $7D, $A2, $A0, $13, $B1,   $42, $D0, $14, $C8, $C0, $17, $D0, $F7
085D       .BYTE   $A0, $19, $B1, $42, $99, $A4, $B5, $C8,   $C0, $1D, $D0, $F6, $4C, $BC, $A6, $A2
085D       .BYTE   $FF, $8E, $5D, $B6, $D0, $F6,   0,   0,     0,   0,   0,    0,   0,   0,   0,   0
085D       .BYTE     0,   0,   0,    0,   0,   0,   0,   0,     0,   0,   0,    0,   0,   0,   0,   0
085D       .BYTE     0,   0,   0, $20, $58, $FC, $A9, $C2,   $20, $ED, $FD, $A9,   1, $20, $DA, $FD
085D       .BYTE   $A9, $AD, $20, $ED, $FD, $A9,   0, $20,   $DA, $FD, $60,    0,   0,   0,   0,   0
085D       .BYTE     0,   0,   0,    0,   0,   0,   0,   0,     0,   0,   0,    0,   0,   0,   0,   0
08FD byte_8FD:    .BYTE 0      ;low half of jump address at $84a
08FE byte_8FE:    .BYTE $B6      ;read address, reduced to #$b5 after reading is complete, adjusted to #$b7 by $839-83c
08FF byte_8FF:    .BYTE 9      ;read #$0a sectors


Let's run that part.

Code:
86F8:A9 4C 8D 4A 08 A9 59 8D 4B 08 A9 FF 8D 4C 08 4C 01 08
8600G


After reading the #$0a sectors, the jump at $84a goes to $b700.
There we find regular DOS, just with changed epilog bytes.
I'm not going to include the entire disassembly of that, there's no need. :-)
Here's the address marker routine:

Code:
B944 sub_B944:
B944       LDY    #$F0
B946       STY    byte_26
B948 loc_B948:
B948       INY
B949       BNE    loc_B94F
B94B       INC    byte_26
B94D       BEQ    loc_B942
B94F loc_B94F:
B94F       LDA    $C08C,X
B952       BPL    loc_B94F
B954 loc_B954:
B954       CMP    #$D5
B956       BNE    loc_B948
B958       NOP
B959 loc_B959:
B959       LDA    $C08C,X
B95C       BPL    loc_B959
B95E       CMP    #$AA
B960       BNE    loc_B954
B962       LDY    #3
B964 loc_B964:
B964       LDA    $C08C,X
B967       BPL    loc_B964
B969       CMP    #$96
B96B       BNE    loc_B954
B96D       LDA    #0
B96F loc_B96F:
B96F       STA    byte_27
B971 loc_B971:
B971       LDA    $C08C,X
B974       BPL    loc_B971
B976       ROL    A
B977       STA    byte_26
B979 loc_B979:
B979       LDA    $C08C,X
B97C       BPL    loc_B979
B97E       AND    byte_26
B980       STA    $2C,Y
B983       EOR    byte_27
B985       DEY
B986       BPL    loc_B96F
B988       TAY
B989       BNE    loc_B942
B98B loc_B98B:
B98B       LDA    $C08C,X
B98E       BPL    loc_B98B
B990       CMP    #$DF      ;instead of #$DE
B992       BNE    loc_B942
B994       NOP
B995 loc_B995:
B995       LDA    $C08C,X
B998       BPL    loc_B995
B99A       CMP    #$FE      ;instead of #$AA
B99C       BNE    loc_B942
B99E loc_B99E:
B99E       CLC
B99F       RTS

Here's the data marker routine:

B8DC sub_B8DC:
B8DC       LDY    #$20
B8DE loc_B8DE:
B8DE       DEY
B8DF       BEQ    loc_B942
B8E1 loc_B8E1:
B8E1       LDA    $C08C,X
B8E4       BPL    loc_B8E1
B8E6 loc_B8E6:
B8E6       EOR    #$D5
B8E8       BNE    loc_B8DE
B8EA       NOP
B8EB loc_B8EB:
B8EB       LDA    $C08C,X
B8EE       BPL    loc_B8EB
B8F0       CMP    #$AA
B8F2       BNE    loc_B8E6
B8F4       LDY    #$56
B8F6 loc_B8F6:
B8F6       LDA    $C08C,X
B8F9       BPL    loc_B8F6
B8FB       CMP    #$AD
B8FD       BNE    loc_B8E6
B8FF       LDA    #0
B901 loc_B901:
B901       DEY
B902       STY    byte_26
B904 loc_B904:
B904       LDY    $C08C,X
B907       BPL    loc_B904
B909       EOR    $BA00,Y
B90C       LDY    byte_26
B90E       STA    $BC00,Y
B911       BNE    loc_B901
B913 loc_B913:
B913       STY    byte_26
B915 loc_B915:
B915       LDY    $C08C,X
B918       BPL    loc_B915
B91A       EOR    $BA00,Y
B91D       LDY    byte_26
B91F       STA    $BB00,Y
B922       INY
B923       BNE    loc_B913
B925 loc_B925:
B925       LDY    $C08C,X
B928       BPL    loc_B925
B92A       CMP    $BA00,Y
B92D       BNE    loc_B942
B92F loc_B92F:
B92F       LDA    $C08C,X
B932       BPL    loc_B92F
B934       CMP    #$DF      ;instead of #$DE
B936       BNE    loc_B942
B938       NOP
B939 loc_B939:
B939       LDA    $C08C,X
B93C       BPL    loc_B939
B93E       CMP    #$FE      ;instead of #$AA
B940       BEQ    loc_B99E
B942 loc_B942:
B942       SEC
B943       RTS


Since this is just a slightly modified DOS, we can use their DOS to read the entire disk (except tracks #$21 and #$22, which are not formatted).


Derničre édition par qkumba le Ven 19 Oct 2012, 20:53; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Ven 19 Oct 2012, 20:45    Sujet du message: Répondre en citant

Now we have a complete disk image. Standard DOS has an entrypoint at $9D84. We'll just continue from there. You haven't missed anything.

Code:
9D84 loc_9D84:
9D84       LDA    byte_B7E9
9D87       LSR    A
9D88       LSR    A
9D89       LSR    A
9D8A       LSR    A
9D8B       STA    byte_AA6A
9D8E       LDA    byte_B7EA
9D91       STA    byte_AA68
9D94       LDA    byte_E000
9D97       EOR    #$20
9D99       BNE    loc_9DAC
9D9B       STA    byte_AAB6
9D9E       LDX    #$A      ;ROM-specific patching
9DA0 loc_9DA0:
9DA0       LDA    $9D61,X
9DA3       STA    $9D55,X
9DA6       DEX
9DA7       BNE    loc_9DA0
9DA9       JMP    loc_9DBC
9DAC loc_9DAC:
9DAC       LDA    #$40
9DAE       STA    byte_AAB6
9DB1       LDX    #$C
9DB3 loc_9DB3:
9DB3       LDA    $9D6B,X
9DB6       STA    $9D55,X
9DB9       DEX
9DBA       BNE    loc_9DB3
9DBC loc_9DBC:

      ;unconditional jump in 6502 style

9DBC       SEC
9DBD       BCS    loc_9DD1
9DBF       LDA    byte_AAB6
9DC2       BNE    loc_9DC8
9DC4       LDA    #$20
9DC6       BNE    loc_9DCD
9DC8 loc_9DC8:
9DC8       ASL    A
9DC9       BPL    loc_9DD0
9DCB       LDA    #$4C
9DCD loc_9DCD:
9DCD       JSR    sub_A5B2
9DD0 loc_9DD0:
9DD0       CLC
9DD1 loc_9DD1:
9DD1       JMP    loc_AD2B


And then to $AD2B, where some further customisation exists.

Code:
AD2B loc_AD2B:
AD2B       JSR    sub_AD39
AD2E       JMP    loc_6000


That just used DOS to read some sectors to $6000. Nothing special there.
However, now we will see something interesting.
Most of the routine is for filling in the IOB block for RWTS and reading multiple sectors, so it's not shown.
But there is one nice trick at $602E.

Code:
6000 loc_6000:
6000       SEI
6001       LDA    #0
6003       STA    byte_3F2
6006       LDA    #$60
6008       STA    byte_3F3
600B       EOR    #$A5
600D       STA    byte_3F4
6010       JSR    sub_616A   ;clear upper memory
6013       JSR    sub_6019   ;sync check
6016       JMP    loc_805
6019 sub_6019:
6019       LDX    #1
601B       STX    byte_82
601D       JSR    sub_6054   ;use DOS to read a sector
6020       LDA    #5
6022       STA    byte_57
6024       LDX    byte_2B
6026       LDA    $C088,X
6029       LDA    $C08E,X
602C       LDY    #0
602E loc_602E:
602E       LDA    $C08C,X
6031       BPL    loc_602E
6033       CMP    #$D5
6035       BEQ    loc_603B
6037       TAY         ;remember previous sync byte
6038       JMP    loc_602E
603B loc_603B:
603B       LDA    $C08C,X
603E       BPL    loc_603B
6040       CMP    #$AA
6042       BNE    loc_602E
6044       CPY    #$FF      ;check sync byte
6046       BEQ    loc_604D
6048       CPY    #$FE      ;don't really want #$FF or #$FE
604A       BEQ    loc_604D
604C       RTS         ;one sector has special sync byte
604D loc_604D:
604D       DEC    byte_57
604F       BNE    loc_602E
6051 loc_6051:
6051       JMP    loc_6051   ;hang if special sync byte is missing


Onwards to $805 via the jump at $6016.
Most of this code is not interesting, either.
It reads the title screen, unpacks it, animates it, and then displays the controller prompt.
So we start at the interesting part.

Code:
0885       LDX    #$B
0887       STX    byte_200
...
0937       LDY    #$7D
0939       STY    byte_2FF


These two writes don't look like anything special, but we'll see them again soon.

Code:
08F6       LDA    #$B
08F8       PHA         ;push high part of return address
...
0926       LDA    #$6A
0928       PHA         ;push low part of return address


Very easy to miss that part.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Ven 19 Oct 2012, 20:48    Sujet du message: Répondre en citant

After the controller prompt, there's a RTS that uses the pushed return address.
Return address is $B6A, which is also 1 less than the address that's used, so we continue from $B6B.

Code:
0B6B loc_B6B:
0B6B       BIT    byte_C052
0B6E       JMP    ($02FF)


Who knows their 6502 CPU bugs? That jump is very special.
The 6502 had a bug when fetching a memory-indirect jump address that spans a page.
Yes, that's right, this code is exploiting that bug.
The high part is at $0200, not $0300. That explains the two writes earlier.
Fixing this allows Randamn to run on a 65C02 as well. Nice. ;-)

Code:
0B7D loc_B7D:
0B7D       LDA    #0
0B7F       STA    byte_80
0B81       LDA    #0
0B83       STA    byte_81
0B85       LDA    #1
0B87       STA    byte_82
0B89       LDA    #0
0B8B       STA    byte_D
0B8D       LDA    #$40
0B8F       STA    byte_E
0B91       JSR    sub_1467   ;use DOS to read entire track
0B94       LDY    #1
0B96       LDA    ($1B),Y
0B98       STA    byte_85
0B9A loc_B9A:
0B9A       LDA    #0
0B9C       STA    byte_82
0B9E       JSR    sub_1467   ;use DOS to read entire track
0BA1       LDX    byte_85
0BA3       LDA    $C089,X
0BA6       LDA    $C08E,X
0BA9 loc_BA9:
0BA9       JSR    sub_B944   ;read address marker
0BAC       LDA    byte_2D
0BAE       BNE    loc_BA9   ;wait for sector 0
0BB0       LDA    #0
0BB2       STA    byte_82
0BB4       INC    byte_80
0BB6       JSR    sub_1467   ;use DOS to read entire track
0BB9       BCC    loc_BC0
0BBB       DEC    byte_80
0BBD       JMP    loc_B9A
0BC0 loc_BC0:
0BC0       LDY    #1
0BC2       LDA    ($1B),Y
0BC4       TAX
0BC5       LDA    $C089,X
0BC8       LDA    $C08E,X
0BCB       STX    byte_85

      ;this routine is testing the drive speed
      ;the expectation is that after reading an entire track
      ;the next sector to read will be sector 0 again

0BCD       JSR    sub_B944   ;read address marker
0BD0       LDA    byte_2D
0BD2       LDY    byte_80
0BD4       STA    $BFE6,Y   ;cache sector number
0BD7       CPY    #5
0BD9       BNE    loc_B9A   ;read 5 sector headers
0BDB       LDA    #0
0BDD       STA    byte_D
0BDF       LDA    #$83
0BE1       STA    byte_E
0BE3       LDA    #5
0BE5       STA    byte_80
0BE7       LDA    #4
0BE9       STA    byte_81
0BEB       LDA    #4
0BED       STA    byte_81
0BEF       LDA    #1
0BF1       STA    byte_82
0BF3       JSR    sub_1442   ;use DOS to read one sector
0BF6       LDX    byte_85
0BF8       LDA    $C088,X
0BFB       JSR    loc_8300


$8300 displays some text messages and then uses DOS to read more sectors, plus two more tricks.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Ven 19 Oct 2012, 20:49    Sujet du message: Répondre en citant

Code:
8300 loc_8300:
8300       JMP    loc_832D
...
832D loc_832D:
...
8340       JSR    loc_83B2
...
834B loc_834B:
834B       JMP    ($02FF)   ;there's that jump trick again
...
8380 sub_8380:
...
83A6       LDA    #8
83A8       STA    byte_200
...
83B2       JSR    sub_8380
...
83E9       LDA    #8
83EB       STA    byte_2FF
...
8412       JSR    sub_8441
...

   ;this routine examines the disk structure
   ;two sectors with special markers must be placed at a certain distance apart
   ;a copy program won't be able to reproduce this behaviour

8441 sub_8441:
8441       LDX    #$D
8443       STX    byte_80
8445       LDX    #8
8447       STX    byte_81
8449       LDX    #1
844B       STX    byte_82
844D       LDA    #0
844F       STA    byte_D
8451       LDA    #$8F
8453       STA    byte_E
8455       LDX    #1
8457       STX    byte_58
8459       JSR    sub_866C   ;use DOS to read a sector
845C       LDX    byte_8F64
845F       STX    byte_800
8462       LDX    byte_8F65
8465       STX    byte_801
8468       LDA    #0
846A       JSR    sub_84B2   ;seek track and measure distance between two particular sectors
846D       LDX    byte_8F66
8470       STX    byte_800
8473       LDX    byte_8F67
8476       STX    byte_801
8479       LDA    #2
847B       JSR    sub_84B2   ;seek track and measure distance between two particular sectors
847E       LDX    byte_8F68
8481       STX    byte_800
8484       LDX    byte_8F69
8487       STX    byte_801
848A       LDA    #4
848C       JSR    sub_84B2   ;seek track and measure distance between two particular sectors
848F       LDX    byte_8F6A
8492       STX    byte_800
8495       LDX    byte_8F6B
8498       STX    byte_801
849B       LDA    #5
849D       JSR    sub_84B2   ;seek track and measure distance between two particular sectors
84A0       LDX    byte_8F6C
84A3       STX    byte_800
84A6       LDX    byte_8F6D
84A9       STX    byte_801
84AC       LDA    #$16
84AE       JSR    sub_84B2   ;seek track and measure distance between two particular sectors
84B1       RTS


For the tricky jump, the jump address this time is $808. We continue from there.

Code:
0808 loc_808:
0808       JMP    loc_8F6
...
08F6 loc_8F6:
08F6       BIT    byte_C010
08F9       LDA    #8
08FB       LDX    #$F6
08FD       JSR    sub_12CB   ;hook reset vector
0900       LDA    loc_8300
0903       CMP    #$4C
0905       BNE    loc_92D   ;detect hack attempt
0907       LDA    #3
0909       STA    byte_7D
090B       LDA    #$67
090D       STA    byte_72
090F       LDY    #1

      ;compare expected sector number against read sector number

0911 loc_911:
0911       LDA    byte_8F00,Y
0914       CMP    byte_BFE6,Y
0917       BEQ    loc_94F

      ;allow +/- 1 sector number variation

0919       CLC
091A       ADC    #1
091C       AND    #$F
091E       CMP    byte_BFE6,Y
0921       BEQ    loc_94F
0923       SEC
0924       SBC    #2
0926       AND    #$F
0928       CMP    byte_BFE6,Y
092B       BEQ    loc_94F

      ;erase memory and hang system

092D loc_92D:
092D       LDA    #$4F
092F       STA    byte_D
0931       LDA    #9
0933       STA    byte_E
0935       LDY    #$2F
0937 loc_937:
0937       STA    $900,Y
093A       DEY
093B       BNE    loc_937
093D loc_93D:
093D       LDY    #0
093F loc_93F:
093F       STA    ($D),Y
0941       INY
0942       BNE    loc_93F
0944       INC    byte_E
0946       LDA    byte_E
0948       CMP    #$C0
094A       BNE    loc_93D
094C loc_94C:
094C       JMP    loc_94C
094F loc_94F:
094F       INY
0950       CPY    #6
0952       BNE    loc_911


If all goes well, we fall through to $A13, where we find another special read routine.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Ven 19 Oct 2012, 20:51    Sujet du message: Répondre en citant

Code:
0A13       JSR    sub_63B3
...
63B3 sub_63B3:
63B3       JMP    loc_641C
...
641C loc_641C:
...
6457       LDY    #1
6459       LDA    ($1B),Y
645B       TAX
645C       LDA    $C089,X
645F       LDA    $C08E,X
6462       LDY    #$1E
6464
6464 loc_6464:
6464       LDA    $C08C,X
6467       BPL    loc_6464
6469       DEY
646A       BNE    loc_6464
646C
646C loc_646C:
646C       LDA    $C08C,X
646F       BPL    loc_646C
6471       CMP    #$A6
6473       BNE    loc_64BA
6475
6475 loc_6475:
6475       LDA    $C08C,X
6478       BPL    loc_6475
647A       CMP    #$B3
647C       BNE    loc_646C
647E
647E loc_647E:
647E       LDA    $C08C,X
6481       BPL    loc_647E
6483       CMP    #$95
6485       BNE    loc_646C
6487       LDA    $C08D,X
648A       LDA    $C08E,X
648D       LDA    $C088,X
6490       LDY    #9
6492
6492 loc_6492:
6492       PHA
6493       PLA
6494       DEY
6495       BNE    loc_6492
6497       LDA    $C08E,X
649A       LDY    #$28
649C
649C loc_649C:
649C       LDA    $C08C,X
649F       BPL    loc_649C
64A1       DEY
64A2       BEQ    loc_6464
64A4       CMP    #$95
64A6       BNE    loc_649C
64A8
64A8 loc_64A8:
64A8       LDA    $C08C,X
64AB       BPL    loc_64A8
64AD       CMP    #$B3
64AF       BNE    loc_649C
64B1
64B1 loc_64B1:
64B1       LDA    $C08C,X
64B4       BPL    loc_64B1
64B6       CMP    #$95
64B8       BNE    loc_649C


If we get past that, we go through a tortuous route to another check.
This one is lovely and subtle.

Code:
0A29       JSR    sub_11C4
...
11C4 sub_11C4:
...
1215       JSR    sub_128D
...
128D sub_128D:
...
129F       JSR    loc_987C
...
987C sub_987C:
987C       JMP    sub_9F53
...
9F53 sub_9F53:
...
9F6E       JSR    sub_9F74
...
9F74 sub_9F74:
...
A095 loc_A095:
A095       LDA    byte_5F
A097       LDY    #4
A099       STA    ($5C),Y
A09B       LDX    byte_0
A09D       LDY    byte_2
A09F       JMP    loc_A0F3
...
A0F3 loc_A0F3:
A0F3       STY    byte_2
A0F5       STX    byte_0

      ;do you see it?

A0F7       LDA    byte_2E
A0F9       EOR    byte_2D
A0FB       CMP    byte_2F
A0FD       BNE    loc_A095


$2E is the track, $2D is the sector, $2F is the volume, from the last read sector header.
Since each sector can have its own volume number, any value can be put there.
The code loops infinitely here if the values don't match.
This check appears in several places in the code, with different effects.
Some of them switch to decimal mode, some hang the system. Very funny.

And that's it. The game runs until you win, but then it hangs after displaying the message.
The reason why is here. It's supposed to be a delay.
The routine that calls it switches between the text and graphics display, so you see the message and your score.

Code:
6660 sub_6660:
6660       BIT    byte_C010
6663       LDX    #$FF
6665 loc_6665:
6665       LDA    byte_C000
6668       BMI    locret_667F
666A       LDY    #0
666C loc_666C:
666C       LDA    #6
666E loc_666E:
666E       PHA
666F       PLA
6670       PHA
6671       PLA
6672       PHA         ;push here
6673       SEC
6674       SBC    #1
6676       BNE    loc_666E   ;oops, forgot to pop first
6678       PLA         ;this pop is in the wrong place
               ;the result is complete stack overwrite
6679       DEY
667A       BNE    loc_666C
667C       DEX
667D       BNE    loc_6665
667F locret_667F:
667F       RTS         ;so we return to a bad address and hang


It's better to have the bug there the first time that you win, because the message is long, and has instructions for requesting the special prize.
The prize was a sticker (not available anymore). See http://pferrie.host22.com/pics/randamn3.png for a picture of it.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 2893
Localisation: Le Chesnay, France

MessagePosté le: Sam 20 Oct 2012, 3:36    Sujet du message: Répondre en citant

Thank you, Peter,
That was an interesting crack to follow,
antoine
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com