5517ref 소스 비교2
앞의 문서(5517ref 소스비교)에 이어지는 내용이다. 워낙 분량이 많아서 두개의 문서로 나눈 것이니, 혼동 없기를 바란다.
여전히 가장 최근의 5517ref 소스와 여기석 소스와의 비교이다.
5517ref VS 여기석
make/defrules.mak
defrules.mak(5517ref)
$(CP) $(subst $(BAD_SLASH),$(GOOD_SLASH),$(@F)) \
defrules.mak(여기석)
$(CP) $(subst $(BAD_SLASH),$(GOOD_SLASH),$<) \
environment.mak(5517ref)
ifeq ($(DVD_HOST),unix)
...
else
SLASH := $(DOS_SLASH)
GOOD_SLASH := $(DOS_SLASH)
BAD_SLASH := $(UNIX_SLASH)
DVD_BUILD_DIR := $(shell cd)
...
# DVD_HOST = pc/win98 Make will build using DOS commands and paths
...
ifeq "$(DVD_HOST)" "pc"
...
else
# For win98/win95 we remove all cmd /c parts
CAT := type
CD := cd
CLS := cls
CP := copy
DIFF := fc /B
ECHO := echo
NULL := NUL:
RM := -del
RMDIR := rmdir
RENAME := rename
endif
...
DVD_OS := OS21
...
ifneq "$(filter $(DVD_OS),OS20 OS21)" "$(DVD_OS)"
environment.mak(여기석)
ifeq ($(DVD_HOST),pc)
SLASH := $(DOS_SLASH)
GOOD_SLASH := $(DOS_SLASH)
BAD_SLASH := $(UNIX_SLASH)
DVD_BUILD_DIR := $(shell cd)
else
...
# DVD_HOST = pc Make will build using DOS commands and paths
...
DVD_OS := OS40
...
ifneq "$(filter $(DVD_OS),OS20 OS40)" "$(DVD_OS)"
...
generic.mak(5517ref)
ST40_TOOLSET_PATH := -I$(shell cygpath -u $$ST40ROOT)/include
...
ST40_TOOLSET_PATH := -I$(ST40ROOT)/include
...
generic.mak(여기석)
ST40_TOOLSET_PATH := -I$(shell cygpath -u $$ST40ROOT)/OS40/include -I$(shell cygpath -u $$ST40ROOT)/ST40/include
...
ST40_TOOLSET_PATH := -I$(ST40ROOT)/OS40/include -I$(ST40ROOT)/ST40/include
options.lnt(5517ref)
+rw(__inline) // support __inline reserved word
options.lnt(여기석)
윗 부분을 제외하고는 동일하다
sysconf.mak(5517ref)
:mb361:5516 :mb382:5517 :mb376:5528 :espresso:5528 ... :mediaref:GX1 :mb376:GX1 :espresso:GX1
sysconf.mak(여기석)
:mb361:5516 :mb382:5517
...
:mediaref:GX1
toolset.mak(5517ref)
ifeq "$(findstring $(DVD_FRONTEND),5514 5516 5517 5528)" "$(DVD_FRONTEND)"
...
$(CC) -debug-runtime -g -cpp $< $(ST20_CFLAGS) $($(basename $@)_CFLAGS) $($(basename $@)_ST20_CFLAGS)\
...
$(CC) -debug-runtime -g $(LIBRARIES) -T $(CONFIG_FILE) \
...
CC = sh4gcc
AR = sh4ar
LD = sh4gcc
RUN = sh4xrun
DB = sh4gdb
LINK = sh4gcc
...
# Default is to run from region P1 (cached)
ifndef OS21_REGION
OS21_REGION := p1
endif
CFLAGS += $(DVD_CFLAGS)
...
CFLAGS += -O$(OPTLEVEL) -DST40_OS21
LDOPTS = -mboard=$(DVD_PLATFORM)$(if $($(basename $@)_REGION),$($(basename $@)_REGION),$(OS21_REGION)) \
-mruntime=os21 -lm
AROPTS = -cr
...
$(CC) $(ST40_CFLAGS) $($(basename $@)_CFLAGS) $($(basename $@)_ST40_CFLAGS) \
$(INCLUDES) $(BASE_INCLUDES) $(OS_INCLUDES) -mruntime=os21 -o $@ -c $<
...
$(AR) -cr $@ $(filter %.o,$^) $(foreach LIB,$(filter lib%.a,$^),$(shell $(AR) -t $(FIRST_LIB_IN_PATH)))
toolset.mak(여기석)
ifeq "$(findstring $(DVD_FRONTEND),5514 5516 5517)" "$(DVD_FRONTEND)"
...
$(CC) $< $(ST20_CFLAGS) $($(basename $@)_CFLAGS) $($(basename $@)_ST20_CFLAGS)\
...
$(CC) $(LIBRARIES) -T $(CONFIG_FILE) \
...
CC = st40cc
AR = st40ar
LINK = st40ld
MKARCH = os40mkarch
...
CFLAGS += $(DVD_CFLAGS) -c -little -DOS40 -i
...
CFLAGS += -O$(OPTLEVEL)
# Determine ST40 platform
ST40_PLATFORMS := :GX1:st40GX1-demo :NGX1:st40GX1-demo \
:7750:sh4overdrive :STB1:st40stb1-overdrive
# Calculate ST40_PLATFORM from platform list
ST40_PLATFORM := $(strip \
$(foreach i,$(ST40_PLATFORMS),\
$(if $(findstring :$(DVD_FRONTEND):,$(i)),\
$(subst :$(DVD_FRONTEND):,,$(i)),)))
# OS40 libraries
OSLIB_PATH := -L$(ST40ROOT)/ST40/lib -L$(ST40ROOT)/OS40/lib
# OS40 includes
OS_INCLUDES := -I$(ST40ROOT)/OS40/platform/$(ST40_PLATFORM)/include/chorus
...
$(CC) $< $(ST40_CFLAGS) $($(basename $@)_CFLAGS) $($(basename $@)_ST40_CFLAGS) \
$(INCLUDES) $(BASE_INCLUDES) $(OS_INCLUDES) -o $@
...
$(AR) $@ -r $(filter %.o,$^) $(foreach LIB,$(filter lib%.a,$^),$(shell $(AR) -t $(FIRST_LIB_IN_PATH)))
...
ifdef DEBUG
MKARCH_EXTRA := -d
endif
CONFIG_FILE = $(if $(SPECIAL_CONFIG_FILE),$(SPECIAL_CONFIG_FILE),\
$(DVD_PLATFORM)$(if $(UNIFIED_MEMORY),_um).cfg)
ifdef GENERATE_MAP
EXTRA_LINK_FLAGS = -M $(basename $@).map
endif
...
$(LINK) -N little $(LIBRARIES) \
$(ST40_LKFLAGS) $(EXTRA_LINK_FLAGS) $($(basename $@)_LKFLAGS) $($(basename $@)_ST40_LKFLAGS) \
...
$(if $(filter user,$($(basename $@)_ACTOR)),-lebd.u,-lebd.s) -lCXX_40le \
-lc_40le -r -o $(basename $@).r
$(MKARCH) -p $(ST40_PLATFORM) $(ST40_MKFLAGS) $($(basename $@)_ST40_MKFLAGS) \
$(MKARCH_EXTRA) -c $@ \
$(if $(filter user,$($(basename $@)_ACTOR)),-u,-s) $(basename $@).r
$(RM) $(basename $@).r
endef
...
st40run $(addprefix -l ,$(CFG_PATH)) -i $(CONFIG_FILE) -t $(TARGET) $(subst _RUN,,$@) \
$(ST40_RUNARGS) $(DVD_RUNARGS)
endef
...
st40run -g $(addprefix -l ,$(CFG_PATH)) -i $(CONFIG_FILE) -t $(TARGET) $(subst _DEBUG_RUN,,$@) \
$(ST40_RUNARGS) $(DVD_RUNARGS)
...
endif # ST40 toolset variables and rules
src/pti
ptidma.c(5517ref)
if(slot_data->general_dma != NO_DMA)
{
}
...
unsigned int avd = slot;
...
#ifdef PTI3
switch (avd)
{
case PTI_VIDEO_SLOT:
interrupt_lock();
tc[DMA_ENABLE] = 0xf - (2<<avd);
tc[DMA1_SETUP] = 1;
tc[DMA1_BASE] = (unsigned int)(data);
tc[DMA1_TOP] = (unsigned int)(0xffffffff);
tc[DMA1_WRITE] = (unsigned int)(data+length);
tc[DMA1_READ] = (unsigned int)(data);
tc[DMA1_CDADDR] = VIDEO_CD_FIFO;
tc[DMA_ENABLE] = 0xf;
ptii_last_dma_write[avd] = (unsigned int)(data+length);
...
interrupt_unlock();
break;
...
interrupt_lock();
tc[DMA_ENABLE] = 0xf - (2<<avd);
tc[DMA2_SETUP] = 1;
tc[DMA2_BASE] = (unsigned int)(data);
tc[DMA2_TOP] = (unsigned int)(0xffffffff);
tc[DMA2_WRITE] = (unsigned int)(data+length);
tc[DMA2_READ] = (unsigned int)(data);
tc[DMA2_CDADDR] = AUDIO_CD_FIFO;
tc[DMA_ENABLE] = 0xf;
ptii_last_dma_write[avd] = (unsigned int)(data+length);
/* If required, enable the DMA interrupt for the slot */
if (ptii_callbacks[pti_interrupt_dma_complete].callback_fn != NULL)
{
volatile unsigned int tmp;
tmp = tc[DMAempty_EN];
tmp |= (1 << slot);
tc[DMAempty_EN] = tmp;
}
interrupt_unlock();
break;
...
interrupt_lock();
tc[DMA_ENABLE] = 0xf - (2<<avd);
tc[DMA3_SETUP] = 1;
tc[DMA3_BASE] = (unsigned int)(data);
tc[DMA3_TOP] = (unsigned int)(0xffffffff);
tc[DMA3_WRITE] = (unsigned int)(data+length);
tc[DMA3_READ] = (unsigned int)(data);
tc[DMA3_CDADDR] = I_DATA_CD_FIFO;
tc[DMA_ENABLE] = 0xf;
ptii_last_dma_write[avd] = (unsigned int)(data+length);
/* If required, enable the DMA interrupt for the slot */
if (ptii_callbacks[pti_interrupt_dma_complete].callback_fn != NULL)
{
volatile unsigned int tmp;
tmp = tc[DMAempty_EN];
tmp |= (1 << slot);
tc[DMAempty_EN] = tmp;
}
interrupt_unlock();
break;
default:
break;
}
#else
/* --- Initialize dma engine in case of PTI1 --- */
/* --- Initialize dma engine for tranfer --- */
interrupt_lock();
tc[DMA_ENABLE] = 0xf - (2<<avd);
tc[DMA1_BASE+avd] = (unsigned int)(data);
tc[DMA1_TOP+avd] = (unsigned int)(0xFFFFFFFF);
tc[DMA1_WRITE+avd] = (unsigned int)(data+length);
tc[DMA1_READ+avd] = (unsigned int)(data);
tc[DMA_ENABLE] = 0xf;
ptii_last_dma_write[avd] = (unsigned int)(data+length);
interrupt_unlock();
#endif
...
boolean ptii_dma_synchronize( unsigned int slot )
{
ptii_slot_t *slot_data = &ptii_slots[slot];
/* --- Wait for completion --- */
#ifdef PTI3
switch(slot)
{
case PTI_VIDEO_SLOT:
while( ptii_last_dma_write[slot] != tc[DMA1_READ])
{
task_delay(2);
}
break;
case PTI_AUDIO_SLOT:
while( ptii_last_dma_write[slot] != tc[DMA2_READ])
{
task_delay(2);
}
break;
case PTI_DATA_SLOT:
while( ptii_last_dma_write[slot] != tc[DMA3_READ])
{
task_delay(2);
}
break;
default:
return(true);
break;
}
#else
while( ptii_last_dma_write[slot] != tc[DMA1_READ+slot] )
{
task_delay(2); /* PMC 16/05/00 added delay to remove busy loop */
}
#endif
ptii_busy_wait_one_packet_time();
/* --- Restore data --- */
initialize_avd_dma( slot, slot_data->buffer_base, slot_data->buffer_top );
return false;
}
ptidma.c(여기석)
#ifdef PTI3
...
#endif
/* --- Initialize dma engine for tranfer --- */
setup_transfer_on_avd_dma( slot, data, length );
return false;
}
...
boolean ptii_dma_synchronize( unsigned int slot )
{
ptii_slot_t *slot_data = &ptii_slots[slot];
/* --- Wait for completion --- */
#ifdef PTI3
switch(slot)
{
case PTI_VIDEO_SLOT:
while( ptii_last_dma_write[slot] != tc[DMA1_READ])
{
task_delay(2);
}
break;
case PTI_AUDIO_SLOT:
while( ptii_last_dma_write[slot] != tc[DMA2_READ])
{
task_delay(2);
}
break;
...
while( ptii_last_dma_write[slot] != tc[DMA3_READ])
{
task_delay(2);
}
break;
default:
return(true);
break;
}
#else
while( ptii_last_dma_write[slot] != tc[DMA1_READ+slot] )
{
task_delay(2); /* PMC 16/05/00 added delay to remove busy loop */
}
#endif
ptii_busy_wait_one_packet_time();
/* --- Restore data --- */
initialize_avd_dma( slot, slot_data->buffer_base, slot_data->buffer_top );