2005-11-25 19:53:47 +00:00
|
|
|
.macro switch32bitmode
|
|
|
|
|
|
|
|
/* is a 32bit aware ROM ? */
|
|
|
|
|
|
|
|
movea.l ROMBase,%a0
|
|
|
|
move.w 8(%a0), %d1 /* read ROM id */
|
|
|
|
|
|
|
|
cmp.w #0x0178, %d1 /* only 24bit ROM */
|
|
|
|
bls.S bit32_ok
|
|
|
|
|
|
|
|
/* is a 32bit aware processor ? */
|
|
|
|
|
2006-10-20 07:48:42 +00:00
|
|
|
cmp.w #1, CPUFlag /* Is 68000 or 68010 */
|
2005-11-25 19:53:47 +00:00
|
|
|
bls.S bit32_ok
|
|
|
|
|
|
|
|
/* test if we are in 32bit mode */
|
|
|
|
|
|
|
|
move.l #-1, %d0
|
|
|
|
StripAddress
|
|
|
|
cmp.l #-1, %d0
|
|
|
|
beq.S bit32_ok
|
|
|
|
|
|
|
|
/* Switch to 32bit mode */
|
|
|
|
|
|
|
|
lea PRAM_buffer(%pc), %a0 /* where to store data */
|
|
|
|
move.w #1, %d0 /* size of data */
|
|
|
|
swap %d0
|
|
|
|
move.w #0x08A, %d0 /* offset in PRAM */
|
|
|
|
ReadXPRam
|
|
|
|
|
|
|
|
lea PRAM_buffer(%pc), %a0
|
|
|
|
or.b #0x05, (%a0)
|
|
|
|
|
|
|
|
move.w #1, %d0 /* size of data */
|
|
|
|
swap %d0
|
|
|
|
move.w #0x08A, %d0 /* offset in PRAM */
|
|
|
|
WriteXPRam
|
|
|
|
|
|
|
|
/* jump to reset function in ROM */
|
|
|
|
|
|
|
|
movea.l ROMBase,%a0
|
|
|
|
jmp 0x90(%a0)
|
|
|
|
|
|
|
|
bit32_ok:
|
|
|
|
.endm
|