Voir le sujet pr�c�dent :: Voir le sujet suivant |
Auteur |
Message |
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 31 Ao� 2007, 9:21 Sujet du message: Mac Arthur's war (SSG, 1988) |
|
|
A typical wargame from SSG. I lack the documentation, giving more information would be difficult...
All I can say is that it was an easy crack but the hardest to update to make it bootable and playable due to the use of the complete memory of the Apple II.
PROTECTION TYPE
It is nothing but a ten sectors per track disk. Each sector is 4*4 coded. The advantage of using 4*4 coded nibbles is that it does not require any ram space to decode nibbles into bytes.
BOOT TRACE
- 9600<C600.C6FFM
- 96FB: AD E8 C0 60
- 9600G
The code we get at $0800 loads data from $1000 to $10FF
- 96FB: A9 59 8D 8D 08 A9 FF 8D 8E 08 4C 01 08
- 9600G
The code at $1000 loads data from $BD00 to $BFFF. It sets a JMP $BD00 at $03D0 and then jumps to $BD00. That is the entry point of the RWTS. Let's detail it...
THE RWTS
$BD00: the entry point. It uses ZP values from $00 to $05.
$BDDC: boing! The error management routine.
$BDEB: read marker data
$BE4C: move the arm.
$BE8A: read sector
$BF00: write sector
The zero page values:
$00: high-byte start address (eg. $BA for $BA00)
$01: high-byte end address (eg. $BC for $BCFF)
$02: not used, always $00
$03: command ($1: read, $2: write)
$04: track
$05: sector
A simple example:
- loading data from $2000 to $3FFF from track 2, sector 0:
- put these values at $00: 20 3F 00 01 02 00
- perform a JSR or a JMP to $BD00
DISK COPY
As you can see, reading the disk is an easy task. Please note that track 0 contains NINE sectors only, not ten. Perform the read manually:
- $00: 10 18 00 01 00 00
- BD00G
- save data from $1000 to $18FF on your second disk drive
Transform the following pseudo-code in assembly and run it to get the remaining tracks.
Code: |
FOR track=$1 to track=$22
.FOR sector=$0 to sector=$9
..set the right parameters on ZP: $10 19 00 01 TT SS
..load data from $1000 to $19FF
..save it on your second disk drive
.end FOR
end FOR
|
Perform the same operations on side B !
You now have a copiable diskette that will not boot: all disk routines must be rewritten.
DISK STRUCTURE
First of all, we need to know what is where on the disk:
- T0/S0: first sector is a standard 6*2 sector (required to boot)
All other sectors are non standard sectors and are 4*4 coded.
- T0/S0: corresponds to T0/S1 on the non-protected disk, it contains the side info string: MCAWx4 (x=1 or 2 depending on the side)
- T0/S1 to T22/S9 are 4*4 nibbles.
MEMORY ORGANIZATION
We then need to know what is where:
$0000..$00FF: Zero page
$0100..$01FF: Stack
$0200..$02FF: non-standard track 0, sector 0 is loaded there. Needed to know which side we are on.
$0300..$03FF: program variables
$0400..$3FFF: program
$4000..$5FFF: HGR2
$6000..$BFFF: program
$D000..$FFFF: program
As you can see, we have no room on the Apple II memory to load our nibbles and decode them to RAM.
We will use the $0280..$02FF area and take that into account to update the side check routines.
REWRITING THE DISK ROUTINES
Rewriting the read and arm move routines is easy, changing the write routine is quite difficult.
We have no room in RAM to transform bytes into nibbles. So that, I have decided not to include the write routine. It will come later on.
I will add another entry in that thread with the source code of the new RWTS.
UPDATING THE SIDE CHECK ROUTINES
Now that the routines have been updated, we need to update the side check routines:
- the program loads T0/S0 of both sides at $0200 and checks the value of $0204 ($B1 or $B2)
- the program checks the value of the byte following the side string. If it does not find "4", it hangs.
As our new T0/S0 is our boot code, we need to tell the program to load another sector of the disk where the side info is.
The one I have used is T0/S9. Another issue is that the sector is loaded at $0200 and our denibblizing data is at $0280 leading to a conflict.
I have but found values for which the side is correctly checked.
Setting the side info
- on side 1, load T0/S9, fill it entirely with $11 values and save it back to disk
- on side 2, load T0/S9, fill it entirely with $22 values and save it back to disk
Updating the side check routine (side 1 only)
- T2/S3/12: 02 02 00 01 00 00 => 02 02 00 01 00 09
- T2/S3/00: D0 0A CA D0 F5 AD 04 02 29 0F 85 0A 60 => D0 00 CA D0 F5 AD 80 02 29 0F 85 0A 60
Removing the check routine
- TA/S0/AF: 02 02 00 01 00 00 => 02 02 00 01 00 09
- TA/S0/C2: AD 05 02 C9 04 D0 02 18 24 38 60 => AD 05 02 C9 04 D0 00 18 24 38 60
Pffffff... End of part 1, enjoy!
Toinet
Derni�re �dition par toinet le Ven 31 Ao� 2007, 11:30; �dit� 1 fois |
|
Revenir en haut de page |
|
![](templates/subSilver/images/spacer.gif) |
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 31 Ao� 2007, 9:22 Sujet du message: |
|
|
And now, the code of the original RWTS:
Code: |
*
* SSG: MacArthur's war
*
* Original source code, LoGo 2007
*
ORG $00BD00
MX %11
LST OFF
*
* EQUATES
*
RWTS_BUF_LOW = $00
RWTS_BUF_HIGH = $01
RWTS_COMMAND = $03
RWTS_TRACK = $04
RWTS_SECTOR = $05
RWTS_TRIES1 = $06
RWTS_TRIES2 = $07
SECTOR_READ = $2D
TRACK_READ = $2E
MAX_SECTOR = $0A
MAX_TRACK = $23
COMMAND_READ = $01
COMMAND_WRITE = $02
CURRENT_SLOT = $03D3
CURRENT_DRIVE = $03D4
*
SPKR EQU $C030
*
* RWTS
*
LBD00 CLD
JMP LBD05
RWTS_PHASE DB $00
LBD05 LDA RWTS_BUF_LOW
STA LBF39+2
STA LBF57+2
STA LBECB+2
SEC
SBC RWTS_BUF_HIGH
BEQ LBD1A
BCC LBD1A
JMP EXIT_ERR ; LOW must be < HIGH
LBD1A LDX CURRENT_SLOT ; SLOT * 16
LDA CURRENT_DRIVE ; DRIVE
LSR
BCS LBD28
LDA $C08B,X ; drive 2
BCC LBD2B
LBD28 LDA $C08A,X ; drive 1
LBD2B LDA $C089,X ; turn drive on
LDA RWTS_COMMAND
CMP #COMMAND_READ
BEQ LBD3C
LDY #$03
LBD36 JSR WAIT
DEY
BPL LBD36
*
* ARE WE ON THE RIGHT TRACK AND SECTOR ?
*
LBD3C LDA #$05
STA RWTS_TRIES2
LBD40 LDA #$30
STA RWTS_TRIES1
LBD44 JSR READ_ADDRESS
BCC LBD61
DEC RWTS_TRIES1
BPL LBD44
LDA #$16
STA RWTS_PHASE
LDA #$00
DEC RWTS_TRIES2
BNE LBD5B
JMP EXIT_ERR
LBD5B JSR MOVE_ARM
JMP LBD40
* ADDRESS FIELD FOUND
LBD61 LDA TRACK_READ ; are we on the right track ?
CMP RWTS_TRACK
BEQ LBD82
LDA $C080,X ; nope! move
LDA $C082,X
LDA $C084,X
LDA $C086,X
LDA TRACK_READ
ASL
STA RWTS_PHASE
LDA RWTS_TRACK
ASL
JSR MOVE_ARM
JMP LBD44
* WE ARE ON THE RIGHT TRACK
LBD82 LDA RWTS_SECTOR
CMP SECTOR_READ
BEQ LBD93
DEC RWTS_TRIES1
BPL LBD44
DEC RWTS_TRIES2
BNE LBD40
JMP EXIT_ERR
* WE ARE WELL-PLACED
LBD93 LDA RWTS_COMMAND
CMP #COMMAND_WRITE
BEQ LBDA5
JSR READ_SECTOR
BCC LBDA8
DEC RWTS_TRIES1
BMI EXIT_ERR
JMP LBD44
LBDA5 JSR WRITE_SECTOR
* LOOP UNTIL WE REACH THE END!
LBDA8 LDA RWTS_BUF_LOW ; next page
CMP RWTS_BUF_HIGH
BEQ EXIT
CLC
ADC #$01
STA RWTS_BUF_LOW
STA LBF39+2
STA LBF57+2
STA LBECB+2
INC RWTS_SECTOR ; next sector
LDA RWTS_SECTOR
CMP #MAX_SECTOR
BEQ LBDC7
JMP LBD3C
LBDC7 LDA #$00 ; next track
STA RWTS_SECTOR
LDA RWTS_TRACK
ASL
STA RWTS_PHASE
INC RWTS_TRACK
LDA RWTS_TRACK
ASL
JSR MOVE_ARM
JMP LBD3C
*
*
*
EXIT_ERR JSR BOING
EXIT STA $C08E,X
CMP $C08C,X
LDA $C088,X
RTS
*
*
*
LBDE9 SEC
RTS
READ_ADDRESS LDY #$F8
STY $26
LBDEF INY
BNE LBDF6
INC $26
BEQ LBDE9
LBDF6 LDA $C08C,X
BPL LBDF6
LBDFB CMP #$D5
BNE LBDEF
NOP
LBE00 LDA $C08C,X
BPL LBE00
CMP #$AA
BNE LBDFB
LDY #$03
LBE0B LDA $C08C,X
BPL LBE0B
CMP #$B5
BNE LBDFB
LDA #$00
LBE16 STA $27
LBE18 LDA $C08C,X
BPL LBE18
ROL
STA $26
LBE20 LDA $C08C,X
BPL LBE20
AND $26
STA |$002C,Y
EOR $27
DEY
BPL LBE16
TAY
BNE LBDE9
LBE32 LDA $C08C,X
BPL LBE32
CMP #$DE
BNE LBDE9
NOP
LBE3C LDA $C08C,X
BPL LBE3C
CMP #$AA
BNE LBDE9
CLC
RTS
*
*
*
MOVE_WAIT LDA #$28
JMP WAIT
MOVE_ARM STA $2A
LBE4E LDA RWTS_PHASE
STA $27
SEC
SBC $2A
BEQ LBE79
BCS LBE5F
INC RWTS_PHASE
BCC LBE62
LBE5F DEC RWTS_PHASE
LBE62 JSR LBE7C
JSR MOVE_WAIT
LDA $27
AND #$03
ASL
ORA CURRENT_SLOT
TAY
LDA $C080,Y
JSR MOVE_WAIT
BEQ LBE4E
LBE79 JSR MOVE_WAIT
LBE7C LDA RWTS_PHASE
AND #$03
ASL
ORA CURRENT_SLOT
TAY
LDA $C081,Y
RTS
*
*
*
READ_SECTOR LDY #$20
LBE8C DEY
BEQ LBEFC
LBE8F LDA $C08C,X
BPL LBE8F
NOP
LBE95 EOR #$D5
BNE LBE8C
NOP
LBE9A LDA $C08C,X
BPL LBE9A
CMP #$AA
BNE LBE95
LDY #$9A
LBEA5 LDA $C08C,X
BPL LBEA5
CMP #$AD
BNE LBE95
LDY #$00
LDA #$00
STA $47
LBEB4 LDA $C08C,X
BPL LBEB4
AND #$55
ASL
STA $46
LBEBE LDA $C08C,X
BPL LBEBE
AND #$55
ORA $46
EOR $47
STA $47
LBECB STA $6F00,Y
INY
BNE LBEB4
LBED1 LDA $C08C,X
BPL LBED1
AND #$55
ASL
STA $46
LBEDB LDA $C08C,X
BPL LBEDB
AND #$55
ORA $46
EOR $47
BNE LBEFC
LBEE8 LDA $C08C,X
BPL LBEE8
CMP #$DE
BNE LBEFC
LBEF1 LDA $C08C,X
BPL LBEF1
CMP #$AA
BNE LBEFC
CLC
RTS
LBEFC SEC
RTS
LBEFE CLC
RTS
*
*
*
WRITE_SECTOR SEC
LDA $C08D,X
LDA $C08E,X
BMI LBEFE
STX $27
BIT $0300
PHA
PLA
LDA #$FF
STA $C08F,X
ORA $C08C,X
PHA
PLA
NOP
LDY #$0A
LBF1D ORA $26
JSR LBF93
DEY
BNE LBF1D
LDA #$D5
JSR WRITE_NIBBLE
LDA #$AA
JSR WRITE_NIBBLE
LDA #$AD
JSR WRITE_NIBBLE
CMP ($00,X)
TYA
LDY #$00
LBF39 EOR $6F00,Y
PHA
LSR
ORA #$AA
STA $C08D,X
CMP $C08C,X
PHA
CMP ($00,X)
PLA
PLA
NOP
NOP
ORA #$AA
STA $C08D,X
CMP $C08C,X
BIT $26
LBF57 LDA $6F00,Y
INY
BNE LBF39
PHA
LSR
ORA #$AA
BIT $26
NOP
STA $C08D,X
CMP $C08C,X
PHA
CMP ($00,X)
PLA
PLA
NOP
NOP
ORA #$AA
STA $C08D,X
CMP $C08C,X
CMP ($00,X)
LDA #$DE
JSR WRITE_NIBBLE
LDA #$AA
JSR WRITE_NIBBLE
LDA #$EB
JSR WRITE_NIBBLE
LDA $C08E,X
LDA $C08C,X
SEC
RTS
WRITE_NIBBLE CLC
LBF93 PHA
PLA
STA $C08D,X
ORA $C08C,X
RTS
*
*
*
WAIT SEC
LBF9D PHA
LBF9E SBC #$01
BNE LBF9E
PLA
SBC #$01
BNE LBF9D
RTS
*
*
*
BOING LDA #$40
STA LBFCB
LBFAD DEC LBFCC
BNE LBFAD
LDA LBFCB
LSR
BCC LBFBB
LDA SPKR
LBFBB LDA LBFCB
AND #$03
BNE LBFC5
LDA SPKR
LBFC5 DEC LBFCB
BNE LBFAD
RTS
LBFCB DB $00
LBFCC DB $00
HEX CF0200FFFFFFFF00000000FFFFFFFF00
HEX 000000FFFFFFFF00000000FFFFFFFF00
HEX 000000FFFFFFFF00000000FFFFFFFF00
HEX 000000
|
|
|
Revenir en haut de page |
|
![](templates/subSilver/images/spacer.gif) |
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 31 Ao� 2007, 9:25 Sujet du message: |
|
|
And the code of my modified RWTS. Please note that the write routine has been commented as there are some timing issues with it. I wanted to get room on the memory thus replacing opcodes but that led to timing problems: my 32 cycles were lost...
Code: |
*
* SSG: MacArthur's war
*
* Modified source code, LoGo 2007
*
ORG $BD00
MX %11
LST OFF
*
* EQUATES
*
RWTS_BUF_LOW = $00
RWTS_BUF_HIGH = $01
RWTS_COMMAND = $03
RWTS_TRACK = $04
RWTS_SECTOR = $05
RWTS_TRIES1 = $06
RWTS_TRIES2 = $07
PTR_RAM = $3E
SECTOR_READ = $2D
TRACK_READ = $2E
MAX_SECTOR = $0A
MAX_TRACK = $23
COMMAND_READ = $01
COMMAND_WRITE = $02
LBC00 = $0280
CURRENT_SLOT = $03D3
CURRENT_DRIVE = $03D4
SPKR = $C030
*
* RWTS
*
LDA CURRENT_DRIVE ; DRIVE
LSR
BCS LBD28
LDA $C0EB ; drive 2
BCC LBD2B
LBD28 LDA $C0EA ; drive 1
LBD2B LDA $C0E9 ; turn drive on
LDA RWTS_COMMAND
CMP #COMMAND_READ
BEQ LBD3C
LDY #$03
LBD36 JSR WAIT
DEY
BPL LBD36
*
* ARE WE ON THE RIGHT TRACK AND SECTOR ?
*
LBD3C LDA #$05
STA RWTS_TRIES2
LBD40 LDA #$30
STA RWTS_TRIES1
LBD44 JSR READ_ADDRESS
BCC LBD61
DEC RWTS_TRIES1
BPL LBD44
LDA #$16
STA RWTS_PHASE
LDA #$00
DEC RWTS_TRIES2
BNE LBD5B
JMP EXIT_ERR
LBD5B JSR MOVE_ARM
JMP LBD40
* ADDRESS FIELD FOUND
LBD61 LDA TRACK_READ ; are we on the right track ?
CMP RWTS_TRACK
BEQ LBD82
LDX $C0E0 ; nope! move
LDX $C0E2
LDX $C0E4
LDX $C0E6
ASL
STA RWTS_PHASE
LDA RWTS_TRACK
ASL
JSR MOVE_ARM
JMP LBD44
* WE ARE ON THE RIGHT TRACK
*LBD82 LDA RWTS_SECTOR
* CMP SECTOR_READ
* BEQ LBD93
* DEC RWTS_TRIES1
* BPL LBD44
* DEC RWTS_TRIES2
* BNE LBD40
* JMP EXIT_ERR
* WE ARE WELL-PLACED
LBD82 = *
LBD93 LDA RWTS_COMMAND
CMP #COMMAND_WRITE
BEQ LBDA5
JSR READ_SECTOR
BCC LBDA8
DEC RWTS_TRIES1
BMI EXIT_ERR
JMP LBD44
LBDA5 JSR WRITE_SECTOR
* LOOP UNTIL WE REACH THE END!
LBDA8 LDA RWTS_BUF_LOW ; next page
CMP RWTS_BUF_HIGH
BEQ EXIT
CLC
ADC #$01
STA RWTS_BUF_LOW
INC RWTS_SECTOR ; next sector
LDA RWTS_SECTOR
CMP #MAX_SECTOR
BNE LBD3C
LBDC7 LDA #$00 ; next track
STA RWTS_SECTOR
INC RWTS_TRACK
JMP LBD3C
*
*
*
EXIT_ERR JSR BOING
EXIT STA $C0EE
CMP $C0EC
LDA $C0E8
RTS
*
* READ ADDRESS
*
READ_ADDRESS LDY #$F8
STY $26
LBDEF INY
BNE LBDF6
INC $26
BEQ LBDE9
LBDF6 LDA $C0EC
BPL LBDF6
LBDFB CMP #$D5
BNE LBDEF
LBE00 LDA $C0EC
BPL LBE00
CMP #$AA
BNE LBDFB
LBE0B LDA $C0EC
BPL LBE0B
CMP #$96 ; WAS $B5
BNE LBDFB
LDX #$03
LDA #$00
LBE16 STA $27
LBE18 LDA $C0EC
BPL LBE18
ROL
STA $26
LBE20 LDA $C0EC
BPL LBE20
AND $26
STA |$002C,X ; 2C+3 : VOLUME
EOR $27 ; 2C+2 : TRACK
DEX ; 2C+1 : SECTOR
BPL LBE16 ; 2C+0 : CHECKSUM
TAY
BNE LBDE9
LDX RWTS_SECTOR
LDA SECTOR_READ
CMP INTERLEAVING,X
BNE LBDEF
CLC
RTS
LBDE9 SEC
RTS
*
* READ SECTOR
*
READ_SECTOR LDA #$00
STA PTR_RAM
LDA RWTS_BUF_LOW
STA PTR_RAM+1
LDY #$20
LB8DE DEY
BEQ LB942
]LP LDA $C0EC
BPL ]LP
LB8E6 EOR #$D5
BNE LB8DE
]LP LDA $C0EC
BPL ]LP
LB8F0 CMP #$AA
BNE LB8E6
LDY #$56
]LP LDA $C0EC
BPL ]LP
LB8FA CMP #$AD
BNE LB8E6
LDA #$00
LB901 DEY
STY $26
]LP LDY $C0EC
BPL ]LP
EOR LBA96-$96,Y
LDY $26
STA LBC00,Y
BNE LB901
LB913 STY $26
]LP LDY $C0EC
BPL ]LP
EOR LBA96-$96,Y
LDY $26
STA (PTR_RAM),Y
INY
BNE LB913
]LP LDY $C0EC
BPL ]LP
CMP LBA96-$96,Y
BEQ DENIBBLIZE
LB942 SEC
RTS
*
DENIBBLIZE LDY #$00
LB8C4 LDX #$56
LB8C6 DEX
BMI LB8C4
LDA (PTR_RAM),Y
LSR LBC00,X
ROL
LSR LBC00,X
ROL
STA (PTR_RAM),Y
INY
BNE LB8C6
RTS
*
* WRITE_SECTOR
*
WRITE_SECTOR CLC
RTS
*NIBBLIZE LDX #$00
* STX PTR_RAM
* LDY #$02
*LB804 DEY
* LDA (PTR_RAM),Y
* LSR
* ROL LBC00,X
* LSR
* ROL LBC00,X
* STA LBB00,Y
* INX
* CPX #$56
* BCC LB804
* LDX #$00
* TYA
* BNE LB804
* LDX #$55
*LB81E LDA LBC00,X
* AND #$3F
* STA LBC00,X
* DEX
* BPL LB81E
* RTS
* SEC
* STX $27
* STX $0678
* LDA $C08D,X
* LDA $C08E,X
* BMI LB8B4
* LDA LBC00
* STA $26
* LDA #$FF
* STA $C08F,X
* ORA $C08C,X
* PHA
* PLA
* NOP
* LDY #$04
*LB84A PHA
* PLA
* JSR LB8B9
* DEY
* BNE LB84A
*LB852 LDA #$D5
* JSR LB8B8
*LB857 LDA #$AA
* JSR LB8B8
*LB85C LDA #$AD
* JSR LB8B8
* TYA
* LDY #$56
* BNE LB869
*LB866 LDA LBC00,Y
*LB869 EOR LBC00-1,Y
* TAX
* LDA LBA29,X
* LDX $27
* STA $C08D,X
* LDA $C08C,X
* DEY
* BNE LB866
* LDA $26
* NOP
*LB87E EOR LBB00,Y
* TAX
* LDA LBA29,X
* LDX $0678
* STA $C08D,X
* LDA $C08C,X
* LDA LBB00,Y
* INY
* BNE LB87E
* TAX
* LDA LBA29,X
* LDX $27
* JSR LB8BB
*LB89D LDA #$DE
* JSR LB8B8
*LB8A2 LDA #$AA
* JSR LB8B8
*LB8A7 LDA #$EB
* JSR LB8B8
* LDA #$FF
* JSR LB8B8
* LDA $C08E,X
*LB8B4 LDA $C08C,X
* RTS
*LB8B8 CLC
*LB8B9 PHA
* PLA
*LB8BB STA $C08D,X
* ORA $C08C,X
* RTS
*
* MOVE ARM
*
MOVE_ARM STA $2A
LBE4E LDA RWTS_PHASE
STA $27
SEC
SBC $2A
BEQ LBE79
BCS LBE5F
INC RWTS_PHASE
BCC LBE62
LBE5F DEC RWTS_PHASE
LBE62 JSR LBE7C
JSR MOVE_WAIT
LDA $27
AND #$03
ASL
TAY
LDA $C0E0,Y
JSR MOVE_WAIT
BEQ LBE4E
LBE79 JSR MOVE_WAIT
LBE7C LDA RWTS_PHASE
AND #$03
ASL
TAY
LDA $C0E1,Y
RTS
MOVE_WAIT LDA #$28
JMP WAIT
RWTS_PHASE DB $00
*
* WAIT
*
WAIT SEC
LBF9D PHA
LBF9E SBC #$01
BNE LBF9E
PLA
SBC #$01
BNE LBF9D
RTS
*
*
*
BOING LDX #$40
LBFAD LDY #$00
]LP DEY
BNE ]LP
TXA
LSR
BCC LBFBB
LDA SPKR
LBFBB TXA
AND #$03
BNE LBFC5
LDA SPKR
LBFC5 DEX
BNE LBFAD
RTS
DS \
*
* DATA 6*2
*
INTERLEAVING HEX 000D0B09070503010E0C0A080604020F
* THE NIBBLE TABLE
LBA29 HEX 96979A9B9D9E9FA6A7ABACADAEAFB2B3
HEX B4B5B6B7B9BABBBCBDBEBFCBCDCECFD3
HEX D6D7D9DADBDCDDDEDFE5E6E7E9EAEBEC
HEX EDEEEFF2F3F4F5F6F7F9FAFBFCFDFEFF
* INDEX IN THE NIBBLE TABLE
LBA96 HEX 0001989902039C040506A0A1A2A3A4A5
HEX 0708A8A9AA090A0B0C0DB0B10E0F1011
HEX 1213B81415161718191AC0C1C2C3C4C5
HEX C6C7C8C9CA1BCC1C1D1ED0D1D21FD4D5
HEX 2021D822232425262728E0E1E2E3E429
HEX 2A2BE82C2D2E2F303132F0F133343536
HEX 3738F8393A3B3C3D3E3F
DS \
|
|
|
Revenir en haut de page |
|
![](templates/subSilver/images/spacer.gif) |
Oz
Inscrit le: 29 Ao� 2007 Messages: 49 Localisation: Courbevoie, France
|
Post� le: Ven 31 Ao� 2007, 20:09 Sujet du message: |
|
|
Depuis quand �cris tu tes instructions en MAJUSCULE ?
Olivier |
|
Revenir en haut de page |
|
![](templates/subSilver/images/spacer.gif) |
|