Posted Sun Jul 20, 2008 10:39 PM
Posted Mon Jul 21, 2008 2:13 AM
cdoty, on Mon Jul 21, 2008 7:39 AM, said:
Posted Thu Aug 14, 2008 8:46 AM
Posted Tue Aug 19, 2008 11:16 PM
semicolo, on Thu Aug 14, 2008 5:46 PM, said:
Posted Sat Aug 23, 2008 9:04 PM
Posted Mon Aug 25, 2008 1:08 PM
semicolo, on Sun Aug 24, 2008 6:04 AM, said:
Posted Tue Aug 26, 2008 2:18 PM
Posted Sun Aug 31, 2008 10:28 PM
semicolo, on Tue Aug 26, 2008 11:18 PM, said:
Posted Tue Sep 2, 2008 8:05 PM
Posted Thu Sep 4, 2008 11:49 AM
semicolo, on Wed Sep 3, 2008 5:05 AM, said:
Posted Fri Aug 21, 2009 12:56 PM
karri, on Thu Sep 4, 2008 11:49 AM, said:
Posted Fri Aug 21, 2009 1:05 PM
Posted Tue Aug 25, 2009 11:00 PM
Wookie, on Fri Aug 21, 2009 1:05 PM, said:
// Some private members
int ptr, c,
num2, num7, num8, numA,
ptr5, ptrB, ptrF,
ptr5037, ptr5043, ptr5047,
ptr506C, ptr5071, ptrTMP, Cptr,
Actr, Yctr, Xctr, carry;
int in_hand, out_hand;
unsigned char buffer[600];
unsigned char work[256];
unsigned char result[600];
unsigned char constant[52];
int r_len;
int err;
// This is actually the SHA1 public key that resides in Lynx ROM
unsigned char constant_vals[52] = {
0x35, 0xB5, 0xA3, 0x94, 0x28, 0x06,
0xD8, 0xA2, 0x26, 0x95, 0xD7, 0x71, 0xB2, 0x3C, 0xFD, 0x56, 0x1C, 0x4A, 0x19, 0xB6, 0xA3, 0xB0,
0x26, 0x00, 0x36, 0x5A, 0x30, 0x6E, 0x3C, 0x4D, 0x63, 0x38, 0x1B, 0xD4, 0x1C, 0x13, 0x64, 0x89,
0x36, 0x4C, 0xF2, 0xBA, 0x2A, 0x58, 0xF4, 0xFE, 0xE1, 0xFD, 0xAC, 0x7E, 0x79
};
void CSystem::minus_it()
{
int ct, tmp;
/* carry is set on entry */
for (ct=50;ct>=0;ct--) {
tmp = work[ptr506C+ct] - constant[ct] - (1-carry);
if (tmp < 0) {
work[ptr5071+ct] = (unsigned char)(tmp + 256);
carry = 0;
}
else {
work[ptr5071+ct] = (unsigned char)(tmp);
carry = 1;
}
}
}
void CSystem::sub505D()
{
ptr506C = ptrB;
if (work[ptrB] < constant[0])
return;
else
carry = 1;
minus_it();
if (carry == 0)
return;
ptrTMP = ptrB;
ptrB = ptr5071;
ptr5071 = ptrTMP;
}
void CSystem::shift_it()
{
int ct, oldc;
oldc = 0;
for (ct=50;ct>=0;ct--) {
carry = (work[ptr5037+ct] & 0x80) / 0x80;
work[ptr5037+ct] = (unsigned char)((work[ptr5037+ct] << 1) + oldc);
oldc = carry;
}
}
void CSystem::add_it()
{
int ct, tmp;
carry = 0;
for (ct=50;ct>=0;ct--) {
tmp = work[ptr5043+ct] + work[0xAA+ct] + carry;
if (tmp >= 256)
carry = 1;
else
carry = 0;
work[ptr5047+ct] = (unsigned char)(tmp);
}
}
void CSystem::sub5018()
{
int ct;
for (ct=0;ct<51;ct++)
work[ptrB+ct] = 0;
Yctr = 0;
do {
numA = work[ptrF + Yctr];
num8 = 255;
do {
ptr5037 = ptr5043 = ptr5047 = ptrB;
shift_it();
carry = (numA & 0x80) / 0x80;
numA = (unsigned char)(numA << 1);
if (carry != 0) {
add_it();
sub505D();
if (carry != 0)
sub505D();
} else
sub505D();
num8 = num8 >> 1;
} while (num8 != 0);
Yctr ++ ;
} while (Yctr < 51);
}
void CSystem::sub5000()
{
ptrB = 0x11;
ptr5071 = 0x44;
ptrF = 0xAA;
sub5018();
ptrF = ptrB;
ptrB = 0x77;
sub5018();
}
void CSystem::convert_it()
{
int ct;
long t1, t2;
num7 = buffer[Cptr];
num2 = 0;
Cptr ++ ;
do {
for (ct=50;ct>=0;ct--) {
work[0xAA+ct] = buffer[Cptr];
Cptr ++ ;
}
if ((work[0xAA] | work[0xAB] | work[0xAC]) == 0) {
err = 1;
}
t1 = ((long)(work[0xAA]) << 16) +
((long)(work[0xAB]) << 8) +
(long)(work[0xAC]);
t2 = ((long)(constant[0]) << 16) +
((long)(constant[1]) << 8) +
(long)(constant[2]);
if (t1 > t2) {
err = 1;
}
sub5000();
if (work[ptrB] != 0x15) {
err = 1;
}
Actr = num2;
Yctr = 0x32;
do {
Actr += work[ptrB + Yctr];
Actr &= 255;
result[ptr5] = (unsigned char) (Actr);
ptr5 ++ ;
Yctr -- ;
} while (Yctr != 0);
num2 = Actr;
num7 ++ ;
} while (num7 != 256);
if (Actr != 0) {
err = 1;
}
}
Later in Handy code...
if (useFastboot) {
int i;
// Decrypt Lynx cart bootloader. This is done inside the Lynx at boot time
// Based on work done by Harry Dodgson
c = 520;
for (i = 0; i < c; i++) {
buffer[i] = mCart->Peek(i);
}
ptr5 = 0;
Cptr = 0;
convert_it();
ptr5 = 256;
convert_it();
for (i = 0; i < c; i++) {
mRam->Poke(i + 0x200, result[i]);
}
Posted Tue Aug 25, 2009 11:37 PM
Wookie, on Fri Aug 21, 2009 1:05 PM, said:
; ---------------------------------------------------------------
; unsigned char __near__ add_klondikeTarget (__near__ struct $anon-struct-0008*, __near__ struct $anon-struct-0007*)
; ---------------------------------------------------------------
.segment "CARDS_CODE"
.proc _add_klondikeTarget: near
.segment "CARDS_BSS"
L000B:
.res 2,$00
.segment "CARDS_CODE"
;
; Card *newone = c2;
;
jsr ldax0sp
sta L000B
stx L000B+1
;
; if (Pile_isEmpty(pile))
;
ldy #$05
jsr pushwysp
jsr _Pile_isEmpty
tax
beq L000D
;
; return (Card_rank(newone) == Ace);
;
lda L000B
ldx L000B+1
jsr pushax
jsr _Card_rank
cpx #$00
bne L0013
cmp #$01
L0013: jsr booleq
jmp incsp4
;
; return (Card_rank(newone) == Card_rank(Pile_top(pile)) + 1)
;
L000D: lda L000B
ldx L000B+1
jsr pushax
jsr _Card_rank
jsr pushax
ldy #$07
jsr pushwysp
jsr _Pile_top
jsr pushax
jsr _Card_rank
ina
bne L0019
inx
L0019: jsr tosicmp
;
; && (Card_suit(Pile_top(pile)) == Card_suit(newone));
;
bne L001A
ldy #$05
jsr pushwysp
jsr _Pile_top
jsr pushax
jsr _Card_suit
jsr pushax
lda L000B
ldx L000B+1
jsr pushax
jsr _Card_suit
jsr tosicmp
beq L0014
L001A: ldx #$00
txa
jmp incsp4
L0014: ldx #$00
lda #$01
;
; }
;
jmp incsp4
.endproc
Posted Wed Aug 26, 2009 9:03 AM
karri, on Tue Aug 25, 2009 11:00 PM, said:
Posted Thu Aug 27, 2009 12:19 PM
Posted Thu Aug 27, 2009 11:02 PM
Wookie, on Thu Aug 27, 2009 12:19 PM, said:
Posted Thu Aug 27, 2009 11:35 PM
karri, on Thu Aug 27, 2009 11:02 PM, said:
Posted Mon Aug 31, 2009 7:32 PM
karri, on Thu Aug 27, 2009 11:02 PM, said:
Posted Tue Sep 1, 2009 11:27 AM
Posted Tue Sep 1, 2009 4:01 PM
karri, on Tue Sep 1, 2009 11:27 AM, said:
Posted Tue Sep 1, 2009 9:17 PM
karri, on Tue Sep 1, 2009 11:27 AM, said:
Posted Fri Sep 4, 2009 2:48 PM
Posted Sat Sep 5, 2009 2:44 AM
Wookie, on Fri Sep 4, 2009 2:48 PM, said:
Posted Sat Sep 5, 2009 9:02 AM
karri, on Sat Sep 5, 2009 2:44 AM, said:
0 members, 0 guests, 0 anonymous users