mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-06 15:48:05 -04:00
1.32 release
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@87 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
4696954094
commit
6cadc2da00
42 changed files with 803 additions and 167 deletions
|
@ -1,7 +1,7 @@
|
|||
// This is part of Pico Library
|
||||
|
||||
// (c) Copyright 2004 Dave, All rights reserved.
|
||||
// (c) Copyright 2006 notaz, All rights reserved.
|
||||
// (c) Copyright 2006-2007, Grazvydas "notaz" Ignotas
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
@ assembly "optimized" version of some funtions from draw.c
|
||||
@ this is highly specialized, be careful if changing related C code!
|
||||
|
||||
@ (c) Copyright 2006, notaz
|
||||
@ (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
@ All Rights Reserved
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// This is part of Pico Library
|
||||
|
||||
// (c) Copyright 2006 notaz, All rights reserved.
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
@ assembly optimized versions of most funtions from draw2.c
|
||||
@ this is highly specialized, be careful if changing related C code!
|
||||
|
||||
@ (c) Copyright 2006, notaz
|
||||
@ (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
@ All Rights Reserved
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
@ memory handlers with banking support for SSF II - The New Challengers
|
||||
@ mostly based on Gens code
|
||||
|
||||
@ (c) Copyright 2006, notaz
|
||||
@ (c) Copyright 2006-2007, Grazvydas "notaz" Ignotas
|
||||
@ All Rights Reserved
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* common code for Memory.c and cd/Memory.c */
|
||||
// common code for Memory.c and cd/Memory.c
|
||||
// (c) Copyright 2006-2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
static int PadRead(int i)
|
||||
{
|
||||
|
|
|
@ -149,7 +149,6 @@ int PicoReset(int hard)
|
|||
|
||||
if (PicoMCD & 1) {
|
||||
PicoResetMCD(hard);
|
||||
SRam.data = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// Pico Library - Header File
|
||||
|
||||
// (c) Copyright 2004 Dave, All rights reserved.
|
||||
// (c) Copyright 2006 notaz, All rights reserved.
|
||||
// (c) Copyright 2006-2007 notaz, All rights reserved.
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
|
@ -30,8 +30,8 @@ void mp3_update(int *buffer, int length, int stereo);
|
|||
// PicoOpt bits LSb->MSb:
|
||||
// enable_ym2612&dac, enable_sn76496, enable_z80, stereo_sound,
|
||||
// alt_renderer, 6button_gamepad, accurate_timing, accurate_sprites,
|
||||
// draw_no_32col_border, external_ym2612, enable_pcm, enable cdda
|
||||
// enable_cdgfx, cd_perfect_sync, soft_32col_scaling
|
||||
// draw_no_32col_border, external_ym2612, enable_cd_pcm, enable_cd_cdda
|
||||
// enable_cd_gfx, cd_perfect_sync, soft_32col_scaling, enable_cd_ramcart
|
||||
extern int PicoOpt;
|
||||
extern int PicoVer;
|
||||
extern int PicoSkipFrame; // skip rendering frame, but still do sound (if enabled) and emulation stuff
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Pico Library - Header File
|
||||
|
||||
// (c) Copyright 2004 Dave, All rights reserved.
|
||||
// (c) Copyright 2006 notaz, All rights reserved.
|
||||
// (c) Copyright 2006,2007 Grazvydas "notaz" Ignotas, all rights reserved.
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
|
@ -217,10 +217,13 @@ struct mcd_misc
|
|||
unsigned int counter75hz;
|
||||
unsigned short audio_offset; // 0c: for savestates: play pointer offset (0-1023)
|
||||
unsigned char audio_track; // playing audio track # (zero based)
|
||||
char pad1;
|
||||
char pad1;
|
||||
int timer_int3; // 10
|
||||
unsigned int timer_stopwatch;
|
||||
int pad[10];
|
||||
unsigned char bcram_reg; // 18: battery-backed RAM cart register
|
||||
unsigned char pad2;
|
||||
unsigned short pad3;
|
||||
int pad[9];
|
||||
};
|
||||
|
||||
typedef struct
|
||||
|
@ -333,7 +336,7 @@ unsigned int SRAMReadEEPROM();
|
|||
void SRAMUpdPending(unsigned int a, unsigned int d);
|
||||
void memcpy16(unsigned short *dest, unsigned short *src, int count);
|
||||
void memcpy16bswap(unsigned short *dest, void *src, int count);
|
||||
void memcpy32(int *dest, int *src, int count);
|
||||
void memcpy32(int *dest, int *src, int count); // 32bit word count
|
||||
void memset32(int *dest, int c, int count);
|
||||
|
||||
// cd/Misc.c
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// This is part of Pico Library
|
||||
|
||||
// (c) Copyright 2004 Dave, All rights reserved.
|
||||
// (c) Copyright 2006 notaz, All rights reserved.
|
||||
// (c) Copyright 2006-2007, Grazvydas "notaz" Ignotas
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
// This is part of Pico Library
|
||||
|
||||
// (c) Copyright 2007 notaz, All rights reserved.
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
// Savestate handling for emulated Sega/Mega CD machine.
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
|
||||
#include "../PicoInt.h"
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
/***********************************************************
|
||||
* *
|
||||
* This source is taken from the Gens project *
|
||||
* This source was taken from the Gens project *
|
||||
* Written by Stéphane Dallongeville *
|
||||
* Copyright (c) 2002 by Stéphane Dallongeville *
|
||||
* Modified/adapted for Picodrive by notaz, 2007 *
|
||||
* Modified/adapted for PicoDrive by notaz, 2007 *
|
||||
* *
|
||||
***********************************************************/
|
||||
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
/***********************************************************
|
||||
* *
|
||||
* This source was taken from the Gens project *
|
||||
* Written by Stéphane Dallongeville *
|
||||
* Copyright (c) 2002 by Stéphane Dallongeville *
|
||||
* Modified/adapted for PicoDrive by notaz, 2007 *
|
||||
* *
|
||||
***********************************************************/
|
||||
|
||||
#ifndef _LC89510_H
|
||||
#define _LC89510_H
|
||||
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
// This is part of Pico Library
|
||||
|
||||
// (c) Copyright 2004 Dave, All rights reserved.
|
||||
// (c) Copyright 2007 notaz, All rights reserved.
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
// Memory I/O handlers for Sega/Mega CD.
|
||||
// Loosely based on Gens code.
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
// A68K no longer supported here
|
||||
|
||||
|
@ -698,7 +694,7 @@ static void PicoWriteM68k16(u32 a,u16 d)
|
|||
Pico_mcd->s68k_regs[0xe] = d >> 8;
|
||||
#ifdef USE_POLL_DETECT
|
||||
if ((s68k_poll_adclk&0xfe) == 0xe && s68k_poll_cnt > POLL_LIMIT) {
|
||||
SekSetStopS68k(0); s68k_poll_adclk = -1;
|
||||
SekSetStopS68k(0); s68k_poll_adclk = 0;
|
||||
plprintf("s68k poll release, a=%02x\n", a);
|
||||
}
|
||||
#endif
|
||||
|
|
256
Pico/cd/Memory.s
256
Pico/cd/Memory.s
|
@ -1,8 +1,7 @@
|
|||
@ vim:filetype=armasm
|
||||
|
||||
@ Memory i/o handlers for Sega/Mega CD emulation
|
||||
@ Memory I/O handlers for Sega/Mega CD emulation
|
||||
@ (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
@ All Rights Reserved
|
||||
|
||||
|
||||
|
||||
|
@ -27,14 +26,17 @@
|
|||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x280000 - 0x2fffff
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x300000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ - 0x3fffff
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x400000
|
||||
.long m_m68k_&\on&\sz&_bcram_size @ 0x400000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x420000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ - 0x4fffff
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x500000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ - 0x5fffff
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x600000
|
||||
.long m_m68k_&\on&\sz&_bcram @ 0x600000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x620000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ - 0x6fffff
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x700000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ - 0x7fffff
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null @ - 0x7dffff
|
||||
.long m_m68k_&\on&\sz&_bcram_reg @ 0x7e0000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x800000
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ - 0x8fffff
|
||||
.long m_&\on&_null, m_&\on&_null, m_&\on&_null, m_&\on&_null @ 0x900000
|
||||
|
@ -364,6 +366,25 @@ PicoWriteS68k32: @ u32 a, u32 d
|
|||
streq r1, [r2, r0]
|
||||
.endm
|
||||
|
||||
@
|
||||
.macro bcram_reg_rw is_read addr_check
|
||||
rsb r0, r0, #0x800000
|
||||
ldr r2, =(Pico+0x22200)
|
||||
cmp r0, #(0x800000-\addr_check)
|
||||
ldreq r2, [r2]
|
||||
.if \is_read
|
||||
movne r0, #0
|
||||
.endif
|
||||
bxne lr
|
||||
add r2, r2, #0x110000
|
||||
add r2, r2, #0x002200
|
||||
.if \is_read
|
||||
ldrb r0, [r2, #0x18]
|
||||
.else
|
||||
strb r1, [r2, #0x18]
|
||||
.endif
|
||||
bx lr
|
||||
.endm
|
||||
|
||||
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
|
@ -448,6 +469,35 @@ m_m68k_read8_wordram1_1M_b1: @ 0x220000 - 0x23ffff, cell arranged
|
|||
bx lr
|
||||
|
||||
|
||||
m_m68k_read8_bcram_size: @ 0x400000
|
||||
sub r0, r0, #1
|
||||
cmp r0, #0x400000
|
||||
ldreq r1, =SRam
|
||||
mov r0, #0
|
||||
ldreq r1, [r1]
|
||||
bxne lr
|
||||
tst r1, r1
|
||||
movne r0, #3 @ pretend to be a 64k cart (8<<3)
|
||||
bx lr
|
||||
|
||||
|
||||
m_m68k_read8_bcram: @ 0x600000 - 0x61ffff
|
||||
ldr r1, =SRam
|
||||
bic r0, r0, #0xfe0000
|
||||
ldr r1, [r1]
|
||||
mov r0, r0, lsr #1
|
||||
tst r1, r1
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
add r1, r1, #0x2000
|
||||
ldrb r0, [r1, r0]
|
||||
bx lr
|
||||
|
||||
|
||||
m_m68k_read8_bcram_reg: @ 0x7fffff
|
||||
bcram_reg_rw 1, 0x7fffff
|
||||
|
||||
|
||||
m_m68k_read8_system_io:
|
||||
bic r2, r0, #0xfe0000
|
||||
bic r2, r2, #0x3f
|
||||
|
@ -656,6 +706,25 @@ m_m68k_read16_wordram1_1M_b1: @ 0x220000 - 0x23ffff, cell arranged
|
|||
bx lr
|
||||
|
||||
|
||||
m_m68k_read16_bcram_size: @ 0x400000
|
||||
cmp r0, #0x400000
|
||||
ldreq r1, =SRam
|
||||
mov r0, #0
|
||||
ldreq r1, [r1]
|
||||
bxne lr
|
||||
tst r1, r1
|
||||
movne r0, #3 @ pretend to be a 64k cart
|
||||
bx lr
|
||||
|
||||
|
||||
@ m_m68k_read16_bcram: @ 0x600000 - 0x61ffff
|
||||
.equiv m_m68k_read16_bcram, m_m68k_read8_bcram
|
||||
|
||||
|
||||
m_m68k_read16_bcram_reg: @ 0x7fffff
|
||||
bcram_reg_rw 1, 0x7ffffe
|
||||
|
||||
|
||||
m_m68k_read16_system_io:
|
||||
bic r1, r0, #0xfe0000
|
||||
bic r1, r1, #0x3f
|
||||
|
@ -851,6 +920,33 @@ m_m68k_read32_wordram1_1M_b1_unal:
|
|||
bx r12
|
||||
|
||||
|
||||
m_m68k_read32_bcram_size: @ 0x400000
|
||||
cmp r0, #0x400000
|
||||
ldreq r1, =SRam
|
||||
mov r0, #0
|
||||
ldreq r1, [r1]
|
||||
bxne lr
|
||||
tst r1, r1
|
||||
movne r0, #0x30000 @ pretend to be a 64k cart
|
||||
bx lr
|
||||
|
||||
|
||||
m_m68k_read32_bcram: @ 0x600000 - 0x61ffff, not likely to be called
|
||||
mov r12,lr
|
||||
add r3, r0, #2
|
||||
bl m_m68k_read8_bcram
|
||||
mov r1, r0
|
||||
mov r0, r3
|
||||
mov r3, r1
|
||||
bl m_m68k_read8_bcram
|
||||
orr r0, r0, r3, lsl #16
|
||||
bx r12
|
||||
|
||||
|
||||
m_m68k_read32_bcram_reg: @ 0x7fffff
|
||||
bcram_reg_rw 1, 0x7ffffc
|
||||
|
||||
|
||||
@ it is not very practical to use long access on hw registers, so I assume it is not used too much.
|
||||
m_m68k_read32_system_io:
|
||||
bic r1, r0, #0xfe0000
|
||||
|
@ -916,6 +1012,7 @@ m_m68k_read32_ram:
|
|||
|
||||
m_write_null:
|
||||
m_m68k_write8_bios:
|
||||
m_m68k_write8_bcram_size: @ 0x400000
|
||||
bx lr
|
||||
|
||||
|
||||
|
@ -986,6 +1083,33 @@ m_m68k_write8_wordram1_1M_b1: @ 0x220000 - 0x23ffff, cell arranged
|
|||
bx lr
|
||||
|
||||
|
||||
m_m68k_write8_bcram: @ 0x600000 - 0x61ffff
|
||||
@ can't use r3 or r12, because of write32
|
||||
ldr r2, =SRam
|
||||
bic r0, r0, #0xfe0000
|
||||
ldr r2, [r2]
|
||||
tst r2, r2
|
||||
bxeq lr
|
||||
add r0, r2, r0, lsr #1
|
||||
ldr r2, =(Pico+0x22200)
|
||||
ldr r2, [r2]
|
||||
add r0, r0, #0x2000
|
||||
add r2, r2, #0x110000
|
||||
add r2, r2, #0x002200
|
||||
ldr r2, [r2, #0x18]
|
||||
tst r2, #1 @ check bcram reg
|
||||
bxeq lr
|
||||
strb r1, [r0]
|
||||
ldr r2, =SRam
|
||||
mov r0, #1
|
||||
strb r0, [r2, #0x0e] @ SRam.changed = 1
|
||||
bx lr
|
||||
|
||||
|
||||
m_m68k_write8_bcram_reg: @ 0x7fffff
|
||||
bcram_reg_rw 0, 0x7fffff
|
||||
|
||||
|
||||
m_m68k_write8_system_io:
|
||||
bic r2, r0, #0xfe0000
|
||||
bic r2, r2, #0x3f
|
||||
|
@ -1020,6 +1144,7 @@ m_m68k_write8_ram:
|
|||
|
||||
|
||||
m_m68k_write16_bios:
|
||||
m_m68k_write16_bcram_size: @ 0x400000
|
||||
bx lr
|
||||
|
||||
|
||||
|
@ -1091,6 +1216,14 @@ m_m68k_write16_wordram1_1M_b1: @ 0x220000 - 0x23ffff, cell arranged
|
|||
bx lr
|
||||
|
||||
|
||||
@ m_m68k_write16_bcram: @ 0x600000 - 0x61ffff
|
||||
.equiv m_m68k_write16_bcram, m_m68k_write8_bcram
|
||||
|
||||
|
||||
m_m68k_write16_bcram_reg: @ 0x7fffff
|
||||
bcram_reg_rw 0, 0x7ffffe
|
||||
|
||||
|
||||
m_m68k_write16_system_io:
|
||||
bic r0, r0, #1
|
||||
bic r2, r0, #0xfe0000
|
||||
|
@ -1098,7 +1231,7 @@ m_m68k_write16_system_io:
|
|||
cmp r2, #0x012000
|
||||
bne OtherWrite16
|
||||
|
||||
m_m68k_write16_m68k_regs:
|
||||
m_m68k_write16_regs:
|
||||
and r0, r0, #0x3e
|
||||
cmp r0, #0x0e
|
||||
beq m_m68k_write16_regs_spec
|
||||
|
@ -1153,6 +1286,7 @@ m_m68k_write16_ram:
|
|||
|
||||
|
||||
m_m68k_write32_bios:
|
||||
m_m68k_write32_bcram_size: @ 0x400000
|
||||
bx lr
|
||||
|
||||
|
||||
|
@ -1248,6 +1382,22 @@ m_m68k_write32_wordram1_1M_b1_unal:
|
|||
b m_m68k_write16_wordram1_1M_b1
|
||||
|
||||
|
||||
m_m68k_write32_bcram: @ 0x600000 - 0x61ffff, not likely to be called
|
||||
mov r12,lr
|
||||
add r3, r0, #2
|
||||
mov r1, r1, ror #16
|
||||
bl m_m68k_write8_bcram
|
||||
mov r0, r3
|
||||
mov r1, r1, ror #16
|
||||
bl m_m68k_write8_bcram
|
||||
bx r12
|
||||
|
||||
|
||||
m_m68k_write32_bcram_reg: @ 0x7fffff
|
||||
bcram_reg_rw 0, 0x7ffffc
|
||||
|
||||
|
||||
|
||||
@ it is not very practical to use long access on hw registers, so I assume it is not used too much.
|
||||
m_m68k_write32_system_io:
|
||||
bic r2, r0, #0xfe0000
|
||||
|
@ -1255,26 +1405,13 @@ m_m68k_write32_system_io:
|
|||
cmp r2, #0x012000
|
||||
bne m_m68k_write32_misc
|
||||
and r2, r0, #0x3e
|
||||
cmp r2, #0x10
|
||||
blt m_m68k_write32_regs
|
||||
cmp r2, #0x20
|
||||
bxge lr
|
||||
@ Handle the 0x10-0x1f range
|
||||
ldr r0, =(Pico+0x22200)
|
||||
mov r3, #0xff
|
||||
ldr r0, [r0]
|
||||
orr r3, r3, r3, lsl #16
|
||||
add r0, r0, #0x110000
|
||||
and r12,r3, r1, ror #16 @ data is big-endian to be written as little, have to byteswap
|
||||
and r1, r3, r1, ror #24
|
||||
orr r1, r1, r12,lsl #8 @ end of byteswap
|
||||
strh r1, [r2, r0]!
|
||||
cmp r2, #0x1e
|
||||
movne r1, r1, lsr #16
|
||||
strneh r1, [r2, #2]
|
||||
bx lr
|
||||
cmp r2, #0x10
|
||||
bge m_m68k_write32_regs_comm
|
||||
cmp r2, #0x0c
|
||||
bge m_m68k_write32_regs_spec @ hits the nasty comm reg qiurk
|
||||
|
||||
m_m68k_write32_regs:
|
||||
bic r0, r0, #1
|
||||
stmfd sp!,{r0,r1,lr}
|
||||
mov r1, r1, lsr #24
|
||||
|
@ -1293,6 +1430,29 @@ m_m68k_write32_regs:
|
|||
add r0, r0, #3
|
||||
b m68k_reg_write8
|
||||
|
||||
m_m68k_write32_regs_comm: @ Handle the 0x10-0x1f range
|
||||
ldr r0, =(Pico+0x22200)
|
||||
mov r3, #0xff
|
||||
ldr r0, [r0]
|
||||
orr r3, r3, r3, lsl #16
|
||||
add r0, r0, #0x110000
|
||||
and r12,r3, r1, ror #16 @ data is big-endian to be written as little, have to byteswap
|
||||
and r1, r3, r1, ror #24
|
||||
orr r1, r1, r12,lsl #8 @ end of byteswap
|
||||
cmp r2, #0x1e
|
||||
strh r1, [r2, r0]!
|
||||
ldr r3, =s68k_poll_adclk
|
||||
ldr r0, [r3]
|
||||
movne r1, r1, lsr #16
|
||||
strneh r1, [r2, #2]
|
||||
cmp r0, #0x10
|
||||
bxlt lr
|
||||
ldr r0, =PicoCpuS68k @ remove poll detected state for s68k
|
||||
mov r1, #0
|
||||
str r1, [r0, #0x58]
|
||||
str r1, [r3]
|
||||
bx lr
|
||||
|
||||
m_m68k_write32_misc:
|
||||
bic r0, r0, #1
|
||||
stmfd sp!,{r0,r1,lr}
|
||||
|
@ -1302,6 +1462,15 @@ m_m68k_write32_misc:
|
|||
add r0, r0, #2
|
||||
b OtherWrite16
|
||||
|
||||
m_m68k_write32_regs_spec:
|
||||
bic r0, r0, #1
|
||||
stmfd sp!,{r0,r1,lr}
|
||||
mov r1, r1, lsr #16
|
||||
bl m_m68k_write16_regs
|
||||
ldmfd sp!,{r0,r1,lr}
|
||||
add r0, r0, #2
|
||||
b m_m68k_write16_regs
|
||||
|
||||
|
||||
m_m68k_write32_vdp:
|
||||
tst r0, #0x70000
|
||||
|
@ -2123,12 +2292,11 @@ m_s68k_write32_pcm_ram:
|
|||
|
||||
m_s68k_write32_pcm_reg:
|
||||
mov r0, r0, lsr #1
|
||||
add r2, r0, #1
|
||||
mov r3, r1
|
||||
stmfd sp!,{r2,r3,lr}
|
||||
stmfd sp!,{r0,r1,lr}
|
||||
mov r1, r1, lsr #16
|
||||
bl pcm_write
|
||||
ldmfd sp!,{r0,r1,lr}
|
||||
add r0, r0, #1
|
||||
b pcm_write
|
||||
|
||||
|
||||
|
@ -2137,11 +2305,16 @@ m_s68k_write32_regs:
|
|||
bic r0, r0, #0x008000
|
||||
bic r0, r0, #1
|
||||
tst r0, #0x7e00
|
||||
movne r0, #0
|
||||
bxne lr
|
||||
sub r2, r0, #0x58
|
||||
cmp r2, #0x10
|
||||
blo m_s68k_write32_regs_gfx
|
||||
and r2, r0, #0x1fc
|
||||
cmp r2, #0x0c
|
||||
beq m_s68k_write32_regs_spec @ hits 0x0f
|
||||
and r2, r0, #0x1f0
|
||||
cmp r2, #0x20
|
||||
beq m_s68k_write32_regs_comm
|
||||
|
||||
stmfd sp!,{r0,r1,lr}
|
||||
mov r1, r1, lsr #24
|
||||
|
@ -2161,11 +2334,34 @@ m_s68k_write32_regs:
|
|||
b s68k_reg_write8
|
||||
|
||||
m_s68k_write32_regs_gfx:
|
||||
mov r3, r1
|
||||
add r2, r0, #2
|
||||
stmfd sp!,{r2,r3,lr}
|
||||
stmfd sp!,{r0,r1,lr}
|
||||
mov r1, r1, lsr #16
|
||||
bl gfx_cd_write16
|
||||
ldmfd sp!,{r0,r1,lr}
|
||||
add r0, r0, #2
|
||||
b gfx_cd_write16
|
||||
|
||||
m_s68k_write32_regs_comm: @ Handle the 0x20-0x2f range
|
||||
ldr r2, =(Pico+0x22200)
|
||||
mov r3, #0xff
|
||||
ldr r2, [r2]
|
||||
orr r3, r3, r3, lsl #16
|
||||
add r2, r2, #0x110000
|
||||
and r12,r3, r1, ror #16 @ data is big-endian to be written as little, have to byteswap
|
||||
and r1, r3, r1, ror #24
|
||||
orr r1, r1, r12,lsl #8 @ end of byteswap
|
||||
cmp r0, #0x2e
|
||||
strh r1, [r0, r2]!
|
||||
movne r1, r1, lsr #16
|
||||
strneh r1, [r0, #2]
|
||||
bx lr
|
||||
|
||||
m_s68k_write32_regs_spec:
|
||||
stmfd sp!,{r0,r1,lr}
|
||||
mov r1, r1, lsr #16
|
||||
bl m_s68k_write16_regs
|
||||
ldmfd sp!,{r0,r1,lr}
|
||||
add r0, r0, #2
|
||||
b m_s68k_write16_regs
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// Some misc stuff
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
|
||||
unsigned char formatted_bram[4*0x10] =
|
||||
|
@ -21,6 +23,7 @@ unsigned char formatted_bram[4*0x10] =
|
|||
// 128K | bit ] | bank0 |
|
||||
// 256K | unused | bank1 |
|
||||
|
||||
#ifndef _ASM_MISC_C
|
||||
void wram_2M_to_1M(unsigned char *m)
|
||||
{
|
||||
unsigned short *m1M_b0, *m1M_b1;
|
||||
|
@ -53,4 +56,5 @@ void wram_1M_to_2M(unsigned char *m)
|
|||
*m2M++ = tmp;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,10 +1,4 @@
|
|||
// This is part of Pico Library
|
||||
|
||||
// (c) Copyright 2004 Dave, All rights reserved.
|
||||
// (c) Copyright 2007 notaz, All rights reserved.
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
|
||||
|
||||
#include "../PicoInt.h"
|
||||
|
@ -81,6 +75,12 @@ int PicoResetMCD(int hard)
|
|||
//PicoMemResetCDdecode(1); // don't have to call this in 2M mode
|
||||
#endif
|
||||
|
||||
// use SRam.data for RAM cart
|
||||
if (SRam.data) free(SRam.data);
|
||||
SRam.data = NULL;
|
||||
if (PicoOpt&0x8000)
|
||||
SRam.data = calloc(1, 0x12000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,4 @@
|
|||
// This is part of Pico Library
|
||||
|
||||
// (c) Copyright 2004 Dave, All rights reserved.
|
||||
// (c) Copyright 2006 notaz, All rights reserved.
|
||||
// Free for non-commercial use.
|
||||
|
||||
// For commercial use, separate licencing terms must be obtained.
|
||||
|
||||
|
||||
#include "../PicoInt.h"
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Buffering handling
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
#include "../PicoInt.h"
|
||||
|
||||
//#include <stdlib.h>
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
/***********************************************************
|
||||
* *
|
||||
* This source was taken from the Gens project *
|
||||
* Written by Stéphane Dallongeville *
|
||||
* Copyright (c) 2002 by Stéphane Dallongeville *
|
||||
* Modified/adapted for PicoDrive by notaz, 2007 *
|
||||
* *
|
||||
***********************************************************/
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include "cd_file.h"
|
||||
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
/***********************************************************
|
||||
* *
|
||||
* This source was taken from the Gens project *
|
||||
* Written by Stéphane Dallongeville *
|
||||
* Copyright (c) 2002 by Stéphane Dallongeville *
|
||||
* Modified/adapted for PicoDrive by notaz, 2007 *
|
||||
* *
|
||||
***********************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "cd_sys.h"
|
||||
#include "cd_file.h"
|
||||
|
@ -17,19 +26,7 @@
|
|||
#define PLAYING 0x0100 // PLAYING audio track CDD status
|
||||
|
||||
|
||||
/*
|
||||
int CDDA_Enable;
|
||||
|
||||
int CD_Audio_Buffer_L[8192];
|
||||
int CD_Audio_Buffer_R[8192];
|
||||
int CD_Audio_Buffer_Read_Pos = 0;
|
||||
int CD_Audio_Buffer_Write_Pos = 2000;
|
||||
int CD_Audio_Starting;
|
||||
*/
|
||||
|
||||
static int CD_Present = 0;
|
||||
// int CD_Timer_Counter = 0; // TODO: check refs
|
||||
|
||||
|
||||
|
||||
#define CHECK_TRAY_OPEN \
|
||||
|
@ -65,20 +62,6 @@ if (!CD_Present) \
|
|||
}
|
||||
|
||||
|
||||
#if 0
|
||||
static void MSB2DWORD(unsigned int *d, unsigned char *b)
|
||||
{
|
||||
unsigned int retVal;
|
||||
|
||||
retVal = (unsigned int )b[0];
|
||||
retVal = (retVal<<8) + (unsigned int )b[1];
|
||||
retVal = (retVal<<8) + (unsigned int )b[2];
|
||||
retVal = (retVal<<8) + (unsigned int )b[3];
|
||||
|
||||
*d = retVal;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int MSF_to_LBA(_msf *MSF)
|
||||
{
|
||||
return (MSF->M * 60 * 75) + (MSF->S * 75) + MSF->F - 150;
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
/***********************************************************
|
||||
* *
|
||||
* This source was taken from the Gens project *
|
||||
* Written by Stéphane Dallongeville *
|
||||
* Copyright (c) 2002 by Stéphane Dallongeville *
|
||||
* Modified/adapted for PicoDrive by notaz, 2007 *
|
||||
* *
|
||||
***********************************************************/
|
||||
|
||||
#ifndef _CD_SYS_H
|
||||
#define _CD_SYS_H
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// Convert "cell arrange" address to normal address.
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
// 64 x32 x16 x8 x4 x4
|
||||
static unsigned int cell_map(int celln)
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
// This is a direct rewrite of gfx_cd.asm (x86 asm to C).
|
||||
// You can even find some x86 register names :)
|
||||
// Original code (c) 2002 by Stéphane Dallongeville
|
||||
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
|
||||
#include "../PicoInt.h"
|
||||
|
||||
|
|
76
Pico/cd/misc.s
Normal file
76
Pico/cd/misc.s
Normal file
|
@ -0,0 +1,76 @@
|
|||
@ vim:filetype=armasm
|
||||
|
||||
@ Memory converters for different modes
|
||||
@ (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
|
||||
@ r10 is tmp, io1 is lsb halfword, io2 is msb
|
||||
@ | 0 1 | 2 3 | -> | 0 2 | 1 3 | (little endian)
|
||||
.macro _conv_reg io1 io2
|
||||
mov r10, \io2, lsl #16
|
||||
and \io2, \io2, r11, lsl #16
|
||||
orr \io2, \io2, \io1, lsr #16
|
||||
and \io1, \io1, r11
|
||||
orr \io1, \io1, r10
|
||||
/*
|
||||
mov \io2, \io2, ror #16
|
||||
mov r10, \io1, lsl #16
|
||||
orr r10, r10, \io2, lsr #16
|
||||
mov \io1, \io1, lsr #16
|
||||
orr \io1, \io1, \io2, lsl #16
|
||||
mov \io2, r10, ror #16
|
||||
*/
|
||||
.endm
|
||||
|
||||
|
||||
.global wram_2M_to_1M
|
||||
wram_2M_to_1M:
|
||||
stmfd sp!,{r4-r11,lr}
|
||||
add r1, r0, #0x60000 @ m1M_b1
|
||||
add r0, r0, #0x40000 @ m1M_b0
|
||||
mov r2, r0 @ m2M
|
||||
|
||||
mov r11, #0xff
|
||||
orr r11, r11, r11, lsl #8
|
||||
mov r12, #(0x40000/8/4)
|
||||
|
||||
_2Mto1M_loop:
|
||||
ldmdb r2!,{r3-r9,lr}
|
||||
_conv_reg r3,r4
|
||||
_conv_reg r5,r6
|
||||
_conv_reg r7,r8
|
||||
_conv_reg r9,lr
|
||||
subs r12, r12, #1
|
||||
stmdb r0!,{r3,r5,r7,r9}
|
||||
stmdb r1!,{r4,r6,r8,lr}
|
||||
bne _2Mto1M_loop
|
||||
|
||||
ldmfd sp!,{r4-r11,pc}
|
||||
|
||||
|
||||
|
||||
.global wram_1M_to_2M
|
||||
wram_1M_to_2M:
|
||||
stmfd sp!,{r4-r11,lr}
|
||||
mov r2, r0 @ m2M
|
||||
add r1, r0, #0x40000 @ m1M_b1
|
||||
add r0, r0, #0x20000 @ m1M_b0
|
||||
|
||||
mov r11, #0xff
|
||||
orr r11, r11, r11, lsl #8
|
||||
mov r12, #(0x40000/8/4)
|
||||
|
||||
_1Mto2M_loop:
|
||||
ldmia r0!,{r3,r5,r7,r9}
|
||||
ldmia r1!,{r4,r6,r8,lr}
|
||||
_conv_reg r3,r4
|
||||
_conv_reg r5,r6
|
||||
_conv_reg r7,r8
|
||||
_conv_reg r9,lr
|
||||
subs r12, r12, #1
|
||||
stmia r2!,{r3-r9,lr}
|
||||
bne _1Mto2M_loop
|
||||
|
||||
ldmfd sp!,{r4-r11,pc}
|
||||
|
||||
|
|
@ -1,3 +1,7 @@
|
|||
// Emulation routines for the RF5C164 PCM chip.
|
||||
// Based on Gens code by Stéphane Dallongeville
|
||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
#include "../PicoInt.h"
|
||||
#include "pcm.h"
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
|
||||
@ vim:filetype=armasm
|
||||
|
||||
@ Generic memory routines.
|
||||
@ (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
|
||||
.global memcpy16 @ unsigned short *dest, unsigned short *src, int count
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
@ vim:filetype=armasm
|
||||
|
||||
@ Generic routines for mixing audio samples
|
||||
@ (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||
|
||||
|
||||
@ this assumes src is word aligned
|
||||
.global mix_16h_to_32 @ int *dest, short *src, int count
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue