X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcdbios.cpp;h=b57c01bb92d97fee61bcf6a724b2f9c1de4e4e90;hb=0031c06df2f7f099ca5ecf1632f46b92f6b0dd79;hp=447a5b6ea725cecf7680e45ef7a99da2cf242648;hpb=fe38472e196819be270458a2a3343935fed11b0a;p=virtualjaguar diff --git a/src/cdbios.cpp b/src/cdbios.cpp index 447a5b6..b57c01b 100644 --- a/src/cdbios.cpp +++ b/src/cdbios.cpp @@ -1,32 +1,31 @@ -////////////////////////////////////////////////////////////////////////////// // -////////////////////////////////////////////////////////////////////////////// +// CD BIOS core // -// 20.02.2002: fixed sector to msf conversion -// 19.02.2002: fixed a bug in toc encoding function +// by cal2 +// GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) +// Cleanups by James L. Hammons // +// cal2: +// 02/20/2002: fixed sector to msf conversion +// 02/19/2002: fixed a bug in toc encoding function // -// -////////////////////////////////////////////////////////////////////////////// -#include "include/cdbios.h" + +#include "cdbios.h" /* Added by SDLEMU (http://sdlemu.ngemu.com */ /* Some GCC UNIX includes */ #ifdef __GCCUNIX__ - #include +#include #endif #define ERR_FLAG 0x3e00 #define CD_TOC 0x2c00 #define BIOS_VER 0x3004 - #define CDBIOS_INIT 0 #define CDBIOS_INITM 1 #define CDBIOS_INITF 2 - - #define CD_INIT 0x3000 #define CD_MODE 0x3006 #define CD_ACK 0x300C @@ -46,10 +45,10 @@ #define CD_INITM 0x3060 #define CD_INITF 0x3066 - -char *cdbios_command[]={"init","mode","ack","jeri","spin","stop","mute","umute","pause","upause", - "read","uread","setup","ptr","osamp","getoc","initm","initf", - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +char * cdbios_command[] = + { "init", "mode", "ack", "jeri", "spin", "stop", "mute", "umute", "pause", "upause", + "read", "uread", "setup", "ptr", "osamp", "getoc", "initm", "initf", + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; #define CDROM_AUDIO_MODE 0 #define CDROM_DATA_MODE 1 @@ -60,11 +59,10 @@ char *cdbios_command[]={"init","mode","ack","jeri","spin","stop","mute","umute", #define CDROM_STATUS_OK 0 #define CDROM_STATUS_ERROR 1 - uint32 cdrom_mode = CDROM_DATA_MODE; uint32 cdrom_speed = CDROM_SINGLE_SPEED; uint32 cdrom_oversample_factor = 1; -uint32 cdbios_session=0; +uint32 cdbios_session = 0; uint32 cdrom_destination_buffer_beginning; uint32 cdrom_destination_buffer_end; @@ -74,19 +72,10 @@ uint32 cdrom_partition_marker; uint32 cdrom_circular_buffer_size; uint32 cdbios_init_type; -uint32 *cdbios_sector_lut; -uint32 cdbios_init_done=0; +uint32 * cdbios_sector_lut; +uint32 cdbios_init_done = 0; + -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// void cdbios_build_sector_lut(void) { uint32 last_sector=0; @@ -129,16 +118,7 @@ void cdbios_build_sector_lut(void) } } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_get_time(uint32 sectors, uint32 *mm, uint32 *ss, uint32 *ff) { uint32 _sectors=sectors; @@ -156,16 +136,7 @@ void cdbios_get_time(uint32 sectors, uint32 *mm, uint32 *ss, uint32 *ff) // fprintf(log_get(),"[%.2i:%.2i:%.2i]\n",_mm,_ss,_ff); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_encode_toc(void) { int i; @@ -229,16 +200,7 @@ void cdbios_encode_toc(void) } } } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_decode_toc(void) { uint32 addr=0x2c00; @@ -277,16 +239,7 @@ void cdbios_decode_toc(void) nb_tracks--; } } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cd_bios_boot(char *filename) { cd_bios_init(); @@ -321,16 +274,7 @@ void cd_bios_boot(char *filename) // fprintf(log_get(),"cdbios: boot code:\n"); // jaguar_dasm(cdi_load_address, cdi_code_length); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cd_bios_init(void) { fprintf(log_get(),"cd_bios: initializing\n"); @@ -342,16 +286,7 @@ void cd_bios_init(void) cd_bios_reset(); cdbios_init_done=1; } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cd_bios_reset(void) { fprintf(log_get(), "cd_bios: reset\n"); @@ -361,47 +296,20 @@ void cd_bios_reset(void) cdrom_oversample_factor = 1; cdbios_session = 0; } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cd_bios_done(void) { - fprintf(log_get(),"cd_bios: done\n"); close(cdi_fp); + fprintf(log_get(), "CD BIOS: Done.\n"); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_init(void) { cdbios_init_type = CDBIOS_INIT; jaguar_word_write(ERR_FLAG, CDROM_STATUS_OK); fprintf(log_get(), "cdbios: init(0x%.8x)\n", m68k_get_reg(NULL, M68K_REG_A0)); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_mode(void) { // uint32 data = s68000context.dreg[0]; @@ -414,44 +322,17 @@ void cdbios_cmd_mode(void) // fprintf(log_get(),"cdbios: %s\n",(cdrom_mode==CDROM_AUDIO_MODE)?"audio mode":"data mode"); // fprintf(log_get(),"cdbios: %s\n",(cdrom_speed==CDROM_DOUBLE_SPEED)?"double speed":"single speed"); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_ack(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_jeri(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_spin(void) { // uint16 spin=(1<<(s68000context.dreg[0]&0xffff)); @@ -460,72 +341,27 @@ void cdbios_cmd_spin(void) jaguar_word_write(ERR_FLAG, CDROM_STATUS_OK); // fprintf(log_get(),"cdbios: switching to session %i\n",spin); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_stop(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_mute(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_umute(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_pause(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_upause(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); @@ -540,16 +376,7 @@ void cdi_read_block(uint32 sector, uint8 *buffer, uint32 count) count--; } } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_read(void) { static uint8 cdbios_sector[2352]; @@ -662,93 +489,39 @@ void cdbios_cmd_read(void) } jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_uread(void) { // stop the recording started with a cd_read command // for now, there is nothing to do jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_setup(void) { // initialize the cd system jaguar_word_write(ERR_FLAG, CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_ptr(void) { // s68000context.areg[0]=cdrom_destination_buffer_end+4; m68k_set_reg(M68K_REG_A0, cdrom_destination_buffer_end + 4); jaguar_word_write(ERR_FLAG, CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_osamp(void) { // cdrom_oversample_factor=(1<<(s68000context.dreg[0]&0xffff)); cdrom_oversample_factor = 1 << (m68k_get_reg(NULL, M68K_REG_D0) & 0xFFFF); jaguar_word_write(ERR_FLAG, CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_gettoc(void) { jaguar_word_write(ERR_FLAG,CDROM_STATUS_OK); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_initm(void) { cdbios_init_type = CDBIOS_INITM; @@ -756,16 +529,7 @@ void cdbios_cmd_initm(void) // fprintf(log_get(),"cdbios: initm(0x%.8x)\n",s68000context.areg[0]); fprintf(log_get(), "cdbios: initm(0x%.8x)\n", m68k_get_reg(NULL, M68K_REG_A0)); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cdbios_cmd_initf(void) { cdbios_init_type = CDBIOS_INITF; @@ -773,16 +537,7 @@ void cdbios_cmd_initf(void) // fprintf(log_get(),"cdbios: initf(0x%.8x)\n",s68000context.areg[0]); fprintf(log_get(), "cdbios: initf(0x%.8x)\n", m68k_get_reg(NULL, M68K_REG_A0)); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cd_bios_process(uint32 offset) { if (!cdbios_init_done) @@ -822,16 +577,7 @@ void cd_bios_process(uint32 offset) m68k_set_reg(M68K_REG_PC, jaguar_long_read(m68k_get_reg(NULL, M68K_REG_A7))); m68k_set_reg(M68K_REG_A7, (m68k_get_reg(NULL, M68K_REG_A7) + 4) & 0xFFFFFFFF); } -////////////////////////////////////////////////////////////////////////////// -// -////////////////////////////////////////////////////////////////////////////// -// -// -// -// -// -// -////////////////////////////////////////////////////////////////////////////// + void cd_bios_exec(uint32 scanline) { // single speed mode: 150 Kb/s (153600 bytes/s)