merged SD_CARD branch
This commit is contained in:
16
.cproject
16
.cproject
@@ -320,6 +320,8 @@
|
|||||||
</profile>
|
</profile>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
<cconfiguration id="cdt.managedbuild.toolchain.gnu.cross.base.500844171.756690686">
|
<cconfiguration id="cdt.managedbuild.toolchain.gnu.cross.base.500844171.756690686">
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.cross.base.500844171.756690686" moduleId="org.eclipse.cdt.core.settings" name="firebee-cross">
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.cross.base.500844171.756690686" moduleId="org.eclipse.cdt.core.settings" name="firebee-cross">
|
||||||
@@ -339,7 +341,7 @@
|
|||||||
<option id="cdt.managedbuild.option.gnu.cross.prefix.129963777" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix"/>
|
<option id="cdt.managedbuild.option.gnu.cross.prefix.129963777" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix"/>
|
||||||
<option id="cdt.managedbuild.option.gnu.cross.path.176129148" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path"/>
|
<option id="cdt.managedbuild.option.gnu.cross.path.176129148" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path"/>
|
||||||
<targetPlatform archList="all" binaryParser="" id="cdt.managedbuild.targetPlatform.gnu.cross.2042576934" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
|
<targetPlatform archList="all" binaryParser="" id="cdt.managedbuild.targetPlatform.gnu.cross.2042576934" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
|
||||||
<builder autoBuildTarget="all" buildPath="${workspace_loc:/BaS_GNU}" cleanBuildTarget="clean" command="make" enableAutoBuild="true" enableCleanBuild="true" enabledIncrementalBuild="true" id="cdt.managedbuild.builder.gnu.cross.1808605670" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="-1" superClass="cdt.managedbuild.builder.gnu.cross">
|
<builder autoBuildTarget="all" buildPath="${workspace_loc:/BaS_GNU}" cleanBuildTarget="clean" command="make" enableAutoBuild="true" enableCleanBuild="true" enabledIncrementalBuild="true" id="cdt.managedbuild.builder.gnu.cross.1808605670" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="cdt.managedbuild.builder.gnu.cross">
|
||||||
<outputEntries>
|
<outputEntries>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name=""/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name=""/>
|
||||||
</outputEntries>
|
</outputEntries>
|
||||||
@@ -654,13 +656,20 @@
|
|||||||
</profile>
|
</profile>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<project id="BaS_GNU.null.2057987123" name="BaS_GNU"/>
|
<project id="BaS_GNU.null.2057987123" name="BaS_GNU"/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="refreshScope" versionNumber="1">
|
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||||
<resource resourceType="PROJECT" workspacePath="/BaS_GNU"/>
|
<configuration configurationName="firebee-cross">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/BaS_GNU"/>
|
||||||
|
</configuration>
|
||||||
|
<configuration configurationName="Default">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/BaS_GNU"/>
|
||||||
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings">
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings">
|
||||||
<doc-comment-owner id="org.eclipse.cdt.internal.ui.text.doctools.NullDocCommentOwner">
|
<doc-comment-owner id="org.eclipse.cdt.internal.ui.text.doctools.NullDocCommentOwner">
|
||||||
@@ -735,4 +744,5 @@
|
|||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
</cproject>
|
</cproject>
|
||||||
|
|||||||
2
.gdbinit
2
.gdbinit
@@ -1,4 +1,4 @@
|
|||||||
set disassemble-next-line on
|
#set disassemble-next-line on
|
||||||
define tr
|
define tr
|
||||||
target remote | m68k-bdm-gdbserver pipe /dev/bdmcf3
|
target remote | m68k-bdm-gdbserver pipe /dev/bdmcf3
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning
|
|||||||
org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true},unknown\=>false,exceptions\=>()}
|
org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true},unknown\=>false,exceptions\=>()}
|
||||||
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
|
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
|
||||||
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true}
|
||||||
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
|
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
|
||||||
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
||||||
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
|
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
|
||||||
@@ -33,7 +35,7 @@ org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error
|
|||||||
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
||||||
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
|
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
|
||||||
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
|
||||||
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info
|
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=Info
|
||||||
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
|
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
|
||||||
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
|
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
|
||||||
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true}}
|
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true}}
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
|
|||||||
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
|
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
|
||||||
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
|
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
|
||||||
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
|
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
|
||||||
org.eclipse.cdt.core.formatter.alignment_for_compact_if=16
|
org.eclipse.cdt.core.formatter.alignment_for_compact_if=0
|
||||||
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34
|
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=80
|
||||||
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
|
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
|
||||||
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
|
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
|
||||||
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
|
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
|
||||||
|
|||||||
11
Makefile
11
Makefile
@@ -32,6 +32,7 @@ CFLAGS=-mcpu=5474\
|
|||||||
-Wall\
|
-Wall\
|
||||||
-g\
|
-g\
|
||||||
-Wno-multichar\
|
-Wno-multichar\
|
||||||
|
-Winline\
|
||||||
-Os\
|
-Os\
|
||||||
-fomit-frame-pointer\
|
-fomit-frame-pointer\
|
||||||
-fno-strict-aliasing\
|
-fno-strict-aliasing\
|
||||||
@@ -59,19 +60,19 @@ CSRCS= \
|
|||||||
$(SRCDIR)/bas_printf.c \
|
$(SRCDIR)/bas_printf.c \
|
||||||
$(SRCDIR)/BaS.c \
|
$(SRCDIR)/BaS.c \
|
||||||
$(SRCDIR)/cache.c \
|
$(SRCDIR)/cache.c \
|
||||||
$(SRCDIR)/sd_card.c \
|
$(SRCDIR)/mmc.c \
|
||||||
|
$(SRCDIR)/unicode.c \
|
||||||
|
$(SRCDIR)/ff.c \
|
||||||
$(SRCDIR)/wait.c
|
$(SRCDIR)/wait.c
|
||||||
|
|
||||||
ASRCS= \
|
ASRCS= \
|
||||||
$(SRCDIR)/startcf.S \
|
$(SRCDIR)/startcf.S \
|
||||||
$(SRCDIR)/printf_helper.S \
|
$(SRCDIR)/printf_helper.S \
|
||||||
$(SRCDIR)/mmu.S \
|
$(SRCDIR)/mmu.S \
|
||||||
$(SRCDIR)/sd_card_asm.S \
|
|
||||||
$(SRCDIR)/exceptions.S \
|
$(SRCDIR)/exceptions.S \
|
||||||
$(SRCDIR)/supervisor.S \
|
$(SRCDIR)/supervisor.S \
|
||||||
$(SRCDIR)/ewf.S \
|
$(SRCDIR)/illegal_instruction.S
|
||||||
$(SRCDIR)/illegal_instruction.S
|
|
||||||
|
|
||||||
COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS)))
|
COBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.c,%.o,$(CSRCS)))
|
||||||
AOBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.S,%.o,$(ASRCS)))
|
AOBJS=$(patsubst $(SRCDIR)/%.o,$(OBJDIR)/%.o,$(patsubst %.S,%.o,$(ASRCS)))
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ SECTIONS
|
|||||||
objs/startcf.o(.text) /* this one is the entry point so it must be the first */
|
objs/startcf.o(.text) /* this one is the entry point so it must be the first */
|
||||||
objs/sysinit.o(.text)
|
objs/sysinit.o(.text)
|
||||||
objs/init_fpga.o(.text)
|
objs/init_fpga.o(.text)
|
||||||
|
objs/wait.o(.text)
|
||||||
|
|
||||||
#if (FORMAT == elf32-m68k)
|
#if (FORMAT == elf32-m68k)
|
||||||
*(.rodata)
|
*(.rodata)
|
||||||
*(.rodata.*)
|
*(.rodata.*)
|
||||||
@@ -29,15 +31,15 @@ SECTIONS
|
|||||||
objs/BaS.o(.text)
|
objs/BaS.o(.text)
|
||||||
objs/wait.o(.text)
|
objs/wait.o(.text)
|
||||||
/* put other routines into the same segment (RAM) as BaS.o */
|
/* put other routines into the same segment (RAM) as BaS.o */
|
||||||
objs/sd_card_asm.o(.text)
|
objs/unicode.o(.text)
|
||||||
|
objs/mmc.o(.text)
|
||||||
|
objs/ff.o(.text)
|
||||||
objs/bas_printf.o(.text)
|
objs/bas_printf.o(.text)
|
||||||
objs/printf_helper.o(.text)
|
objs/printf_helper.o(.text)
|
||||||
objs/cache.o(.text)
|
objs/cache.o(.text)
|
||||||
objs/sd_card.o(.text)
|
|
||||||
objs/mmu.o(.text)
|
objs/mmu.o(.text)
|
||||||
objs/exceptions.o(.text)
|
objs/exceptions.o(.text)
|
||||||
objs/supervisor.o(.text)
|
objs/supervisor.o(.text)
|
||||||
objs/ewf.o(.text)
|
|
||||||
objs/illegal_instruction.o(.text)
|
objs/illegal_instruction.o(.text)
|
||||||
*(.data)
|
*(.data)
|
||||||
*(.bss)
|
*(.bss)
|
||||||
|
|||||||
52
flash_scripts/flash_bas.bdm
Executable file
52
flash_scripts/flash_bas.bdm
Executable file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/local/bin/bdmctrl -D2
|
||||||
|
#
|
||||||
|
# firebee board initialization for bdmctrl
|
||||||
|
#
|
||||||
|
open $1
|
||||||
|
reset
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
wait
|
||||||
|
|
||||||
|
# Init CS0 (BootFLASH @ E000_0000 - E07F_FFFF 8Mbytes)
|
||||||
|
write 0xFF000500 0xE0000000 4
|
||||||
|
write 0xFF000508 0x00001180 4
|
||||||
|
write 0xFF000504 0x007F0001 4
|
||||||
|
|
||||||
|
|
||||||
|
# notify flashlib that we have flash at address 0xE0000000, length 0x7FFFFF, plugin is flash29
|
||||||
|
flash 0xE0000000
|
||||||
|
|
||||||
|
# flash-plugin (target-based flashing) does not work yet
|
||||||
|
#flash-plugin 0x10000000 0x4000 flash29.plugin
|
||||||
|
|
||||||
|
# Erase flash from 0xE0000000 to 0xE00FFFFF (reserved space for BaS)
|
||||||
|
#
|
||||||
|
# Caution: sector offset numbers need to be the ones from the x16 address range
|
||||||
|
# column and they vary in size - needs to be exactly as in the data sheet (p. 9)
|
||||||
|
#
|
||||||
|
# contrary to documentation, it seems we need to erase-wait after each sector
|
||||||
|
|
||||||
|
erase 0xE0000000 0x00000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x01000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x02000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x03000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x04000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x05000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x06000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x07000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x08000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
erase 0xE0000000 0x09000
|
||||||
|
erase-wait 0xE0000000
|
||||||
|
blank-chk 0xE0000000 0x00000
|
||||||
|
load -v bas.elf
|
||||||
|
wait
|
||||||
56
flash_scripts/flash_etos.bdm
Executable file
56
flash_scripts/flash_etos.bdm
Executable file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/local/bin/bdmctrl -D2
|
||||||
|
#
|
||||||
|
# flash EmuTOS using bdmctrl
|
||||||
|
#
|
||||||
|
open $1
|
||||||
|
reset
|
||||||
|
|
||||||
|
# Init CS0 (BootFLASH @ E000_0000 - E07F_FFFF 8Mbytes)
|
||||||
|
write 0xFF000500 0xE0000000 4
|
||||||
|
write 0xFF000508 0x00001180 4
|
||||||
|
write 0xFF000504 0x007F0001 4
|
||||||
|
|
||||||
|
# notify flashlib that we have flash at address 0xE0000000, length 0x7FFFFF, plugin is flash29
|
||||||
|
flash 0xe0000000
|
||||||
|
|
||||||
|
# Erase flash from 0xE0600000 to 0xE06FFFFF (reserved space for EmuTOS)
|
||||||
|
#
|
||||||
|
# Caution: sector offset numbers need to be the ones from the x16 address range
|
||||||
|
# column and they vary in size - needs to be exactly as in the data sheet (p. 9)
|
||||||
|
#
|
||||||
|
# contrary to documentation, it seems we need to erase-wait after each sector
|
||||||
|
|
||||||
|
erase 0xe0000000 0x300000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x308000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x310000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x318000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x320000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x328000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x330000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x338000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x340000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x348000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x350000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x358000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x360000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x368000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x370000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x378000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
|
||||||
|
load -v emutosfb.elf
|
||||||
59
flash_scripts/flash_firetos.bdm
Executable file
59
flash_scripts/flash_firetos.bdm
Executable file
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/local/bin/bdmctrl -D2
|
||||||
|
#
|
||||||
|
# firebee board initialization for bdmctrl
|
||||||
|
#
|
||||||
|
open $1
|
||||||
|
reset
|
||||||
|
|
||||||
|
# Init CS0 (BootFLASH @ E000_0000 - E07F_FFFF 8Mbytes)
|
||||||
|
write 0xFF000500 0xE0000000 4
|
||||||
|
write 0xFF000508 0x00001180 4
|
||||||
|
write 0xFF000504 0x007F0001 4
|
||||||
|
|
||||||
|
# notify flashlib that we have flash at address 0xE0000000, length 0x7FFFFF, plugin is flash29
|
||||||
|
flash 0xe0000000
|
||||||
|
|
||||||
|
# flash-plugin (target-based flashing) does not work yet
|
||||||
|
# flash-plugin 0x10000000 0x4000 flash29.plugin
|
||||||
|
|
||||||
|
# Erase flash from 0xE0400000 to 0xE04FFFFF (reserved space for FireTOS)
|
||||||
|
#
|
||||||
|
# Caution: sector offset numbers need to be the ones from the x16 address range
|
||||||
|
# column and they vary in size - needs to be exactly as in the data sheet (p. 9)
|
||||||
|
#
|
||||||
|
# contrary to documentation, it seems we need to erase-wait after each sector
|
||||||
|
|
||||||
|
erase 0xe0000000 0x200000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x208000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x210000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x218000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x220000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x228000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x230000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x238000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x240000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x248000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x250000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x258000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x260000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x268000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x270000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x278000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
|
||||||
|
load -v firetos.elf
|
||||||
77
flash_scripts/flash_fpga.bdm
Executable file
77
flash_scripts/flash_fpga.bdm
Executable file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/usr/local/bin/bdmctrl -D2
|
||||||
|
#
|
||||||
|
# firebee board initialization for bdmctrl
|
||||||
|
#
|
||||||
|
open $1
|
||||||
|
#reset
|
||||||
|
|
||||||
|
# Init CS0 (BootFLASH @ E000_0000 - E07F_FFFF 8Mbytes)
|
||||||
|
write 0xFF000500 0xE0000000 4
|
||||||
|
write 0xFF000508 0x00001180 4
|
||||||
|
write 0xFF000504 0x007F0001 4
|
||||||
|
|
||||||
|
# notify flashlib that we have flash at address 0xE0000000, length 0x7FFFFF, plugin is flash29
|
||||||
|
flash 0xe0000000
|
||||||
|
|
||||||
|
# flash-plugin (target-based flashing) does not work yet
|
||||||
|
#flash-plugin 0x10000000 0x4000 flash29.plugin
|
||||||
|
|
||||||
|
# Erase flash from 0xE0700000 to 0xE07FFFFF (reserved space for FPGA)
|
||||||
|
#
|
||||||
|
# Caution: sector offset numbers need to be the ones from the x16 address range
|
||||||
|
# column and they vary in size - needs to be exactly as in the data sheet (p. 9)
|
||||||
|
#
|
||||||
|
# contrary to documentation, it seems we need to erase-wait after each sector
|
||||||
|
|
||||||
|
erase 0xe0000000 0x380000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x388000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x390000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x398000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3A0000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3A0000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3A8000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3B0000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3B8000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3C0000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3C8000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3D0000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3D8000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3E0000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3E8000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3F0000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3F8000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3F9000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3FA000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3FB000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3FC000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3FD000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3FE000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
erase 0xe0000000 0x3FF000
|
||||||
|
erase-wait 0xe0000000
|
||||||
|
|
||||||
|
wait
|
||||||
|
|
||||||
|
load -v FPGA.elf
|
||||||
90
include/diskio.h
Normal file
90
include/diskio.h
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/*-----------------------------------------------------------------------
|
||||||
|
/ Low level disk interface modlue include file (C)ChaN, 2012
|
||||||
|
/-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef _DISKIO_DEFINED
|
||||||
|
#define _DISKIO_DEFINED
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _USE_WRITE 1 /* 1: Enable disk_write function */
|
||||||
|
#define _USE_IOCTL 1 /* 1: Enable disk_ioctl fucntion */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Status of Disk Functions */
|
||||||
|
typedef uint8_t DSTATUS;
|
||||||
|
|
||||||
|
/* Results of Disk Functions */
|
||||||
|
typedef enum {
|
||||||
|
RES_OK = 0, /* 0: Successful */
|
||||||
|
RES_ERROR, /* 1: R/W Error */
|
||||||
|
RES_WRPRT, /* 2: Write Protected */
|
||||||
|
RES_NOTRDY, /* 3: Not Ready */
|
||||||
|
RES_PARERR /* 4: Invalid Parameter */
|
||||||
|
} DRESULT;
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------*/
|
||||||
|
/* Prototypes for disk control functions */
|
||||||
|
|
||||||
|
|
||||||
|
DSTATUS disk_initialize (uint8_t);
|
||||||
|
DSTATUS disk_status (uint8_t);
|
||||||
|
DRESULT disk_read (uint8_t, uint8_t*, uint32_t, uint8_t);
|
||||||
|
#if _READONLY == 0
|
||||||
|
DRESULT disk_write (uint8_t, const uint8_t*, uint32_t, uint8_t);
|
||||||
|
#endif
|
||||||
|
DRESULT disk_ioctl (uint8_t, uint8_t, void*);
|
||||||
|
|
||||||
|
|
||||||
|
/* Disk Status Bits (DSTATUS) */
|
||||||
|
#define STA_NOINIT 0x01 /* Drive not initialized */
|
||||||
|
#define STA_NODISK 0x02 /* No medium in the drive */
|
||||||
|
#define STA_PROTECT 0x04 /* Write protected */
|
||||||
|
|
||||||
|
|
||||||
|
/* Command code for disk_ioctrl fucntion */
|
||||||
|
|
||||||
|
/* Generic command (used by FatFs) */
|
||||||
|
#define CTRL_SYNC 0 /* Flush disk cache (for write functions) */
|
||||||
|
#define GET_SECTOR_COUNT 1 /* Get media size (for only f_mkfs()) */
|
||||||
|
#define GET_SECTOR_SIZE 2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */
|
||||||
|
#define GET_BLOCK_SIZE 3 /* Get erase block size (for only f_mkfs()) */
|
||||||
|
#define CTRL_ERASE_SECTOR 4 /* Force erased a block of sectors (for only _USE_ERASE) */
|
||||||
|
|
||||||
|
/* Generic command (not used by FatFs) */
|
||||||
|
#define CTRL_POWER 5 /* Get/Set power status */
|
||||||
|
#define CTRL_LOCK 6 /* Lock/Unlock media removal */
|
||||||
|
#define CTRL_EJECT 7 /* Eject media */
|
||||||
|
#define CTRL_FORMAT 8 /* Create physical format on the media */
|
||||||
|
|
||||||
|
/* MMC/SDC specific ioctl command */
|
||||||
|
#define MMC_GET_TYPE 10 /* Get card type */
|
||||||
|
#define MMC_GET_CSD 11 /* Get CSD */
|
||||||
|
#define MMC_GET_CID 12 /* Get CID */
|
||||||
|
#define MMC_GET_OCR 13 /* Get OCR */
|
||||||
|
#define MMC_GET_SDSTAT 14 /* Get SD status */
|
||||||
|
|
||||||
|
/* ATA/CF specific ioctl command */
|
||||||
|
#define ATA_GET_REV 20 /* Get F/W revision */
|
||||||
|
#define ATA_GET_MODEL 21 /* Get model name */
|
||||||
|
#define ATA_GET_SN 22 /* Get serial number */
|
||||||
|
|
||||||
|
|
||||||
|
/* MMC card type flags (MMC_GET_TYPE) */
|
||||||
|
#define CT_MMC 0x01 /* MMC ver 3 */
|
||||||
|
#define CT_SD1 0x02 /* SD ver 1 */
|
||||||
|
#define CT_SD2 0x04 /* SD ver 2 */
|
||||||
|
#define CT_SDC (CT_SD1|CT_SD2) /* SD */
|
||||||
|
#define CT_BLOCK 0x08 /* Block addressing */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
337
include/ff.h
Normal file
337
include/ff.h
Normal file
@@ -0,0 +1,337 @@
|
|||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ FatFs - FAT file system module include file R0.09a (C)ChaN, 2012
|
||||||
|
/----------------------------------------------------------------------------/
|
||||||
|
/ FatFs module is a generic FAT file system module for small embedded systems.
|
||||||
|
/ This is a free software that opened for education, research and commercial
|
||||||
|
/ developments under license policy of following terms.
|
||||||
|
/
|
||||||
|
/ Copyright (C) 2012, ChaN, all right reserved.
|
||||||
|
/
|
||||||
|
/ * The FatFs module is a free software and there is NO WARRANTY.
|
||||||
|
/ * No restriction on use. You can use, modify and redistribute it for
|
||||||
|
/ personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY.
|
||||||
|
/ * Redistributions of source code must retain the above copyright notice.
|
||||||
|
/
|
||||||
|
/----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef _FATFS
|
||||||
|
#define _FATFS 4004 /* Revision ID */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <ffconf.h> /* FatFs configuration options */
|
||||||
|
|
||||||
|
#if _FATFS != _FFCONF
|
||||||
|
#error Wrong configuration file (ffconf.h).
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Definitions of volume management */
|
||||||
|
|
||||||
|
#if _MULTI_PARTITION /* Multiple partition configuration */
|
||||||
|
typedef struct {
|
||||||
|
uint8_t pd; /* Physical drive number */
|
||||||
|
uint8_t pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
|
||||||
|
} PARTITION;
|
||||||
|
extern PARTITION VolToPart[]; /* Volume - Partition resolution table */
|
||||||
|
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive number */
|
||||||
|
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */
|
||||||
|
|
||||||
|
#else /* Single partition configuration */
|
||||||
|
#define LD2PD(vol) (uint8_t)(vol) /* Each logical drive is bound to the same physical drive number */
|
||||||
|
#define LD2PT(vol) 0 /* Always mounts the 1st partition or in SFD */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Type of path name strings on FatFs API */
|
||||||
|
|
||||||
|
#if _LFN_UNICODE /* Unicode string */
|
||||||
|
#if !_USE_LFN
|
||||||
|
#error _LFN_UNICODE must be 0 in non-LFN cfg.
|
||||||
|
#endif
|
||||||
|
#ifndef _INC_TCHAR
|
||||||
|
typedef uint16_t TCHAR;
|
||||||
|
#define _T(x) L ## x
|
||||||
|
#define _TEXT(x) L ## x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else /* ANSI/OEM string */
|
||||||
|
#ifndef _INC_TCHAR
|
||||||
|
typedef char TCHAR;
|
||||||
|
#define _T(x) x
|
||||||
|
#define _TEXT(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* File system object structure (FATFS) */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t fs_type; /* FAT sub-type (0:Not mounted) */
|
||||||
|
uint8_t drv; /* Physical drive number */
|
||||||
|
uint8_t csize; /* Sectors per cluster (1,2,4...128) */
|
||||||
|
uint8_t n_fats; /* Number of FAT copies (1,2) */
|
||||||
|
uint8_t wflag; /* win[] dirty flag (1:must be written back) */
|
||||||
|
uint8_t fsi_flag; /* fsinfo dirty flag (1:must be written back) */
|
||||||
|
uint16_t id; /* File system mount ID */
|
||||||
|
uint16_t n_rootdir; /* Number of root directory entries (FAT12/16) */
|
||||||
|
#if _MAX_SS != 512
|
||||||
|
uint16_t ssize; /* Bytes per sector (512, 1024, 2048 or 4096) */
|
||||||
|
#endif
|
||||||
|
#if _FS_REENTRANT
|
||||||
|
_SYNC_t sobj; /* Identifier of sync object */
|
||||||
|
#endif
|
||||||
|
#if !_FS_READONLY
|
||||||
|
uint32_t last_clust; /* Last allocated cluster */
|
||||||
|
uint32_t free_clust; /* Number of free clusters */
|
||||||
|
uint32_t fsi_sector; /* fsinfo sector (FAT32) */
|
||||||
|
#endif
|
||||||
|
#if _FS_RPATH
|
||||||
|
uint32_t cdir; /* Current directory start cluster (0:root) */
|
||||||
|
#endif
|
||||||
|
uint32_t n_fatent; /* Number of FAT entries (= number of clusters + 2) */
|
||||||
|
uint32_t fsize; /* Sectors per FAT */
|
||||||
|
uint32_t fatbase; /* FAT start sector */
|
||||||
|
uint32_t dirbase; /* Root directory start sector (FAT32:Cluster#) */
|
||||||
|
uint32_t database; /* Data start sector */
|
||||||
|
uint32_t winsect; /* Current sector appearing in the win[] */
|
||||||
|
uint8_t win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */
|
||||||
|
} FATFS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* File object structure (FIL) */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
FATFS* fs; /* Pointer to the related file system object */
|
||||||
|
uint16_t id; /* File system mount ID of the related file system object */
|
||||||
|
uint8_t flag; /* File status flags */
|
||||||
|
uint8_t pad1;
|
||||||
|
uint32_t fptr; /* File read/write pointer (0ed on file open) */
|
||||||
|
uint32_t fsize; /* File size */
|
||||||
|
uint32_t sclust; /* File data start cluster (0:no data cluster, always 0 when fsize is 0) */
|
||||||
|
uint32_t clust; /* Current cluster of fpter */
|
||||||
|
uint32_t dsect; /* Current data sector of fpter */
|
||||||
|
#if !_FS_READONLY
|
||||||
|
uint32_t dir_sect; /* Sector containing the directory entry */
|
||||||
|
uint8_t* dir_ptr; /* Pointer to the directory entry in the window */
|
||||||
|
#endif
|
||||||
|
#if _USE_FASTSEEK
|
||||||
|
uint32_t* cltbl; /* Pointer to the cluster link map table (null on file open) */
|
||||||
|
#endif
|
||||||
|
#if _FS_LOCK
|
||||||
|
uint32_t lockid; /* File lock ID (index of file semaphore table Files[]) */
|
||||||
|
#endif
|
||||||
|
#if !_FS_TINY
|
||||||
|
uint8_t buf[_MAX_SS]; /* File data read/write buffer */
|
||||||
|
#endif
|
||||||
|
} FIL;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Directory object structure (DIR) */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
FATFS* fs; /* Pointer to the owner file system object */
|
||||||
|
uint16_t id; /* Owner file system mount ID */
|
||||||
|
uint16_t index; /* Current read/write index number */
|
||||||
|
uint32_t sclust; /* Table start cluster (0:Root dir) */
|
||||||
|
uint32_t clust; /* Current cluster */
|
||||||
|
uint32_t sect; /* Current sector */
|
||||||
|
uint8_t* dir; /* Pointer to the current SFN entry in the win[] */
|
||||||
|
uint8_t* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
|
||||||
|
#if _USE_LFN
|
||||||
|
uint16_t* lfn; /* Pointer to the LFN working buffer */
|
||||||
|
uint16_t lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */
|
||||||
|
#endif
|
||||||
|
} DIR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* File status structure (FILINFO) */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t fsize; /* File size */
|
||||||
|
uint16_t fdate; /* Last modified date */
|
||||||
|
uint16_t ftime; /* Last modified time */
|
||||||
|
uint8_t fattrib; /* Attribute */
|
||||||
|
TCHAR fname[13]; /* Short file name (8.3 format) */
|
||||||
|
#if _USE_LFN
|
||||||
|
TCHAR* lfname; /* Pointer to the LFN buffer */
|
||||||
|
uint32_t lfsize; /* Size of LFN buffer in TCHAR */
|
||||||
|
#endif
|
||||||
|
} FILINFO;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* File function return code (FRESULT) */
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FR_OK = 0, /* (0) Succeeded */
|
||||||
|
FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
||||||
|
FR_INT_ERR, /* (2) Assertion failed */
|
||||||
|
FR_NOT_READY, /* (3) The physical drive cannot work */
|
||||||
|
FR_NO_FILE, /* (4) Could not find the file */
|
||||||
|
FR_NO_PATH, /* (5) Could not find the path */
|
||||||
|
FR_INVALID_NAME, /* (6) The path name format is invalid */
|
||||||
|
FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
||||||
|
FR_EXIST, /* (8) Access denied due to prohibited access */
|
||||||
|
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
||||||
|
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
||||||
|
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
||||||
|
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
||||||
|
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
||||||
|
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
||||||
|
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
||||||
|
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||||
|
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||||
|
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */
|
||||||
|
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||||
|
} FRESULT;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------*/
|
||||||
|
/* FatFs module application interface */
|
||||||
|
|
||||||
|
FRESULT f_mount (uint8_t, FATFS*); /* Mount/Unmount a logical drive */
|
||||||
|
FRESULT f_open (FIL*, const TCHAR*, uint8_t); /* Open or create a file */
|
||||||
|
FRESULT f_read (FIL*, void*, uint32_t, uint32_t*); /* Read data from a file */
|
||||||
|
FRESULT f_lseek (FIL*, uint32_t); /* Move file pointer of a file object */
|
||||||
|
FRESULT f_close (FIL*); /* Close an open file object */
|
||||||
|
FRESULT f_opendir (DIR*, const char*); /* Open an existing directory */
|
||||||
|
FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */
|
||||||
|
FRESULT f_stat (const TCHAR*, FILINFO*); /* Get file status */
|
||||||
|
FRESULT f_write (FIL*, const void*, uint32_t, uint32_t*); /* Write data to a file */
|
||||||
|
FRESULT f_getfree (const TCHAR*, uint32_t*, FATFS**); /* Get number of free clusters on the drive */
|
||||||
|
FRESULT f_truncate (FIL*); /* Truncate file */
|
||||||
|
FRESULT f_sync (FIL*); /* Flush cached data of a writing file */
|
||||||
|
FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
|
||||||
|
FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
|
||||||
|
FRESULT f_chmod (const TCHAR*, uint8_t, uint8_t); /* Change attribute of the file/dir */
|
||||||
|
FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change times-tamp of the file/dir */
|
||||||
|
FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
|
||||||
|
FRESULT f_chdrive (uint8_t); /* Change current drive */
|
||||||
|
FRESULT f_chdir (const TCHAR*); /* Change current directory */
|
||||||
|
FRESULT f_getcwd (TCHAR*, uint32_t); /* Get current directory */
|
||||||
|
FRESULT f_forward (FIL*, uint32_t(*)(const uint8_t*,uint32_t), uint32_t, uint32_t*); /* Forward data to the stream */
|
||||||
|
FRESULT f_mkfs (uint8_t, uint8_t, uint32_t); /* Create a file system on the drive */
|
||||||
|
FRESULT f_fdisk (uint8_t, const uint32_t[], void*); /* Divide a physical drive into some partitions */
|
||||||
|
int f_putc (TCHAR, FIL*); /* Put a character to the file */
|
||||||
|
int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
|
||||||
|
int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
|
||||||
|
TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
|
||||||
|
|
||||||
|
#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0)
|
||||||
|
#define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0)
|
||||||
|
#define f_tell(fp) ((fp)->fptr)
|
||||||
|
#define f_size(fp) ((fp)->fsize)
|
||||||
|
|
||||||
|
#ifndef EOF
|
||||||
|
#define EOF (-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------*/
|
||||||
|
/* Additional user defined functions */
|
||||||
|
|
||||||
|
/* RTC function */
|
||||||
|
#if !_FS_READONLY
|
||||||
|
uint32_t get_fattime (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Unicode support functions */
|
||||||
|
#if _USE_LFN /* Unicode - OEM code conversion */
|
||||||
|
uint16_t ff_convert (uint16_t, uint32_t); /* OEM-Unicode bidirectional conversion */
|
||||||
|
uint16_t ff_wtoupper (uint16_t); /* Unicode upper-case conversion */
|
||||||
|
#if _USE_LFN == 3 /* Memory functions */
|
||||||
|
void* ff_memalloc (uint32_t); /* Allocate memory block */
|
||||||
|
void ff_memfree (void*); /* Free memory block */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Sync functions */
|
||||||
|
#if _FS_REENTRANT
|
||||||
|
int ff_cre_syncobj (uint8_t, _SYNC_t*);/* Create a sync object */
|
||||||
|
int ff_req_grant (_SYNC_t); /* Lock sync object */
|
||||||
|
void ff_rel_grant (_SYNC_t); /* Unlock sync object */
|
||||||
|
int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------*/
|
||||||
|
/* Flags and offset address */
|
||||||
|
|
||||||
|
|
||||||
|
/* File access control and file status flags (FIL.flag) */
|
||||||
|
|
||||||
|
#define FA_READ 0x01
|
||||||
|
#define FA_OPEN_EXISTING 0x00
|
||||||
|
#define FA__ERROR 0x80
|
||||||
|
|
||||||
|
#if !_FS_READONLY
|
||||||
|
#define FA_WRITE 0x02
|
||||||
|
#define FA_CREATE_NEW 0x04
|
||||||
|
#define FA_CREATE_ALWAYS 0x08
|
||||||
|
#define FA_OPEN_ALWAYS 0x10
|
||||||
|
#define FA__WRITTEN 0x20
|
||||||
|
#define FA__DIRTY 0x40
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* FAT sub type (FATFS.fs_type) */
|
||||||
|
|
||||||
|
#define FS_FAT12 1
|
||||||
|
#define FS_FAT16 2
|
||||||
|
#define FS_FAT32 3
|
||||||
|
|
||||||
|
|
||||||
|
/* File attribute bits for directory entry */
|
||||||
|
|
||||||
|
#define AM_RDO 0x01 /* Read only */
|
||||||
|
#define AM_HID 0x02 /* Hidden */
|
||||||
|
#define AM_SYS 0x04 /* System */
|
||||||
|
#define AM_VOL 0x08 /* Volume label */
|
||||||
|
#define AM_LFN 0x0F /* LFN entry */
|
||||||
|
#define AM_DIR 0x10 /* Directory */
|
||||||
|
#define AM_ARC 0x20 /* Archive */
|
||||||
|
#define AM_MASK 0x3F /* Mask of defined bits */
|
||||||
|
|
||||||
|
|
||||||
|
/* Fast seek feature */
|
||||||
|
#define CREATE_LINKMAP 0xFFFFFFFF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------*/
|
||||||
|
/* Multi-byte word access macros */
|
||||||
|
|
||||||
|
#if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */
|
||||||
|
#define LD_WORD(ptr) (uint16_t)(* (uint16_t *)(uint8_t *)(ptr))
|
||||||
|
#define LD_DWORD(ptr) (uint32_t)(* (uint32_t *)(uint8_t *)(ptr))
|
||||||
|
#define ST_WORD(ptr,val) *(uint16_t *) (uint8_t *)(ptr) = (uint16_t)(val)
|
||||||
|
#define ST_DWORD(ptr,val) *(uint32_t *) (uint8_t *)(ptr) = (uint32_t)(val)
|
||||||
|
#else /* Use byte-by-byte access to the FAT structure */
|
||||||
|
#define LD_WORD(ptr) (uint16_t)(((uint16_t)*((uint8_t *)(ptr) + 1) << 8) | (uint16_t) *(uint8_t *)(ptr))
|
||||||
|
#define LD_DWORD(ptr) (uint32_t)(((uint32_t)*((uint8_t *)(ptr) + 3) << 24) | ((uint32_t)*((uint8_t*)(ptr) + 2) << 16) | ((uint16_t) *((uint8_t*)(ptr) + 1) << 8) | *(uint8_t*)(ptr))
|
||||||
|
#define ST_WORD(ptr,val) *(uint8_t *)(ptr) = (uint8_t)(val); *((uint8_t *)(ptr) + 1) = (uint8_t)((uint16_t)(val) >> 8)
|
||||||
|
#define ST_DWORD(ptr,val) *(uint8_t *)(ptr) = (uint8_t)(val); *((uint8_t *)(ptr) + 1) = (uint8_t)((uint16_t)(val) >> 8); *((uint8_t*)(ptr) + 2) = (uint8_t)((uint32_t)(val) >> 16); *((uint8_t *)(ptr) + 3) = (uint8_t)((uint32_t)(val) >> 24)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _FATFS */
|
||||||
190
include/ffconf.h
Normal file
190
include/ffconf.h
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ FatFs - FAT file system module configuration file R0.09a (C)ChaN, 2012
|
||||||
|
/----------------------------------------------------------------------------/
|
||||||
|
/
|
||||||
|
/ CAUTION! Do not forget to make clean the project after any changes to
|
||||||
|
/ the configuration options.
|
||||||
|
/
|
||||||
|
/----------------------------------------------------------------------------*/
|
||||||
|
#ifndef _FFCONF
|
||||||
|
#define _FFCONF 4004 /* Revision ID */
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Functions and Buffer Configurations
|
||||||
|
/----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
|
||||||
|
/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
|
||||||
|
/ object instead of the sector buffer in the individual file object for file
|
||||||
|
/ data transfer. This reduces memory consumption 512 bytes each file object. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
|
||||||
|
/* Setting _FS_READONLY to 1 defines read only configuration. This removes
|
||||||
|
/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
|
||||||
|
/ f_truncate and useless f_getfree. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _FS_MINIMIZE 0 /* 0 to 3 */
|
||||||
|
/* The _FS_MINIMIZE option defines minimization level to remove some functions.
|
||||||
|
/
|
||||||
|
/ 0: Full function.
|
||||||
|
/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename
|
||||||
|
/ are removed.
|
||||||
|
/ 2: f_opendir and f_readdir are removed in addition to 1.
|
||||||
|
/ 3: f_lseek is removed in addition to 2. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _USE_STRFUNC 1 /* 0:Disable or 1-2:Enable */
|
||||||
|
/* To enable string functions, set _USE_STRFUNC to 1 or 2. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _USE_MKFS 0 /* 0:Disable or 1:Enable */
|
||||||
|
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
|
||||||
|
|
||||||
|
|
||||||
|
#define _USE_FORWARD 0 /* 0:Disable or 1:Enable */
|
||||||
|
/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _USE_FASTSEEK 0 /* 0:Disable or 1:Enable */
|
||||||
|
/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Locale and Namespace Configurations
|
||||||
|
/----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define _CODE_PAGE 858
|
||||||
|
/* The _CODE_PAGE specifies the OEM code page to be used on the target system.
|
||||||
|
/ Incorrect setting of the code page can cause a file open failure.
|
||||||
|
/
|
||||||
|
/ 932 - Japanese Shift-JIS (DBCS, OEM, Windows)
|
||||||
|
/ 936 - Simplified Chinese GBK (DBCS, OEM, Windows)
|
||||||
|
/ 949 - Korean (DBCS, OEM, Windows)
|
||||||
|
/ 950 - Traditional Chinese Big5 (DBCS, OEM, Windows)
|
||||||
|
/ 1250 - Central Europe (Windows)
|
||||||
|
/ 1251 - Cyrillic (Windows)
|
||||||
|
/ 1252 - Latin 1 (Windows)
|
||||||
|
/ 1253 - Greek (Windows)
|
||||||
|
/ 1254 - Turkish (Windows)
|
||||||
|
/ 1255 - Hebrew (Windows)
|
||||||
|
/ 1256 - Arabic (Windows)
|
||||||
|
/ 1257 - Baltic (Windows)
|
||||||
|
/ 1258 - Vietnam (OEM, Windows)
|
||||||
|
/ 437 - U.S. (OEM)
|
||||||
|
/ 720 - Arabic (OEM)
|
||||||
|
/ 737 - Greek (OEM)
|
||||||
|
/ 775 - Baltic (OEM)
|
||||||
|
/ 850 - Multilingual Latin 1 (OEM)
|
||||||
|
/ 858 - Multilingual Latin 1 + Euro (OEM)
|
||||||
|
/ 852 - Latin 2 (OEM)
|
||||||
|
/ 855 - Cyrillic (OEM)
|
||||||
|
/ 866 - Russian (OEM)
|
||||||
|
/ 857 - Turkish (OEM)
|
||||||
|
/ 862 - Hebrew (OEM)
|
||||||
|
/ 874 - Thai (OEM, Windows)
|
||||||
|
/ 1 - ASCII only (Valid for non LFN cfg.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define _USE_LFN 0 /* 0 to 3 */
|
||||||
|
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
|
||||||
|
/* The _USE_LFN option switches the LFN support.
|
||||||
|
/
|
||||||
|
/ 0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
|
||||||
|
/ 1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
|
||||||
|
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
||||||
|
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
||||||
|
/
|
||||||
|
/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. To enable LFN,
|
||||||
|
/ Unicode handling functions ff_convert() and ff_wtoupper() must be added
|
||||||
|
/ to the project. When enable to use heap, memory control functions
|
||||||
|
/ ff_memalloc() and ff_memfree() must be added to the project. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
|
||||||
|
/* To switch the character code set on FatFs API to Unicode,
|
||||||
|
/ enable LFN feature and set _LFN_UNICODE to 1. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _FS_RPATH 0 /* 0 to 2 */
|
||||||
|
/* The _FS_RPATH option configures relative path feature.
|
||||||
|
/
|
||||||
|
/ 0: Disable relative path feature and remove related functions.
|
||||||
|
/ 1: Enable relative path. f_chdrive() and f_chdir() are available.
|
||||||
|
/ 2: f_getcwd() is available in addition to 1.
|
||||||
|
/
|
||||||
|
/ Note that output of the f_readdir fnction is affected by this option. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Physical Drive Configurations
|
||||||
|
/----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define _VOLUMES 1
|
||||||
|
/* Number of volumes (logical drives) to be used. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */
|
||||||
|
/* Maximum sector size to be handled.
|
||||||
|
/ Always set 512 for memory card and hard disk but a larger value may be
|
||||||
|
/ required for on-board flash memory, floppy disk and optical disk.
|
||||||
|
/ When _MAX_SS is larger than 512, it configures FatFs to variable sector size
|
||||||
|
/ and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _MULTI_PARTITION 0 /* 0:Single partition, 1/2:Enable multiple partition */
|
||||||
|
/* When set to 0, each volume is bound to the same physical drive number and
|
||||||
|
/ it can mount only first primaly partition. When it is set to 1, each volume
|
||||||
|
/ is tied to the partitions listed in VolToPart[]. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _USE_ERASE 0 /* 0:Disable or 1:Enable */
|
||||||
|
/* To enable sector erase feature, set _USE_ERASE to 1. CTRL_ERASE_SECTOR command
|
||||||
|
/ should be added to the disk_ioctl functio. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ System Configurations
|
||||||
|
/----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define _WORD_ACCESS 0 /* 0 or 1 */
|
||||||
|
/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
|
||||||
|
/ option defines which access method is used to the word data on the FAT volume.
|
||||||
|
/
|
||||||
|
/ 0: Byte-by-byte access.
|
||||||
|
/ 1: Word access. Do not choose this unless following condition is met.
|
||||||
|
/
|
||||||
|
/ When the byte order on the memory is big-endian or address miss-aligned word
|
||||||
|
/ access results incorrect behavior, the _WORD_ACCESS must be set to 0.
|
||||||
|
/ If it is not the case, the value can also be set to 1 to improve the
|
||||||
|
/ performance and code size.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* A header file that defines sync object types on the O/S, such as
|
||||||
|
/ windows.h, ucos_ii.h and semphr.h, must be included prior to ff.h. */
|
||||||
|
|
||||||
|
#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
|
||||||
|
#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
|
||||||
|
#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
|
||||||
|
|
||||||
|
/* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module.
|
||||||
|
/
|
||||||
|
/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
|
||||||
|
/ 1: Enable reentrancy. Also user provided synchronization handlers,
|
||||||
|
/ ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj
|
||||||
|
/ function must be added to the project. */
|
||||||
|
|
||||||
|
|
||||||
|
#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
|
||||||
|
/* To enable file lock control feature, set _FS_LOCK to 1 or greater.
|
||||||
|
The value defines how many files can be opened simultaneously. */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _FFCONFIG */
|
||||||
581
include/ii_add.h
581
include/ii_add.h
@@ -1,581 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// add
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
/*****************************************************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// byt
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// add.b #im,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addbir_macro:.macro
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
mvs.b \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.b d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add ea,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
adddd:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add ea,dx (first ea->a1 z.B. f<>r a0,a1,USP)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addddd:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 a1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add (ea),dx (first ea->a1 z.B. f<>r a0,a1,USP)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
adddda:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add (ay)+,dx (first ea->a1 z.B. f<>r a0,a1,USP)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addddai:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1)+,d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add -(ay),dx (first ea->a1 z.B. f<>r a0,a1,USP)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addddad:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 -(a1),d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add d16(ay),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addd16ad:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add d8(ay,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addd8ad:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addxwd:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add xxx.l,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addxld:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add d16(pc),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addd16pcd:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add d8(pc,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addd8pcd:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// add dy,ea
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,(ay) (first ea->a1 z.B. f<>r a0,a1,USP)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addeda:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,(ay)+ (first ea->a1 z.B. f<>r a0,a1,USP)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addedai:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)+
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,(ay)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addedaid:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2+
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addedad:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 -(a1),d1
|
|
||||||
move.l a1,\2
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addedadd:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 -\2,d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,d16(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
adde16ad:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add.w d8(ay,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
adde8ad:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
move.l \1,d0
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
.endif
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addxwe:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // add dx,xxx.l
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addxle:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
add.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
/******************************************************/
|
|
||||||
// adress register
|
|
||||||
/******************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w ea,ax (ea = dx;ax;(ax);(ax)+,-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addaw:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,pc_off(a7) // pc auf next
|
|
||||||
movem.l (a7),d0/d1/a0/a1 // register zurp<72>ck
|
|
||||||
mvs.w \1,d0
|
|
||||||
adda.l d0,\2
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
lea ii_ss(a7),a7 // stack erh<72>hen
|
|
||||||
rte
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// add.w ea,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawa7:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.w \1,d0
|
|
||||||
move.l usp,a1
|
|
||||||
add.l d0,a1
|
|
||||||
move.l a1,usp
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w ea,usp (ea = dx;ax;(ax);(ax)+,-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawu:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,pc_off(a7) // pc auf next
|
|
||||||
movem.l (a7),d0/d1/a0/a1 // register zurp<72>ck
|
|
||||||
move.l a7,_a7_save
|
|
||||||
move.l usp,a7
|
|
||||||
move.l \1,d0
|
|
||||||
adda.l d0,\2
|
|
||||||
move.l a7,usp
|
|
||||||
move.l _a7_save,a7
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
lea ii_ss(a7),a7 // stack erh<72>hen
|
|
||||||
rte
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w ea,usp (ea = a7 => dx;ax;(ax);(ax)+,-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawua7:.macro
|
|
||||||
addawu \1,\2
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w d16(ay),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawd16a:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
adda.l d0,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
add.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawd8a:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
add.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w xxx.w,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawxwax:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w \1,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
adda.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w xxx.l,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawxlax:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
adda.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w d16(pc),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawd16pcax:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w \1,a1
|
|
||||||
adda.l a0,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
adda.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawd8pcax:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
adda.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.w #im,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addawim:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.w \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
adda.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.l d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addald8a:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
adda.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // adda.l d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
addakd8pcax:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
adda.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//*****************************************************************************************
|
|
||||||
// addx
|
|
||||||
//*****************************************************************************************
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // addx dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
adddx:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.b sr_off+1(a7),d0 //ccr holen
|
|
||||||
move d0,ccr //setzen
|
|
||||||
mvs.\3 \2,d0
|
|
||||||
mvs.\3 \1,d1
|
|
||||||
addx.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\1
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // addx -(ay),-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
adddax:.macro
|
|
||||||
#ifdef halten_add
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.b sr_off+1(a7),d0 //ccr holen
|
|
||||||
move d0,ccr //setzen
|
|
||||||
move.l \1,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l -(a1),d0
|
|
||||||
.else
|
|
||||||
mvs.\3 -(a1),d0
|
|
||||||
.endif
|
|
||||||
move.l \2,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l -(a1),d0
|
|
||||||
.else
|
|
||||||
mvs.\3 -(a1),d1
|
|
||||||
.endif
|
|
||||||
addx.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
441
include/ii_and.h
441
include/ii_and.h
@@ -1,441 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// and
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
/*****************************************************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// byt
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// and.b #im,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andbir_macro:.macro
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
mvs.b \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.b d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and ea,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
anddd:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and ea(l)->dy(w),dx z.B. f<>r USP
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andddd:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 a1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and (ea)->dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
anddda:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and ea->ay,(ay)+,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andddai:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1)+,d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and ea->ay,-(ay),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andddad:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 -(a1),d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and d16(ay),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andd16ad:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and d8(ay,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andd8ad:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andxwd:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and xxx.l,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andxld:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and d16(pc),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andd16pcd:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and d8(pc,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andd8pcd:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// and dx,ea
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,(ea)->dy
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andeda:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,ea->ay,(ay)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andedai:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)+
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,ea->ay,(ay)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andedaid:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2+
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,ea->ay,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andedad:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 -(a1),d1
|
|
||||||
move.l a1,\2
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,ea->ay,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andedadd:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 -\2,d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,d16(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ande16ad:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and.w dx,d8(ay,dy)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ande8ad:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
move.l \1,d0
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
.endif
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andxwe:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // and dx,xxx.l
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andxle:.macro
|
|
||||||
#ifdef halten_and
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
and.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w ea,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andaw:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// and.w ea,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawa7:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w usp?,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawu:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w usp?,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawua7:.macro
|
|
||||||
andawu \1,\2
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w d16(ay),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawd16a:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawd8a:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w xxx.w,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawxwax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w xxx.l,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawxlax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w d16(pc),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawd16pcax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawd8pcax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.w #im,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andawim:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.l d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andald8a:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // anda.l d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
andald8pcax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//*****************************************************************************************
|
|
||||||
// spezial addx subx etc.
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // addx dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
anddx:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // addx -(ay),-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
anddax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// dbcc,trapcc
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
.text
|
|
||||||
ii_lset_dbcc:.macro
|
|
||||||
// dbra
|
|
||||||
ii_lset_opeau 51,c
|
|
||||||
ii_lset_opeau 52,c
|
|
||||||
ii_lset_opeau 53,c
|
|
||||||
ii_lset_opeau 54,c
|
|
||||||
ii_lset_opeau 55,c
|
|
||||||
ii_lset_opeau 56,c
|
|
||||||
ii_lset_opeau 57,c
|
|
||||||
ii_lset_opeau 58,c
|
|
||||||
ii_lset_opeau 59,c
|
|
||||||
ii_lset_opeau 5a,c
|
|
||||||
ii_lset_opeau 5b,c
|
|
||||||
ii_lset_opeau 5c,c
|
|
||||||
ii_lset_opeau 5d,c
|
|
||||||
ii_lset_opeau 5e,c
|
|
||||||
ii_lset_opeau 5f,c
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_dbcc_func:.macro
|
|
||||||
ii_0x51c8:
|
|
||||||
dbra_macro d0_off+2(a7)
|
|
||||||
ii_0x51c9:
|
|
||||||
dbra_macro d1_off+2(a7)
|
|
||||||
ii_0x51ca:
|
|
||||||
dbra_macro d2
|
|
||||||
ii_0x51cb:
|
|
||||||
dbra_macro d3
|
|
||||||
ii_0x51cc:
|
|
||||||
dbra_macro d4
|
|
||||||
ii_0x51cd:
|
|
||||||
dbra_macro d5
|
|
||||||
ii_0x51ce:
|
|
||||||
dbra_macro d6
|
|
||||||
ii_0x51cf:
|
|
||||||
dbra_macro d7
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// dbcc dx
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_dbcc 2,hi
|
|
||||||
ii_dbcc 3,ls
|
|
||||||
ii_dbcc 4,cc
|
|
||||||
ii_dbcc 5,cs
|
|
||||||
ii_dbcc 6,ne
|
|
||||||
ii_dbcc 7,eq
|
|
||||||
ii_dbcc 8,vc
|
|
||||||
ii_dbcc 9,vs
|
|
||||||
ii_dbcc a,pl
|
|
||||||
ii_dbcc b,mi
|
|
||||||
ii_dbcc c,ge
|
|
||||||
ii_dbcc d,lt
|
|
||||||
ii_dbcc e,gt
|
|
||||||
ii_dbcc f,le
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// dbra dx
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
dbra_macro:.macro
|
|
||||||
#ifdef halten_dbcc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvz.w \1,d1 // dx holen
|
|
||||||
subq.l #1,d1 // dx-1
|
|
||||||
bcc dbra\@ // bra if plus?
|
|
||||||
addq.l #2,a0 // offset <20>berspringen
|
|
||||||
move.w d1,\1 // dx sichern
|
|
||||||
ii_end
|
|
||||||
dbra\@:
|
|
||||||
move.w (a0),a1 // offset (wird auf long erweitert)
|
|
||||||
add.l a1,a0 // dazuadieren
|
|
||||||
move.w d1,\1 // dx sichern
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// dbcc dx
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
dbcc_macro:.macro
|
|
||||||
#ifdef halten_dbcc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
b\2 dbncc\@
|
|
||||||
mvz.w \1,d1 // dx holen
|
|
||||||
subq.l #1,d1 // dx-1
|
|
||||||
bcc dbcc\@ // bra if plus?
|
|
||||||
dbncc\@:
|
|
||||||
addq.l #2,a0 // offset <20>berspringen
|
|
||||||
move.w d1,\1 // dx sichern
|
|
||||||
ii_end
|
|
||||||
dbcc\@:
|
|
||||||
move.w (a0),a1 // offset (wird auf long erweitert)
|
|
||||||
add.l a1,a0 // dazuadieren
|
|
||||||
move.w d1,\1 // dx sichern
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
//db
|
|
||||||
ii_dbcc:.macro
|
|
||||||
ii_0x5\1c8:
|
|
||||||
dbcc_macro d0_off+2(a7),\2
|
|
||||||
ii_0x5\1c9:
|
|
||||||
dbcc_macro d1_off+2(a7),\2
|
|
||||||
ii_0x5\1ca:
|
|
||||||
dbcc_macro d2,\2
|
|
||||||
ii_0x5\1cb:
|
|
||||||
dbcc_macro d3,\2
|
|
||||||
ii_0x5\1cc:
|
|
||||||
dbcc_macro d4,\2
|
|
||||||
ii_0x5\1cd:
|
|
||||||
dbcc_macro d5,\2
|
|
||||||
ii_0x5\1ce:
|
|
||||||
dbcc_macro d6,\2
|
|
||||||
ii_0x5\1cf:
|
|
||||||
dbcc_macro d7,\2
|
|
||||||
.endm
|
|
||||||
181
include/ii_ewf.h
181
include/ii_ewf.h
@@ -1,181 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// extension word format missing
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
.text
|
|
||||||
ii_ewf_lset:.macro
|
|
||||||
// pea
|
|
||||||
ii_lset_opeag 48,7
|
|
||||||
ii_lset 0x487b
|
|
||||||
// jmp
|
|
||||||
ii_lset_opeag 4e,f
|
|
||||||
ii_lset 0x4efb
|
|
||||||
// jsr
|
|
||||||
ii_lset_opeag 4e,b
|
|
||||||
ii_lset 0x4ebb
|
|
||||||
// tas
|
|
||||||
ii_lset_opeag 4a,f
|
|
||||||
ii_lset 0x4ebb
|
|
||||||
// tst.b
|
|
||||||
ii_lset_opeag 4a,3
|
|
||||||
ii_lset 0x4ebb
|
|
||||||
// tst.w
|
|
||||||
ii_lset_opeag 4a,7
|
|
||||||
ii_lset 0x4ebb
|
|
||||||
// tst.l
|
|
||||||
ii_lset_opeag 4a,b
|
|
||||||
ii_lset 0x4ebb
|
|
||||||
// clr.b
|
|
||||||
ii_lset_opeag 42,3
|
|
||||||
ii_lset 0x423b
|
|
||||||
// clr.w
|
|
||||||
ii_lset_opeag 42,7
|
|
||||||
ii_lset 0x423b
|
|
||||||
// clr.l
|
|
||||||
ii_lset_opeag 42,b
|
|
||||||
ii_lset 0x423b
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_ewf_func:.macro
|
|
||||||
ewf_func_macro pea,487
|
|
||||||
ewf_func_macro jmp,4ef
|
|
||||||
ewf_func_macro jsr,4eb
|
|
||||||
ewf_func_macro tas,4af
|
|
||||||
ewf_func_macro tstb,4a3
|
|
||||||
ewf_func_macro tstw,4a7
|
|
||||||
ewf_func_macro tstl,4ab
|
|
||||||
ewf_func_macro clrb,423
|
|
||||||
ewf_func_macro clrw,427
|
|
||||||
ewf_func_macro clrl,42b
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
pea_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l usp,a1
|
|
||||||
move.l d0,-(a1)
|
|
||||||
move.l a1,usp
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
jmp_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
move.l a1,a0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
jsr_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
move.l a1,d0
|
|
||||||
move.l usp,a1
|
|
||||||
move.l a0,-(a1)
|
|
||||||
move.l a1,usp
|
|
||||||
move.l d0,a0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
tas_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
tas (a1)
|
|
||||||
set_cc0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
tstb_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
tst.b (a1)
|
|
||||||
set_cc0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
tstw_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
tst.w (a1)
|
|
||||||
set_cc0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
tstl_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
tst.l (a1)
|
|
||||||
set_cc0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
clrb_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
clr.b (a1)
|
|
||||||
set_cc0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
clrw_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
clr.w (a1)
|
|
||||||
set_cc0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
clrl_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
clr.l (a1)
|
|
||||||
set_cc0
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ewf_func_macro:.macro //1=art 2=code
|
|
||||||
ii_0x\20:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0_off(a7),a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\21:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a1_off(a7),a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\22:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a2,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\23:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a3,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\24:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a4,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\25:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a5,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\26:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a6,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\27:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l usp,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\2b:
|
|
||||||
#ifdef halten_ewf
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
\1_macro
|
|
||||||
.endm
|
|
||||||
|
|
||||||
120
include/ii_exg.h
120
include/ii_exg.h
@@ -1,120 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// exg
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
.text
|
|
||||||
ii_exg_lset:.macro
|
|
||||||
/* ii_lset_dxu c,40 //dx,d0
|
|
||||||
ii_lset_dxu c,41 //dx,d1
|
|
||||||
ii_lset_dxu c,42 //dx,d2
|
|
||||||
ii_lset_dxu c,43 //dx,d3
|
|
||||||
ii_lset_dxu c,44 //dx,d4
|
|
||||||
ii_lset_dxu c,45 //dx,d5
|
|
||||||
ii_lset_dxu c,46 //dx,d6
|
|
||||||
ii_lset_dxu c,47 //dx,d7
|
|
||||||
ii_lset_dxu c,48 //ax,a0
|
|
||||||
ii_lset_dxu c,49 //ax,a1
|
|
||||||
ii_lset_dxu c,4a //ax,a2
|
|
||||||
ii_lset_dxu c,4b //ax,a3
|
|
||||||
ii_lset_dxu c,4c //ax,a4
|
|
||||||
ii_lset_dxu c,4d //ax,a5
|
|
||||||
ii_lset_dxu c,4e //ax,a6
|
|
||||||
ii_lset_dxu c,4f //ax,a7 */ -->setting by "and"
|
|
||||||
ii_lset_dxu c,88 //dx,a0
|
|
||||||
ii_lset_dxu c,89 //dx,a1
|
|
||||||
ii_lset_dxu c,8a //dx,a2
|
|
||||||
ii_lset_dxu c,8b //dx,a3
|
|
||||||
ii_lset_dxu c,8c //dx,a4
|
|
||||||
ii_lset_dxu c,8d //dx,a5
|
|
||||||
ii_lset_dxu c,8e //dx,a6
|
|
||||||
ii_lset_dxu c,8f //dx,a7
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_exg_func:.macro
|
|
||||||
// exg dx,dy
|
|
||||||
ii_exg_dx_dx 14,d0_off(a7)
|
|
||||||
ii_exg_dx_dx 34,d1_off(a7)
|
|
||||||
ii_exg_dx_dx 54,d2
|
|
||||||
ii_exg_dx_dx 74,d3
|
|
||||||
ii_exg_dx_dx 94,d4
|
|
||||||
ii_exg_dx_dx b4,d5
|
|
||||||
ii_exg_dx_dx d4,d6
|
|
||||||
ii_exg_dx_dx f4,d7
|
|
||||||
// exg ax,ay
|
|
||||||
ii_exg_to_ax 14,a0_off(a7)
|
|
||||||
ii_exg_to_ax 34,a1_off(a7)
|
|
||||||
ii_exg_to_ax 54,a2
|
|
||||||
ii_exg_to_ax 74,a3
|
|
||||||
ii_exg_to_ax 94,a4
|
|
||||||
ii_exg_to_ax b4,a5
|
|
||||||
ii_exg_to_ax d4,a6
|
|
||||||
ii_exg_to_ax f4,usp
|
|
||||||
// exg dx,ay
|
|
||||||
ii_exg_to_ax 18,d0_off(a7)
|
|
||||||
ii_exg_to_ax 38,d1_off(a7)
|
|
||||||
ii_exg_to_ax 58,d2
|
|
||||||
ii_exg_to_ax 78,d3
|
|
||||||
ii_exg_to_ax 98,d4
|
|
||||||
ii_exg_to_ax b8,d5
|
|
||||||
ii_exg_to_ax d8,d6
|
|
||||||
ii_exg_to_ax f8,d7
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
exg_macro:.macro
|
|
||||||
#ifdef halten_exg
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
.ifc \2,usp
|
|
||||||
move.l a1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
move.l a1,\1
|
|
||||||
move.l d0,a1
|
|
||||||
.else
|
|
||||||
.ifc \1,usp
|
|
||||||
move.l a1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
move.l a1,\1
|
|
||||||
move.l d0,a1
|
|
||||||
.else
|
|
||||||
move.l \2,\1
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
ii_exg_dx_dx:.macro
|
|
||||||
ii_0xc\10:
|
|
||||||
exg_macro \2,d0_off(a7)
|
|
||||||
ii_0xc\11:
|
|
||||||
exg_macro \2,d1_off(a7)
|
|
||||||
ii_0xc\12:
|
|
||||||
exg_macro \2,d2
|
|
||||||
ii_0xc\13:
|
|
||||||
exg_macro \2,d3
|
|
||||||
ii_0xc\14:
|
|
||||||
exg_macro \2,d4
|
|
||||||
ii_0xc\15:
|
|
||||||
exg_macro \2,d5
|
|
||||||
ii_0xc\16:
|
|
||||||
exg_macro \2,d6
|
|
||||||
ii_0xc\17:
|
|
||||||
exg_macro \2,d7
|
|
||||||
.endm
|
|
||||||
ii_exg_to_ax:.macro
|
|
||||||
ii_0xc\18:
|
|
||||||
exg_macro \2,a0_off(a7)
|
|
||||||
ii_0xc\19:
|
|
||||||
exg_macro \2,a1_off(a7)
|
|
||||||
ii_0xc\1a:
|
|
||||||
exg_macro \2,a2
|
|
||||||
ii_0xc\1b:
|
|
||||||
exg_macro \2,a3
|
|
||||||
ii_0xc\1c:
|
|
||||||
exg_macro \2,a4
|
|
||||||
ii_0xc\1d:
|
|
||||||
exg_macro \2,a5
|
|
||||||
ii_0xc\1e:
|
|
||||||
exg_macro \2,a6
|
|
||||||
ii_0xc\1f:
|
|
||||||
exg_macro \2,usp
|
|
||||||
.endm
|
|
||||||
@@ -1,945 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// functionen macros
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ii_lset_func:.macro
|
|
||||||
/******************************************************/
|
|
||||||
// byt
|
|
||||||
/******************************************************/
|
|
||||||
// func.b dy,dx
|
|
||||||
ii_lset_dx \1,00 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
ii_lset_dx \1,01
|
|
||||||
ii_lset_dx \1,02
|
|
||||||
ii_lset_dx \1,03
|
|
||||||
ii_lset_dx \1,04
|
|
||||||
ii_lset_dx \1,05
|
|
||||||
ii_lset_dx \1,06
|
|
||||||
ii_lset_dx \1,07
|
|
||||||
// func.b ax,dx
|
|
||||||
ii_lset_dxu \1,08
|
|
||||||
ii_lset_dxu \1,09
|
|
||||||
ii_lset_dxu \1,0a
|
|
||||||
ii_lset_dxu \1,0b
|
|
||||||
ii_lset_dxu \1,0c
|
|
||||||
ii_lset_dxu \1,0d
|
|
||||||
ii_lset_dxu \1,0e
|
|
||||||
ii_lset_dxu \1,0f
|
|
||||||
// func.b (ax),dx
|
|
||||||
ii_lset_dx \1,10
|
|
||||||
ii_lset_dx \1,11
|
|
||||||
ii_lset_dx \1,12
|
|
||||||
ii_lset_dx \1,13
|
|
||||||
ii_lset_dx \1,14
|
|
||||||
ii_lset_dx \1,15
|
|
||||||
ii_lset_dx \1,16
|
|
||||||
ii_lset_dx \1,17
|
|
||||||
// func.b (ax)+,dx
|
|
||||||
ii_lset_dx \1,18
|
|
||||||
ii_lset_dx \1,19
|
|
||||||
ii_lset_dx \1,1a
|
|
||||||
ii_lset_dx \1,1b
|
|
||||||
ii_lset_dx \1,1c
|
|
||||||
ii_lset_dx \1,1d
|
|
||||||
ii_lset_dx \1,1e
|
|
||||||
ii_lset_dx \1,1f
|
|
||||||
// func.b -(ax),dx
|
|
||||||
ii_lset_dx \1,20
|
|
||||||
ii_lset_dx \1,21
|
|
||||||
ii_lset_dx \1,22
|
|
||||||
ii_lset_dx \1,23
|
|
||||||
ii_lset_dx \1,24
|
|
||||||
ii_lset_dx \1,25
|
|
||||||
ii_lset_dx \1,26
|
|
||||||
ii_lset_dx \1,27
|
|
||||||
// func.b d16(ax),dx
|
|
||||||
ii_lset_dx \1,28
|
|
||||||
ii_lset_dx \1,29
|
|
||||||
ii_lset_dx \1,2a
|
|
||||||
ii_lset_dx \1,2b
|
|
||||||
ii_lset_dx \1,2c
|
|
||||||
ii_lset_dx \1,2d
|
|
||||||
ii_lset_dx \1,2e
|
|
||||||
ii_lset_dx \1,2f
|
|
||||||
// func.b dd8(ax,dy),dx
|
|
||||||
ii_lset_dx \1,30
|
|
||||||
ii_lset_dx \1,31
|
|
||||||
ii_lset_dx \1,32
|
|
||||||
ii_lset_dx \1,33
|
|
||||||
ii_lset_dx \1,34
|
|
||||||
ii_lset_dx \1,35
|
|
||||||
ii_lset_dx \1,36
|
|
||||||
ii_lset_dx \1,37
|
|
||||||
// func.b xxx.w,dx
|
|
||||||
ii_lset_dx \1,38 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.b xxx.l,dx
|
|
||||||
ii_lset_dx \1,39 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.b d16(pc),dx
|
|
||||||
ii_lset_dxg \1,7a // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.b d8(pc,dy),dx
|
|
||||||
ii_lset_dxg \1,3b // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.b #im,dx
|
|
||||||
ii_lset_dxg \1,3c // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
/******************************************************/
|
|
||||||
// word
|
|
||||||
/******************************************************/
|
|
||||||
// func.w dy,dx
|
|
||||||
ii_lset_dx \1,40 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
ii_lset_dx \1,41
|
|
||||||
ii_lset_dx \1,42
|
|
||||||
ii_lset_dx \1,43
|
|
||||||
ii_lset_dx \1,44
|
|
||||||
ii_lset_dx \1,45
|
|
||||||
ii_lset_dx \1,46
|
|
||||||
ii_lset_dx \1,47
|
|
||||||
// func.w ax,dx
|
|
||||||
ii_lset_dx \1,48
|
|
||||||
ii_lset_dx \1,49
|
|
||||||
ii_lset_dx \1,4a
|
|
||||||
ii_lset_dx \1,4b
|
|
||||||
ii_lset_dx \1,4c
|
|
||||||
ii_lset_dx \1,4d
|
|
||||||
ii_lset_dx \1,4e
|
|
||||||
ii_lset_dx \1,4f
|
|
||||||
// func.w (ax),dx
|
|
||||||
ii_lset_dx \1,50
|
|
||||||
ii_lset_dx \1,51
|
|
||||||
ii_lset_dx \1,52
|
|
||||||
ii_lset_dx \1,53
|
|
||||||
ii_lset_dx \1,54
|
|
||||||
ii_lset_dx \1,55
|
|
||||||
ii_lset_dx \1,56
|
|
||||||
ii_lset_dx \1,57
|
|
||||||
// func.w (ax)+,dx
|
|
||||||
ii_lset_dx \1,58
|
|
||||||
ii_lset_dx \1,59
|
|
||||||
ii_lset_dx \1,5a
|
|
||||||
ii_lset_dx \1,5b
|
|
||||||
ii_lset_dx \1,5c
|
|
||||||
ii_lset_dx \1,5d
|
|
||||||
ii_lset_dx \1,5e
|
|
||||||
ii_lset_dx \1,5f
|
|
||||||
// func.w -(ax),dx
|
|
||||||
ii_lset_dx \1,60
|
|
||||||
ii_lset_dx \1,61
|
|
||||||
ii_lset_dx \1,62
|
|
||||||
ii_lset_dx \1,63
|
|
||||||
ii_lset_dx \1,64
|
|
||||||
ii_lset_dx \1,65
|
|
||||||
ii_lset_dx \1,66
|
|
||||||
ii_lset_dx \1,67
|
|
||||||
// func.w d16(ax),dx
|
|
||||||
ii_lset_dx \1,68
|
|
||||||
ii_lset_dx \1,69
|
|
||||||
ii_lset_dx \1,6a
|
|
||||||
ii_lset_dx \1,6b
|
|
||||||
ii_lset_dx \1,6c
|
|
||||||
ii_lset_dx \1,6d
|
|
||||||
ii_lset_dx \1,6e
|
|
||||||
ii_lset_dx \1,6f
|
|
||||||
// func.w d8(ax,dy),dx
|
|
||||||
ii_lset_dx \1,70
|
|
||||||
ii_lset_dx \1,71
|
|
||||||
ii_lset_dx \1,72
|
|
||||||
ii_lset_dx \1,73
|
|
||||||
ii_lset_dx \1,74
|
|
||||||
ii_lset_dx \1,75
|
|
||||||
ii_lset_dx \1,76
|
|
||||||
ii_lset_dx \1,77
|
|
||||||
// func.w xxx.w,dx
|
|
||||||
ii_lset_dx \1,78 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.w xxx.l,dx
|
|
||||||
ii_lset_dx \1,79 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.w d16(pc),dx
|
|
||||||
ii_lset_dxg \1,7a // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.w d8(pc,dy),dx
|
|
||||||
ii_lset_dxg \1,7b // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
// func.w #im,dx
|
|
||||||
ii_lset_dxg \1,7c // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
/******************************************************/
|
|
||||||
// long
|
|
||||||
/******************************************************/
|
|
||||||
// func.l ax,dx -> -(ay),-(ax)
|
|
||||||
ii_lset_dxu \1,c8
|
|
||||||
ii_lset_dxu \1,c9
|
|
||||||
ii_lset_dxu \1,ca
|
|
||||||
ii_lset_dxu \1,cb
|
|
||||||
ii_lset_dxu \1,cc
|
|
||||||
ii_lset_dxu \1,cd
|
|
||||||
ii_lset_dxu \1,ce
|
|
||||||
ii_lset_dxu \1,cf
|
|
||||||
// func.w d8(ax,dy),dx
|
|
||||||
ii_lset_dx \1,b0
|
|
||||||
ii_lset_dx \1,b1
|
|
||||||
ii_lset_dx \1,b2
|
|
||||||
ii_lset_dx \1,b3
|
|
||||||
ii_lset_dx \1,b4
|
|
||||||
ii_lset_dx \1,b5
|
|
||||||
ii_lset_dx \1,b6
|
|
||||||
ii_lset_dx \1,b7
|
|
||||||
// func.l d8(pc,dy),dx
|
|
||||||
ii_lset_dxg \1,bb // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
/******************************************************/
|
|
||||||
// adress register
|
|
||||||
/******************************************************/
|
|
||||||
//func.w dy,ax
|
|
||||||
ii_lset_dxg \1,c0
|
|
||||||
ii_lset_dxg \1,c1
|
|
||||||
ii_lset_dxg \1,c2
|
|
||||||
ii_lset_dxg \1,c3
|
|
||||||
ii_lset_dxg \1,c4
|
|
||||||
ii_lset_dxg \1,c5
|
|
||||||
ii_lset_dxg \1,c6
|
|
||||||
ii_lset_dxg \1,c7
|
|
||||||
//func.w ay,ax
|
|
||||||
ii_lset_dxg \1,c8
|
|
||||||
ii_lset_dxg \1,c9
|
|
||||||
ii_lset_dxg \1,ca
|
|
||||||
ii_lset_dxg \1,cb
|
|
||||||
ii_lset_dxg \1,cc
|
|
||||||
ii_lset_dxg \1,cd
|
|
||||||
ii_lset_dxg \1,ce
|
|
||||||
ii_lset_dxg \1,cf
|
|
||||||
//func.w (ay),ax
|
|
||||||
ii_lset_dxg \1,d0
|
|
||||||
ii_lset_dxg \1,d1
|
|
||||||
ii_lset_dxg \1,d2
|
|
||||||
ii_lset_dxg \1,d3
|
|
||||||
ii_lset_dxg \1,d4
|
|
||||||
ii_lset_dxg \1,d5
|
|
||||||
ii_lset_dxg \1,d6
|
|
||||||
ii_lset_dxg \1,d7
|
|
||||||
//func.w (ay)+,ax
|
|
||||||
ii_lset_dxg \1,d8
|
|
||||||
ii_lset_dxg \1,d9
|
|
||||||
ii_lset_dxg \1,da
|
|
||||||
ii_lset_dxg \1,db
|
|
||||||
ii_lset_dxg \1,dc
|
|
||||||
ii_lset_dxg \1,dd
|
|
||||||
ii_lset_dxg \1,de
|
|
||||||
ii_lset_dxg \1,df
|
|
||||||
//func.w -(ay),ax
|
|
||||||
ii_lset_dxg \1,e0
|
|
||||||
ii_lset_dxg \1,e1
|
|
||||||
ii_lset_dxg \1,e2
|
|
||||||
ii_lset_dxg \1,e3
|
|
||||||
ii_lset_dxg \1,e4
|
|
||||||
ii_lset_dxg \1,e5
|
|
||||||
ii_lset_dxg \1,e6
|
|
||||||
ii_lset_dxg \1,e7
|
|
||||||
//func.w d16(ay),ax
|
|
||||||
ii_lset_dxg \1,e8
|
|
||||||
ii_lset_dxg \1,e9
|
|
||||||
ii_lset_dxg \1,ea
|
|
||||||
ii_lset_dxg \1,eb
|
|
||||||
ii_lset_dxg \1,ec
|
|
||||||
ii_lset_dxg \1,ed
|
|
||||||
ii_lset_dxg \1,ee
|
|
||||||
ii_lset_dxg \1,ef
|
|
||||||
//func.w d8(ay,dy),ax
|
|
||||||
ii_lset_dxg \1,f0
|
|
||||||
ii_lset_dxg \1,f1
|
|
||||||
ii_lset_dxg \1,f2
|
|
||||||
ii_lset_dxg \1,f3
|
|
||||||
ii_lset_dxg \1,f4
|
|
||||||
ii_lset_dxg \1,f5
|
|
||||||
ii_lset_dxg \1,f6
|
|
||||||
ii_lset_dxg \1,f7
|
|
||||||
// func.w xxx.w,ax
|
|
||||||
ii_lset_dxg \1,f8
|
|
||||||
// func.w xxx.l,ax
|
|
||||||
ii_lset_dxg \1,f9
|
|
||||||
// func.w d16(pc),ax
|
|
||||||
ii_lset_dxg \1,fa
|
|
||||||
// func.w d8(pc,dy),ax
|
|
||||||
ii_lset_dxg \1,fb
|
|
||||||
// func.w #im,ax
|
|
||||||
ii_lset_dxg \1,fc
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// ende
|
|
||||||
.endm;
|
|
||||||
/*****************************************************************************************/
|
|
||||||
ii_func:.macro
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// byt
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
///--------------------------------------------------------------------
|
|
||||||
// func.b ds,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,00,\2dd,d0_off+3(a7)
|
|
||||||
funcbeadx \1,01,\2dd,d1_off+3(a7)
|
|
||||||
funcbeadx \1,02,\2dd,d2
|
|
||||||
funcbeadx \1,03,\2dd,d3
|
|
||||||
funcbeadx \1,04,\2dd,d4
|
|
||||||
funcbeadx \1,05,\2dd,d5
|
|
||||||
funcbeadx \1,06,\2dd,d6
|
|
||||||
funcbeadx \1,07,\2dd,d7
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b (ax),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,10,\2dda,a0_off(a7)
|
|
||||||
funcbeadx \1,11,\2dda,a1_off(a7)
|
|
||||||
funcbeadx \1,12,\2dd,(a2)
|
|
||||||
funcbeadx \1,13,\2dd,(a3)
|
|
||||||
funcbeadx \1,14,\2dd,(a4)
|
|
||||||
funcbeadx \1,15,\2dd,(a5)
|
|
||||||
funcbeadx \1,16,\2dd,(a6)
|
|
||||||
funcbeadx \1,17,\2dda,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b (ax)+,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,18,\2ddai,a0_off(a7)
|
|
||||||
funcbeadx \1,19,\2ddai,a1_off(a7)
|
|
||||||
funcbeadx \1,1a,\2dd,(a2)+
|
|
||||||
funcbeadx \1,1b,\2dd,(a3)+
|
|
||||||
funcbeadx \1,1c,\2dd,(a4)+
|
|
||||||
funcbeadx \1,1d,\2dd,(a5)+
|
|
||||||
funcbeadx \1,1e,\2dd,(a6)+
|
|
||||||
funcbeadx \1,1f,\2ddai,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b -(ax),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,20,\2ddad,a0_off(a7)
|
|
||||||
funcbeadx \1,21,\2ddad,a1_off(a7)
|
|
||||||
funcbeadx \1,22,\2dd,-(a2)
|
|
||||||
funcbeadx \1,23,\2dd,-(a3)
|
|
||||||
funcbeadx \1,24,\2dd,-(a4)
|
|
||||||
funcbeadx \1,25,\2dd,-(a5)
|
|
||||||
funcbeadx \1,26,\2dd,-(a6)
|
|
||||||
funcbeadx \1,27,\2ddad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b d16(ax),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,28,\2d16ad,a0_off(a7)
|
|
||||||
funcbeadx \1,29,\2d16ad,a1_off(a7)
|
|
||||||
funcbeadx \1,2a,\2d16ad,a2
|
|
||||||
funcbeadx \1,2b,\2d16ad,a3
|
|
||||||
funcbeadx \1,2c,\2d16ad,a4
|
|
||||||
funcbeadx \1,2d,\2d16ad,a5
|
|
||||||
funcbeadx \1,2e,\2d16ad,a6
|
|
||||||
funcbeadx \1,2f,\2d16ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b d8(ax,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,30,\2d8ad,a0_off(a7)
|
|
||||||
funcbeadx \1,31,\2d8ad,a1_off(a7)
|
|
||||||
funcbeadx \1,32,\2d8ad,a2
|
|
||||||
funcbeadx \1,33,\2d8ad,a3
|
|
||||||
funcbeadx \1,34,\2d8ad,a4
|
|
||||||
funcbeadx \1,35,\2d8ad,a5
|
|
||||||
funcbeadx \1,36,\2d8ad,a6
|
|
||||||
funcbeadx \1,37,\2d8ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,38,\2xwd,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,39,\2xld,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b d16(pc),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,3a,\2d16pcd,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b d8(pc,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,3b,\2d8pcd,(a0)+ (a0 wird nicht verwendet)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b #im,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbeadx \1,3c,\2bir_macro,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b dy,ea
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
///--------------------------------------------------------------------
|
|
||||||
// func.b dx,dd -> addx subx etc. src und dest vertauscht!
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbdxea \1,00,\2dx,d0_off+3(a7)
|
|
||||||
funcbdxea \1,01,\2dx,d1_off+3(a7)
|
|
||||||
funcbdxea \1,02,\2dx,d2
|
|
||||||
funcbdxea \1,03,\2dx,d3
|
|
||||||
funcbdxea \1,04,\2dx,d4
|
|
||||||
funcbdxea \1,05,\2dx,d5
|
|
||||||
funcbdxea \1,06,\2dx,d6
|
|
||||||
funcbdxea \1,07,\2dx,d7
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b -(ax),-(ay) addx subx etc. src und dest vertauscht!
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcaxay \1,08,\2dax,a0_off(a7),b
|
|
||||||
funcaxay \1,09,\2dax,a1_off(a7).b
|
|
||||||
funcaxay \1,0a,\2dax,a2,b
|
|
||||||
funcaxay \1,0b,\2dax,a3,b
|
|
||||||
funcaxay \1,0c,\2dax,a4,b
|
|
||||||
funcaxay \1,0d,\2dax,a5,b
|
|
||||||
funcaxay \1,0e,\2dax,a6,b
|
|
||||||
funcaxay \1,0f,\2dax,usp,b
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b dy,(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbdxea \1,10,\2eda,a0_off(a7)
|
|
||||||
funcbdxea \1,11,\2eda,a1_off(a7)
|
|
||||||
funcbdxea \1,12,\2dd,(a2)
|
|
||||||
funcbdxea \1,13,\2dd,(a3)
|
|
||||||
funcbdxea \1,14,\2dd,(a4)
|
|
||||||
funcbdxea \1,15,\2dd,(a5)
|
|
||||||
funcbdxea \1,16,\2dd,(a6)
|
|
||||||
funcbdxea \1,17,\2eda,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b dy,(ax)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbdxea \1,18,\2edai,a0_off(a7)
|
|
||||||
funcbdxea \1,19,\2edai,a1_off(a7)
|
|
||||||
funcbdxea \1,1a,\2edaid,(a2)
|
|
||||||
funcbdxea \1,1b,\2edaid,(a3)
|
|
||||||
funcbdxea \1,1c,\2edaid,(a4)
|
|
||||||
funcbdxea \1,1d,\2edaid,(a5)
|
|
||||||
funcbdxea \1,1e,\2edaid,(a6)
|
|
||||||
funcbdxea \1,1f,\2edai,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b dy,-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbdxea \1,20,\2edad,a0_off(a7)
|
|
||||||
funcbdxea \1,21,\2edad,a1_off(a7)
|
|
||||||
funcbdxea \1,22,\2edadd,(a2)
|
|
||||||
funcbdxea \1,23,\2edadd,(a3)
|
|
||||||
funcbdxea \1,24,\2edadd,(a4)
|
|
||||||
funcbdxea \1,25,\2edadd,(a5)
|
|
||||||
funcbdxea \1,26,\2edadd,(a6)
|
|
||||||
funcbdxea \1,27,\2edad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b dy,d16(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbdxea \1,28,\2e16ad,a0_off(a7)
|
|
||||||
funcbdxea \1,29,\2e16ad,a1_off(a7)
|
|
||||||
funcbdxea \1,2a,\2e16ad,a2
|
|
||||||
funcbdxea \1,2b,\2e16ad,a3
|
|
||||||
funcbdxea \1,2c,\2e16ad,a4
|
|
||||||
funcbdxea \1,2d,\2e16ad,a5
|
|
||||||
funcbdxea \1,2e,\2e16ad,a6
|
|
||||||
funcbdxea \1,2f,\2e16ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.b dy,d8(ax,dy)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcbdxea \1,30,\2e8ad,a0_off(a7)
|
|
||||||
funcbdxea \1,31,\2e8ad,a1_off(a7)
|
|
||||||
funcbdxea \1,32,\2e8ad,a2
|
|
||||||
funcbdxea \1,33,\2e8ad,a3
|
|
||||||
funcbdxea \1,34,\2e8ad,a4
|
|
||||||
funcbdxea \1,35,\2e8ad,a5
|
|
||||||
funcbdxea \1,36,\2e8ad,a6
|
|
||||||
funcbdxea \1,37,\2e8ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,38,\2xwe,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,39,\2xld,(a0)+
|
|
||||||
/*****************************************************************************************/
|
|
||||||
// word
|
|
||||||
/*****************************************************************************************/
|
|
||||||
// func.w ds,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,40,\2dd,d0_off+2(a7)
|
|
||||||
funcweadx \1,41,\2dd,d1_off+2(a7)
|
|
||||||
funcweadx \1,42,\2dd,d2
|
|
||||||
funcweadx \1,43,\2dd,d3
|
|
||||||
funcweadx \1,44,\2dd,d4
|
|
||||||
funcweadx \1,45,\2dd,d5
|
|
||||||
funcweadx \1,46,\2dd,d6
|
|
||||||
funcweadx \1,47,\2dd,d7
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w ax,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,48,\2dd,a0_off+2(a7)
|
|
||||||
funcweadx \1,49,\2dd,a1_off+2(a7)
|
|
||||||
funcweadx \1,4a,\2dd,a2
|
|
||||||
funcweadx \1,4b,\2dd,a3
|
|
||||||
funcweadx \1,4c,\2dd,a4
|
|
||||||
funcweadx \1,4d,\2dd,a5
|
|
||||||
funcweadx \1,4e,\2dd,a6
|
|
||||||
funcweadx \1,4f,\2ddd,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w (ax),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,50,\2dda,a0_off(a7)
|
|
||||||
funcweadx \1,51,\2dda,a1_off(a7)
|
|
||||||
funcweadx \1,52,\2dd,(a2)
|
|
||||||
funcweadx \1,53,\2dd,(a3)
|
|
||||||
funcweadx \1,54,\2dd,(a4)
|
|
||||||
funcweadx \1,55,\2dd,(a5)
|
|
||||||
funcweadx \1,56,\2dd,(a6)
|
|
||||||
funcweadx \1,57,\2dda,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w (ax)+,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,58,\2ddai,a0_off(a7)
|
|
||||||
funcweadx \1,59,\2ddai,a1_off(a7)
|
|
||||||
funcweadx \1,5a,\2dd,(a2)+
|
|
||||||
funcweadx \1,5b,\2dd,(a3)+
|
|
||||||
funcweadx \1,5c,\2dd,(a4)+
|
|
||||||
funcweadx \1,5d,\2dd,(a5)+
|
|
||||||
funcweadx \1,5e,\2dd,(a6)+
|
|
||||||
funcweadx \1,5f,\2ddai,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w -(ax),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,60,\2ddad,a0_off(a7)
|
|
||||||
funcweadx \1,61,\2ddad,a1_off(a7)
|
|
||||||
funcweadx \1,62,\2dd,-(a2)
|
|
||||||
funcweadx \1,63,\2dd,-(a3)
|
|
||||||
funcweadx \1,64,\2dd,-(a4)
|
|
||||||
funcweadx \1,65,\2dd,-(a5)
|
|
||||||
funcweadx \1,66,\2dd,-(a6)
|
|
||||||
funcweadx \1,67,\2ddad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d16(ax),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,68,\2d16ad,a0_off(a7)
|
|
||||||
funcweadx \1,69,\2d16ad,a1_off(a7)
|
|
||||||
funcweadx \1,6a,\2d16ad,a2
|
|
||||||
funcweadx \1,6b,\2d16ad,a3
|
|
||||||
funcweadx \1,6c,\2d16ad,a4
|
|
||||||
funcweadx \1,6d,\2d16ad,a5
|
|
||||||
funcweadx \1,6e,\2d16ad,a6
|
|
||||||
funcweadx \1,6f,\2d16ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d8(ax,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,70,\2d8ad,a0_off(a7)
|
|
||||||
funcweadx \1,71,\2d8ad,a1_off(a7)
|
|
||||||
funcweadx \1,72,\2d8ad,a2
|
|
||||||
funcweadx \1,73,\2d8ad,a3
|
|
||||||
funcweadx \1,74,\2d8ad,a4
|
|
||||||
funcweadx \1,75,\2d8ad,a5
|
|
||||||
funcweadx \1,76,\2d8ad,a6
|
|
||||||
funcweadx \1,77,\2d8ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,78,\2xwd,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,79,\2xld,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d16(pc),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,7a,\2d16pcd,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d8(pc,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,7b,\2d8pcd,(a0)+ (a0 wird nicht verwendet)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w #im,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweadx \1,7c,\2dd,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,ea
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
///--------------------------------------------------------------------
|
|
||||||
// func.w dx,dd -> addx subx etc.
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
.ifnc \2,and //platz f<>r exg
|
|
||||||
funcwdxea \1,40,\2dx,d0_off+2(a7)
|
|
||||||
funcwdxea \1,41,\2dx,d1_off+2(a7)
|
|
||||||
funcwdxea \1,42,\2dx,d2
|
|
||||||
funcwdxea \1,43,\2dx,d3
|
|
||||||
funcwdxea \1,44,\2dx,d4
|
|
||||||
funcwdxea \1,45,\2dx,d5
|
|
||||||
funcwdxea \1,46,\2dx,d6
|
|
||||||
funcwdxea \1,47,\2dx,d7
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w -(ax),-(ay) -> addx,subx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcaxay \1,48,\2dax,a0_off(a7),w
|
|
||||||
funcaxay \1,49,\2dax,a1_off(a7).w
|
|
||||||
funcaxay \1,4a,\2dax,a2,w
|
|
||||||
funcaxay \1,4b,\2dax,a3,w
|
|
||||||
funcaxay \1,4c,\2dax,a4,w
|
|
||||||
funcaxay \1,4d,\2dax,a5,w
|
|
||||||
funcaxay \1,4e,\2dax,a6,w
|
|
||||||
funcaxay \1,4f,\2dax,usp,w
|
|
||||||
.endif
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,50,\2eda,a0_off(a7)
|
|
||||||
funcwdxea \1,51,\2eda,a1_off(a7)
|
|
||||||
funcwdxea \1,52,\2dd,(a2)
|
|
||||||
funcwdxea \1,53,\2dd,(a3)
|
|
||||||
funcwdxea \1,54,\2dd,(a4)
|
|
||||||
funcwdxea \1,55,\2dd,(a5)
|
|
||||||
funcwdxea \1,56,\2dd,(a6)
|
|
||||||
funcwdxea \1,57,\2eda,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,(ax)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,58,\2edai,a0_off(a7)
|
|
||||||
funcwdxea \1,59,\2edai,a1_off(a7)
|
|
||||||
funcwdxea \1,5a,\2edaid,(a2)
|
|
||||||
funcwdxea \1,5b,\2edaid,(a3)
|
|
||||||
funcwdxea \1,5c,\2edaid,(a4)
|
|
||||||
funcwdxea \1,5d,\2edaid,(a5)
|
|
||||||
funcwdxea \1,5e,\2edaid,(a6)
|
|
||||||
funcwdxea \1,5f,\2edai,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,60,\2edad,a0_off(a7)
|
|
||||||
funcwdxea \1,61,\2edad,a1_off(a7)
|
|
||||||
funcwdxea \1,62,\2edadd,(a2)
|
|
||||||
funcwdxea \1,63,\2edadd,(a3)
|
|
||||||
funcwdxea \1,64,\2edadd,(a4)
|
|
||||||
funcwdxea \1,65,\2edadd,(a5)
|
|
||||||
funcwdxea \1,66,\2edadd,(a6)
|
|
||||||
funcwdxea \1,67,\2edad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,d16(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,68,\2e16ad,a0_off(a7)
|
|
||||||
funcwdxea \1,69,\2e16ad,a1_off(a7)
|
|
||||||
funcwdxea \1,6a,\2e16ad,a2
|
|
||||||
funcwdxea \1,6b,\2e16ad,a3
|
|
||||||
funcwdxea \1,6c,\2e16ad,a4
|
|
||||||
funcwdxea \1,6d,\2e16ad,a5
|
|
||||||
funcwdxea \1,6e,\2e16ad,a6
|
|
||||||
funcwdxea \1,6f,\2e16ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,d8(ax,dy)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,70,\2e8ad,a0_off(a7)
|
|
||||||
funcwdxea \1,71,\2e8ad,a1_off(a7)
|
|
||||||
funcwdxea \1,72,\2e8ad,a2
|
|
||||||
funcwdxea \1,73,\2e8ad,a3
|
|
||||||
funcwdxea \1,74,\2e8ad,a4
|
|
||||||
funcwdxea \1,75,\2e8ad,a5
|
|
||||||
funcwdxea \1,76,\2e8ad,a6
|
|
||||||
funcwdxea \1,77,\2e8ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,78,\2xwe,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dy,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcwdxea \1,79,\2xld,(a0)+
|
|
||||||
/*****************************************************************************************/
|
|
||||||
// long
|
|
||||||
/*****************************************************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.l -(ax),-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcaxay \1,c8,\2dax,a0_off(a7),l
|
|
||||||
funcaxay \1,c9,\2dax,a1_off(a7).l
|
|
||||||
funcaxay \1,ca,\2dax,a2,l
|
|
||||||
funcaxay \1,cb,\2dax,a3,l
|
|
||||||
funcaxay \1,cc,\2dax,a4,l
|
|
||||||
funcaxay \1,cd,\2dax,a5,l
|
|
||||||
funcaxay \1,ce,\2dax,a6,l
|
|
||||||
funcaxay \1,cf,\2dax,usp,l
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.l d8(ax,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcleadx \1,b0,\2d8ad,a0_off(a7)
|
|
||||||
funcleadx \1,b1,\2d8ad,a1_off(a7)
|
|
||||||
funcleadx \1,b2,\2d8ad,a2
|
|
||||||
funcleadx \1,b3,\2d8ad,a3
|
|
||||||
funcleadx \1,b4,\2d8ad,a4
|
|
||||||
funcleadx \1,b5,\2d8ad,a5
|
|
||||||
funcleadx \1,b6,\2d8ad,a6
|
|
||||||
funcleadx \1,b7,\2d8ad,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.l d8(pc,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcleadx \1,bb,\2d8pcd,(a0)+ (a0 wird nicht verwendet)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.l dy,d8(ax,dy)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcldxea \1,b0,\2e8ad,a0_off(a7)
|
|
||||||
funcldxea \1,b1,\2e8ad,a1_off(a7)
|
|
||||||
funcldxea \1,b2,\2e8ad,a2
|
|
||||||
funcldxea \1,b3,\2e8ad,a3
|
|
||||||
funcldxea \1,b4,\2e8ad,a4
|
|
||||||
funcldxea \1,b5,\2e8ad,a5
|
|
||||||
funcldxea \1,b6,\2e8ad,a6
|
|
||||||
funcldxea \1,b7,\2e8ad,usp
|
|
||||||
/******************************************************/
|
|
||||||
// adress register
|
|
||||||
/******************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w ea,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w dx,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaax \1,c0,\2aw,d0
|
|
||||||
funcweaax \1,c1,\2aw,d1
|
|
||||||
funcweaax \1,c2,\2aw,d2
|
|
||||||
funcweaax \1,c3,\2aw,d3
|
|
||||||
funcweaax \1,c4,\2aw,d4
|
|
||||||
funcweaax \1,c5,\2aw,d5
|
|
||||||
funcweaax \1,c6,\2aw,d6
|
|
||||||
funcweaax \1,c7,\2aw,d7
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w ay,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaax \1,c8,\2aw,a0
|
|
||||||
funcweaax \1,c9,\2aw,a1
|
|
||||||
funcweaax \1,ca,\2aw,a2
|
|
||||||
funcweaax \1,cb,\2aw,a3
|
|
||||||
funcweaax \1,cc,\2aw,a4
|
|
||||||
funcweaax \1,cd,\2aw,a5
|
|
||||||
funcweaax \1,ce,\2aw,a6
|
|
||||||
funcweaax \1,cf,\2awu,a7
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w (ay),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaax \1,d0,\2aw,(a0)
|
|
||||||
funcweaax \1,d1,\2aw,(a1)
|
|
||||||
funcweaax \1,d2,\2aw,(a2)
|
|
||||||
funcweaax \1,d3,\2aw,(a3)
|
|
||||||
funcweaax \1,d4,\2aw,(a4)
|
|
||||||
funcweaax \1,d5,\2aw,(a5)
|
|
||||||
funcweaax \1,d6,\2aw,(a6)
|
|
||||||
funcweaax \1,d7,\2awu,(a7)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w (ay)+,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaax \1,d8,\2aw,(a0)+
|
|
||||||
funcweaax \1,d9,\2aw,(a1)+
|
|
||||||
funcweaax \1,da,\2aw,(a2)+
|
|
||||||
funcweaax \1,db,\2aw,(a3)+
|
|
||||||
funcweaax \1,dc,\2aw,(a4)+
|
|
||||||
funcweaax \1,dd,\2aw,(a5)+
|
|
||||||
funcweaax \1,de,\2aw,(a6)+
|
|
||||||
funcweaax \1,df,\2awu,(a7)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w -(ay),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaax \1,e0,\2aw,-(a0)
|
|
||||||
funcweaax \1,e1,\2aw,-(a1)
|
|
||||||
funcweaax \1,e2,\2aw,-(a2)
|
|
||||||
funcweaax \1,e3,\2aw,-(a3)
|
|
||||||
funcweaax \1,e4,\2aw,-(a4)
|
|
||||||
funcweaax \1,e5,\2aw,-(a5)
|
|
||||||
funcweaax \1,e6,\2aw,-(a6)
|
|
||||||
funcweaax \1,e7,\2awu,-(a7)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d16(ay),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaaxn \1,e8,\2awd16a,a0_off(a7)
|
|
||||||
funcweaaxn \1,e9,\2awd16a,a1_off(a7)
|
|
||||||
funcweaaxn \1,ea,\2awd16a,a2
|
|
||||||
funcweaaxn \1,eb,\2awd16a,a3
|
|
||||||
funcweaaxn \1,ec,\2awd16a,a4
|
|
||||||
funcweaaxn \1,ed,\2awd16a,a5
|
|
||||||
funcweaaxn \1,ee,\2awd16a,a6
|
|
||||||
funcweaaxn \1,ef,\2awd16a,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaaxn \1,f0,\2awd8a,a0_off(a7)
|
|
||||||
funcweaaxn \1,f1,\2awd8a,a1_off(a7)
|
|
||||||
funcweaaxn \1,f2,\2awd8a,a2
|
|
||||||
funcweaaxn \1,f3,\2awd8a,a3
|
|
||||||
funcweaaxn \1,f4,\2awd8a,a4
|
|
||||||
funcweaaxn \1,f5,\2awd8a,a5
|
|
||||||
funcweaaxn \1,f6,\2awd8a,a6
|
|
||||||
funcweaaxn \1,f7,\2awd8a,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w xxx.w,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaaxn \1,f8,\2awxwax,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w xxxlw,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaaxn \1,f9,\2awxlax,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d16(pc),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaaxn \1,fa,\2awd16pcax,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaaxn \1,fb,\2awd8pcax,(a0)+ //(a0 wird nicht verwendet)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// func.w #im,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
funcweaaxn \1,fc,\2awim,(a0)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// ende
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// byt
|
|
||||||
funcbeadx:.macro // function byt: im,dx
|
|
||||||
ii_0x\10\2:
|
|
||||||
\3 \4,d0_off+3(a7),b
|
|
||||||
ii_0x\12\2:
|
|
||||||
\3 \4,d1_off+3(a7),b
|
|
||||||
ii_0x\14\2:
|
|
||||||
\3 \4,d2,b
|
|
||||||
ii_0x\16\2:
|
|
||||||
\3 \4,d3,b
|
|
||||||
ii_0x\18\2:
|
|
||||||
\3 \4,d4,b
|
|
||||||
ii_0x\1a\2:
|
|
||||||
\3 \4,d5,b
|
|
||||||
ii_0x\1c\2:
|
|
||||||
\3 \4,d6,b
|
|
||||||
ii_0x\1e\2:
|
|
||||||
\3 \4,d7,b
|
|
||||||
.endm;
|
|
||||||
funcbdxea:.macro // ea(\4) function(\3) dx -> ea
|
|
||||||
ii_0x\11\2:
|
|
||||||
\3 d0_off+3(a7),\4,b
|
|
||||||
ii_0x\13\2:
|
|
||||||
\3 d1_off+3(a7),\4,b
|
|
||||||
ii_0x\15\2:
|
|
||||||
\3 d2,\4,b
|
|
||||||
ii_0x\17\2:
|
|
||||||
\3 d3,\4,b
|
|
||||||
ii_0x\19\2:
|
|
||||||
\3 d4,\4,b
|
|
||||||
ii_0x\1b\2:
|
|
||||||
\3 d5,\4,b
|
|
||||||
ii_0x\1d\2:
|
|
||||||
\3 d6,\4,b
|
|
||||||
ii_0x\1f\2:
|
|
||||||
\3 d7,\4,b
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// word
|
|
||||||
funcweadx:.macro // dx function(\3) ea(\4) -> dx
|
|
||||||
ii_0x\10\2:
|
|
||||||
\3 \4,d0_off+2(a7),w
|
|
||||||
ii_0x\12\2:
|
|
||||||
\3 \4,d1_off+2(a7),w
|
|
||||||
ii_0x\14\2:
|
|
||||||
\3 \4,d2,w
|
|
||||||
ii_0x\16\2:
|
|
||||||
\3 \4,d3,w
|
|
||||||
ii_0x\18\2:
|
|
||||||
\3 \4,d4,w
|
|
||||||
ii_0x\1a\2:
|
|
||||||
\3 \4,d5,w
|
|
||||||
ii_0x\1c\2:
|
|
||||||
\3 \4,d6,w
|
|
||||||
ii_0x\1e\2:
|
|
||||||
\3 \4,d7,w
|
|
||||||
.endm;
|
|
||||||
funcwdxea:.macro // ea(\4) function(\3) dx -> ea
|
|
||||||
ii_0x\11\2:
|
|
||||||
\3 d0_off+2(a7),\4,w
|
|
||||||
ii_0x\13\2:
|
|
||||||
\3 d1_off+2(a7),\4,w
|
|
||||||
ii_0x\15\2:
|
|
||||||
\3 d2,\4,w
|
|
||||||
ii_0x\17\2:
|
|
||||||
\3 d3,\4,w
|
|
||||||
ii_0x\19\2:
|
|
||||||
\3 d4,\4,w
|
|
||||||
ii_0x\1b\2:
|
|
||||||
\3 d5,\4,w
|
|
||||||
ii_0x\1d\2:
|
|
||||||
\3 d6,\4,w
|
|
||||||
ii_0x\1f\2:
|
|
||||||
\3 d7,\4,w
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// long
|
|
||||||
funcleadx:.macro // dx function(\3) ea(\4) -> dx
|
|
||||||
ii_0x\10\2:
|
|
||||||
\3 \4,d0_off(a7),w
|
|
||||||
ii_0x\12\2:
|
|
||||||
\3 \4,d1_off(a7),w
|
|
||||||
ii_0x\14\2:
|
|
||||||
\3 \4,d2,w
|
|
||||||
ii_0x\16\2:
|
|
||||||
\3 \4,d3,w
|
|
||||||
ii_0x\18\2:
|
|
||||||
\3 \4,d4,w
|
|
||||||
ii_0x\1a\2:
|
|
||||||
\3 \4,d5,w
|
|
||||||
ii_0x\1c\2:
|
|
||||||
\3 \4,d6,w
|
|
||||||
ii_0x\1e\2:
|
|
||||||
\3 \4,d7,w
|
|
||||||
.endm;
|
|
||||||
funcldxea:.macro // ea(\4) function(\3) dx -> ea
|
|
||||||
ii_0x\11\2:
|
|
||||||
\3 d0_off(a7),\4,w
|
|
||||||
ii_0x\13\2:
|
|
||||||
\3 d1_off(a7),\4,w
|
|
||||||
ii_0x\15\2:
|
|
||||||
\3 d2,\4,w
|
|
||||||
ii_0x\17\2:
|
|
||||||
\3 d3,\4,w
|
|
||||||
ii_0x\19\2:
|
|
||||||
\3 d4,\4,w
|
|
||||||
ii_0x\1b\2:
|
|
||||||
\3 d5,\4,w
|
|
||||||
ii_0x\1d\2:
|
|
||||||
\3 d6,\4,w
|
|
||||||
ii_0x\1f\2:
|
|
||||||
\3 d7,\4,w
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
// address
|
|
||||||
funcweaax:.macro // ax function(\3) ea(\4)(ext long!) -> ax
|
|
||||||
ii_0x\10\2:
|
|
||||||
\3 \4,a0
|
|
||||||
ii_0x\12\2:
|
|
||||||
\3 \4,a1
|
|
||||||
ii_0x\14\2:
|
|
||||||
\3 \4,a2
|
|
||||||
ii_0x\16\2:
|
|
||||||
\3 \4,a3
|
|
||||||
ii_0x\18\2:
|
|
||||||
\3 \4,a4
|
|
||||||
ii_0x\1a\2:
|
|
||||||
\3 \4,a5
|
|
||||||
ii_0x\1c\2:
|
|
||||||
\3 \4,a6
|
|
||||||
ii_0x\1e\2:
|
|
||||||
\3a7 \4,a7 // "a7" beachten wegen usp
|
|
||||||
.endm;
|
|
||||||
funcweaaxn:.macro // ax function(\3) ea(\4)(ext long!) -> ax
|
|
||||||
ii_0x\10\2:
|
|
||||||
\3 \4,a0_off(a7)
|
|
||||||
ii_0x\12\2:
|
|
||||||
\3 \4,a1_off(a7)
|
|
||||||
ii_0x\14\2:
|
|
||||||
\3 \4,a2
|
|
||||||
ii_0x\16\2:
|
|
||||||
\3 \4,a3
|
|
||||||
ii_0x\18\2:
|
|
||||||
\3 \4,a4
|
|
||||||
ii_0x\1a\2:
|
|
||||||
\3 \4,a5
|
|
||||||
ii_0x\1c\2:
|
|
||||||
\3 \4,a6
|
|
||||||
ii_0x\1e\2:
|
|
||||||
\3 \4,usp
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
// byt, word, long
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
funcaxay:.macro // ea(\4) function(\3) dx -> ea,\5 = size
|
|
||||||
ii_0x\11\2:
|
|
||||||
\3 a0_off(a7),\4,\5
|
|
||||||
ii_0x\13\2:
|
|
||||||
\3 a1_off(a7),\4,\5
|
|
||||||
ii_0x\15\2:
|
|
||||||
\3 a2,\4,\5
|
|
||||||
ii_0x\17\2:
|
|
||||||
\3 a3,\4,\5
|
|
||||||
ii_0x\19\2:
|
|
||||||
\3 a4,\4,\5
|
|
||||||
ii_0x\1b\2:
|
|
||||||
\3 a5,\4,\5
|
|
||||||
ii_0x\1d\2:
|
|
||||||
\3 a6,\4,\5
|
|
||||||
ii_0x\1f\2:
|
|
||||||
\3 usp,\4,\5
|
|
||||||
.endm;
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// extension word format missing
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ii_\1_func:.macro
|
|
||||||
ii_0x\20:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0_off(a7),a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\21:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a1_off(a7),a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\22:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a2,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\23:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a3,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\24:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a4,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\25:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a5,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\26:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a6,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\27:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l usp,a1
|
|
||||||
\1_macro
|
|
||||||
ii_0x\2b:
|
|
||||||
#ifdef halten_\1
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
\1_macro
|
|
||||||
.endm
|
|
||||||
105
include/ii_lea.h
105
include/ii_lea.h
@@ -1,105 +0,0 @@
|
|||||||
//-------------------------------------------------------------------
|
|
||||||
// lea
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
.text
|
|
||||||
ii_lea_lset:.macro
|
|
||||||
ii_lset_dxu 4,f0 // lea d8(a0,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,f1 // lea d8(a1,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,f2 // lea d8(a2,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,f3 // lea d8(a3,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,f4 // lea d8(a4,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,f5 // lea d8(a5,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,f6 // lea d8(a6,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,f7 // lea d8(a7,dy.w),a0-a7
|
|
||||||
ii_lset_dxu 4,fb // lea d8(pc,dy.w),a0-a7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// function
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_lea_sub:.macro
|
|
||||||
ii_0x4\1\2:
|
|
||||||
#ifdef halten_lea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \4,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l a1,\3
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
ii_lea_func:.macro
|
|
||||||
//lea d8(ax,dy.w),a0-a7
|
|
||||||
ii_lea_sub 1,f0,a0_off(a7),a0_off(a7)
|
|
||||||
ii_lea_sub 1,f1,a0_off(a7),a1_off(a7)
|
|
||||||
ii_lea_sub 1,f2,a0_off(a7),a2
|
|
||||||
ii_lea_sub 1,f3,a0_off(a7),a3
|
|
||||||
ii_lea_sub 1,f4,a0_off(a7),a4
|
|
||||||
ii_lea_sub 1,f5,a0_off(a7),a5
|
|
||||||
ii_lea_sub 1,f6,a0_off(a7),a6
|
|
||||||
ii_lea_sub 1,f7,a0_off(a7),usp
|
|
||||||
ii_lea_sub 3,f0,a1_off(a7),a0_off(a7)
|
|
||||||
ii_lea_sub 3,f1,a1_off(a7),a1_off(a7)
|
|
||||||
ii_lea_sub 3,f2,a1_off(a7),a2
|
|
||||||
ii_lea_sub 3,f3,a1_off(a7),a3
|
|
||||||
ii_lea_sub 3,f4,a1_off(a7),a4
|
|
||||||
ii_lea_sub 3,f5,a1_off(a7),a5
|
|
||||||
ii_lea_sub 3,f6,a1_off(a7),a6
|
|
||||||
ii_lea_sub 3,f7,a1_off(a7),usp
|
|
||||||
ii_lea_sub 5,f0,a2,a0_off(a7)
|
|
||||||
ii_lea_sub 5,f1,a2,a1_off(a7)
|
|
||||||
ii_lea_sub 5,f2,a2,a2
|
|
||||||
ii_lea_sub 5,f3,a2,a3
|
|
||||||
ii_lea_sub 5,f4,a2,a4
|
|
||||||
ii_lea_sub 5,f5,a2,a5
|
|
||||||
ii_lea_sub 5,f6,a2,a6
|
|
||||||
ii_lea_sub 5,f7,a2,usp
|
|
||||||
ii_lea_sub 7,f0,a3,a0_off(a7)
|
|
||||||
ii_lea_sub 7,f1,a3,a1_off(a7)
|
|
||||||
ii_lea_sub 7,f2,a3,a2
|
|
||||||
ii_lea_sub 7,f3,a3,a3
|
|
||||||
ii_lea_sub 7,f4,a3,a4
|
|
||||||
ii_lea_sub 7,f5,a3,a5
|
|
||||||
ii_lea_sub 7,f6,a3,a6
|
|
||||||
ii_lea_sub 7,f7,a3,usp
|
|
||||||
ii_lea_sub 9,f0,a4,a0_off(a7)
|
|
||||||
ii_lea_sub 9,f1,a4,a1_off(a7)
|
|
||||||
ii_lea_sub 9,f2,a4,a2
|
|
||||||
ii_lea_sub 9,f3,a4,a3
|
|
||||||
ii_lea_sub 9,f4,a4,a4
|
|
||||||
ii_lea_sub 9,f5,a4,a5
|
|
||||||
ii_lea_sub 9,f6,a4,a6
|
|
||||||
ii_lea_sub 9,f7,a4,usp
|
|
||||||
ii_lea_sub b,f0,a5,a0_off(a7)
|
|
||||||
ii_lea_sub b,f1,a5,a1_off(a7)
|
|
||||||
ii_lea_sub b,f2,a5,a2
|
|
||||||
ii_lea_sub b,f3,a5,a3
|
|
||||||
ii_lea_sub b,f4,a5,a4
|
|
||||||
ii_lea_sub b,f5,a5,a5
|
|
||||||
ii_lea_sub b,f6,a5,a6
|
|
||||||
ii_lea_sub b,f7,a6,usp
|
|
||||||
ii_lea_sub d,f0,a6,a0_off(a7)
|
|
||||||
ii_lea_sub d,f1,a6,a1_off(a7)
|
|
||||||
ii_lea_sub d,f2,a6,a2
|
|
||||||
ii_lea_sub d,f3,a6,a3
|
|
||||||
ii_lea_sub d,f4,a6,a4
|
|
||||||
ii_lea_sub d,f5,a6,a5
|
|
||||||
ii_lea_sub d,f6,a6,a6
|
|
||||||
ii_lea_sub d,f7,a6,usp
|
|
||||||
ii_lea_sub f,f0,usp,a0_off(a7)
|
|
||||||
ii_lea_sub f,f1,usp,a1_off(a7)
|
|
||||||
ii_lea_sub f,f2,usp,a2
|
|
||||||
ii_lea_sub f,f3,usp,a3
|
|
||||||
ii_lea_sub f,f4,usp,a4
|
|
||||||
ii_lea_sub f,f5,usp,a5
|
|
||||||
ii_lea_sub f,f6,usp,a6
|
|
||||||
ii_lea_sub f,f7,usp,usp
|
|
||||||
// lea d8(pc,dy.w),az
|
|
||||||
ii_lea_sub 1,fb,a0_off(a7),a0
|
|
||||||
ii_lea_sub 3,fb,a1_off(a7),a0
|
|
||||||
ii_lea_sub 5,fb,a2,a0
|
|
||||||
ii_lea_sub 7,fb,a3,a0
|
|
||||||
ii_lea_sub 9,fb,a4,a0
|
|
||||||
ii_lea_sub b,fb,a5,a0
|
|
||||||
ii_lea_sub d,fb,a6,a0
|
|
||||||
ii_lea_sub f,fb,usp,a0
|
|
||||||
.endm
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
/*******************************************************/
|
|
||||||
// constanten
|
|
||||||
/*******************************************************/
|
|
||||||
.extern ___RAMBAR1
|
|
||||||
.extern _rt_cacr
|
|
||||||
.extern _rt_mod
|
|
||||||
.extern _rt_ssp
|
|
||||||
.extern _rt_usp
|
|
||||||
.extern _rt_vbr
|
|
||||||
.extern _d0_save
|
|
||||||
.extern _a7_save
|
|
||||||
|
|
||||||
ii_ss = 16
|
|
||||||
d0_off = 0
|
|
||||||
d1_off = 4
|
|
||||||
a0_off = 8
|
|
||||||
a1_off = 12
|
|
||||||
format_off = 16
|
|
||||||
sr_off = 18
|
|
||||||
ccr_off = 19
|
|
||||||
pc_off = 20
|
|
||||||
|
|
||||||
#define table 0x20000000-0x8000-0xF000*4 // Adresse Sprungtabelle -> 8000=Sprungbereich mod cod, 61k(ohne 0xFxxx!)x4= tabelle
|
|
||||||
|
|
||||||
/*******************************************************/
|
|
||||||
// allgemeine macros
|
|
||||||
/*******************************************************/
|
|
||||||
ii_end: .macro
|
|
||||||
move.l a0,pc_off(a7)
|
|
||||||
movem.l (a7),d0/d1/a0/a1
|
|
||||||
lea ii_ss(a7),a7
|
|
||||||
rte
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
set_cc0:.macro
|
|
||||||
move.w ccr,d0
|
|
||||||
move.b d0,ccr_off(a7)
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
ii_esr: .macro // geht nicht!!??
|
|
||||||
movem.l (a7),d0/d1/a0/a1
|
|
||||||
lea ii_ss+8(a7),a7 // stack erh<72>hen
|
|
||||||
move.w d0,_d0_save // d0.w sicheren
|
|
||||||
move.w -6(a7),d0 // sr holen
|
|
||||||
move.w d0,sr // sr setzen
|
|
||||||
nop
|
|
||||||
move.w _d0_save,d0 // d0.w zur<75>ck
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
ii_end_mvm:.macro
|
|
||||||
move.l a0_off(a7),a0
|
|
||||||
lea 16(a7),a7
|
|
||||||
rte
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
ii_endj:.macro
|
|
||||||
movem.l (a7),d0/d1/a0/a1 // register zur<75>ck
|
|
||||||
lea ii_ss(a7),a7 // korr
|
|
||||||
rte // ende
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
set_nzvc:.macro // set ccr bits nzvc
|
|
||||||
move.w ccr,d1
|
|
||||||
bclr #4,d1
|
|
||||||
btst #4,ccr_off(a7)
|
|
||||||
beq snzvc2\@
|
|
||||||
bset #4,d1
|
|
||||||
snzvc2\@:
|
|
||||||
move.b d1,ccr_off(a7)
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
set_cc1:.macro
|
|
||||||
move.w ccr,d1
|
|
||||||
move.b d1,ccr_off(a7)
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
set_cc_b:.macro
|
|
||||||
move.w ccr,d1
|
|
||||||
btst #7,d0 // byt negativ?
|
|
||||||
beq set_cc_b2\@
|
|
||||||
bset #3,d1 // make negativ
|
|
||||||
set_cc_b2\@:
|
|
||||||
move.b d1,ccr_off(a7)
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
set_cc_w:.macro
|
|
||||||
move.w ccr,d1
|
|
||||||
btst #15,d0 // byt negativ?
|
|
||||||
beq set_cc_w2\@
|
|
||||||
bset #3,d1 // make negativ
|
|
||||||
set_cc_w2\@:
|
|
||||||
move.b d1,ccr_off(a7)
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
get_pc: .macro
|
|
||||||
lea.l (a0),a1
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ii_lset:.macro offs
|
|
||||||
lea table+\offs*4,a0
|
|
||||||
move.l #ii_\offs,(a0)
|
|
||||||
.endm;
|
|
||||||
ii_lset_dx:.macro // 0x1.22 -> z.B. 1=d,2=4 ->0xd040 -> 0xde40
|
|
||||||
ii_lset_dxg \1,\2
|
|
||||||
ii_lset_dxu \1,\2
|
|
||||||
.endm;
|
|
||||||
ii_lset_dxg:.macro // gerade: 0x1.22 -> z.B. 1=d,2=4 ->0xd040 -> 0xde40
|
|
||||||
lea table+0x\10\2*4,a0
|
|
||||||
move.l #ii_0x\10\2,(a0)
|
|
||||||
lea 0x800(a0),a0 // 4 * 0x200
|
|
||||||
move.l #ii_0x\12\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\14\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\16\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\18\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\1a\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\1c\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\1e\2,(a0)
|
|
||||||
.endm;
|
|
||||||
ii_lset_dxu:.macro // ungerade: 0x1.22 -> z.B. 1=d,2=4 ->0xd140 -> 0xdf40
|
|
||||||
lea table+0x\11\2*4,a0
|
|
||||||
move.l #ii_0x\11\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\13\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\15\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\17\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\19\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\1b\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\1d\2,(a0)
|
|
||||||
lea 0x800(a0),a0
|
|
||||||
move.l #ii_0x\1f\2,(a0)
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
1270
include/ii_move.h
1270
include/ii_move.h
File diff suppressed because it is too large
Load Diff
@@ -1,374 +0,0 @@
|
|||||||
//***********************************************************************************/
|
|
||||||
// movem
|
|
||||||
//***********************************************************************************/
|
|
||||||
ii_movem_lset: .macro
|
|
||||||
// movem.l rx,xxx.L
|
|
||||||
ii_lset 0x48f9
|
|
||||||
// movem.l xxx.L,rx
|
|
||||||
ii_lset 0x4cf9
|
|
||||||
// movem.w rx,xxx.L
|
|
||||||
ii_lset 0x48b9
|
|
||||||
// movem.w xxx.L,rx
|
|
||||||
ii_lset 0x4cb9
|
|
||||||
// movem.l rx,-(ax)
|
|
||||||
ii_lset 0x48e0
|
|
||||||
ii_lset 0x48e1
|
|
||||||
ii_lset 0x48e2
|
|
||||||
ii_lset 0x48e3
|
|
||||||
ii_lset 0x48e4
|
|
||||||
ii_lset 0x48e5
|
|
||||||
ii_lset 0x48e6
|
|
||||||
ii_lset 0x48e7
|
|
||||||
// movem.l (ax)+,rx
|
|
||||||
ii_lset 0x4cd8
|
|
||||||
ii_lset 0x4cd9
|
|
||||||
ii_lset 0x4cda
|
|
||||||
ii_lset 0x4cdb
|
|
||||||
ii_lset 0x4cdc
|
|
||||||
ii_lset 0x4cdd
|
|
||||||
ii_lset 0x4cde
|
|
||||||
ii_lset 0x4cdf
|
|
||||||
.endm
|
|
||||||
//***********************************************************************************/
|
|
||||||
ii_movem_func: .macro
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
// movem.l
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// movem.l (ax)+,reg
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
.long 0
|
|
||||||
az_reg_table:
|
|
||||||
.byte 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 // 0-f
|
|
||||||
.byte 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5 // 10-1f
|
|
||||||
.byte 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5 // 20-2f
|
|
||||||
.byte 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6 // 30-3f
|
|
||||||
.byte 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5 // 40-4f
|
|
||||||
.byte 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6 // 50
|
|
||||||
.byte 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6 // 60
|
|
||||||
.byte 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7 // 70
|
|
||||||
.byte 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5 // 80-8f
|
|
||||||
.byte 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6 // 90
|
|
||||||
.byte 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6 // a0
|
|
||||||
.byte 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7 // b0
|
|
||||||
.byte 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6 // c0
|
|
||||||
.byte 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7 // d0
|
|
||||||
.byte 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7 // e0
|
|
||||||
.byte 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8 // f0
|
|
||||||
//-------------------------------------------------------------------------------
|
|
||||||
ii_0x48e0: // movem.l reglist,-(a0)
|
|
||||||
mvm_mem_macro 0x48d0,a0_off(a7),2
|
|
||||||
ii_0x48e1: // movem.l reglist,-(a1)
|
|
||||||
mvm_mem_macro 0x48d1,a1_off(a7),2
|
|
||||||
ii_0x48e2: // movem.l reglist,-(a2)
|
|
||||||
mvm_mem_macro 0x48d2,a2,2
|
|
||||||
ii_0x48e3: // movem.l reglist,-(a3)
|
|
||||||
mvm_mem_macro 0x48d3,a3,2
|
|
||||||
ii_0x48e4: // movem.l reglist,-(a4)
|
|
||||||
mvm_mem_macro 0x48d4,a4,2
|
|
||||||
ii_0x48e5: // movem.l reglist,-(a5)
|
|
||||||
mvm_mem_macro 0x48d5,a5,2
|
|
||||||
ii_0x48e6: // movem.l reglist,-(a6)
|
|
||||||
mvm_mem_macro 0x48d6,a6,2
|
|
||||||
ii_0x48e7: // movem.l reglist,-(a7)
|
|
||||||
mvm_mem_macro 0x48d7,usp,2
|
|
||||||
//-------------------------------------------------------------------------------
|
|
||||||
ii_0x4cd8: // movem.l (a0)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd0,0x41e8,2
|
|
||||||
ii_0x4cd9: // movem.l (a1)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd1,0x43e9,2
|
|
||||||
ii_0x4cda: // movem.l (a2)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd2,0x45ea,2
|
|
||||||
ii_0x4cdb: // movem.l (a3)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd3,0x47eb,2
|
|
||||||
ii_0x4cdc: // movem.l (a4)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd4,0x49ec,2
|
|
||||||
ii_0x4cdd: // movem.l (a5)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd5,0x4bed,2
|
|
||||||
ii_0x4cde: // movem.l (a6)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd6,0x4dee,2
|
|
||||||
ii_0x4cdf: // movem.l (a7)+,reglist
|
|
||||||
mvm_reg_macro 0x4cd7,0x4fef,2
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
ii_0x48f9: // movem.l reg,xxx.L
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
movemrm_macro l
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_0x4cf9: // movem.l xxx.L,reg
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
movemmr_macro l
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
ii_0x48b9: // movem.w reg,xxx.L
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
movemrm_macro w
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_0x4cb9: // movem.w xxx.L,reg
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
movemmr_macro w
|
|
||||||
.endm
|
|
||||||
//==============================================================
|
|
||||||
mvm_mem_macro:.macro
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
lea az_reg_table,a1
|
|
||||||
mvz.b (a0),d1
|
|
||||||
mvz.b 0(a1,d1)+,d0
|
|
||||||
mvz.b 1(a0),d1
|
|
||||||
mvz.b 0(a1,d1)+,d1
|
|
||||||
add.l d0,d1
|
|
||||||
lsl.l #\3,d1 // * anzahl byts pro wert
|
|
||||||
move.l \2,a1
|
|
||||||
sub.l d1,a1 // ax-anzahl byts
|
|
||||||
move.l a1,\2
|
|
||||||
lea ___RAMBAR1,a1
|
|
||||||
move.l a1,pc_off(a7)
|
|
||||||
move.l a1,d0
|
|
||||||
addq.l #1,d0
|
|
||||||
movec d0,RAMBAR1
|
|
||||||
move.w #\1,(a1)+ // movem.x reg_list,-(a7)
|
|
||||||
move.w (a0)+,(a1)+ // register list
|
|
||||||
move.w #0x4ef9,(a1)+ // jmp.l
|
|
||||||
move.l a0,(a1) // r<>cksprungadresse
|
|
||||||
move.l #___RAMBAR1 + 0x81,d0 // instruction
|
|
||||||
movec d0,RAMBAR1
|
|
||||||
movem.l (a7),d0/d1/a0/a1
|
|
||||||
lea ii_ss(a7),a7 // stack erh<72>hen
|
|
||||||
rte
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------
|
|
||||||
mvm_reg_macro:.macro
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
lea az_reg_table,a1
|
|
||||||
mvz.b (a0),d1
|
|
||||||
mvz.b 0(a1,d1)+,d0
|
|
||||||
mvz.b 1(a0),d1
|
|
||||||
mvz.b 0(a1,d1)+,d1
|
|
||||||
add.l d0,d1
|
|
||||||
lea ___RAMBAR1,a1
|
|
||||||
move.l a1,pc_off(a7)
|
|
||||||
move.l a1,d0
|
|
||||||
addq.l #1,d0
|
|
||||||
movec d0,RAMBAR1
|
|
||||||
move.w #\1,(a1)+ // movem.x (ax),reg_list
|
|
||||||
move.w (a0)+,(a1)+ // register list
|
|
||||||
move.w #\2,(a1)+ // lea 0(ax),ax
|
|
||||||
lsl.l #\3,d1 // * anzahl byts pro wert
|
|
||||||
move.w d1,(a1)+ // offset von lea
|
|
||||||
move.w #0x4ef9,(a1)+ // jmp.l
|
|
||||||
move.l a0,(a1) // r<>cksprungadresse
|
|
||||||
move.l #___RAMBAR1 + 0x81,d0 // instruction
|
|
||||||
movec d0,RAMBAR1
|
|
||||||
movem.l (a7),d0/d1/a0/a1
|
|
||||||
lea ii_ss(a7),a7 // stack erh<72>hen
|
|
||||||
rte
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------
|
|
||||||
movemrm_macro:.macro // in d0 register liste, in a1 zieladresse
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
tst.b d0 // datenregister zu verschieben?
|
|
||||||
bne mrm_dx\@ // ja->
|
|
||||||
lsr.l #8,d0 // sonst zu addressregister
|
|
||||||
jmp mmrm_nd7\@ // ->
|
|
||||||
mrm_dx\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd0\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l d0_off(a7),(a1)+
|
|
||||||
.else
|
|
||||||
move.w d0_off+2(a7),(a1)+
|
|
||||||
.endif
|
|
||||||
mmrm_nd0\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd1\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l d1_off(a7),(a1)+
|
|
||||||
.else
|
|
||||||
move.w d1_off+2(a7),(a1)+
|
|
||||||
.endif
|
|
||||||
mmrm_nd1\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd2\@
|
|
||||||
move.\1 d2,(a1)+
|
|
||||||
mmrm_nd2\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd3\@
|
|
||||||
move.\1 d3,(a1)+
|
|
||||||
mmrm_nd3\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd4\@
|
|
||||||
move.\1 d4,(a1)+
|
|
||||||
mmrm_nd4\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd5\@
|
|
||||||
move.\1 d5,(a1)+
|
|
||||||
mmrm_nd5\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd6\@
|
|
||||||
move.l d6,(a1)+
|
|
||||||
mmrm_nd6\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_nd7\@
|
|
||||||
move.\1 d7,(a1)+
|
|
||||||
mmrm_nd7\@:
|
|
||||||
tst.b d0 // addressregister zu verschieben?
|
|
||||||
beq mmrm_na7\@
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na0\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l a0_off(a7),(a1)+
|
|
||||||
.else
|
|
||||||
move.w a0_off+2(a7),(a1)+
|
|
||||||
.endif
|
|
||||||
mmrm_na0\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na1\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l a1_off(a7),(a1)+
|
|
||||||
.else
|
|
||||||
move.w a1_off+2(a7),(a1)+
|
|
||||||
.endif
|
|
||||||
mmrm_na1\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na2\@
|
|
||||||
move.\1 a2,(a1)+
|
|
||||||
mmrm_na2\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na3\@
|
|
||||||
move.\1 a3,(a1)+
|
|
||||||
mmrm_na3\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na4\@
|
|
||||||
move.\1 a4,(a1)+
|
|
||||||
mmrm_na4\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na5\@
|
|
||||||
move.\1 a5,(a1)+
|
|
||||||
mmrm_na5\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na6\@
|
|
||||||
move.\1 a6,(a1)+
|
|
||||||
mmrm_na6\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmrm_na7\@
|
|
||||||
move.l a0,d1 // sichern
|
|
||||||
move.l usp,a0 // ist ja usp
|
|
||||||
move.\1 a0,(a1)+ // nach a0
|
|
||||||
move.l d1,a0 // pc zur<75>ck
|
|
||||||
mmrm_na7\@:
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
movemmr_macro:.macro // in d0 register liste, in a1 source adr
|
|
||||||
#ifdef halten_movem
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
tst.b d0 // datenregister zu verschieben?
|
|
||||||
bne mmr_dx\@ // ja->
|
|
||||||
lsr.l #8,d0 // sonst zu addressregister
|
|
||||||
bra mmmr_nd7\@ // ->
|
|
||||||
mmr_dx\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd0\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l (a1)+,d0_off(a7)
|
|
||||||
.else
|
|
||||||
move.w (a1)+,d0_off+2(a7)
|
|
||||||
.endif
|
|
||||||
mmmr_nd0\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd1\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l (a1)+,d1_off(a7)
|
|
||||||
.else
|
|
||||||
move.w (a1)+,d1_off+2(a7)
|
|
||||||
.endif
|
|
||||||
mmmr_nd1\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd2\@
|
|
||||||
move.\1 (a1)+,d2
|
|
||||||
mmmr_nd2\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd3\@
|
|
||||||
move.\1 (a1)+,d3
|
|
||||||
mmmr_nd3\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd4\@
|
|
||||||
move.\1 (a1)+,d4
|
|
||||||
mmmr_nd4\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd5\@
|
|
||||||
move.\1 (a1)+,d5
|
|
||||||
mmmr_nd5\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd6\@
|
|
||||||
move.\1 (a1)+,d6
|
|
||||||
mmmr_nd6\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_nd7\@
|
|
||||||
move.\1 (a1)+,d7
|
|
||||||
mmmr_nd7\@:
|
|
||||||
tst.b d0 // addressregister zu verschieben?
|
|
||||||
beq mmmr_na7\@ // nein->
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na0\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l (a1)+,a0_off(a7)
|
|
||||||
.else
|
|
||||||
move.w (a1)+,a0_off+2(a7)
|
|
||||||
.endif
|
|
||||||
mmmr_na0\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na1\@
|
|
||||||
.ifc 1,l
|
|
||||||
move.l (a1)+,a1_off(a7)
|
|
||||||
.else
|
|
||||||
move.w (a1)+,a1_off+2(a7)
|
|
||||||
.endif
|
|
||||||
mmmr_na1\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na2\@
|
|
||||||
move.\1 (a1)+,a2
|
|
||||||
mmmr_na2\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na3\@
|
|
||||||
move.\1 (a1)+,a3
|
|
||||||
mmmr_na3\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na4\@
|
|
||||||
move.\1 (a1)+,a4
|
|
||||||
mmmr_na4\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na5\@
|
|
||||||
move.\1 (a1)+,a5
|
|
||||||
mmmr_na5\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na6\@
|
|
||||||
move.\1 (a1)+,a6
|
|
||||||
mmmr_na6\@:
|
|
||||||
lsr.l #1,d0
|
|
||||||
bcc mmmr_na7\@
|
|
||||||
move.\1 (a1)+,a1 // nach a0
|
|
||||||
move.l a1,usp // war ja usp
|
|
||||||
mmmr_na7\@:
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
@@ -1,179 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// movep
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
.text
|
|
||||||
ii_movep_lset:.macro
|
|
||||||
ii_lset_opeau 01,0 //movep.w d(a0-7),d0
|
|
||||||
ii_lset_opeau 03,0 //movep.w d(a0-7),d1
|
|
||||||
ii_lset_opeau 05,0 //movep.w d(a0-7),d2
|
|
||||||
ii_lset_opeau 07,0 //movep.w d(a0-7),d3
|
|
||||||
ii_lset_opeau 09,0 //movep.w d(a0-7),d4
|
|
||||||
ii_lset_opeau 0b,0 //movep.w d(a0-7),d5
|
|
||||||
ii_lset_opeau 0d,0 //movep.w d(a0-7),d6
|
|
||||||
ii_lset_opeau 0f,0 //movep.w d(a0-7),d7
|
|
||||||
|
|
||||||
ii_lset_opeau 01,4 //movep.w d0,d(a0-7)
|
|
||||||
ii_lset_opeau 03,4 //movep.w d1,d(a0-7)
|
|
||||||
ii_lset_opeau 05,4 //movep.w d2,d(a0-7)
|
|
||||||
ii_lset_opeau 07,4 //movep.w d3,d(a0-7)
|
|
||||||
ii_lset_opeau 09,4 //movep.w d4,d(a0-7)
|
|
||||||
ii_lset_opeau 0b,4 //movep.w d5,d(a0-7)
|
|
||||||
ii_lset_opeau 0d,4 //movep.w d6,d(a0-7)
|
|
||||||
ii_lset_opeau 0f,4 //movep.w d7,d(a0-7)
|
|
||||||
|
|
||||||
ii_lset_opeau 01,8 //movep.l d(a0-7),d0
|
|
||||||
ii_lset_opeau 03,8 //movep.l d(a0-7),d1
|
|
||||||
ii_lset_opeau 05,8 //movep.l d(a0-7),d2
|
|
||||||
ii_lset_opeau 07,8 //movep.l d(a0-7),d3
|
|
||||||
ii_lset_opeau 09,8 //movep.l d(a0-7),d4
|
|
||||||
ii_lset_opeau 0b,8 //movep.l d(a0-7),d5
|
|
||||||
ii_lset_opeau 0d,8 //movep.l d(a0-7),d6
|
|
||||||
ii_lset_opeau 0f,8 //movep.l d(a0-7),d7
|
|
||||||
|
|
||||||
ii_lset_opeau 01,c //movep.l d0,d(a0-7)
|
|
||||||
ii_lset_opeau 03,c //movep.l d1,d(a0-7)
|
|
||||||
ii_lset_opeau 05,c //movep.l d2,d(a0-7)
|
|
||||||
ii_lset_opeau 07,c //movep.l d3,d(a0-7)
|
|
||||||
ii_lset_opeau 09,c //movep.l d4,d(a0-7)
|
|
||||||
ii_lset_opeau 0b,c //movep.l d5,d(a0-7)
|
|
||||||
ii_lset_opeau 0d,c //movep.l d6,d(a0-7)
|
|
||||||
ii_lset_opeau 0f,c //movep.l d7,d(a0-7)
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_movep_func:.macro
|
|
||||||
//movep.w d(a0-7),d0-7
|
|
||||||
ii_movep 010,d0_off(a7),wad
|
|
||||||
ii_movep 030,d1_off(a7),wad
|
|
||||||
ii_movep 050,d2,wad
|
|
||||||
ii_movep 070,d3,wad
|
|
||||||
ii_movep 090,d4,wad
|
|
||||||
ii_movep 0b0,d5,wad
|
|
||||||
ii_movep 0d0,d6,wad
|
|
||||||
ii_movep 0f0,d7,wad
|
|
||||||
//movep.w d0-7,d(a0-7)
|
|
||||||
ii_movep 014,d0_off(a7),wda
|
|
||||||
ii_movep 034,d1_off(a7),wda
|
|
||||||
ii_movep 054,d2,wda
|
|
||||||
ii_movep 074,d3,wda
|
|
||||||
ii_movep 094,d4,wda
|
|
||||||
ii_movep 0b4,d5,wda
|
|
||||||
ii_movep 0d4,d6,wda
|
|
||||||
ii_movep 0f4,d7,wda
|
|
||||||
//movep.l d(a0-7),d0-7
|
|
||||||
ii_movep 018,d0_off(a7),lad
|
|
||||||
ii_movep 038,d1_off(a7),lad
|
|
||||||
ii_movep 058,d2,lad
|
|
||||||
ii_movep 078,d3,lad
|
|
||||||
ii_movep 098,d4,lad
|
|
||||||
ii_movep 0b8,d5,lad
|
|
||||||
ii_movep 0d8,d6,lad
|
|
||||||
ii_movep 0f8,d7,lad
|
|
||||||
//movep.l d0-7,d(a0-7)
|
|
||||||
ii_movep 01c,d0_off(a7),lda
|
|
||||||
ii_movep 03c,d1_off(a7),lda
|
|
||||||
ii_movep 05c,d2,lda
|
|
||||||
ii_movep 07c,d3,lda
|
|
||||||
ii_movep 09c,d4,lda
|
|
||||||
ii_movep 0bc,d5,lda
|
|
||||||
ii_movep 0dc,d6,lda
|
|
||||||
ii_movep 0fc,d7,lda
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_movep:.macro //1=code ziffer 1-3 2=register 3=art
|
|
||||||
ii_0x\18:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0_off(a7),a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
ii_0x\19:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a1_off(a7),a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
ii_0x\1a:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a2,a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
ii_0x\1b:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a3,a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
ii_0x\1c:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a4,a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
ii_0x\1d:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a5,a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
ii_0x\1e:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a6,a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
ii_0x\1f:
|
|
||||||
#ifdef halten_movep
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l usp,a1
|
|
||||||
ii_movep\3_up1 \2
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_movepwad_up1:.macro
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
move.b (a1),d0
|
|
||||||
lsl.l #8,d0
|
|
||||||
move.b 2(a1,d1.l),d0
|
|
||||||
move.w d0,\1
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_movepwda_up1:.macro
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
move.w \1,d0
|
|
||||||
move.b d0,2(a1)
|
|
||||||
lsr.l #8,d0
|
|
||||||
move.b d0,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_moveplad_up1:.macro
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
move.b (a1),d0
|
|
||||||
lsl.l #8,d0
|
|
||||||
move.b 2(a1),d0
|
|
||||||
lsl.l #8,d0
|
|
||||||
move.b 4(a1),d0
|
|
||||||
lsl.l #8,d0
|
|
||||||
move.b 6(a1),d0
|
|
||||||
move.l d0,\1
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_moveplda_up1:.macro
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
move.l \1,d0
|
|
||||||
move.b d0,6(a1)
|
|
||||||
lsr.l #8,d0
|
|
||||||
move.b d0,4(a1)
|
|
||||||
lsr.l #8,d0
|
|
||||||
move.b d0,2(a1)
|
|
||||||
lsr.l #8,d0
|
|
||||||
move.b d0,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
661
include/ii_op.h
661
include/ii_op.h
@@ -1,661 +0,0 @@
|
|||||||
/*****************************************************************************************/
|
|
||||||
// opertionen
|
|
||||||
/*****************************************************************************************/
|
|
||||||
ii_lset_op:.macro
|
|
||||||
//byt
|
|
||||||
ii_lset_opea \1,0 // dx,ax
|
|
||||||
ii_lset_opea \1,1 // (ax), (ax)+
|
|
||||||
ii_lset_opea \1,2 // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \1,3 // d8(ax,dy)
|
|
||||||
lea table+0x\1\238*4,a0
|
|
||||||
move.l #ii_0x\138,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\139,(a0)+ // xxx.l
|
|
||||||
//word
|
|
||||||
ii_lset_opea \1,4 // dx,ax
|
|
||||||
ii_lset_opea \1,5 // (ax), (ax)+
|
|
||||||
ii_lset_opea \1,6 // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \1,7 // d8(ax,dy)
|
|
||||||
lea table+0x\178*4,a0
|
|
||||||
move.l #ii_0x\178,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\179,(a0)+ // xxx.l
|
|
||||||
//long
|
|
||||||
ii_lset_opea \1,8 // dx,ax
|
|
||||||
ii_lset_opea \1,9 // (ax), (ax)+
|
|
||||||
ii_lset_opea \1,a // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \1,b // d8(ax,dy)
|
|
||||||
lea table+0x\1b8*4,a0
|
|
||||||
move.l #ii_0x\1b8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\1b9,(a0)+ // xxx.l
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_lset_opeag:.macro // 0x1120-0x1127
|
|
||||||
lea table+0x\1\20*4,a0
|
|
||||||
move.l #ii_0x\1\20,(a0)+
|
|
||||||
move.l #ii_0x\1\21,(a0)+
|
|
||||||
move.l #ii_0x\1\22,(a0)+
|
|
||||||
move.l #ii_0x\1\23,(a0)+
|
|
||||||
move.l #ii_0x\1\24,(a0)+
|
|
||||||
move.l #ii_0x\1\25,(a0)+
|
|
||||||
move.l #ii_0x\1\26,(a0)+
|
|
||||||
move.l #ii_0x\1\27,(a0)+
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
ii_lset_opeau:.macro // 0x1128-0x112f
|
|
||||||
lea table+0x\1\28*4,a0
|
|
||||||
move.l #ii_0x\1\28,(a0)+
|
|
||||||
move.l #ii_0x\1\29,(a0)+
|
|
||||||
move.l #ii_0x\1\2a,(a0)+
|
|
||||||
move.l #ii_0x\1\2b,(a0)+
|
|
||||||
move.l #ii_0x\1\2c,(a0)+
|
|
||||||
move.l #ii_0x\1\2d,(a0)+
|
|
||||||
move.l #ii_0x\1\2e,(a0)+
|
|
||||||
move.l #ii_0x\1\2f,(a0)+
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
ii_lset_opea:.macro
|
|
||||||
ii_lset_opeag \1,\2
|
|
||||||
ii_lset_opeau \1,\2
|
|
||||||
.endm
|
|
||||||
/******************************************************/
|
|
||||||
ii_op:.macro // 1=code 2=operation 3 = normal oder immediat/quick
|
|
||||||
// byt
|
|
||||||
opdx \1,\2,b,0,\3 // dx,ax
|
|
||||||
opia \1,\2,b,1,\3 // (ax),(ax)+
|
|
||||||
opdia \1,\2,b,2,\3 // -(ax),d16(ax)
|
|
||||||
opd8a \1,\2,b,3,\3 // d8(ax),xxx
|
|
||||||
// word
|
|
||||||
opdx \1,\2,w,4,\3 // dx,ax
|
|
||||||
opia \1,\2,w,5,\3 // (ax),(ax)+
|
|
||||||
opdia \1,\2,w,6,\3 // -(ax),d16(ax)
|
|
||||||
opd8a \1,\2,w,7,\3 // d8(ax),xxx
|
|
||||||
// long
|
|
||||||
opdx \1,\2,l,8,\3 // dx,ax
|
|
||||||
opia \1,\2,l,9,\3 // (ax),(ax)+
|
|
||||||
opdia \1,\2,l,a,\3 // -(ax),d16(ax)
|
|
||||||
opd8a \1,\2,l,b,\3 // d8(ax),xxx
|
|
||||||
.endm
|
|
||||||
/******************************************************/
|
|
||||||
// byt word long
|
|
||||||
/******************************************************/
|
|
||||||
opdx: .macro //register: \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal
|
|
||||||
ii_0x\1\40:
|
|
||||||
.ifc \3,b
|
|
||||||
op\5smd \2,d0_off+3(a7),d0_off+3(a7),\3
|
|
||||||
.else
|
|
||||||
.ifc \3,w
|
|
||||||
op\5smd \2,d0_off+2(a7),d0_off+2(a7),\3
|
|
||||||
.else
|
|
||||||
op\5smd \2,d0_off(a7),d0_off(a7),\3
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
ii_0x\1\41:
|
|
||||||
.ifc \3,b
|
|
||||||
op\5smd \2,d1_off+3(a7),d1_off+3(a7),\3
|
|
||||||
.else
|
|
||||||
.ifc \3,w
|
|
||||||
op\5smd \2,d1_off+2(a7),d1_off+2(a7),\3
|
|
||||||
.else
|
|
||||||
op\5smd \2,d1_off(a7),d1_off(a7),\3
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
ii_0x\1\42:
|
|
||||||
op\5smd \2,d2,d2,\3
|
|
||||||
ii_0x\1\43:
|
|
||||||
op\5smd \2,d3,d3,\3
|
|
||||||
ii_0x\1\44:
|
|
||||||
op\5smd \2,d4,d4,\3
|
|
||||||
ii_0x\1\45:
|
|
||||||
op\5smd \2,d5,d5,\3
|
|
||||||
ii_0x\1\46:
|
|
||||||
op\5smd \2,d6,d6,\3
|
|
||||||
ii_0x\1\47:
|
|
||||||
op\5smd \2,d7,d7,\3
|
|
||||||
//ax
|
|
||||||
ii_0x\1\48:
|
|
||||||
opa\5smd \2,a0_off(a7),a0_off(a7),\3
|
|
||||||
ii_0x\1\49:
|
|
||||||
opa\5smd \2,a1_off(a7),a1_off(a7),\3
|
|
||||||
ii_0x\1\4a:
|
|
||||||
opa\5smd \2,a2,a2,\3
|
|
||||||
ii_0x\1\4b:
|
|
||||||
opa\5smd \2,a3,a3,\3
|
|
||||||
ii_0x\1\4c:
|
|
||||||
opa\5smd \2,a4,a4,\3
|
|
||||||
ii_0x\1\4d:
|
|
||||||
opa\5smd \2,a5,a5,\3
|
|
||||||
ii_0x\1\4e:
|
|
||||||
opa\5smd \2,a6,a6,\3
|
|
||||||
ii_0x\1\4f:
|
|
||||||
opa\5smd \2,usp,usp,\3
|
|
||||||
.endm;
|
|
||||||
//-----------------------------------------------
|
|
||||||
opia: .macro // (ax) \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal
|
|
||||||
//(ax)
|
|
||||||
ii_0x\1\40:
|
|
||||||
op\5sia \2,a0_off(a7),(a1),(a1),\3
|
|
||||||
ii_0x\1\41:
|
|
||||||
op\5sia \2,a1_off(a7),(a1),(a1),\3
|
|
||||||
ii_0x\1\42:
|
|
||||||
op\5smd \2,(a2),(a2),\3
|
|
||||||
ii_0x\1\43:
|
|
||||||
op\5smd \2,(a3),(a3),\3
|
|
||||||
ii_0x\1\44:
|
|
||||||
op\5smd \2,(a4),(a4),\3
|
|
||||||
ii_0x\1\45:
|
|
||||||
op\5smd \2,(a5),(a5),\3
|
|
||||||
ii_0x\1\46:
|
|
||||||
op\5smd \2,(a6),(a6),\3
|
|
||||||
ii_0x\1\47:
|
|
||||||
op\5sia \2,usp,(a1),(a1),\3
|
|
||||||
//(ax)+
|
|
||||||
ii_0x\1\48:
|
|
||||||
op\5sia \2,a0_off(a7),(a1),(a1)+,\3
|
|
||||||
ii_0x\1\49:
|
|
||||||
op\5sia \2,a1_off(a7),(a1),(a1)+,\3
|
|
||||||
ii_0x\1\4a:
|
|
||||||
op\5smd \2,(a2),(a2)+,\3
|
|
||||||
ii_0x\1\4b:
|
|
||||||
op\5smd \2,(a3),(a3)+,\3
|
|
||||||
ii_0x\1\4c:
|
|
||||||
op\5smd \2,(a4),(a4)+,\3
|
|
||||||
ii_0x\1\4d:
|
|
||||||
op\5smd \2,(a5),(a5)+,\3
|
|
||||||
ii_0x\1\4e:
|
|
||||||
op\5smd \2,(a6),(a6)+,\3
|
|
||||||
ii_0x\1\4f:
|
|
||||||
op\5sia \2,usp,(a1),(a1)+,\3
|
|
||||||
.endm;
|
|
||||||
//-----------------------------------------------
|
|
||||||
opdia: .macro // -(ax) \1=code \2 = operation \3 = size \4 size and adressierungsart 5 = immediate oder normal
|
|
||||||
ii_0x\1\40:
|
|
||||||
op\5sia \2,a0_off(a7),-(a1),(a1),\3
|
|
||||||
ii_0x\1\41:
|
|
||||||
op\5sia \2,a1_off(a7),-(a1),(a1),\3
|
|
||||||
ii_0x\1\42:
|
|
||||||
op\5smd \2,-(a2),(a2),\3
|
|
||||||
ii_0x\1\43:
|
|
||||||
op\5smd \2,-(a3),(a3),\3
|
|
||||||
ii_0x\1\44:
|
|
||||||
op\5smd \2,-(a4),(a4),\3
|
|
||||||
ii_0x\1\45:
|
|
||||||
op\5smd \2,-(a5),(a5),\3
|
|
||||||
ii_0x\1\46:
|
|
||||||
op\5smd \2,-(a6),(a6),\3
|
|
||||||
ii_0x\1\47:
|
|
||||||
op\5sia \2,usp,-(a1),(a1),\3
|
|
||||||
|
|
||||||
ii_0x\1\48:
|
|
||||||
op\5sd16a \2,a0_off(a7),\3
|
|
||||||
ii_0x\1\49:
|
|
||||||
op\5sd16a \2,a1_off(a7),\3
|
|
||||||
ii_0x\1\4a:
|
|
||||||
op\5sd16a \2,a2,\3
|
|
||||||
ii_0x\1\4b:
|
|
||||||
op\5sd16a \2,a3,\3
|
|
||||||
ii_0x\1\4c:
|
|
||||||
op\5sd16a \2,a4,\3
|
|
||||||
ii_0x\1\4d:
|
|
||||||
op\5sd16a \2,a5,\3
|
|
||||||
ii_0x\1\4e:
|
|
||||||
op\5sd16a \2,a6,\3
|
|
||||||
ii_0x\1\4f:
|
|
||||||
op\5sd16a \2,usp,\3
|
|
||||||
.endm;
|
|
||||||
//-----------------------------------------------
|
|
||||||
opd8a: .macro // d8(ax,dy) \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal
|
|
||||||
ii_0x\1\40:
|
|
||||||
op\5sd8a \2,a0_off(a7),\3
|
|
||||||
ii_0x\1\41:
|
|
||||||
op\5sd8a \2,a1_off(a7),\3
|
|
||||||
ii_0x\1\42:
|
|
||||||
op\5sd8a \2,a2,\3
|
|
||||||
ii_0x\1\43:
|
|
||||||
op\5sd8a \2,a3,\3
|
|
||||||
ii_0x\1\44:
|
|
||||||
op\5sd8a \2,a4,\3
|
|
||||||
ii_0x\1\45:
|
|
||||||
op\5sd8a \2,a5,\3
|
|
||||||
ii_0x\1\46:
|
|
||||||
op\5sd8a \2,a6,\3
|
|
||||||
ii_0x\1\47:
|
|
||||||
op\5sd8a \2,usp,\3
|
|
||||||
|
|
||||||
ii_0x\1\48:
|
|
||||||
op\5sxx \2,\3,w
|
|
||||||
ii_0x\1\49:
|
|
||||||
op\5sxx \2,\3,l
|
|
||||||
.endm;
|
|
||||||
//-----------------------------------------------
|
|
||||||
opnsmd:.macro // direct dx: 1=operation 2=ea src 3=ea dest 4=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
.ifc \4,l
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\4 \2,d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,negx
|
|
||||||
move.b sr_off+1(a7),d1 //ccr holen
|
|
||||||
move d1,ccr //setzen
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\4 d1,\3
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opansmd:.macro // direct ax: 1=operation 2=ea src 3=ea dest 4=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \2,usp
|
|
||||||
move.l usp,a1
|
|
||||||
move.l a1,d1
|
|
||||||
.else
|
|
||||||
move.l \2,d1
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
.ifc \3,usp
|
|
||||||
move.l d1,a1
|
|
||||||
move.l a1,usp
|
|
||||||
.else
|
|
||||||
move.l d1,\3
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opnsia:.macro // indirect: 1=operation 2=adress register 3= src 4=dest 5=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \2,a1
|
|
||||||
.ifc \5,l
|
|
||||||
move.l \3,d1
|
|
||||||
.else
|
|
||||||
mvs.\5 \3,d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,negx
|
|
||||||
move.b sr_off+1(a7),d1 //ccr holen
|
|
||||||
move d1,ccr //setzen
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\5 d1,\4
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opnsd16a:.macro // indirect: 1=operation 2=adress register 3=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,negx
|
|
||||||
move.b sr_off+1(a7),d1 //ccr holen
|
|
||||||
move d1,ccr //setzen
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opnsd8a:.macro // indirect: 1=operation 2=adress register 3=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,negx
|
|
||||||
move.b sr_off+1(a7),d1 //ccr holen
|
|
||||||
move d1,ccr //setzen
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opnsxx:.macro // indirect: 1=operation 2=size 3=size adresse
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \2,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\2 (a1),d1
|
|
||||||
.endif
|
|
||||||
move.\3 (a0)+,a1
|
|
||||||
.ifc \1,negx
|
|
||||||
move.b sr_off+1(a7),d1 //ccr holen
|
|
||||||
move d1,ccr //setzen
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\2 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//*******************************************************************************3
|
|
||||||
opismd:.macro // immediate dx: 1=opieration 2=ea src 3=ea dest 4=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \4,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
.ifc \4,l
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\4 \2,d1
|
|
||||||
.endif
|
|
||||||
\1 d0,d1
|
|
||||||
set_cc0
|
|
||||||
.ifnc \1,cmp.l
|
|
||||||
move.\4 d1,\3
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opaismd:.macro // immediate ax: 1=opieration 2=ea src 3=ea dest 4=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \4,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
.ifc \2,usp
|
|
||||||
move.l usp,a1
|
|
||||||
move.l a1,d1
|
|
||||||
.else
|
|
||||||
move.l \2,d1
|
|
||||||
.endif
|
|
||||||
\1 d0,d1
|
|
||||||
.ifnc \1,cmp.l
|
|
||||||
.ifc \3,usp
|
|
||||||
move.l d1,a1
|
|
||||||
move.l a1,usp
|
|
||||||
.else
|
|
||||||
move.l d1,\3
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opisia:.macro // indirect: 1=opieration 2=adress register 3= src 4=dest 5=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \5,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \5,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.l \2,a1
|
|
||||||
.ifc \5,l
|
|
||||||
move.l \3,d1
|
|
||||||
.else
|
|
||||||
mvs.\5 \3,d1
|
|
||||||
.endif
|
|
||||||
\1 d0,d1
|
|
||||||
set_cc0
|
|
||||||
.ifnc \1,cmp.l
|
|
||||||
move.\5 d1,\4
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opisd16a:.macro // indirect: 1=opieration 2=adress register 3=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \3,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
\1 d0,d1
|
|
||||||
set_cc0
|
|
||||||
.ifnc \1,cmp.l
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opisd8a:.macro // indirect: 1=opieration 2=adress register 3=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \3,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.l d0,_d0_save
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l _d0_save,d0
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
\1 d0,d1
|
|
||||||
set_cc0
|
|
||||||
.ifnc \1,cmp.l
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opisxx:.macro // immediate: 1=opieration 2=size 3=size adresse
|
|
||||||
.ifc \2,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \2,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.\3 (a0)+,a1
|
|
||||||
.ifc \2,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\2 (a1),d1
|
|
||||||
.endif
|
|
||||||
\1 d0,d1
|
|
||||||
set_cc0
|
|
||||||
.ifnc \1,cmp.l
|
|
||||||
move.\2 d1,(a1)
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//*******************************************************************************3
|
|
||||||
opqsmd:.macro // quick: 1=opieration 2=ea src 3=ea dest 4=size
|
|
||||||
.ifc \4,l
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\4 \2,d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 ,d1
|
|
||||||
set_cc0
|
|
||||||
move.\4 d1,\3
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opaqsmd:.macro // quick: 1=opieration 2=ea src 3=ea dest 4=size
|
|
||||||
.ifc \2,usp
|
|
||||||
move.l usp,a1
|
|
||||||
move.l a1,d1
|
|
||||||
.else
|
|
||||||
move.l \2,d1
|
|
||||||
.endif
|
|
||||||
\1 ,d1
|
|
||||||
.ifc \3,usp
|
|
||||||
move.l d1,a1
|
|
||||||
move.l a1,usp
|
|
||||||
.else
|
|
||||||
move.l d1,\3
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opqsia:.macro // indirect: 1=opieration 2=adress register 3= src 4=dest 5=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
move.l \2,a1
|
|
||||||
.ifc \5,l
|
|
||||||
move.l \3,d1
|
|
||||||
.else
|
|
||||||
mvs.\5 \3,d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 ,d1
|
|
||||||
set_cc0
|
|
||||||
move.\5 d1,\4
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opqsd16a:.macro // indirect: 1=opieration 2=adress register 3=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 ,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opqsd8a:.macro // indirect: 1=opieration 2=adress register 3=size
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
move.l d0,_d0_save
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l _d0_save,d0
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 ,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opqsxx:.macro // quick: 1=opieration 2=size 3=size adresse
|
|
||||||
#ifdef halten_op
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
move.\3 (a0)+,a1
|
|
||||||
.ifc \2,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\2 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 ,d1
|
|
||||||
set_cc0
|
|
||||||
move.\2 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
263
include/ii_opc.h
263
include/ii_opc.h
@@ -1,263 +0,0 @@
|
|||||||
/*****************************************************************************************/
|
|
||||||
// functionen macros: fehlende adressierungsarte (MCF nur Dx support) ohne ax
|
|
||||||
// zusammen mit op.h
|
|
||||||
/*****************************************************************************************/
|
|
||||||
ii_lset_opc:.macro
|
|
||||||
ii_lset_opeag \1,c // dx,ax
|
|
||||||
ii_lset_opea \1,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \1,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \1,f // d8(ax,dy)
|
|
||||||
lea table+0x\1b8*4,a0
|
|
||||||
move.l #ii_0x\1b8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\1b9,(a0)+ // xxx.l
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/******************************************************/
|
|
||||||
ii_opc:.macro // 1=code 2=operation 3 = normal oder immediat
|
|
||||||
opcdx \1,\2,l,c,\3 // dx,ax
|
|
||||||
opia \1,\2,l,d,\3 // (ax),(ax)+
|
|
||||||
opdia \1,\2,l,e,\3 // -(ax),d16(ax)
|
|
||||||
opd8a \1,\2,l,f,\3 // d8(ax),xxx
|
|
||||||
.endm
|
|
||||||
//*******************************************************************************3
|
|
||||||
/******************************************************/
|
|
||||||
// byt word long
|
|
||||||
/******************************************************/
|
|
||||||
opcdx: .macro //register: \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal
|
|
||||||
ii_0x\1\40:
|
|
||||||
#ifdef halten_opc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
.ifc \3,b
|
|
||||||
op\5smd \2,d0_off+3(a7),d0_off+3(a7),\3
|
|
||||||
.else
|
|
||||||
.ifc \3,w
|
|
||||||
op\5smd \2,d0_off+2(a7),d0_off+2(a7),\3
|
|
||||||
.else
|
|
||||||
op\5smd \2,d0_off(a7),d0_off(a7),\3
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
ii_0x\1\41:
|
|
||||||
.ifc \3,b
|
|
||||||
op\5smd \2,d1_off+3(a7),d1_off+3(a7),\3
|
|
||||||
.else
|
|
||||||
.ifc \3,w
|
|
||||||
op\5smd \2,d1_off+2(a7),d1_off+2(a7),\3
|
|
||||||
.else
|
|
||||||
op\5smd \2,d1_off(a7),d1_off(a7),\3
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
ii_0x\1\42:
|
|
||||||
op\5smd \2,d2,d2,\3
|
|
||||||
ii_0x\1\43:
|
|
||||||
op\5smd \2,d3,d3,\3
|
|
||||||
ii_0x\1\44:
|
|
||||||
op\5smd \2,d4,d4,\3
|
|
||||||
ii_0x\1\45:
|
|
||||||
op\5smd \2,d5,d5,\3
|
|
||||||
ii_0x\1\46:
|
|
||||||
op\5smd \2,d6,d6,\3
|
|
||||||
ii_0x\1\47:
|
|
||||||
op\5smd \2,d7,d7,\3
|
|
||||||
.endm
|
|
||||||
//-----------------------------------------------------
|
|
||||||
opcsmd:.macro // dx: 1=opieration 2=ea src 3=ea dest 4=size
|
|
||||||
#ifdef halten_opc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \4,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
.ifc \4,l
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\4 \2,d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\4 d1,\3
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opacsmd:.macro // ax: 1=opieration 2=ea src 3=ea dest 4=size
|
|
||||||
#ifdef halten_opc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \4,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
.ifc \2,usp
|
|
||||||
move.l usp,a1
|
|
||||||
move.l a1,d1
|
|
||||||
.else
|
|
||||||
move.l \2,d1
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
.ifc \3,usp
|
|
||||||
move.l d1,a1
|
|
||||||
move.l a1,usp
|
|
||||||
.else
|
|
||||||
move.l d1,\3
|
|
||||||
.endif
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opcsia:.macro // (ax) (ax)+ -(ax): 1=opieration 2=adress register 3= src 4=dest 5=size
|
|
||||||
#ifdef halten_opc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \4,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.l \2,a1
|
|
||||||
.ifc \5,l
|
|
||||||
move.l \3,d1
|
|
||||||
.else
|
|
||||||
mvs.\5 \3,d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\5 d1,\4
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opcsd16a:.macro // d16(ax): 1=opieration 2=adress register 3=size
|
|
||||||
#ifdef halten_opc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \4,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opcsd8a:.macro // indirect: 1=opieration 2=adress register 3=size
|
|
||||||
#ifdef halten_opc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \4,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.l d0,_d0_save
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l _d0_save,d0
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
|
|
||||||
opcsxx:.macro // indirect: 1=opieration 2=size 3=size adresse
|
|
||||||
#ifdef halten_opc
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ifc \2,l
|
|
||||||
move.l (a0)+,d0
|
|
||||||
.else
|
|
||||||
.ifc \2,w
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
.else
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.\3 (a0)+,a1
|
|
||||||
.ifc \2,l
|
|
||||||
move.l (a1),d1
|
|
||||||
.else
|
|
||||||
mvs.\2 (a1),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d0
|
|
||||||
move.l d0_off(a7),d1
|
|
||||||
.endif
|
|
||||||
.ifc \1,eor.l d1
|
|
||||||
move.l d1_off(a7),d1
|
|
||||||
.endif
|
|
||||||
\1 d1
|
|
||||||
set_cc0
|
|
||||||
move.\2 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
442
include/ii_or.h
442
include/ii_or.h
@@ -1,442 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// or
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
/*****************************************************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// byt
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// or.b #im,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orbir_macro:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
mvs.b \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.b d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or ea,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ordd:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or ea(l)->dy(w),dx z.B. f<>r USP
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orddd:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 a1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or (ea)->dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ordda:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or ea->ay,(ay)+,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orddai:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1)+,d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or ea->ay,-(ay),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orddad:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 -(a1),d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or d16(ay),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ord16ad:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or d8(ay,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ord8ad:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orxwd:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or xxx.l,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orxld:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or d16(pc),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ord16pcd:.macro
|
|
||||||
halt
|
|
||||||
move.l a0,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or d8(pc,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ord8pcd:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// or dy,ea
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or (ea)->dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
oreda:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or dx,ea->ay,(ay)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
oredai:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)+
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or dx,ea->ay,(ay)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
oredaid:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2+
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or dx,ea->ay,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
oredad:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 -(a1),d1
|
|
||||||
move.l a1,\2
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or dx,ea->ay,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
oredadd:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 -\2,d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or dx,d16(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ore16ad:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or.w dx,d8(ay,dy)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ore8ad:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
move.l \1,d0
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
.endif
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or dx,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orxwe:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // or dx,xxx.l
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orxle:.macro
|
|
||||||
#ifdef halten_or
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
or.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w ea,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
oraw:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// or.w ea,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawa7:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w usp?,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawu:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w usp?,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawua7:.macro
|
|
||||||
orawu \1,\2
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w d16(ay),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawd16a:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawd8a:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w xxx.w,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawxwax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w xxx.l,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawxlax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w d16(pc),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawd16pcax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawd8pcax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.w #im,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orawim:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.l d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orald8a:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // ora.l d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
orald8pcax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//*****************************************************************************************
|
|
||||||
// spezial addx subx etc.
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // addx dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ordx:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // addx -(ay),-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ordax:.macro
|
|
||||||
jmp ii_error
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// pea
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
.text
|
|
||||||
ii_pea_lset:.macro
|
|
||||||
ii_lset_opeag 48,7
|
|
||||||
ii_lset 0x487b
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
ii_pea_func:.macro
|
|
||||||
ii_0x4870:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0_off(a7),a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x4871:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a1_off(a7),a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x4872:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a2,a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x4873:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a3,a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x4874:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a4,a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x4875:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a5,a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x4876:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a6,a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x4877:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l usp,a1
|
|
||||||
pea_macro
|
|
||||||
ii_0x487b:
|
|
||||||
#ifdef halten_pea
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
pea_macro
|
|
||||||
.endm
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
pea_macro:.macro
|
|
||||||
jsr ewf
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l usp,a1
|
|
||||||
move.l d0,-(a1)
|
|
||||||
move.l a1,usp
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
247
include/ii_shd.h
247
include/ii_shd.h
@@ -1,247 +0,0 @@
|
|||||||
/*****************************************************************************************/
|
|
||||||
// opertionen
|
|
||||||
/*****************************************************************************************/
|
|
||||||
ii_lset_shd:.macro
|
|
||||||
ii_lset_shdx e0 //r d0
|
|
||||||
ii_lset_shdx e2 //r d1
|
|
||||||
ii_lset_shdx e4 //r d2
|
|
||||||
ii_lset_shdx e6 //r d3
|
|
||||||
ii_lset_shdx e8 //r d4
|
|
||||||
ii_lset_shdx ea //r d5
|
|
||||||
ii_lset_shdx ec //r d6
|
|
||||||
ii_lset_shdx ee //r d7
|
|
||||||
|
|
||||||
ii_lset_shdx e1 //l d0
|
|
||||||
ii_lset_shdx e3 //l d1
|
|
||||||
ii_lset_shdx e4 //l d2
|
|
||||||
ii_lset_shdx e5 //l d3
|
|
||||||
ii_lset_shdx e9 //l d4
|
|
||||||
ii_lset_shdx eb //l d5
|
|
||||||
ii_lset_shdx ed //l d6
|
|
||||||
ii_lset_shdx ef //l d7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_lset_shdx:.macro
|
|
||||||
//byt
|
|
||||||
ii_lset_opea \1,0 // as,ls #im,dx
|
|
||||||
ii_lset_opea \1,1 // rox,ro #im,dx
|
|
||||||
ii_lset_opea \1,2 // as,ls dy,dx
|
|
||||||
ii_lset_opea \1,3 // rox,ro dy,dx
|
|
||||||
//word
|
|
||||||
ii_lset_opea \1,4 // as,ls #im,dx
|
|
||||||
ii_lset_opea \1,5 // rox,ro #im,dx
|
|
||||||
ii_lset_opea \1,6 // as,ls dy,dx
|
|
||||||
ii_lset_opea \1,7 // rox,ro dy,dx
|
|
||||||
//long
|
|
||||||
// ii_lset_opea \1,8 // as,ls #im,dx -> vorhanden
|
|
||||||
ii_lset_opea \1,9 // rox,ro #im,dx
|
|
||||||
// ii_lset_opea \1,a // as,ls dy,dx -> vorhanden
|
|
||||||
ii_lset_opea \1,b // rox,ro dy,dx
|
|
||||||
.endm
|
|
||||||
/******************************************************/
|
|
||||||
ii_shd:.macro // 1=code 2=operation 3 = normal, direct oder immediat
|
|
||||||
// byt
|
|
||||||
opdx \1,\2,b,0,\3 // dx
|
|
||||||
// word
|
|
||||||
opdx \1,\2,w,4,\3 // dx
|
|
||||||
// long
|
|
||||||
opdx \1,\2,l,8,\3 // dx
|
|
||||||
.endm
|
|
||||||
/******************************************************/
|
|
||||||
// byt word long routinen
|
|
||||||
/******************************************************/
|
|
||||||
sh_asr: .macro // asr -> 1=operation 2 = dx 3 = dy/im 4 = size b/w
|
|
||||||
mvs.\4 \2,d1
|
|
||||||
sh_shal \1,\2,\3,\4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
sh_lsr: .macro // asl -> 1=operation 2 = dx 3 = dy/im 4 = size b/w
|
|
||||||
mvz.\4 \2,d1
|
|
||||||
sh_shal \1,\2,\3,\4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
sh_shal:.macro
|
|
||||||
move.w \3,d0
|
|
||||||
\1.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\4 d1,\2
|
|
||||||
.endm
|
|
||||||
|
|
||||||
sh_all: .macro // asl/lsl -> 1=operation 2 = dx 3 = dy/im 4 = size b/w
|
|
||||||
mvz.\4 \2,d1
|
|
||||||
.ifc \4,b
|
|
||||||
byterev.l d1
|
|
||||||
.else
|
|
||||||
swap.w d1
|
|
||||||
.endif
|
|
||||||
sh_asr \1,\2,\3,\4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
sh_ror: .macro // ror -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
|
||||||
move.\4 \2,d1 /
|
|
||||||
move.w \3,d0
|
|
||||||
.ifc \4,b
|
|
||||||
lsl.l #8,d1
|
|
||||||
move.b \2,d1
|
|
||||||
and.l #0x7,d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
swap.w d1
|
|
||||||
move.w \2,d1
|
|
||||||
and.l #0xf,d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
.else
|
|
||||||
and.l #0x1f,d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
move.l d1,a1
|
|
||||||
move.l \2,d1
|
|
||||||
sub.l #32,d0
|
|
||||||
neg.l d0
|
|
||||||
lsl.l d0,d1
|
|
||||||
add.l a1,d1
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.\4 d1,\2
|
|
||||||
move.w ccr,d0
|
|
||||||
and.l #1,d1 // ist auch carry bit
|
|
||||||
or.l d1,d0
|
|
||||||
move.b d0,ccr_off(a7)
|
|
||||||
.endm
|
|
||||||
|
|
||||||
sh_rol: .macro // rol -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
|
||||||
move.\4 \2,d1
|
|
||||||
move.w \3,d0
|
|
||||||
.ifc \4,b
|
|
||||||
lsl.l #8,d1
|
|
||||||
move.b \2,d1
|
|
||||||
and.l #0x7,d0
|
|
||||||
lsl.l d0,d1
|
|
||||||
lsr.l #8,d1
|
|
||||||
moveq #7,d0
|
|
||||||
.else
|
|
||||||
.ifc \4,w
|
|
||||||
swap.w d1
|
|
||||||
move.w \2,d1
|
|
||||||
and.l #0xf,d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
swap.w d1
|
|
||||||
moveq #15,d0
|
|
||||||
.else
|
|
||||||
and.l #0x1f,d0
|
|
||||||
lsl.l d0,d1
|
|
||||||
move.l d1,a1
|
|
||||||
move.l \2,d1
|
|
||||||
sub.l #32,d0
|
|
||||||
neg.l d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
add.l a1,d1
|
|
||||||
moveq #31,d0
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.\4 d1,\2
|
|
||||||
lsr.l d0,d1 // carry bit schieben
|
|
||||||
move.w ccr,d0
|
|
||||||
and.l #1,d1
|
|
||||||
or.l d1,d0
|
|
||||||
move.b d0,ccr_off(a7)
|
|
||||||
.endm
|
|
||||||
|
|
||||||
sh_roxr: .macro // roxr -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
|
||||||
clr.l d0
|
|
||||||
addx.l d0,d0
|
|
||||||
ifc \4,b
|
|
||||||
mvz.b \2,d1
|
|
||||||
lsl.l #1,d1
|
|
||||||
add.l d0,d1
|
|
||||||
lsl.l #8,d1
|
|
||||||
move.b \2,d1
|
|
||||||
move.w \3,d0
|
|
||||||
and.l #0x7,d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
else
|
|
||||||
.ifc \4,w
|
|
||||||
mvz.b \2,d1
|
|
||||||
lsl.l #1,d1
|
|
||||||
add.l d0,d1
|
|
||||||
lsl.l #8,d1
|
|
||||||
lsl.l #8,d1
|
|
||||||
move.w \2,d1
|
|
||||||
move.w \3,d0
|
|
||||||
and.l #0xf,d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
.else
|
|
||||||
bitrev.l d0
|
|
||||||
move.l \2,d1
|
|
||||||
lsr.l #1,d1
|
|
||||||
add.l d0,d1
|
|
||||||
move.w \3,d0
|
|
||||||
subq.l #1,d0
|
|
||||||
and.l #0x1f,d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
move.l d1,a1
|
|
||||||
set_cc1
|
|
||||||
move.l \2,d1
|
|
||||||
sub.l #32,d0
|
|
||||||
neg.l d0
|
|
||||||
lsl.l d0,d1
|
|
||||||
add.l a1,d1
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.\4 d1,\2
|
|
||||||
.endm
|
|
||||||
|
|
||||||
sh_roxl: .macro // roxl -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
|
||||||
clr.l d0
|
|
||||||
addx.l d0,d0
|
|
||||||
ifc \4,b
|
|
||||||
mvz.b \2,d1
|
|
||||||
lsl.l #1,d1
|
|
||||||
add.l d0,d1
|
|
||||||
lsl.l #8,d1
|
|
||||||
move.b \2,d1
|
|
||||||
lsl.l #8,d1
|
|
||||||
lsl.l #7,d1
|
|
||||||
move.w \3,d0
|
|
||||||
and.l #0x7,d0
|
|
||||||
lsl.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
byterev.l d1
|
|
||||||
else
|
|
||||||
.ifc \4,w
|
|
||||||
mvz.b \2,d1
|
|
||||||
lsl.l #1,d1
|
|
||||||
add.l d0,d1
|
|
||||||
lsl.l #8,d1
|
|
||||||
lsl.l #7,d1
|
|
||||||
mvz.w \2,d0
|
|
||||||
lsr.l #1,d0
|
|
||||||
add.l d0,d1
|
|
||||||
move.w \3,d0
|
|
||||||
and.l #0xf,d0
|
|
||||||
lsl.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
swap.w d1
|
|
||||||
.else
|
|
||||||
move.l \2,d1
|
|
||||||
lsl.l #1,d1
|
|
||||||
add.l d0,d1
|
|
||||||
move.w \3,d0
|
|
||||||
subq.l #1,d0
|
|
||||||
and.l #0x1f,d0
|
|
||||||
lsl.l d0,d1
|
|
||||||
move.l d1,a1
|
|
||||||
set_cc1
|
|
||||||
move.l \2,d1
|
|
||||||
sub.l #32,d0
|
|
||||||
neg.l d0
|
|
||||||
lsr.l d0,d1
|
|
||||||
add.l a1,d1
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
move.\4 d1,\2
|
|
||||||
.endm
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,687 +0,0 @@
|
|||||||
/*****************************************************************************************/
|
|
||||||
// opertionen
|
|
||||||
/*****************************************************************************************/
|
|
||||||
ii_shift_lset:.macro
|
|
||||||
/******************************************************/
|
|
||||||
// byt
|
|
||||||
/******************************************************/
|
|
||||||
// asx.b #,dx
|
|
||||||
ii_lset_dx \1,00 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
ii_lset_dx \1,01
|
|
||||||
ii_lset_dx \1,02
|
|
||||||
ii_lset_dx \1,03
|
|
||||||
ii_lset_dx \1,04
|
|
||||||
ii_lset_dx \1,05
|
|
||||||
ii_lset_dx \1,06
|
|
||||||
ii_lset_dx \1,07
|
|
||||||
// lsx.b #,dx
|
|
||||||
ii_lset_dxu \1,08
|
|
||||||
ii_lset_dxu \1,09
|
|
||||||
ii_lset_dxu \1,0a
|
|
||||||
ii_lset_dxu \1,0b
|
|
||||||
ii_lset_dxu \1,0c
|
|
||||||
ii_lset_dxu \1,0d
|
|
||||||
ii_lset_dxu \1,0e
|
|
||||||
ii_lset_dxu \1,0f
|
|
||||||
// roxx.b #,dx
|
|
||||||
ii_lset_dx \1,10
|
|
||||||
ii_lset_dx \1,11
|
|
||||||
ii_lset_dx \1,12
|
|
||||||
ii_lset_dx \1,13
|
|
||||||
ii_lset_dx \1,14
|
|
||||||
ii_lset_dx \1,15
|
|
||||||
ii_lset_dx \1,16
|
|
||||||
ii_lset_dx \1,17
|
|
||||||
// rox.b #,dx
|
|
||||||
ii_lset_dx \1,18
|
|
||||||
ii_lset_dx \1,19
|
|
||||||
ii_lset_dx \1,1a
|
|
||||||
ii_lset_dx \1,1b
|
|
||||||
ii_lset_dx \1,1c
|
|
||||||
ii_lset_dx \1,1d
|
|
||||||
ii_lset_dx \1,1e
|
|
||||||
ii_lset_dx \1,1f
|
|
||||||
// asx.b dy,dx
|
|
||||||
ii_lset_dx \1,20
|
|
||||||
ii_lset_dx \1,21
|
|
||||||
ii_lset_dx \1,22
|
|
||||||
ii_lset_dx \1,23
|
|
||||||
ii_lset_dx \1,24
|
|
||||||
ii_lset_dx \1,25
|
|
||||||
ii_lset_dx \1,26
|
|
||||||
ii_lset_dx \1,27
|
|
||||||
// lsx.b dy,dx
|
|
||||||
ii_lset_dx \1,28
|
|
||||||
ii_lset_dx \1,29
|
|
||||||
ii_lset_dx \1,2a
|
|
||||||
ii_lset_dx \1,2b
|
|
||||||
ii_lset_dx \1,2c
|
|
||||||
ii_lset_dx \1,2d
|
|
||||||
ii_lset_dx \1,2e
|
|
||||||
ii_lset_dx \1,2f
|
|
||||||
// roxx.dy,dx
|
|
||||||
ii_lset_dx \1,30
|
|
||||||
ii_lset_dx \1,31
|
|
||||||
ii_lset_dx \1,32
|
|
||||||
ii_lset_dx \1,33
|
|
||||||
ii_lset_dx \1,34
|
|
||||||
ii_lset_dx \1,35
|
|
||||||
ii_lset_dx \1,36
|
|
||||||
ii_lset_dx \1,37
|
|
||||||
// rox.b dy,dx
|
|
||||||
ii_lset_dx \1,38
|
|
||||||
ii_lset_dx \1,39
|
|
||||||
ii_lset_dx \1,3a
|
|
||||||
ii_lset_dx \1,3b
|
|
||||||
ii_lset_dx \1,3c
|
|
||||||
ii_lset_dx \1,3d
|
|
||||||
ii_lset_dx \1,3e
|
|
||||||
ii_lset_dx \1,3f
|
|
||||||
/******************************************************/
|
|
||||||
// word
|
|
||||||
/******************************************************/
|
|
||||||
// asx.w #x,dx
|
|
||||||
ii_lset_dx \1,40 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
|
||||||
ii_lset_dx \1,41
|
|
||||||
ii_lset_dx \1,42
|
|
||||||
ii_lset_dx \1,43
|
|
||||||
ii_lset_dx \1,44
|
|
||||||
ii_lset_dx \1,45
|
|
||||||
ii_lset_dx \1,46
|
|
||||||
ii_lset_dx \1,47
|
|
||||||
// lsx.w #,dx
|
|
||||||
ii_lset_dx \1,48
|
|
||||||
ii_lset_dx \1,49
|
|
||||||
ii_lset_dx \1,4a
|
|
||||||
ii_lset_dx \1,4b
|
|
||||||
ii_lset_dx \1,4c
|
|
||||||
ii_lset_dx \1,4d
|
|
||||||
ii_lset_dx \1,4e
|
|
||||||
ii_lset_dx \1,4f
|
|
||||||
// roxx.w #,dx
|
|
||||||
ii_lset_dx \1,50
|
|
||||||
ii_lset_dx \1,51
|
|
||||||
ii_lset_dx \1,52
|
|
||||||
ii_lset_dx \1,53
|
|
||||||
ii_lset_dx \1,54
|
|
||||||
ii_lset_dx \1,55
|
|
||||||
ii_lset_dx \1,56
|
|
||||||
ii_lset_dx \1,57
|
|
||||||
// rox.w #xdx
|
|
||||||
ii_lset_dx \1,58
|
|
||||||
ii_lset_dx \1,59
|
|
||||||
ii_lset_dx \1,5a
|
|
||||||
ii_lset_dx \1,5b
|
|
||||||
ii_lset_dx \1,5c
|
|
||||||
ii_lset_dx \1,5d
|
|
||||||
ii_lset_dx \1,5e
|
|
||||||
ii_lset_dx \1,5f
|
|
||||||
// asx.w dy,dx
|
|
||||||
ii_lset_dx \1,60
|
|
||||||
ii_lset_dx \1,61
|
|
||||||
ii_lset_dx \1,62
|
|
||||||
ii_lset_dx \1,63
|
|
||||||
ii_lset_dx \1,64
|
|
||||||
ii_lset_dx \1,65
|
|
||||||
ii_lset_dx \1,66
|
|
||||||
ii_lset_dx \1,67
|
|
||||||
// lsx.w dy,dx
|
|
||||||
ii_lset_dx \1,68
|
|
||||||
ii_lset_dx \1,69
|
|
||||||
ii_lset_dx \1,6a
|
|
||||||
ii_lset_dx \1,6b
|
|
||||||
ii_lset_dx \1,6c
|
|
||||||
ii_lset_dx \1,6d
|
|
||||||
ii_lset_dx \1,6e
|
|
||||||
ii_lset_dx \1,6f
|
|
||||||
// roxx.w dy,dx
|
|
||||||
ii_lset_dx \1,70
|
|
||||||
ii_lset_dx \1,71
|
|
||||||
ii_lset_dx \1,72
|
|
||||||
ii_lset_dx \1,73
|
|
||||||
ii_lset_dx \1,74
|
|
||||||
ii_lset_dx \1,75
|
|
||||||
ii_lset_dx \1,76
|
|
||||||
ii_lset_dx \1,77
|
|
||||||
// rox.w dy,dx
|
|
||||||
ii_lset_dx \1,78
|
|
||||||
ii_lset_dx \1,79
|
|
||||||
ii_lset_dx \1,7a
|
|
||||||
ii_lset_dx \1,7b
|
|
||||||
ii_lset_dx \1,7c
|
|
||||||
ii_lset_dx \1,7d
|
|
||||||
ii_lset_dx \1,7e
|
|
||||||
ii_lset_dx \1,7f
|
|
||||||
/******************************************************/
|
|
||||||
// long
|
|
||||||
/******************************************************/
|
|
||||||
// roxx.l #,dx
|
|
||||||
ii_lset_dx \1,90
|
|
||||||
ii_lset_dx \1,91
|
|
||||||
ii_lset_dx \1,92
|
|
||||||
ii_lset_dx \1,93
|
|
||||||
ii_lset_dx \1,94
|
|
||||||
ii_lset_dx \1,95
|
|
||||||
ii_lset_dx \1,96
|
|
||||||
ii_lset_dx \1,97
|
|
||||||
// rox.l #xdx
|
|
||||||
ii_lset_dx \1,98
|
|
||||||
ii_lset_dx \1,99
|
|
||||||
ii_lset_dx \1,9a
|
|
||||||
ii_lset_dx \1,9b
|
|
||||||
ii_lset_dx \1,9c
|
|
||||||
ii_lset_dx \1,9d
|
|
||||||
ii_lset_dx \1,9e
|
|
||||||
ii_lset_dx \1,9f
|
|
||||||
// roxx.l dy,dx
|
|
||||||
ii_lset_dx \1,b0
|
|
||||||
ii_lset_dx \1,b1
|
|
||||||
ii_lset_dx \1,b2
|
|
||||||
ii_lset_dx \1,b3
|
|
||||||
ii_lset_dx \1,b4
|
|
||||||
ii_lset_dx \1,b5
|
|
||||||
ii_lset_dx \1,b6
|
|
||||||
ii_lset_dx \1,b7
|
|
||||||
// rox.l dy,dx
|
|
||||||
ii_lset_dx \1,b8
|
|
||||||
ii_lset_dx \1,b9
|
|
||||||
ii_lset_dx \1,ba
|
|
||||||
ii_lset_dx \1,bb
|
|
||||||
ii_lset_dx \1,bc
|
|
||||||
ii_lset_dx \1,bd
|
|
||||||
ii_lset_dx \1,be
|
|
||||||
ii_lset_dx \1,bf
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// asr.w ea
|
|
||||||
ii_lset_opea \10,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \10,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \10,f // d8(ax,dy)
|
|
||||||
lea table+0x\10\2f8*4,a0
|
|
||||||
move.l #ii_0x\10f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\10f9,(a0)+ // xxx.l
|
|
||||||
// asl.w ea
|
|
||||||
ii_lset_opea \11,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \11,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \11,f // d8(ax,dy)
|
|
||||||
lea table+0x\11\2f8*4,a0
|
|
||||||
move.l #ii_0x\11f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\11f9,(a0)+ // xxx.l
|
|
||||||
// lsr.w ea
|
|
||||||
ii_lset_opea \12,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \12,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \12,f // d8(ax,dy)
|
|
||||||
lea table+0x\12\2f8*4,a0
|
|
||||||
move.l #ii_0x\12f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\12f9,(a0)+ // xxx.l
|
|
||||||
// lsr.w ea
|
|
||||||
ii_lset_opea \13,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \13,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \13,f // d8(ax,dy)
|
|
||||||
lea table+0x\13\2f8*4,a0
|
|
||||||
move.l #ii_0x\13f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\13f9,(a0)+ // xxx.l
|
|
||||||
// roxr.w ea
|
|
||||||
ii_lset_opea \14,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \14,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \14,f // d8(ax,dy)
|
|
||||||
lea table+0x\14\2f8*4,a0
|
|
||||||
move.l #ii_0x\14f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\14f9,(a0)+ // xxx.l
|
|
||||||
// roxl.w ea
|
|
||||||
ii_lset_opea \15,e // (ax), (ax)+
|
|
||||||
ii_lset_opea \15,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \15,f // d8(ax,dy)
|
|
||||||
lea table+0x\15\2f8*4,a0
|
|
||||||
move.l #ii_0x\15f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\15f9,(a0)+ // xxx.l
|
|
||||||
// ror.w ea
|
|
||||||
ii_lset_opea \16,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \16,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \16,f // d8(ax,dy)
|
|
||||||
lea table+0x\16\2f8*4,a0
|
|
||||||
move.l #ii_0x\16f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\16f9,(a0)+ // xxx.l
|
|
||||||
// rol.w ea
|
|
||||||
ii_lset_opea \17,d // (ax), (ax)+
|
|
||||||
ii_lset_opea \17,e // -(ax),d16(ax)
|
|
||||||
ii_lset_opeag \17,f // d8(ax,dy)
|
|
||||||
lea table+0x\17\2f8*4,a0
|
|
||||||
move.l #ii_0x\17f8,(a0)+ // xxx.w
|
|
||||||
move.l #ii_0x\17f9,(a0)+ // xxx.l
|
|
||||||
// ende
|
|
||||||
.endm;
|
|
||||||
/******************************************************/
|
|
||||||
ii_shift_op:.macro // 1=code
|
|
||||||
//byt-------------------------------
|
|
||||||
//asx.b #x,dx
|
|
||||||
ii_shift_op2agb 0,as,a
|
|
||||||
//lsx.b #x,dx
|
|
||||||
ii_shift_op2aub 0,ls,a
|
|
||||||
//roxx.b #x,dx
|
|
||||||
ii_shift_op2agb 1,rox,a
|
|
||||||
//rox.b #x,dx
|
|
||||||
ii_shift_op2aub 1,ro,a
|
|
||||||
//asx.b dy,dx
|
|
||||||
ii_shift_op2agb 2,as,b
|
|
||||||
//lsx.b dy,dx
|
|
||||||
ii_shift_op2aub 2,ls,b
|
|
||||||
//roxx.b dy,dx
|
|
||||||
ii_shift_op2agb 3,rox,b
|
|
||||||
//rox.b dy,dx
|
|
||||||
ii_shift_op2aub 3,ro,b
|
|
||||||
// word ---------------------------------------
|
|
||||||
//asx.w #x,dx
|
|
||||||
ii_shift_op2agw 4,as,a
|
|
||||||
//lsx.w #x,dx
|
|
||||||
ii_shift_op2auw 4,ls,a
|
|
||||||
//roxx.w #x,dx
|
|
||||||
ii_shift_op2agw 5,rox,a
|
|
||||||
//rox.w #x,dx
|
|
||||||
ii_shift_op2auw 5,ro,a
|
|
||||||
//asx.w dy,dx
|
|
||||||
ii_shift_op2agw 6,as,b
|
|
||||||
//lsx.w dy,dx
|
|
||||||
ii_shift_op2auw 6,ls,b
|
|
||||||
//roxx.w dy,dx
|
|
||||||
ii_shift_op2agw 7,rox,b
|
|
||||||
//rox.w dy,dx
|
|
||||||
ii_shift_op2auw 7,ro,b
|
|
||||||
// long ---------------------------------------
|
|
||||||
//roxx.l #x,dx
|
|
||||||
ii_shift_op2agw 9,rox,a
|
|
||||||
//rox.l #x,dx
|
|
||||||
ii_shift_op2auw 9,ro,a
|
|
||||||
//roxx.l dy,dx
|
|
||||||
ii_shift_op2agw b,rox,b
|
|
||||||
//rox.l dy,dx
|
|
||||||
ii_shift_op2auw b,ro,b
|
|
||||||
// ea ---------------------------------------
|
|
||||||
//asr.w #1,ea
|
|
||||||
ii_shift_op2ea 0,asr
|
|
||||||
//asl.w #1,ea
|
|
||||||
ii_shift_op2ea 1,asl
|
|
||||||
//lsr.w #1,ea
|
|
||||||
ii_shift_op2ea 2,lsr,
|
|
||||||
//lsl.w #1,ea
|
|
||||||
ii_shift_op2ea 3,lsl
|
|
||||||
//roxr.w #1,ea
|
|
||||||
ii_shift_op2ea 4,roxr
|
|
||||||
//roxl.w #1,ea
|
|
||||||
ii_shift_op2ea 5,roxl
|
|
||||||
//ror.w #1,ea
|
|
||||||
ii_shift_op2ea 6,ror
|
|
||||||
//rol.w #1,ea
|
|
||||||
ii_shift_op2ea 7,rol
|
|
||||||
.endm
|
|
||||||
//byt ============================================
|
|
||||||
ii_shift_op2agb:.macro //byt: 1=code 2=operation 3=quick(a) oder register(b)
|
|
||||||
ii_shift_op1\3b \1,0,\2,d0_off+3(a7)
|
|
||||||
ii_shift_op1\3b \1,1,\2,d1_off+3(a7)
|
|
||||||
ii_shift_op1\3b \1,2,\2,d2
|
|
||||||
ii_shift_op1\3b \1,3,\2,d3
|
|
||||||
ii_shift_op1\3b \1,4,\2,d4
|
|
||||||
ii_shift_op1\3b \1,5,\2,d5
|
|
||||||
ii_shift_op1\3b \1,6,\2,d6
|
|
||||||
ii_shift_op1\3b \1,7,\2,d7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op2aub:.macro //byt: 1=code 2=operation
|
|
||||||
ii_shift_op1\3b \1,8,\2,d0_off+3(a7)
|
|
||||||
ii_shift_op1\3b \1,9,\2,d1_off+3(a7)
|
|
||||||
ii_shift_op1\3b \1,a,\2,d2
|
|
||||||
ii_shift_op1\3b \1,b,\2,d3
|
|
||||||
ii_shift_op1\3b \1,c,\2,d4
|
|
||||||
ii_shift_op1\3b \1,d,\2,d5
|
|
||||||
ii_shift_op1\3b \1,e,\2,d6
|
|
||||||
ii_shift_op1\3b \1,f,\2,d7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op1ab:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
|
||||||
ii_shift_op0 0\1\2,b,\3r,#8,\4
|
|
||||||
ii_shift_op0 2\1\2,b,\3r,#1,\4
|
|
||||||
ii_shift_op0 4\1\2,b,\3r,#2,\4
|
|
||||||
ii_shift_op0 6\1\2,b,\3r,#3,\4
|
|
||||||
ii_shift_op0 8\1\2,b,\3r,#4,\4
|
|
||||||
ii_shift_op0 a\1\2,b,\3r,#5,\4
|
|
||||||
ii_shift_op0 c\1\2,b,\3r,#6,\4
|
|
||||||
ii_shift_op0 e\1\2,b,\3r,#7,\4
|
|
||||||
ii_shift_op0 1\1\2,b,\3l,#8,\4
|
|
||||||
ii_shift_op0 3\1\2,b,\3l,#1,\4
|
|
||||||
ii_shift_op0 5\1\2,b,\3l,#2,\4
|
|
||||||
ii_shift_op0 7\1\2,b,\3l,#3,\4
|
|
||||||
ii_shift_op0 9\1\2,b,\3l,#4,\4
|
|
||||||
ii_shift_op0 b\1\2,b,\3l,#5,\4
|
|
||||||
ii_shift_op0 d\1\2,b,\3l,#6,\4
|
|
||||||
ii_shift_op0 f\1\2,b,\3l,#7,\4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op1bb:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
|
||||||
ii_shift_op0b 0\1\2,b,\3r,d0_off(a7),\4
|
|
||||||
ii_shift_op0b 2\1\2,b,\3r,d1_off(a7),\4
|
|
||||||
ii_shift_op0 4\1\2,b,\3r,d2,\4
|
|
||||||
ii_shift_op0 6\1\2,b,\3r,d3,\4
|
|
||||||
ii_shift_op0 8\1\2,b,\3r,d4,\4
|
|
||||||
ii_shift_op0 a\1\2,b,\3r,d5,\4
|
|
||||||
ii_shift_op0 c\1\2,b,\3r,d6,\4
|
|
||||||
ii_shift_op0 e\1\2,b,\3r,d7,\4
|
|
||||||
ii_shift_op0b 1\1\2,b,\3l,d0_off(a7),\4
|
|
||||||
ii_shift_op0b 3\1\2,b,\3l,d1_off(a7),\4
|
|
||||||
ii_shift_op0 5\1\2,b,\3l,d2,\4
|
|
||||||
ii_shift_op0 7\1\2,b,\3l,d3,\4
|
|
||||||
ii_shift_op0 9\1\2,b,\3l,d4,\4
|
|
||||||
ii_shift_op0 b\1\2,b,\3l,d5,\4
|
|
||||||
ii_shift_op0 d\1\2,b,\3l,d6,\4
|
|
||||||
ii_shift_op0 f\1\2,b,\3l,d7,\4
|
|
||||||
.endm
|
|
||||||
// word ---------------------------------------
|
|
||||||
ii_shift_op2agw:.macro //byt: 1=code 2=operation 3=quick(a) oder register(b)
|
|
||||||
ii_shift_op1\3w \1,0,\2,d0_off+2(a7)
|
|
||||||
ii_shift_op1\3w \1,1,\2,d1_off+2(a7)
|
|
||||||
ii_shift_op1\3w \1,2,\2,d2
|
|
||||||
ii_shift_op1\3w \1,3,\2,d3
|
|
||||||
ii_shift_op1\3w \1,4,\2,d4
|
|
||||||
ii_shift_op1\3w \1,5,\2,d5
|
|
||||||
ii_shift_op1\3w \1,6,\2,d6
|
|
||||||
ii_shift_op1\3w \1,7,\2,d7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op2auw:.macro //byt: 1=code 2=operation
|
|
||||||
ii_shift_op1\3w \1,8,\2,d0_off+2(a7)
|
|
||||||
ii_shift_op1\3w \1,9,\2,d1_off+2(a7)
|
|
||||||
ii_shift_op1\3w \1,a,\2,d2
|
|
||||||
ii_shift_op1\3w \1,b,\2,d3
|
|
||||||
ii_shift_op1\3w \1,c,\2,d4
|
|
||||||
ii_shift_op1\3w \1,d,\2,d5
|
|
||||||
ii_shift_op1\3w \1,e,\2,d6
|
|
||||||
ii_shift_op1\3w \1,f,\2,d7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op1aw:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
|
||||||
ii_shift_op0 0\1\2,w,\3r,#8,\4
|
|
||||||
ii_shift_op0 2\1\2,w,\3r,#1,\4
|
|
||||||
ii_shift_op0 4\1\2,w,\3r,#2,\4
|
|
||||||
ii_shift_op0 6\1\2,w,\3r,#3,\4
|
|
||||||
ii_shift_op0 8\1\2,w,\3r,#4,\4
|
|
||||||
ii_shift_op0 a\1\2,w,\3r,#5,\4
|
|
||||||
ii_shift_op0 c\1\2,w,\3r,#6,\4
|
|
||||||
ii_shift_op0 e\1\2,w,\3r,#7,\4
|
|
||||||
ii_shift_op0 1\1\2,w,\3l,#8,\4
|
|
||||||
ii_shift_op0 3\1\2,w,\3l,#1,\4
|
|
||||||
ii_shift_op0 5\1\2,w,\3l,#2,\4
|
|
||||||
ii_shift_op0 7\1\2,w,\3l,#3,\4
|
|
||||||
ii_shift_op0 9\1\2,w,\3l,#4,\4
|
|
||||||
ii_shift_op0 b\1\2,w,\3l,#5,\4
|
|
||||||
ii_shift_op0 d\1\2,w,\3l,#6,\4
|
|
||||||
ii_shift_op0 f\1\2,w,\3l,#7,\4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op1bw:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
|
||||||
ii_shift_op0b 0\1\2,w,\3r,d0_off(a7),\4
|
|
||||||
ii_shift_op0b 2\1\2,w,\3r,d1_off(a7),\4
|
|
||||||
ii_shift_op0 4\1\2,w,\3r,d2,\4
|
|
||||||
ii_shift_op0 6\1\2,w,\3r,d3,\4
|
|
||||||
ii_shift_op0 8\1\2,w,\3r,d4,\4
|
|
||||||
ii_shift_op0 a\1\2,w,\3r,d5,\4
|
|
||||||
ii_shift_op0 c\1\2,w,\3r,d6,\4
|
|
||||||
ii_shift_op0 e\1\2,w,\3r,d7,\4
|
|
||||||
ii_shift_op0b 1\1\2,w,\3l,d0_off(a7),\4
|
|
||||||
ii_shift_op0b 3\1\2,w,\3l,d1_off(a7),\4
|
|
||||||
ii_shift_op0 5\1\2,w,\3l,d2,\4
|
|
||||||
ii_shift_op0 7\1\2,w,\3l,d3,\4
|
|
||||||
ii_shift_op0 9\1\2,w,\3l,d4,\4
|
|
||||||
ii_shift_op0 b\1\2,w,\3l,d5,\4
|
|
||||||
ii_shift_op0 d\1\2,w,\3l,d6,\4
|
|
||||||
ii_shift_op0 f\1\2,w,\3l,d7,\4
|
|
||||||
.endm
|
|
||||||
// long ---------------------------------------
|
|
||||||
ii_shift_op2agl:.macro //byt: 1=code 2=operation 3=quick(a) oder register(b)
|
|
||||||
ii_shift_op1\3l \1,0,\2,d0_off(a7)
|
|
||||||
ii_shift_op1\3l \1,1,\2,d1_off(a7)
|
|
||||||
ii_shift_op1\3l \1,2,\2,d2
|
|
||||||
ii_shift_op1\3l \1,3,\2,d3
|
|
||||||
ii_shift_op1\3l \1,4,\2,d4
|
|
||||||
ii_shift_op1\3l \1,5,\2,d5
|
|
||||||
ii_shift_op1\3l \1,6,\2,d6
|
|
||||||
ii_shift_op1\3l \1,7,\2,d7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op2aul:.macro //byt: 1=code 2=operation
|
|
||||||
ii_shift_op1\3l \1,8,\2,d0_off(a7)
|
|
||||||
ii_shift_op1\3l \1,9,\2,d1_off(a7)
|
|
||||||
ii_shift_op1\3l \1,a,\2,d2
|
|
||||||
ii_shift_op1\3l \1,b,\2,d3
|
|
||||||
ii_shift_op1\3l \1,c,\2,d4
|
|
||||||
ii_shift_op1\3l \1,d,\2,d5
|
|
||||||
ii_shift_op1\3l \1,e,\2,d6
|
|
||||||
ii_shift_op1\3l \1,f,\2,d7
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op1al:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
|
||||||
ii_shift_op0 0\1\2,l,\3r,#8,\4
|
|
||||||
ii_shift_op0 2\1\2,l,\3r,#1,\4
|
|
||||||
ii_shift_op0 4\1\2,l,\3r,#2,\4
|
|
||||||
ii_shift_op0 6\1\2,l,\3r,#3,\4
|
|
||||||
ii_shift_op0 8\1\2,l,\3r,#4,\4
|
|
||||||
ii_shift_op0 a\1\2,l,\3r,#5,\4
|
|
||||||
ii_shift_op0 c\1\2,l,\3r,#6,\4
|
|
||||||
ii_shift_op0 e\1\2,l,\3r,#7,\4
|
|
||||||
ii_shift_op0 1\1\2,l,\3l,#8,\4
|
|
||||||
ii_shift_op0 3\1\2,l,\3l,#1,\4
|
|
||||||
ii_shift_op0 5\1\2,l,\3l,#2,\4
|
|
||||||
ii_shift_op0 7\1\2,l,\3l,#3,\4
|
|
||||||
ii_shift_op0 9\1\2,l,\3l,#4,\4
|
|
||||||
ii_shift_op0 b\1\2,l,\3l,#5,\4
|
|
||||||
ii_shift_op0 d\1\2,l,\3l,#6,\4
|
|
||||||
ii_shift_op0 f\1\2,l,\3l,#7,\4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op1bl:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
|
||||||
ii_shift_op0b 0\1\2,l,\3r,d0_off(a7),\4
|
|
||||||
ii_shift_op0b 2\1\2,l,\3r,d1_off(a7),\4
|
|
||||||
ii_shift_op0 4\1\2,l,\3r,d2,\4
|
|
||||||
ii_shift_op0 6\1\2,l,\3r,d3,\4
|
|
||||||
ii_shift_op0 8\1\2,l,\3r,d4,\4
|
|
||||||
ii_shift_op0 a\1\2,l,\3r,d5,\4
|
|
||||||
ii_shift_op0 c\1\2,l,\3r,d6,\4
|
|
||||||
ii_shift_op0 e\1\2,l,\3r,d7,\4
|
|
||||||
ii_shift_op0b 1\1\2,l,\3l,d0_off(a7),\4
|
|
||||||
ii_shift_op0b 3\1\2,l,\3l,d1_off(a7),\4
|
|
||||||
ii_shift_op0 5\1\2,l,\3l,d2,\4
|
|
||||||
ii_shift_op0 7\1\2,l,\3l,d3,\4
|
|
||||||
ii_shift_op0 9\1\2,l,\3l,d4,\4
|
|
||||||
ii_shift_op0 b\1\2,l,\3l,d5,\4
|
|
||||||
ii_shift_op0 d\1\2,l,\3l,d6,\4
|
|
||||||
ii_shift_op0 f\1\2,l,\3l,d7,\4
|
|
||||||
.endm
|
|
||||||
// .word ea ============================================
|
|
||||||
ii_shift_op2ea:.macro //1=code 2.ziffer 2=shiftart
|
|
||||||
// (a0) bis (a7) ----------------------------
|
|
||||||
ii_0xe\1d0:
|
|
||||||
move.l a0_off(a7),a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1d1:
|
|
||||||
move.l a1_off(a7),a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1d2:
|
|
||||||
ii_shift_typ w,\2,#1,(a2),(a2).
|
|
||||||
ii_0xe\1d3:
|
|
||||||
ii_shift_typ w,\2,#1,(a3),(a3).
|
|
||||||
ii_0xe\1d4:
|
|
||||||
ii_shift_typ w,\2,#1,(a4),(a4).
|
|
||||||
ii_0xe\1d5:
|
|
||||||
ii_shift_typ w,\2,#1,(a5),(a5).
|
|
||||||
ii_0xe\1d6:
|
|
||||||
ii_shift_typ w,\2,#1,(a6),(a6).
|
|
||||||
ii_0xe\1d7:
|
|
||||||
move.l usp,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
// (a0)+ bis (a7)+ -----------------------------
|
|
||||||
ii_0xe\1d8:
|
|
||||||
move.l a0_off(a7),a1
|
|
||||||
addq.l #2,a0_off(a7)
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1d9:
|
|
||||||
move.l a1_off(a7),a1
|
|
||||||
addq.l #2,a0_off(a7)
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1da:
|
|
||||||
ii_shift_typ w,\2,#1,(a2),(a2)+.
|
|
||||||
ii_0xe\1db:
|
|
||||||
ii_shift_typ w,\2,#1,(a3),(a3)+
|
|
||||||
ii_0xe\1dc:
|
|
||||||
ii_shift_typ w,\2,#1,(a4),(a4)+
|
|
||||||
ii_0xe\1dd:
|
|
||||||
ii_shift_typ w,\2,#1,(a5),(a5)+
|
|
||||||
ii_0xe\1de:
|
|
||||||
ii_shift_typ w,\2,#1,(a6),(a6)+
|
|
||||||
ii_0xe\1df:
|
|
||||||
move.l usp,a1
|
|
||||||
addq.l #2,a1
|
|
||||||
move.l a1,usp
|
|
||||||
subq.l #2,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
// -(a0) bis -(a7) -----------------------------
|
|
||||||
ii_0xe\1e0:
|
|
||||||
move.l a0_off(a7),a1
|
|
||||||
subq.l #2,a1
|
|
||||||
move.l a1,a0_off(a7)
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1e1:
|
|
||||||
move.l a1_off(a7),a1
|
|
||||||
subq.l #2,a1
|
|
||||||
move.l a1,a1_off(a7)
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1e2:
|
|
||||||
ii_shift_typ w,\2,#1,-(a2),(a2).
|
|
||||||
ii_0xe\1e3:
|
|
||||||
ii_shift_typ w,\2,#1,-(a3),(a3)
|
|
||||||
ii_0xe\1e4:
|
|
||||||
ii_shift_typ w,\2,#1,-(a4),(a4)
|
|
||||||
ii_0xe\1e5:
|
|
||||||
ii_shift_typ w,\2,#1,-(a5),(a5)
|
|
||||||
ii_0xe\1e6:
|
|
||||||
ii_shift_typ w,\2,#1,-(a6),(a6)
|
|
||||||
ii_0xe\1e7:
|
|
||||||
move.l usp,a1
|
|
||||||
subq.l #2,a1
|
|
||||||
move.l a1,usp
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
// d16(a0) bis d16(a7) -----------------------------
|
|
||||||
ii_0xe\1e8:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
add.l a0_off(a7),a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1e9:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
add.l a1_off(a7),a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1ea:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
add.l a2,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1eb:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
add.l a3,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1)
|
|
||||||
ii_0xe\1ec:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
add.l a4,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1)
|
|
||||||
ii_0xe\1ed:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
add.l a5,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1)
|
|
||||||
ii_0xe\1ee:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
add.l a6,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1)
|
|
||||||
ii_0xe\1ef:
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
move.l usp,a1
|
|
||||||
add.l d0,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
// d8(a0,dy) bis d8(a7,dy) -----------------------------
|
|
||||||
ii_0xe\1f0:
|
|
||||||
move.l a0_off(a0),a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f1:
|
|
||||||
move.l a1_off(a0),a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f2:
|
|
||||||
move.l a2,a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f3:
|
|
||||||
move.l a3,a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f4:
|
|
||||||
move.l a4,a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f5:
|
|
||||||
move.l a5,a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f6:
|
|
||||||
move.l a6,a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f7:
|
|
||||||
move.l usp,a1
|
|
||||||
jsr ewf
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
// xxx.w xxx.l
|
|
||||||
ii_0xe\1f8:
|
|
||||||
move.w (a0)+,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
ii_0xe\1f9:
|
|
||||||
move.l (a0)+,a1
|
|
||||||
ii_shift_typ w,\2,#1,(a1),(a1).
|
|
||||||
.endm
|
|
||||||
//============================================================================
|
|
||||||
//subroutine
|
|
||||||
//------------------------------
|
|
||||||
ii_shift_op0:.macro // shift: 1=code 2=size 3=shift art 4=shift wert 5=ea
|
|
||||||
ii_0xe\1:
|
|
||||||
ii_shift_typ \2,\3,\4,\5,\5
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_op0b:.macro // shift wert nach d0 holen: 1=code 2=size 3=shift art 4=shift wert 5=ea
|
|
||||||
ii_0xe\1:
|
|
||||||
move.l \4,d0
|
|
||||||
ii_shift_typ \2,\3,d0,\5,\5
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ii_shift_typ:.macro //1=size 2=shift art 3=shift wert 4=source 5=dest
|
|
||||||
#ifdef halten
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
.ifc asr,\2
|
|
||||||
mvs.\1 \4,d1
|
|
||||||
.else
|
|
||||||
mvz.\1 \4,d1
|
|
||||||
.endif
|
|
||||||
.ifc roxr,\2
|
|
||||||
nop
|
|
||||||
.else
|
|
||||||
.ifc roxl,\2
|
|
||||||
nop
|
|
||||||
.else
|
|
||||||
.ifc ror,\2
|
|
||||||
nop
|
|
||||||
.else
|
|
||||||
.ifc rol,\2
|
|
||||||
nop
|
|
||||||
.else
|
|
||||||
\2.l \3,d1
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
set_cc0
|
|
||||||
move.\1 d1,\5
|
|
||||||
ii_end
|
|
||||||
.endm
|
|
||||||
584
include/ii_sub.h
584
include/ii_sub.h
@@ -1,584 +0,0 @@
|
|||||||
//--------------------------------------------------------------------
|
|
||||||
// sub
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
/*****************************************************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// byt
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// sub.b #im,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subbir_macro:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,d0
|
|
||||||
extb.l d0
|
|
||||||
mvs.b \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.b d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub ea,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subdd:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub ea(l)->dy(w),dx z.B. f<>r USP
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subddd:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 a1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub (ea)->dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subdda:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub ea->ay,(ay)+,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subddai:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 (a1)+,d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub ea->ay,-(ay),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subddad:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.\3 -(a1),d0
|
|
||||||
move.l a1,\1
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub d16(ay),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subd16ad:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub d8(ay,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subd8ad:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub xxx.w,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subxwd:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub xxx.l,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subxld:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub d16(pc),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subd16pcd:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
add.l d0,a1
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub d8(pc,dy),dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subd8pcd:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,d1
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
.endif
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// sub dy,ea
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub (ea)->dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subeda:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,ea->ay,(ay)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subedai:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)+
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,ea->ay,(ay)+
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subedaid:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 \2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2+
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,ea->ay,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subedad:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.\3 -(a1),d1
|
|
||||||
move.l a1,\2
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,ea->ay,-(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subedadd:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
mvs.\3 -\2,d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,d16(ay)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
sube16ad:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
mvs.w (a0)+,d1
|
|
||||||
add.l d1,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,d8(ay,dy)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
sube8ad:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \2,a1
|
|
||||||
jsr ewf
|
|
||||||
.ifc \3,l
|
|
||||||
move.l (a1),d1
|
|
||||||
move.l \1,d0
|
|
||||||
.else
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
.endif
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,xxx.w
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subxwe:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // sub dx,xxx.l
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subxle:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.\3 \1,d0
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.\3 (a1),d1
|
|
||||||
sub.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
/******************************************************/
|
|
||||||
// adress register
|
|
||||||
/******************************************************/
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w ea,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subaw:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,pc_off(a7) // pc auf next
|
|
||||||
movem.l (a7),d0/d1/a0/a1 // register zurp<72>ck
|
|
||||||
mvs.w \1,d0
|
|
||||||
suba.l d0,\2
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
lea ii_ss(a7),a7 // stack erh<72>hen
|
|
||||||
rte
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// sub.w ea,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawa7:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.w \1,d0
|
|
||||||
move.l usp,a1
|
|
||||||
sub.l d0,a1
|
|
||||||
move.l a1,usp
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w usp?,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawu:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,pc_off(a7) // pc auf next
|
|
||||||
movem.l (a7),d0/d1/a0/a1 // register zurp<72>ck
|
|
||||||
move.l a7,_a7_save
|
|
||||||
move.l usp,a7
|
|
||||||
move.l \1,d0
|
|
||||||
suba.l d0,\2
|
|
||||||
move.l a7,usp
|
|
||||||
move.l _a7_save,a7
|
|
||||||
move.l d0_off(a7),d0
|
|
||||||
lea ii_ss(a7),a7 // stack erh<72>hen
|
|
||||||
rte
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w usp?,usp
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawua7:.macro
|
|
||||||
subawu \1,\2
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w d16(ay),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawd16a:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
mvs.w (a0)+,d0
|
|
||||||
adda.l d0,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
sub.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawd8a:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
sub.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w xxx.w,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawxwax:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
suba.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w xxx.l,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawxlax:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l (a0)+,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
suba.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w d16(pc),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawd16pcax:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.w (a0)+,a1
|
|
||||||
adda.l a0,a1
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
suba.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawd8pcax:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
mvs.w (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
sub.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.w #im,ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subawim:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
mvs.w \1,d0
|
|
||||||
move.l \2,a1
|
|
||||||
sub.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.l d8(ay,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subald8a:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l \1,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
sub.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // suba.l d8(pc,dy),ax
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subakd8pcax:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.l a0,a1
|
|
||||||
jsr ewf
|
|
||||||
move.l (a1),d0
|
|
||||||
move.l \2,a1
|
|
||||||
sub.l d0,a1
|
|
||||||
move.l a1,\2
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//*****************************************************************************************
|
|
||||||
// subx
|
|
||||||
//*****************************************************************************************
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // subx dy,dx
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subdx:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.b sr_off+1(a7),d0 //ccr holen
|
|
||||||
move d0,ccr //setzen
|
|
||||||
mvs.\3 \2,d0
|
|
||||||
mvs.\3 \1,d1
|
|
||||||
subx.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,\1
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// // subx -(ay),-(ax)
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
subdax:.macro
|
|
||||||
#ifdef halten_sub
|
|
||||||
halt
|
|
||||||
#endif
|
|
||||||
move.b sr_off+1(a7),d0 //ccr holen
|
|
||||||
move d0,ccr //setzen
|
|
||||||
move.l \1,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l -(a1),d0
|
|
||||||
.else
|
|
||||||
mvs.\3 -(a1),d0
|
|
||||||
.endif
|
|
||||||
move.l \2,a1
|
|
||||||
.ifc \3,l
|
|
||||||
move.l -(a1),d0
|
|
||||||
.else
|
|
||||||
mvs.\3 -(a1),d1
|
|
||||||
.endif
|
|
||||||
subx.l d0,d1
|
|
||||||
set_cc0
|
|
||||||
move.\3 d1,(a1)
|
|
||||||
ii_end
|
|
||||||
.endm;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
/*******************************************************/
|
|
||||||
// allgemeine macros
|
|
||||||
/*******************************************************/
|
|
||||||
.text
|
|
||||||
wait_pll: .macro
|
|
||||||
wait1_pll\@:
|
|
||||||
tst.w (a1)
|
|
||||||
bmi wait1_pll\@
|
|
||||||
rts
|
|
||||||
.endm
|
|
||||||
@@ -31,12 +31,20 @@
|
|||||||
#define _SD_CARD_H_
|
#define _SD_CARD_H_
|
||||||
|
|
||||||
#include <MCF5475.h>
|
#include <MCF5475.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
extern int spi_init(void);
|
extern void spi_init(void);
|
||||||
extern uint32_t sd_com(uint32_t data);
|
extern uint32_t sd_com(uint32_t data);
|
||||||
extern void sd_card_idle(void);
|
extern void sd_card_idle(void);
|
||||||
extern uint8_t sd_card_get_status(void);
|
extern uint8_t sd_card_get_status(void);
|
||||||
extern uint8_t spi_send_byte(uint8_t byte);
|
extern uint8_t spi_send_byte(uint8_t byte);
|
||||||
extern uint16_t spi_send_word(uint16_t word);
|
extern uint16_t spi_send_word(uint16_t word);
|
||||||
|
|
||||||
|
/* MMC card type flags (MMC_GET_TYPE) */
|
||||||
|
#define CT_MMC 0x01 /* MMC ver 3 */
|
||||||
|
#define CT_SD1 0x02 /* SD ver 1 */
|
||||||
|
#define CT_SD2 0x04 /* SD ver 2 */
|
||||||
|
#define CT_SDC (CT_SD1|CT_SD2) /* SD */
|
||||||
|
#define CT_BLOCK 0x08 /* Block addressing */
|
||||||
|
|
||||||
#endif /* _SD_CARD_H_ */
|
#endif /* _SD_CARD_H_ */
|
||||||
|
|||||||
@@ -1,23 +1,6 @@
|
|||||||
|
|
||||||
#define cf_stack
|
#define cf_stack
|
||||||
|
|
||||||
//#define ii_on
|
|
||||||
#define halten
|
|
||||||
#define halten_dbcc
|
|
||||||
#define halten_and
|
|
||||||
#define halten_add
|
|
||||||
#define halten_sub
|
|
||||||
#define halten_or
|
|
||||||
#define halten_op
|
|
||||||
#define halten_opc
|
|
||||||
#define halten_movem
|
|
||||||
#define halten_lea
|
|
||||||
#define halten_shift
|
|
||||||
#define halten_move
|
|
||||||
#define halten_exg
|
|
||||||
#define halten_movep
|
|
||||||
#define halten_ewf
|
|
||||||
|
|
||||||
#define DIP_SWITCH (*(volatile uint8_t *)(&_MBAR[0xA2C]))
|
#define DIP_SWITCH (*(volatile uint8_t *)(&_MBAR[0xA2C]))
|
||||||
#define DIP_SWITCHa __MBAR + 0xA2C
|
#define DIP_SWITCHa __MBAR + 0xA2C
|
||||||
|
|
||||||
|
|||||||
72
run_bas.bdm
Executable file
72
run_bas.bdm
Executable file
@@ -0,0 +1,72 @@
|
|||||||
|
#!/usr/local/bin/bdmctrl -D2
|
||||||
|
#
|
||||||
|
# firebee board initialization for bdmctrl
|
||||||
|
#
|
||||||
|
open $1
|
||||||
|
reset
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
wait
|
||||||
|
|
||||||
|
# set VBR
|
||||||
|
#write-ctrl 0x0801 0x00000000
|
||||||
|
sleep 10
|
||||||
|
# Turn on MBAR at 0xFF00_0000
|
||||||
|
write-ctrl 0x0C0F 0xFF000000
|
||||||
|
|
||||||
|
# Turn on MMUBAR at 0xFF04_0000
|
||||||
|
write-ctrl 0x0008 0xFF040001
|
||||||
|
|
||||||
|
# Turn on RAMBAR0 at address FF10_0000
|
||||||
|
write-ctrl 0x0C04 0xFF100007
|
||||||
|
sleep 10
|
||||||
|
# Turn on RAMBAR1 at address FF10_1000
|
||||||
|
write-ctrl 0x0C05 0xFF101001
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Init CS0 (BootFLASH @ E000_0000 - E07F_FFFF 8Mbytes)
|
||||||
|
write 0xFF000500 0xE0000000 4
|
||||||
|
write 0xFF000508 0x00001180 4
|
||||||
|
write 0xFF000504 0x007F0001 4
|
||||||
|
# Init CS1 (Atari I/O address range)
|
||||||
|
write 0xFF00050C 0xFFF00000 4
|
||||||
|
write 0xFF000514 0x00002180 4
|
||||||
|
write 0xFF000510 0x000F0001 4
|
||||||
|
# Init CS2 (FireBee 32 bit I/O address range)
|
||||||
|
write 0xFF000518 0xF0000000 4
|
||||||
|
write 0xFF000520 0x00002100 4
|
||||||
|
write 0xFF00051C 0x07FF0001 4
|
||||||
|
# Init CS3 (FireBee 16 bit I/O address range)
|
||||||
|
write 0xFF000524 0xF8000000 4
|
||||||
|
write 0xFF00052C 0x00000180 4
|
||||||
|
write 0xFF000528 0x03FF0001 4
|
||||||
|
# Init CS4 (FireBee video address range)
|
||||||
|
write 0xFF000530 0x40000000 4
|
||||||
|
write 0xFF000538 0x00000018 4
|
||||||
|
write 0xFF000534 0x003F0001 4
|
||||||
|
|
||||||
|
|
||||||
|
# SDRAM Initialization @ 0000_0000 - 1FFF_FFFF 512Mbytes
|
||||||
|
write 0xFF000004 0x000002AA 4 # SDRAMDS configuration
|
||||||
|
write 0xFF000020 0x0000001A 4 # SDRAM CS0 configuration (128Mbytes 0000_0000 - 07FF_FFFF)
|
||||||
|
write 0xFF000024 0x0800001A 4 # SDRAM CS1 configuration (128Mbytes 0800_0000 - 0FFF_FFFF)
|
||||||
|
write 0xFF000028 0x1000001A 4 # SDRAM CS2 configuration (128Mbytes 1000_0000 - 17FF_FFFF)
|
||||||
|
write 0xFF00002C 0x1800001A 4 # SDRAM CS3 configuration (128Mbytes 1800_0000 - 1FFF_FFFF)
|
||||||
|
write 0xFF000108 0x73622830 4 # SDCFG1
|
||||||
|
write 0xFF00010C 0x46770000 4 # SDCFG2
|
||||||
|
|
||||||
|
write 0xFF000104 0xE10D0002 4 # SDCR + IPALL
|
||||||
|
write 0xFF000100 0x40010000 4 # SDMR (write to LEMR)
|
||||||
|
write 0xFF000100 0x048D0000 4 # SDMR (write to LMR)
|
||||||
|
write 0xFF000104 0xE10D0002 4 # SDCR + IPALL
|
||||||
|
write 0xFF000104 0xE10D0004 4 # SDCR + IREF (first refresh)
|
||||||
|
write 0xFF000104 0xE10D0004 4 # SDCR + IREF (first refresh)
|
||||||
|
write 0xFF000100 0x008D0000 4 # SDMR (write to LMR)
|
||||||
|
write 0xFF000104 0x710D0F00 4 # SDCR (lock SDMR and enable refresh)
|
||||||
|
|
||||||
|
write 0xFF000240 0x80000000 4 # disable watchdog arbiter
|
||||||
|
|
||||||
|
load -v ram.elf
|
||||||
|
wait
|
||||||
|
sleep 100
|
||||||
|
execute
|
||||||
107
sources/BaS.c
107
sources/BaS.c
@@ -31,11 +31,12 @@
|
|||||||
#include "bas_types.h"
|
#include "bas_types.h"
|
||||||
#include "sd_card.h"
|
#include "sd_card.h"
|
||||||
#include <wait.h>
|
#include <wait.h>
|
||||||
|
|
||||||
|
#include <diskio.h>
|
||||||
|
#include <ff.h>
|
||||||
/* imported routines */
|
/* imported routines */
|
||||||
extern int mmu_init();
|
extern int mmu_init();
|
||||||
extern int vec_init();
|
extern int vec_init();
|
||||||
extern int illegal_table_make();
|
|
||||||
|
|
||||||
/* Symbols from the linker script */
|
/* Symbols from the linker script */
|
||||||
extern uint8_t _STRAM_END[];
|
extern uint8_t _STRAM_END[];
|
||||||
@@ -52,7 +53,7 @@ extern uint8_t _EMUTOS_SIZE[];
|
|||||||
/*
|
/*
|
||||||
* check if it is possible to transfer data to PIC
|
* check if it is possible to transfer data to PIC
|
||||||
*/
|
*/
|
||||||
static inline bool pic_txready(void)
|
static inline uint32_t pic_txready(void)
|
||||||
{
|
{
|
||||||
if (MCF_PSC3_PSCSR & MCF_PSC_PSCSR_TXRDY)
|
if (MCF_PSC3_PSCSR & MCF_PSC_PSCSR_TXRDY)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -63,7 +64,7 @@ static inline bool pic_txready(void)
|
|||||||
/*
|
/*
|
||||||
* check if it is possible to receive data from PIC
|
* check if it is possible to receive data from PIC
|
||||||
*/
|
*/
|
||||||
static inline bool pic_rxready(void)
|
static inline uint32_t pic_rxready(void)
|
||||||
{
|
{
|
||||||
if (MCF_PSC3_PSCSR & MCF_PSC_PSCSR_RXRDY)
|
if (MCF_PSC3_PSCSR & MCF_PSC_PSCSR_RXRDY)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -145,25 +146,83 @@ void nvram_init(void)
|
|||||||
xprintf("finished\r\n");
|
xprintf("finished\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************/
|
void enable_coldfire_interrupts()
|
||||||
|
{
|
||||||
|
xprintf("enable interrupts: ");
|
||||||
|
* (volatile uint32_t *) 0xf0010004 = 0L; /* disable all interrupts */
|
||||||
|
MCF_EPORT_EPPAR = 0xaaa8; /* all interrupts on falling edge */
|
||||||
|
|
||||||
|
MCF_GPT0_GMS = MCF_GPT_GMS_ICT(1) | /* timer 0 on, video change capture on rising edge */
|
||||||
|
MCF_GPT_GMS_IEN |
|
||||||
|
MCF_GPT_GMS_TMS(1);
|
||||||
|
MCF_INTC_ICR62 = 0x3f;
|
||||||
|
|
||||||
|
* (volatile uint8_t *) 0xf0010004 = 0xfe; /* enable int 1-7 */
|
||||||
|
MCF_EPORT_EPIER = 0xfe; /* int 1-7 on */
|
||||||
|
MCF_EPORT_EPFR = 0xff; /* clear all pending interrupts */
|
||||||
|
MCF_INTC_IMRL = 0xffffff00; /* int 1-7 on */
|
||||||
|
MCF_INTC_IMRH = 0xbffffffe; /* psc3 and timer 0 int on */
|
||||||
|
|
||||||
|
xprintf("finished\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void disable_coldfire_interrupts()
|
||||||
|
{
|
||||||
|
* (volatile uint32_t *) 0xf0010004 = 0L; /* disable all interrupts */
|
||||||
|
}
|
||||||
|
|
||||||
void BaS(void)
|
void BaS(void)
|
||||||
{
|
{
|
||||||
int az_sectors;
|
|
||||||
uint8_t *src;
|
uint8_t *src;
|
||||||
uint8_t *dst = (uint8_t *)TOS;
|
uint8_t *dst = (uint8_t *)TOS;
|
||||||
uint32_t *adr;
|
uint32_t *adr;
|
||||||
|
DRESULT res;
|
||||||
|
FATFS fs;
|
||||||
az_sectors = spi_init();
|
FRESULT fres;
|
||||||
|
|
||||||
if (az_sectors > 0)
|
|
||||||
{
|
|
||||||
sd_card_idle();
|
|
||||||
}
|
|
||||||
|
|
||||||
pic_init();
|
pic_init();
|
||||||
nvram_init();
|
nvram_init();
|
||||||
|
disk_initialize(0);
|
||||||
|
res = disk_status(0);
|
||||||
|
xprintf("disk status of SD card is %d\r\n", res);
|
||||||
|
if (res == RES_OK)
|
||||||
|
{
|
||||||
|
fres = f_mount(0, &fs);
|
||||||
|
xprintf("mount status of SD card fs is %d\r\n", fres);
|
||||||
|
if (fres == FR_OK)
|
||||||
|
{
|
||||||
|
DIR directory;
|
||||||
|
FIL file;
|
||||||
|
|
||||||
|
fres = f_opendir(&directory, "\\");
|
||||||
|
if (fres == FR_OK)
|
||||||
|
{
|
||||||
|
FILINFO fi;
|
||||||
|
|
||||||
|
while (((fres = f_readdir(&directory, &fi)) == FR_OK) && fi.fname[0])
|
||||||
|
{
|
||||||
|
xprintf("%13.13s %d\r\n", fi.fname, fi.fsize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xprintf("could not open directory \"\\\" on SD-card! Error code: %d\r\n", fres);
|
||||||
|
}
|
||||||
|
|
||||||
|
fres = f_open(&file, "WELCOME.MSG", FA_READ);
|
||||||
|
if (fres == FR_OK)
|
||||||
|
{
|
||||||
|
char line[128];
|
||||||
|
|
||||||
|
while (f_gets(line, sizeof(line), &file))
|
||||||
|
{
|
||||||
|
xprintf("%s", line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
f_close(&file);
|
||||||
|
}
|
||||||
|
f_mount(0, 0L); /* release work area */
|
||||||
|
}
|
||||||
xprintf("copy EmuTOS: ");
|
xprintf("copy EmuTOS: ");
|
||||||
|
|
||||||
/* copy EMUTOS */
|
/* copy EMUTOS */
|
||||||
@@ -184,28 +243,11 @@ void BaS(void)
|
|||||||
|
|
||||||
xprintf("initialize exception vector table: ");
|
xprintf("initialize exception vector table: ");
|
||||||
vec_init();
|
vec_init();
|
||||||
illegal_table_make();
|
|
||||||
xprintf("finished\r\n");
|
xprintf("finished\r\n");
|
||||||
|
|
||||||
/* interrupts */
|
|
||||||
|
|
||||||
xprintf("enable interrupts: ");
|
enable_coldfire_interrupts();
|
||||||
* (volatile uint32_t *) 0xf0010004 = 0L; /* disable all interrupts */
|
|
||||||
MCF_EPORT_EPPAR = 0xaaa8; /* all interrupts on falling edge */
|
|
||||||
|
|
||||||
MCF_GPT0_GMS = MCF_GPT_GMS_ICT(1) | /* timer 0 on, video change capture on rising edge */
|
|
||||||
MCF_GPT_GMS_IEN |
|
|
||||||
MCF_GPT_GMS_TMS(1);
|
|
||||||
MCF_INTC_ICR62 = 0x3f;
|
|
||||||
|
|
||||||
* (volatile uint8_t *) 0xf0010004 = 0xfe; /* enable int 1-7 */
|
|
||||||
MCF_EPORT_EPIER = 0xfe; /* int 1-7 on */
|
|
||||||
MCF_EPORT_EPFR = 0xff; /* clear all pending interrupts */
|
|
||||||
MCF_INTC_IMRL = 0xffffff00; /* int 1-7 on */
|
|
||||||
MCF_INTC_IMRH = 0xbffffffe; /* psc3 and timer 0 int on */
|
|
||||||
|
|
||||||
MCF_MMU_MMUCR = MCF_MMU_MMUCR_EN; /* MMU on */
|
MCF_MMU_MMUCR = MCF_MMU_MMUCR_EN; /* MMU on */
|
||||||
xprintf("finished\r\n");
|
|
||||||
|
|
||||||
xprintf("IDE reset: ");
|
xprintf("IDE reset: ");
|
||||||
/* IDE reset */
|
/* IDE reset */
|
||||||
@@ -216,7 +258,6 @@ void BaS(void)
|
|||||||
* (volatile uint8_t *) (0xffff8802 - 0) = 0;
|
* (volatile uint8_t *) (0xffff8802 - 0) = 0;
|
||||||
|
|
||||||
xprintf("finished\r\n");
|
xprintf("finished\r\n");
|
||||||
|
|
||||||
xprintf("enable video: ");
|
xprintf("enable video: ");
|
||||||
/*
|
/*
|
||||||
* video setup (25MHz)
|
* video setup (25MHz)
|
||||||
|
|||||||
@@ -54,7 +54,6 @@
|
|||||||
|
|
||||||
#define INF 32766 /* should be bigger than any field to print */
|
#define INF 32766 /* should be bigger than any field to print */
|
||||||
|
|
||||||
static char buf[128];
|
|
||||||
static char snil[] = "(nil)";
|
static char snil[] = "(nil)";
|
||||||
|
|
||||||
static void xputchar(int c)
|
static void xputchar(int c)
|
||||||
@@ -101,6 +100,7 @@ size_t strlen(const char *s)
|
|||||||
|
|
||||||
static void doprnt(void (*addchar)(int), const char *sfmt, va_list ap)
|
static void doprnt(void (*addchar)(int), const char *sfmt, va_list ap)
|
||||||
{
|
{
|
||||||
|
char buf[128]; /* FIXME: this gets allocated in BSS which is not reachable in -mpcrel code */
|
||||||
char *bp;
|
char *bp;
|
||||||
const char *f;
|
const char *f;
|
||||||
long l;
|
long l;
|
||||||
|
|||||||
3798
sources/cc932.c
Normal file
3798
sources/cc932.c
Normal file
File diff suppressed because it is too large
Load Diff
10973
sources/cc936.c
Normal file
10973
sources/cc936.c
Normal file
File diff suppressed because it is too large
Load Diff
8603
sources/cc949.c
Normal file
8603
sources/cc949.c
Normal file
File diff suppressed because it is too large
Load Diff
6829
sources/cc950.c
Normal file
6829
sources/cc950.c
Normal file
File diff suppressed because it is too large
Load Diff
540
sources/ccsbcs.c
Normal file
540
sources/ccsbcs.c
Normal file
@@ -0,0 +1,540 @@
|
|||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* Unicode - Local code bidirectional converter (C)ChaN, 2009 */
|
||||||
|
/* (SBCS code pages) */
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* 437 U.S. (OEM)
|
||||||
|
/ 720 Arabic (OEM)
|
||||||
|
/ 1256 Arabic (Windows)
|
||||||
|
/ 737 Greek (OEM)
|
||||||
|
/ 1253 Greek (Windows)
|
||||||
|
/ 1250 Central Europe (Windows)
|
||||||
|
/ 775 Baltic (OEM)
|
||||||
|
/ 1257 Baltic (Windows)
|
||||||
|
/ 850 Multilingual Latin 1 (OEM)
|
||||||
|
/ 852 Latin 2 (OEM)
|
||||||
|
/ 1252 Latin 1 (Windows)
|
||||||
|
/ 855 Cyrillic (OEM)
|
||||||
|
/ 1251 Cyrillic (Windows)
|
||||||
|
/ 866 Russian (OEM)
|
||||||
|
/ 857 Turkish (OEM)
|
||||||
|
/ 1254 Turkish (Windows)
|
||||||
|
/ 858 Multilingual Latin 1 + Euro (OEM)
|
||||||
|
/ 862 Hebrew (OEM)
|
||||||
|
/ 1255 Hebrew (Windows)
|
||||||
|
/ 874 Thai (OEM, Windows)
|
||||||
|
/ 1258 Vietnam (OEM, Windows)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ff.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#if _CODE_PAGE == 437
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
|
||||||
|
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
|
||||||
|
0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
|
||||||
|
0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
|
||||||
|
0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
|
||||||
|
0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
|
||||||
|
0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
|
||||||
|
0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 720
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP720(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7,
|
||||||
|
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9,
|
||||||
|
0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627,
|
||||||
|
0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
|
||||||
|
0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
|
||||||
|
0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
|
||||||
|
0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642,
|
||||||
|
0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A,
|
||||||
|
0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0xO650, 0x2248,
|
||||||
|
0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 737
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP737(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
|
||||||
|
0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
|
||||||
|
0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
|
||||||
|
0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
|
||||||
|
0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0,
|
||||||
|
0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
|
||||||
|
0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
|
||||||
|
0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD,
|
||||||
|
0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E,
|
||||||
|
0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248,
|
||||||
|
0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 775
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP775(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107,
|
||||||
|
0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A,
|
||||||
|
0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4,
|
||||||
|
0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6,
|
||||||
|
0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118,
|
||||||
|
0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D,
|
||||||
|
0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B,
|
||||||
|
0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144,
|
||||||
|
0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019,
|
||||||
|
0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E,
|
||||||
|
0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 850
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP850(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
|
||||||
|
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
|
||||||
|
0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
|
||||||
|
0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0,
|
||||||
|
0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE,
|
||||||
|
0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE,
|
||||||
|
0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
|
||||||
|
0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8,
|
||||||
|
0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 852
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP852(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7,
|
||||||
|
0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106,
|
||||||
|
0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A,
|
||||||
|
0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E,
|
||||||
|
0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A,
|
||||||
|
0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE,
|
||||||
|
0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161,
|
||||||
|
0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4,
|
||||||
|
0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8,
|
||||||
|
0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 855
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP855(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404,
|
||||||
|
0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408,
|
||||||
|
0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C,
|
||||||
|
0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A,
|
||||||
|
0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414,
|
||||||
|
0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438,
|
||||||
|
0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E,
|
||||||
|
0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580,
|
||||||
|
0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443,
|
||||||
|
0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116,
|
||||||
|
0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D,
|
||||||
|
0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 857
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP857(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
|
||||||
|
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
|
||||||
|
0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F,
|
||||||
|
0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0,
|
||||||
|
0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE,
|
||||||
|
0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000,
|
||||||
|
0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4,
|
||||||
|
0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8,
|
||||||
|
0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 858
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP858(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
|
||||||
|
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
|
||||||
|
0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
|
||||||
|
0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0,
|
||||||
|
0x00A9, 0x2563, 0x2551, 0x2557, 0x2550, 0x00A2, 0x00A5, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x20AC, 0x00CD, 0x00CE,
|
||||||
|
0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00C6, 0x00CC, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE,
|
||||||
|
0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
|
||||||
|
0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8,
|
||||||
|
0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 862
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP862(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
|
||||||
|
0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
|
||||||
|
0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
|
||||||
|
0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
|
||||||
|
0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
|
||||||
|
0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
|
||||||
|
0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
|
||||||
|
0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
|
||||||
|
0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 866
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP866(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
|
||||||
|
0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||||
|
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
|
||||||
|
0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||||
|
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
|
||||||
|
0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
|
||||||
|
0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
|
||||||
|
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
|
||||||
|
0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
|
||||||
|
0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
|
||||||
|
0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E,
|
||||||
|
0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 874
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP874(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x2026, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07,
|
||||||
|
0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F,
|
||||||
|
0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17,
|
||||||
|
0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F,
|
||||||
|
0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,
|
||||||
|
0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,
|
||||||
|
0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,
|
||||||
|
0x0E38, 0x0E39, 0x0E3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E3F,
|
||||||
|
0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47,
|
||||||
|
0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
|
||||||
|
0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
|
||||||
|
0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0000, 0x0000, 0x0000, 0x0000
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1250
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1250(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x0000, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
|
||||||
|
0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7,
|
||||||
|
0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
|
||||||
|
0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
|
||||||
|
0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
|
||||||
|
0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
|
||||||
|
0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
|
||||||
|
0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
|
||||||
|
0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
|
||||||
|
0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
|
||||||
|
0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
|
||||||
|
0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1251
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1251(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
|
||||||
|
0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x0000, 0x2111, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
|
||||||
|
0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
|
||||||
|
0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
|
||||||
|
0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
|
||||||
|
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
|
||||||
|
0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||||
|
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
|
||||||
|
0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||||
|
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
|
||||||
|
0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||||
|
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
|
||||||
|
0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1252
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1252(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178,
|
||||||
|
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
|
||||||
|
0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
|
||||||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
|
||||||
|
0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
|
||||||
|
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
|
||||||
|
0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
|
||||||
|
0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
|
||||||
|
0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
|
||||||
|
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
|
||||||
|
0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
|
||||||
|
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1253
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1253(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x0000, 0x2030, 0x0000, 0x2039, 0x000C, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
|
||||||
|
0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
|
||||||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
|
||||||
|
0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
|
||||||
|
0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
|
||||||
|
0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
|
||||||
|
0x03A8, 0x03A9, 0x03AA, 0x03AD, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
|
||||||
|
0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
|
||||||
|
0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
|
||||||
|
0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
|
||||||
|
0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1254
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1254(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x210A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
|
||||||
|
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
|
||||||
|
0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
|
||||||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
|
||||||
|
0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
|
||||||
|
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
|
||||||
|
0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
|
||||||
|
0x00D8, 0x00D9, 0x00DA, 0x00BD, 0x00DC, 0x0130, 0x015E, 0x00DF,
|
||||||
|
0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
|
||||||
|
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
|
||||||
|
0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
|
||||||
|
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1255
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1255(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
|
||||||
|
0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
|
||||||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
|
||||||
|
0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
|
||||||
|
0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
|
||||||
|
0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
|
||||||
|
0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
|
||||||
|
0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
|
||||||
|
0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
|
||||||
|
0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1256
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1256(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
|
||||||
|
0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
|
||||||
|
0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
|
||||||
|
0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
|
||||||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
|
||||||
|
0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
|
||||||
|
0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
|
||||||
|
0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
|
||||||
|
0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0640, 0x0642, 0x0643,
|
||||||
|
0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
|
||||||
|
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
|
||||||
|
0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
|
||||||
|
0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1257
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1257(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000,
|
||||||
|
0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 0x00A6, 0x00A7,
|
||||||
|
0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
|
||||||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x00B8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
|
||||||
|
0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
|
||||||
|
0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
|
||||||
|
0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
|
||||||
|
0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
|
||||||
|
0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
|
||||||
|
0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
|
||||||
|
0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
|
||||||
|
0x0173, 0x014E, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 1258
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const uint16_t Tbl[] = { /* CP1258(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||||
|
0x02C6, 0x2030, 0x0000, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
|
||||||
|
0x02DC, 0x2122, 0x0000, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
|
||||||
|
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
|
||||||
|
0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
|
||||||
|
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
|
||||||
|
0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
|
||||||
|
0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
|
||||||
|
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
|
||||||
|
0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7,
|
||||||
|
0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
|
||||||
|
0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
|
||||||
|
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
|
||||||
|
0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
|
||||||
|
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if !_TBLDEF || !_USE_LFN
|
||||||
|
#error This file is not needed in current configuration. Remove from the project.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t ff_convert ( /* Converted character, Returns zero on error */
|
||||||
|
uint16_t src, /* Character code to be converted */
|
||||||
|
uint32_t dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint16_t c;
|
||||||
|
|
||||||
|
|
||||||
|
if (src < 0x80) { /* ASCII */
|
||||||
|
c = src;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (dir) { /* OEMCP to Unicode */
|
||||||
|
c = (src >= 0x100) ? 0 : Tbl[src - 0x80];
|
||||||
|
|
||||||
|
} else { /* Unicode to OEMCP */
|
||||||
|
for (c = 0; c < 0x80; c++) {
|
||||||
|
if (src == Tbl[c]) break;
|
||||||
|
}
|
||||||
|
c = (c + 0x80) & 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t ff_wtoupper ( /* Upper converted character */
|
||||||
|
uint16_t chr /* Input character */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
static const uint16_t tbl_lower[] = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0xA1, 0x00A2, 0x00A3, 0x00A5, 0x00AC, 0x00AF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x0FF, 0x101, 0x103, 0x105, 0x107, 0x109, 0x10B, 0x10D, 0x10F, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11B, 0x11D, 0x11F, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12B, 0x12D, 0x12F, 0x131, 0x133, 0x135, 0x137, 0x13A, 0x13C, 0x13E, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14B, 0x14D, 0x14F, 0x151, 0x153, 0x155, 0x157, 0x159, 0x15B, 0x15D, 0x15F, 0x161, 0x163, 0x165, 0x167, 0x169, 0x16B, 0x16D, 0x16F, 0x171, 0x173, 0x175, 0x177, 0x17A, 0x17C, 0x17E, 0x192, 0x3B1, 0x3B2, 0x3B3, 0x3B4, 0x3B5, 0x3B6, 0x3B7, 0x3B8, 0x3B9, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BE, 0x3BF, 0x3C0, 0x3C1, 0x3C3, 0x3C4, 0x3C5, 0x3C6, 0x3C7, 0x3C8, 0x3C9, 0x3CA, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, 0x43F, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45A, 0x45B, 0x45C, 0x45E, 0x45F, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x217C, 0x217D, 0x217E, 0x217F, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0 };
|
||||||
|
static const uint16_t tbl_upper[] = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x21, 0xFFE0, 0xFFE1, 0xFFE5, 0xFFE2, 0xFFE3, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0x178, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134, 0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147, 0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, 0x170, 0x172, 0x174, 0x176, 0x179, 0x17B, 0x17D, 0x191, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39A, 0x39B, 0x39C, 0x39D, 0x39E, 0x39F, 0x3A0, 0x3A1, 0x3A3, 0x3A4, 0x3A5, 0x3A6, 0x3A7, 0x3A8, 0x3A9, 0x3AA, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, 0x42F, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40A, 0x40B, 0x40C, 0x40E, 0x40F, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 0x216C, 0x216D, 0x216E, 0x216F, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0 };
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; tbl_lower[i] && chr != tbl_lower[i]; i++) ;
|
||||||
|
|
||||||
|
return tbl_lower[i] ? tbl_upper[i] : chr;
|
||||||
|
}
|
||||||
1563
sources/ewf.S
1563
sources/ewf.S
File diff suppressed because it is too large
Load Diff
4158
sources/ff.c
Normal file
4158
sources/ff.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -25,24 +25,6 @@
|
|||||||
.global _illegal_table_make
|
.global _illegal_table_make
|
||||||
|
|
||||||
#include "startcf.h"
|
#include "startcf.h"
|
||||||
#include "ii_macro.h"
|
|
||||||
#include "ii_func.h"
|
|
||||||
#include "ii_op.h"
|
|
||||||
#include "ii_opc.h"
|
|
||||||
#include "ii_add.h"
|
|
||||||
#include "ii_sub.h"
|
|
||||||
#include "ii_or.h"
|
|
||||||
#include "ii_and.h"
|
|
||||||
#include "ii_dbcc.h"
|
|
||||||
#include "ii_shd.h"
|
|
||||||
#include "ii_movem.h"
|
|
||||||
#include "ii_lea.h"
|
|
||||||
#include "ii_shift.h"
|
|
||||||
#include "ii_exg.h"
|
|
||||||
#include "ii_movep.h"
|
|
||||||
#include "ii_ewf.h"
|
|
||||||
#include "ii_move.h"
|
|
||||||
|
|
||||||
|
|
||||||
.extern _ii_shift_vec
|
.extern _ii_shift_vec
|
||||||
.extern ewf
|
.extern ewf
|
||||||
@@ -56,297 +38,5 @@ ii_error:
|
|||||||
nop
|
nop
|
||||||
|
|
||||||
_illegal_instruction:
|
_illegal_instruction:
|
||||||
#ifdef ii_on
|
|
||||||
move.w #0x2700,sr
|
|
||||||
lea -ii_ss(a7),a7
|
|
||||||
movem.l d0/d1/a0/a1,(a7)
|
|
||||||
move.l pc_off(a7),a0 // pc
|
|
||||||
mvz.w (a0)+,d0 // code
|
|
||||||
lea table,a1
|
|
||||||
move.l 0(a1,d0*4),a1
|
|
||||||
jmp (a1)
|
|
||||||
/*************************************************************************************************/
|
|
||||||
#endif
|
|
||||||
_illegal_table_make:
|
_illegal_table_make:
|
||||||
#ifdef ii_on
|
|
||||||
lea table,a0
|
|
||||||
moveq #0,d0
|
|
||||||
_itm_loop:
|
|
||||||
move.l #ii_error,(a0)+
|
|
||||||
addq.l #1,d0
|
|
||||||
cmp.l #0xF000,d0
|
|
||||||
bne _itm_loop
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
ii_ewf_lset // diverse fehlende adressierungn
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0x0000
|
|
||||||
// ori
|
|
||||||
ii_lset_op 00
|
|
||||||
// andi
|
|
||||||
ii_lset_op 02
|
|
||||||
// subi
|
|
||||||
ii_lset_op 04
|
|
||||||
// addi
|
|
||||||
ii_lset_op 06
|
|
||||||
// eori
|
|
||||||
ii_lset_op 0a
|
|
||||||
// cmpi
|
|
||||||
ii_lset_op 0c
|
|
||||||
// movep
|
|
||||||
ii_movep_lset
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0x1000 move.b
|
|
||||||
// 0x2000 move.l
|
|
||||||
// 0x3000 move.w
|
|
||||||
ii_move_lset
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0x4000
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// negx
|
|
||||||
ii_lset_op 40
|
|
||||||
// neg
|
|
||||||
ii_lset_op 44
|
|
||||||
// not
|
|
||||||
ii_lset_op 46
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// lea d8(ax,dy.w),az; d8(pc,dy.w),az
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
ii_lea_lset
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
// movem
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
ii_movem_lset
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0x5000
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// addq, subq
|
|
||||||
ii_lset_op 50
|
|
||||||
ii_lset_op 51
|
|
||||||
ii_lset_op 52
|
|
||||||
ii_lset_op 53
|
|
||||||
ii_lset_op 54
|
|
||||||
ii_lset_op 55
|
|
||||||
ii_lset_op 56
|
|
||||||
ii_lset_op 57
|
|
||||||
ii_lset_op 58
|
|
||||||
ii_lset_op 59
|
|
||||||
ii_lset_op 5a
|
|
||||||
ii_lset_op 5b
|
|
||||||
ii_lset_op 5c
|
|
||||||
ii_lset_op 5d
|
|
||||||
ii_lset_op 5e
|
|
||||||
ii_lset_op 5f
|
|
||||||
// dbcc
|
|
||||||
ii_lset_dbcc
|
|
||||||
// scc
|
|
||||||
ii_lset_opc 50
|
|
||||||
ii_lset_opc 51
|
|
||||||
ii_lset_opc 52
|
|
||||||
ii_lset_opc 53
|
|
||||||
ii_lset_opc 54
|
|
||||||
ii_lset_opc 55
|
|
||||||
ii_lset_opc 56
|
|
||||||
ii_lset_opc 57
|
|
||||||
ii_lset_opc 58
|
|
||||||
ii_lset_opc 59
|
|
||||||
ii_lset_opc 5a
|
|
||||||
ii_lset_opc 5b
|
|
||||||
ii_lset_opc 5c
|
|
||||||
ii_lset_opc 5d
|
|
||||||
ii_lset_opc 5e
|
|
||||||
ii_lset_opc 5f
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0x8000 or
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
ii_lset_func 8
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0x9000 sub
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
ii_lset_func 9
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0xb000
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// eor
|
|
||||||
ii_lset_op b1
|
|
||||||
ii_lset_op b3
|
|
||||||
ii_lset_op b5
|
|
||||||
ii_lset_op b7
|
|
||||||
ii_lset_op b9
|
|
||||||
ii_lset_op bb
|
|
||||||
ii_lset_op bd
|
|
||||||
ii_lset_op bf
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0xc000
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// and
|
|
||||||
ii_lset_func c
|
|
||||||
// exg
|
|
||||||
ii_exg_lset
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0xd000 add
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
ii_lset_func d
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// 0xe000
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// shift register
|
|
||||||
ii_shift_lset e
|
|
||||||
//-------------------------------------------------
|
|
||||||
// differenz zwischen orginal und gemoved korrigieren
|
|
||||||
lea ii_error(pc),a1
|
|
||||||
move.l a1,d1
|
|
||||||
sub.l #ii_error,d1
|
|
||||||
lea table,a0
|
|
||||||
moveq #0,d0
|
|
||||||
_itkorr_loop:
|
|
||||||
add.l d1,(a0)+
|
|
||||||
addq.l #1,d0
|
|
||||||
cmp.l #0xF000,d0
|
|
||||||
bne _itkorr_loop
|
|
||||||
#endif
|
|
||||||
rts
|
rts
|
||||||
#ifdef ii_on
|
|
||||||
//***********************************************************************************/
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
ii_ewf_func // diverse fehlende adressierungn
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x0000
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// ori 00
|
|
||||||
ii_op 00,or.l,i
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// andi 02
|
|
||||||
ii_op 02,and.l,i
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// subi 04
|
|
||||||
ii_op 04,and.l,i
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// addi 06
|
|
||||||
ii_op 06,add.l,i
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// eori 0a
|
|
||||||
ii_op 0a,eor.l,i
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// cmpi 0c
|
|
||||||
ii_op 0c,cmp.l,i
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// movep
|
|
||||||
ii_movep_func
|
|
||||||
///---------------------------------------------------------------------------------------------
|
|
||||||
// 0x1000 move.b
|
|
||||||
// 0x2000 move.l
|
|
||||||
// 0x3000 move.w
|
|
||||||
ii_move_op
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x4000
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// neg 0x40..
|
|
||||||
ii_op 40,negx.l,n
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// neg 0x44..
|
|
||||||
ii_op 44,neg.l,n
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// not 0x46..
|
|
||||||
ii_op 46,not.l,n
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// lea d8(ax,dy.w),az; d8(pc,dy.w),az
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
ii_lea_func
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
// movem
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ii_movem_func
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x5000
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
//dbcc
|
|
||||||
ii_dbcc_func
|
|
||||||
// addq 0x5...
|
|
||||||
ii_op 50,addq.l #8,q
|
|
||||||
ii_op 52,addq.l #1,q
|
|
||||||
ii_op 54,addq.l #2,q
|
|
||||||
ii_op 56,addq.l #3,q
|
|
||||||
ii_op 58,addq.l #4,q
|
|
||||||
ii_op 5a,addq.l #5,q
|
|
||||||
ii_op 5c,addq.l #6,q
|
|
||||||
ii_op 5e,addq.l #7,q
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// subq 0x5...
|
|
||||||
ii_op 51,subq.l #8,q
|
|
||||||
ii_op 53,subq.l #1,q
|
|
||||||
ii_op 55,subq.l #2,q
|
|
||||||
ii_op 57,subq.l #3,q
|
|
||||||
ii_op 59,subq.l #4,q
|
|
||||||
ii_op 5b,subq.l #5,q
|
|
||||||
ii_op 5d,subq.l #6,q
|
|
||||||
ii_op 5f,subq.l #7,q
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x5... scc
|
|
||||||
ii_opc 50,st,c
|
|
||||||
ii_opc 51,sf,c
|
|
||||||
ii_opc 52,shi,c
|
|
||||||
ii_opc 53,sls,c
|
|
||||||
ii_opc 54,scc,c
|
|
||||||
ii_opc 55,scs,c
|
|
||||||
ii_opc 56,sne,c
|
|
||||||
ii_opc 57,seq,c
|
|
||||||
ii_opc 58,svc,c
|
|
||||||
ii_opc 59,svs,c
|
|
||||||
ii_opc 5a,spl,c
|
|
||||||
ii_opc 5b,smi,c
|
|
||||||
ii_opc 5c,sge,c
|
|
||||||
ii_opc 5d,slt,c
|
|
||||||
ii_opc 5e,sgt,c
|
|
||||||
ii_opc 5f,sle,c
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x6000
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x7000
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x8000
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// or
|
|
||||||
ii_func 8,or
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0x9000
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// sub
|
|
||||||
ii_func 9,sub
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0xa000
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0xb000
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// eor
|
|
||||||
ii_op b1,eor.l d0,q
|
|
||||||
ii_op b3,eor.l d1,q
|
|
||||||
ii_op b5,eor.l d2,q
|
|
||||||
ii_op b7,eor.l d3,q
|
|
||||||
ii_op b9,eor.l d4,q
|
|
||||||
ii_op bb,eor.l d5,q
|
|
||||||
ii_op bd,eor.l d6,q
|
|
||||||
ii_op bf,eor.l d7,q
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0xc000
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// and
|
|
||||||
ii_func c,and
|
|
||||||
// exg
|
|
||||||
ii_exg_func
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0xd000
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// add
|
|
||||||
ii_func d,add
|
|
||||||
//---------------------------------------------------------------------------------------------
|
|
||||||
// 0xe000 shift
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
ii_shift_op
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// 0xf000
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
extern void xprintf_before_copy(const char *fmt, ...);
|
extern void xprintf_before_copy(const char *fmt, ...);
|
||||||
extern void display_progress_before_copy(void);
|
extern void display_progress_before_copy(void);
|
||||||
extern void wait_10ms();
|
|
||||||
|
|
||||||
#define xprintf xprintf_before_copy
|
#define xprintf xprintf_before_copy
|
||||||
#define display_progress display_progress_before_copy
|
#define display_progress display_progress_before_copy
|
||||||
|
|||||||
100
sources/main.c
Normal file
100
sources/main.c
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* FatFs sample project for generic microcontrollers (C)ChaN, 2012 */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "ff.h"
|
||||||
|
|
||||||
|
|
||||||
|
FATFS Fatfs; /* File system object */
|
||||||
|
FIL Fil; /* File object */
|
||||||
|
uint8_t Buff[128]; /* File read buffer */
|
||||||
|
|
||||||
|
|
||||||
|
void die ( /* Stop with dying message */
|
||||||
|
FRESULT rc /* FatFs return value */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
printf("Failed with rc=%u.\n", rc);
|
||||||
|
for (;;) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Program Main */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
FRESULT rc; /* Result code */
|
||||||
|
DIR dir; /* Directory object */
|
||||||
|
FILINFO fno; /* File information object */
|
||||||
|
uint32_t bw, br, i;
|
||||||
|
|
||||||
|
|
||||||
|
f_mount(0, &Fatfs); /* Register volume work area (never fails) */
|
||||||
|
|
||||||
|
printf("\nOpen an existing file (message.txt).\n");
|
||||||
|
rc = f_open(&Fil, "MESSAGE.TXT", FA_READ);
|
||||||
|
if (rc) die(rc);
|
||||||
|
|
||||||
|
printf("\nType the file content.\n");
|
||||||
|
for (;;) {
|
||||||
|
rc = f_read(&Fil, Buff, sizeof Buff, &br); /* Read a chunk of file */
|
||||||
|
if (rc || !br) break; /* Error or end of file */
|
||||||
|
for (i = 0; i < br; i++) /* Type the data */
|
||||||
|
putchar(Buff[i]);
|
||||||
|
}
|
||||||
|
if (rc) die(rc);
|
||||||
|
|
||||||
|
printf("\nClose the file.\n");
|
||||||
|
rc = f_close(&Fil);
|
||||||
|
if (rc) die(rc);
|
||||||
|
|
||||||
|
printf("\nCreate a new file (hello.txt).\n");
|
||||||
|
rc = f_open(&Fil, "HELLO.TXT", FA_WRITE | FA_CREATE_ALWAYS);
|
||||||
|
if (rc) die(rc);
|
||||||
|
|
||||||
|
printf("\nWrite a text data. (Hello world!)\n");
|
||||||
|
rc = f_write(&Fil, "Hello world!\r\n", 14, &bw);
|
||||||
|
if (rc) die(rc);
|
||||||
|
printf("%u bytes written.\n", bw);
|
||||||
|
|
||||||
|
printf("\nClose the file.\n");
|
||||||
|
rc = f_close(&Fil);
|
||||||
|
if (rc) die(rc);
|
||||||
|
|
||||||
|
printf("\nOpen root directory.\n");
|
||||||
|
rc = f_opendir(&dir, "");
|
||||||
|
if (rc) die(rc);
|
||||||
|
|
||||||
|
printf("\nDirectory listing...\n");
|
||||||
|
for (;;) {
|
||||||
|
rc = f_readdir(&dir, &fno); /* Read a directory item */
|
||||||
|
if (rc || !fno.fname[0]) break; /* Error or end of dir */
|
||||||
|
if (fno.fattrib & AM_DIR)
|
||||||
|
printf(" <dir> %s\n", fno.fname);
|
||||||
|
else
|
||||||
|
printf("%8lu %s\n", fno.fsize, fno.fname);
|
||||||
|
}
|
||||||
|
if (rc) die(rc);
|
||||||
|
|
||||||
|
printf("\nTest completed.\n");
|
||||||
|
for (;;) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------*/
|
||||||
|
/* User Provided Timer Function for FatFs module */
|
||||||
|
/*---------------------------------------------------------*/
|
||||||
|
|
||||||
|
uint32_t get_fattime (void)
|
||||||
|
{
|
||||||
|
return ((uint32_t)(2012 - 1980) << 25) /* Year = 2012 */
|
||||||
|
| ((uint32_t)1 << 21) /* Month = 1 */
|
||||||
|
| ((uint32_t)1 << 16) /* Day_m = 1*/
|
||||||
|
| ((uint32_t)0 << 11) /* Hour = 0 */
|
||||||
|
| ((uint32_t)0 << 5) /* Min = 0 */
|
||||||
|
| ((uint32_t)0 >> 1); /* Sec = 0 */
|
||||||
|
}
|
||||||
680
sources/mmc.c
Normal file
680
sources/mmc.c
Normal file
@@ -0,0 +1,680 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <bas_types.h>
|
||||||
|
#include <sd_card.h>
|
||||||
|
#include <bas_printf.h>
|
||||||
|
#include <sysinit.h>
|
||||||
|
#include <MCF5475.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Firebee: MMCv3/SDv1/SDv2 (SPI mode) control module
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011, ChaN, all right reserved.
|
||||||
|
*
|
||||||
|
* This software is a free software and there is NO WARRANTY.
|
||||||
|
* No restriction on use. You can use, modify and redistribute it for
|
||||||
|
* personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
|
||||||
|
* Redistributions of source code must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Copyright (C) 2012, mfro, all rights reserved. */
|
||||||
|
|
||||||
|
#define SSP_CH 1 /* SSP channel to use (0:SSP0, 1:SSP1) */
|
||||||
|
|
||||||
|
#define CCLK 100000000UL /* cclk frequency [Hz] */
|
||||||
|
#define PCLK_SSP 50000000UL /* PCLK frequency for SSP [Hz] */
|
||||||
|
#define SCLK_FAST 25000000UL /* SCLK frequency under normal operation [Hz] */
|
||||||
|
#define SCLK_SLOW 400000UL /* SCLK frequency under initialization [Hz] */
|
||||||
|
|
||||||
|
#define INS (!(FIO2PIN1 & _BV(1))) /* Socket status (true:Inserted, false:Empty) */
|
||||||
|
#define WP 0 /* Card write protection (true:yes, false:no) */
|
||||||
|
|
||||||
|
#if SSP_CH == 0
|
||||||
|
#define SSPxDR SSP0DR
|
||||||
|
#define SSPxSR SSP0SR
|
||||||
|
#define SSPxCR0 SSP0CR0
|
||||||
|
#define SSPxCR1 SSP0CR1
|
||||||
|
#define SSPxCPSR SSP0CPSR
|
||||||
|
#define CS_LOW() {FIO0CLR2 = _BV(2);} /* Set P0.18 low */
|
||||||
|
#define CS_HIGH() {FIO0SET2 = _BV(2);} /* Set P0.18 high */
|
||||||
|
#define PCSSPx PCSSP0
|
||||||
|
#define PCLKSSPx PCLK_SSP0
|
||||||
|
#elif SSP_CH == 1
|
||||||
|
#define SSPxDR SSP1DR
|
||||||
|
#define SSPxSR SSP1SR
|
||||||
|
#define SSPxCR0 SSP1CR0
|
||||||
|
#define SSPxCR1 SSP1CR1
|
||||||
|
#define SSPxCPSR SSP1CPSR
|
||||||
|
#define CS_HIGH() { dspi_fifo_val &= ~MCF_DSPI_DTFR_CS5; }
|
||||||
|
#define CS_LOW() { dspi_fifo_val |= MCF_DSPI_DTFR_CS5; }
|
||||||
|
#define PCSSPx PCSSP1
|
||||||
|
#define PCLKSSPx PCLK_SSP1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define FCLK_FAST() { MCF_DSPI_DCTAR0 = MCF_DSPI_DCTAR_TRSZ(0b111) | /* transfer size = 8 bit */ \
|
||||||
|
MCF_DSPI_DCTAR_PCSSCK(0b01) | /* 3 clock DSPICS to DSPISCK delay prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_PASC_3CLK | /* 3 clock DSPISCK to DSPICS negation prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_PDT_3CLK | /* 3 clock delay between DSPICS assertions prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_PBR_3CLK | /* 3 clock prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_ASC(0b1001) | /* 1024 */ \
|
||||||
|
MCF_DSPI_DCTAR_DT(0b1001) | /* 1024 */ \
|
||||||
|
MCF_DSPI_DCTAR_BR(0b0000); }
|
||||||
|
|
||||||
|
#define FCLK_SLOW() { MCF_DSPI_DCTAR0 = MCF_DSPI_DCTAR_TRSZ(0b111) | /* transfer size = 8 bit */ \
|
||||||
|
MCF_DSPI_DCTAR_PCSSCK(0b01) | /* 3 clock DSPICS to DSPISCK delay prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_PASC_3CLK | /* 3 clock DSPISCK to DSPICS negation prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_PDT_3CLK | /* 3 clock delay between DSPICS assertions prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_PBR_3CLK | /* 3 clock prescaler */ \
|
||||||
|
MCF_DSPI_DCTAR_ASC(0b1001) | /* 1024 */ \
|
||||||
|
MCF_DSPI_DCTAR_DT(0b1001) | /* 1024 */ \
|
||||||
|
MCF_DSPI_DCTAR_BR(0b0111); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Module Private Functions
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "diskio.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* MMC/SD command */
|
||||||
|
#define CMD0 (0) /* GO_IDLE_STATE */
|
||||||
|
#define CMD1 (1) /* SEND_OP_COND (MMC) */
|
||||||
|
#define ACMD41 (0x80+41) /* SEND_OP_COND (SDC) */
|
||||||
|
#define CMD8 (8) /* SEND_IF_COND */
|
||||||
|
#define CMD9 (9) /* SEND_CSD */
|
||||||
|
#define CMD10 (10) /* SEND_CID */
|
||||||
|
#define CMD12 (12) /* STOP_TRANSMISSION */
|
||||||
|
#define ACMD13 (0x80+13) /* SD_STATUS (SDC) */
|
||||||
|
#define CMD16 (16) /* SET_BLOCKLEN */
|
||||||
|
#define CMD17 (17) /* READ_SINGLE_BLOCK */
|
||||||
|
#define CMD18 (18) /* READ_MULTIPLE_BLOCK */
|
||||||
|
#define CMD23 (23) /* SET_BLOCK_COUNT (MMC) */
|
||||||
|
#define ACMD23 (0x80+23) /* SET_WR_BLK_ERASE_COUNT (SDC) */
|
||||||
|
#define CMD24 (24) /* WRITE_BLOCK */
|
||||||
|
#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */
|
||||||
|
#define CMD32 (32) /* ERASE_ER_BLK_START */
|
||||||
|
#define CMD33 (33) /* ERASE_ER_BLK_END */
|
||||||
|
#define CMD38 (38) /* ERASE */
|
||||||
|
#define CMD55 (55) /* APP_CMD */
|
||||||
|
#define CMD58 (58) /* READ_OCR */
|
||||||
|
|
||||||
|
|
||||||
|
static volatile DSTATUS Stat = 0 /* STA_NOINIT */; /* Physical drive status */
|
||||||
|
static uint8_t CardType; /* Card type flags */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Send/Receive data to the MMC (Platform dependent) */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static uint32_t dspi_fifo_val = /* CONT disable continous chip select */
|
||||||
|
/* CTAS use DCTAR0 for clock and attributes */
|
||||||
|
MCF_DSPI_DTFR_EOQ; /* current transfer is last in queue */
|
||||||
|
|
||||||
|
|
||||||
|
/* Exchange a byte */
|
||||||
|
static uint8_t xchg_spi(uint8_t byte)
|
||||||
|
{
|
||||||
|
uint32_t fifo = dspi_fifo_val | byte;
|
||||||
|
uint8_t res;
|
||||||
|
|
||||||
|
MCF_DSPI_DTFR = fifo;
|
||||||
|
while (! (MCF_DSPI_DSR & MCF_DSPI_DSR_TCF)); /* wait until DSPI transfer complete */
|
||||||
|
MCF_DSPI_DSR = 0xffffffff; /* clear DSPI status register */
|
||||||
|
|
||||||
|
fifo = MCF_DSPI_DRFR;
|
||||||
|
res = fifo & 0xff;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Receive multiple byte
|
||||||
|
*
|
||||||
|
* buff: pointer to data buffer
|
||||||
|
* btr: number of bytes to receive (16, 64 or 512)
|
||||||
|
*/
|
||||||
|
static void rcvr_spi_multi(uint8_t *buff, uint32_t count)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
*buff++ = xchg_spi(0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if _USE_WRITE
|
||||||
|
/* Send multiple byte
|
||||||
|
*
|
||||||
|
* buff: pointer to data
|
||||||
|
* btx: number of bytes to send
|
||||||
|
*/
|
||||||
|
static void xmit_spi_multi(const uint8_t *buff, uint32_t btx)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < btx; i++)
|
||||||
|
xchg_spi(*buff++);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static uint32_t card_ready(void)
|
||||||
|
{
|
||||||
|
static uint32_t counter = 0;
|
||||||
|
uint8_t d;
|
||||||
|
|
||||||
|
d = xchg_spi(0xff);
|
||||||
|
return (d == 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait for card ready
|
||||||
|
*
|
||||||
|
* wt: timeout in ms
|
||||||
|
* returns 1: ready, 0: timeout
|
||||||
|
*/
|
||||||
|
static int wait_ready(uint32_t wt)
|
||||||
|
{
|
||||||
|
return waitfor(wt, card_ready);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Deselect card and release SPI
|
||||||
|
*/
|
||||||
|
static void deselect(void)
|
||||||
|
{
|
||||||
|
CS_HIGH();
|
||||||
|
xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */
|
||||||
|
MCF_DSPI_DSR = 0xffffffff; /* clear status register */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Select card and wait for ready
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int select(void) /* 1:OK, 0:Timeout */
|
||||||
|
{
|
||||||
|
CS_LOW();
|
||||||
|
|
||||||
|
xchg_spi(0xFF); /* Dummy clock (force DO enabled) */
|
||||||
|
|
||||||
|
if (wait_ready(5000000))
|
||||||
|
return 1; /* OK */
|
||||||
|
deselect();
|
||||||
|
return 0; /* Timeout */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Control SPI module (Platform dependent)
|
||||||
|
*/
|
||||||
|
static void power_on (void) /* Enable SSP module */
|
||||||
|
{
|
||||||
|
MCF_PAD_PAR_DSPI = 0x1fff; /* configure all DSPI GPIO pins for DSPI usage */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: really necessary or just an oversight
|
||||||
|
* that PAD_PAR_DSPI is only 16 bit?
|
||||||
|
*/
|
||||||
|
// MCF_PAD_PAR_TIMER = 0xff; leave off for now
|
||||||
|
|
||||||
|
/*
|
||||||
|
* initialize DSPI module configuration register
|
||||||
|
*/
|
||||||
|
MCF_DSPI_DMCR = MCF_DSPI_DMCR_MSTR | /* FireBee is DSPI master*/
|
||||||
|
MCF_DSPI_DMCR_CSIS5 | /* CS5 inactive state high */
|
||||||
|
MCF_DSPI_DMCR_CSIS3 | /* CS3 inactive state high */
|
||||||
|
MCF_DSPI_DMCR_CSIS2 | /* CS2 inactive state high */
|
||||||
|
MCF_DSPI_DMCR_DTXF | /* disable transmit FIFO */
|
||||||
|
MCF_DSPI_DMCR_DRXF | /* disable receive FIFO */
|
||||||
|
MCF_DSPI_DMCR_CTXF | /* clear transmit FIFO */
|
||||||
|
MCF_DSPI_DMCR_CRXF; /* clear receive FIFO */
|
||||||
|
|
||||||
|
/* initialize DSPI clock and transfer attributes register 0 */
|
||||||
|
MCF_DSPI_DCTAR0 = MCF_DSPI_DCTAR_TRSZ(0b111) | /* transfer size = 8 bit */
|
||||||
|
MCF_DSPI_DCTAR_PCSSCK(0b01) | /* 3 clock DSPICS to DSPISCK delay prescaler */
|
||||||
|
MCF_DSPI_DCTAR_PASC_3CLK | /* 3 clock DSPISCK to DSPICS negation prescaler */
|
||||||
|
MCF_DSPI_DCTAR_PDT_3CLK | /* 3 clock delay between DSPICS assertions prescaler */
|
||||||
|
MCF_DSPI_DCTAR_PBR_3CLK | /* 3 clock prescaler */
|
||||||
|
MCF_DSPI_DCTAR_ASC(0b1001) | /* 1024 */
|
||||||
|
MCF_DSPI_DCTAR_DT(0b1001) | /* 1024 */
|
||||||
|
MCF_DSPI_DCTAR_BR(0b0111);
|
||||||
|
|
||||||
|
CS_HIGH(); /* Set CS# high */
|
||||||
|
|
||||||
|
/* card should now be initialized as MMC */
|
||||||
|
|
||||||
|
wait(10 * 1000); /* 10ms */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
void power_off (void) /* Disable SPI function */
|
||||||
|
{
|
||||||
|
select(); /* Wait for card ready */
|
||||||
|
deselect();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Receive a data packet from the MMC */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
static
|
||||||
|
int rcvr_datablock ( /* 1:OK, 0:Error */
|
||||||
|
uint8_t *buff, /* Data buffer */
|
||||||
|
uint32_t btr /* Data block length (byte) */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint8_t token;
|
||||||
|
uint32_t target = MCF_SLT_SCNT(0) - (200 * 1000L * 132);
|
||||||
|
|
||||||
|
do { /* Wait for DataStart token in timeout of 200ms */
|
||||||
|
token = xchg_spi(0xFF);
|
||||||
|
/* This loop will take a time. Insert rot_rdq() here for multitask envilonment. */
|
||||||
|
} while ((token == 0xFF) && MCF_SLT_SCNT(0) > target);
|
||||||
|
if(token != 0xFE) return 0; /* Function fails if invalid DataStart token or timeout */
|
||||||
|
|
||||||
|
rcvr_spi_multi(buff, btr); /* Store trailing data to the buffer */
|
||||||
|
xchg_spi(0xFF); xchg_spi(0xFF); /* Discard CRC */
|
||||||
|
|
||||||
|
return 1; /* Function succeeded */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Send a data packet to the MMC */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if _USE_WRITE
|
||||||
|
static
|
||||||
|
int xmit_datablock ( /* 1:OK, 0:Failed */
|
||||||
|
const uint8_t *buff, /* Ponter to 512 byte data to be sent */
|
||||||
|
uint8_t token /* Token */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint8_t resp;
|
||||||
|
|
||||||
|
|
||||||
|
if (!wait_ready(500)) return 0; /* Wait for card ready */
|
||||||
|
|
||||||
|
xchg_spi(token); /* Send token */
|
||||||
|
if (token != 0xFD) { /* Send data if token is other than StopTran */
|
||||||
|
xmit_spi_multi(buff, 512); /* Data */
|
||||||
|
xchg_spi(0xFF); xchg_spi(0xFF); /* Dummy CRC */
|
||||||
|
|
||||||
|
resp = xchg_spi(0xFF); /* Receive data resp */
|
||||||
|
if ((resp & 0x1F) != 0x05) /* Function fails if the data packet was not accepted */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Send a command packet to the MMC */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static uint8_t send_cmd ( /* Return value: R1 resp (bit7==1:Failed to send) */
|
||||||
|
uint8_t cmd, /* Command index */
|
||||||
|
uint32_t arg /* Argument */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint8_t n, res;
|
||||||
|
|
||||||
|
|
||||||
|
if (cmd & 0x80) { /* Send a CMD55 prior to ACMD<n> */
|
||||||
|
cmd &= 0x7F;
|
||||||
|
res = send_cmd(CMD55, 0);
|
||||||
|
if (res > 1) return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select card */
|
||||||
|
deselect();
|
||||||
|
if (!select()) return 0xFF;
|
||||||
|
|
||||||
|
/* Send command packet */
|
||||||
|
xchg_spi(0x40 | cmd); /* Start + command index */
|
||||||
|
xchg_spi((uint8_t)(arg >> 24)); /* Argument[31..24] */
|
||||||
|
xchg_spi((uint8_t)(arg >> 16)); /* Argument[23..16] */
|
||||||
|
xchg_spi((uint8_t)(arg >> 8)); /* Argument[15..8] */
|
||||||
|
xchg_spi((uint8_t)arg); /* Argument[7..0] */
|
||||||
|
n = 0x01; /* Dummy CRC + Stop */
|
||||||
|
if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) */
|
||||||
|
if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) */
|
||||||
|
xchg_spi(n);
|
||||||
|
|
||||||
|
/* Receive command resp */
|
||||||
|
if (cmd == CMD12) xchg_spi(0xFF); /* Diacard following one byte when CMD12 */
|
||||||
|
n = 10; /* Wait for response (10 bytes max) */
|
||||||
|
do
|
||||||
|
res = xchg_spi(0xFF);
|
||||||
|
while ((res & 0x80) && --n);
|
||||||
|
|
||||||
|
return res; /* Return received response */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Public Functions
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize disk drive
|
||||||
|
*
|
||||||
|
* drv: physical drive number (0)
|
||||||
|
*/
|
||||||
|
DSTATUS disk_initialize(uint8_t drv)
|
||||||
|
{
|
||||||
|
uint8_t n, cmd, ty, ocr[4];
|
||||||
|
|
||||||
|
|
||||||
|
if (drv) return STA_NOINIT; /* Supports only drive 0 */
|
||||||
|
power_on(); /* Initialize SPI */
|
||||||
|
|
||||||
|
if (Stat & STA_NODISK) return Stat; /* Is card existing in the socket? */
|
||||||
|
|
||||||
|
//FCLK_SLOW();
|
||||||
|
for (n = 10; n; n--) xchg_spi(0xFF); /* Send 80 dummy clocks */
|
||||||
|
|
||||||
|
ty = 0;
|
||||||
|
if (send_cmd(CMD0, 0) == 1) { /* Put the card SPI/Idle state */
|
||||||
|
uint32_t target = MCF_SLT_SCNT(0) - (1000L * 1000L * 132); /* 1 sec */
|
||||||
|
|
||||||
|
if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */
|
||||||
|
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get 32 bit return value of R7 resp */
|
||||||
|
if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* Is the card supports vcc of 2.7-3.6V? */
|
||||||
|
while (MCF_SLT_SCNT(0) > target && send_cmd(ACMD41, 1UL << 30)) ; /* Wait for end of initialization with ACMD41(HCS) */
|
||||||
|
if (MCF_SLT_SCNT(0) > target && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
|
||||||
|
for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
|
||||||
|
ty = (ocr[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* Card id SDv2 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { /* Not SDv2 card */
|
||||||
|
if (send_cmd(ACMD41, 0) <= 1) { /* SDv1 or MMC? */
|
||||||
|
ty = CT_SD1; cmd = ACMD41; /* SDv1 (ACMD41(0)) */
|
||||||
|
} else {
|
||||||
|
ty = CT_MMC; cmd = CMD1; /* MMCv3 (CMD1(0)) */
|
||||||
|
}
|
||||||
|
while (MCF_SLT_SCNT(0) > target && send_cmd(cmd, 0)) ; /* Wait for end of initialization */
|
||||||
|
if (!MCF_SLT_SCNT(0) > target || send_cmd(CMD16, 512) != 0) /* Set block length: 512 */
|
||||||
|
ty = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CardType = ty; /* Card type */
|
||||||
|
deselect();
|
||||||
|
|
||||||
|
if (ty) { /* OK */
|
||||||
|
FCLK_FAST(); /* Set fast clock */
|
||||||
|
Stat &= ~STA_NOINIT; /* Clear STA_NOINIT flag */
|
||||||
|
} else { /* Failed */
|
||||||
|
power_off();
|
||||||
|
Stat = STA_NOINIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Stat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Get disk status */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
DSTATUS disk_status (
|
||||||
|
uint8_t drv /* Physical drive number (0) */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (drv) return STA_NOINIT; /* Supports only drive 0 */
|
||||||
|
|
||||||
|
return Stat; /* Return disk status */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Read sector(s) */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
DRESULT disk_read (
|
||||||
|
uint8_t drv, /* Physical drive number (0) */
|
||||||
|
uint8_t *buff, /* Pointer to the data buffer to store read data */
|
||||||
|
uint32_t sector, /* Start sector number (LBA) */
|
||||||
|
uint8_t count /* Number of sectors to read (1..128) */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (drv || !count) return RES_PARERR; /* Check parameter */
|
||||||
|
if (Stat & STA_NOINIT) return RES_NOTRDY; /* Check if drive is ready */
|
||||||
|
|
||||||
|
if (!(CardType & CT_BLOCK)) sector *= 512; /* LBA ot BA conversion (byte addressing cards) */
|
||||||
|
|
||||||
|
if (count == 1) { /* Single sector read */
|
||||||
|
if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */
|
||||||
|
&& rcvr_datablock(buff, 512))
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
else { /* Multiple sector read */
|
||||||
|
if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */
|
||||||
|
do {
|
||||||
|
if (!rcvr_datablock(buff, 512)) break;
|
||||||
|
buff += 512;
|
||||||
|
} while (--count);
|
||||||
|
send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deselect();
|
||||||
|
|
||||||
|
return count ? RES_ERROR : RES_OK; /* Return result */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Write sector(s) */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if _USE_WRITE
|
||||||
|
DRESULT disk_write (
|
||||||
|
uint8_t drv, /* Physical drive number (0) */
|
||||||
|
const uint8_t *buff, /* Ponter to the data to write */
|
||||||
|
uint32_t sector, /* Start sector number (LBA) */
|
||||||
|
uint8_t count /* Number of sectors to write (1..128) */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (drv || !count) return RES_PARERR; /* Check parameter */
|
||||||
|
if (Stat & STA_NOINIT) return RES_NOTRDY; /* Check drive status */
|
||||||
|
if (Stat & STA_PROTECT) return RES_WRPRT; /* Check write protect */
|
||||||
|
|
||||||
|
if (!(CardType & CT_BLOCK)) sector *= 512; /* LBA ==> BA conversion (byte addressing cards) */
|
||||||
|
|
||||||
|
if (count == 1) { /* Single sector write */
|
||||||
|
if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */
|
||||||
|
&& xmit_datablock(buff, 0xFE))
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
else { /* Multiple sector write */
|
||||||
|
if (CardType & CT_SDC) send_cmd(ACMD23, count); /* Predefine number of sectors */
|
||||||
|
if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */
|
||||||
|
do {
|
||||||
|
if (!xmit_datablock(buff, 0xFC)) break;
|
||||||
|
buff += 512;
|
||||||
|
} while (--count);
|
||||||
|
if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */
|
||||||
|
count = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deselect();
|
||||||
|
|
||||||
|
return count ? RES_ERROR : RES_OK; /* Return result */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Miscellaneous drive controls other than data read/write */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if _USE_IOCTL
|
||||||
|
DRESULT disk_ioctl (
|
||||||
|
uint8_t drv, /* Physical drive number (0) */
|
||||||
|
uint8_t ctrl, /* Control command code */
|
||||||
|
void *buff /* Pointer to the conrtol data */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DRESULT res;
|
||||||
|
uint8_t n, csd[16], *ptr = buff;
|
||||||
|
uint32_t *dp, st, ed, csize;
|
||||||
|
|
||||||
|
|
||||||
|
if (drv) return RES_PARERR; /* Check parameter */
|
||||||
|
if (Stat & STA_NOINIT) return RES_NOTRDY; /* Check if drive is ready */
|
||||||
|
|
||||||
|
res = RES_ERROR;
|
||||||
|
|
||||||
|
switch (ctrl) {
|
||||||
|
case CTRL_SYNC : /* Wait for end of internal write process of the drive */
|
||||||
|
if (select()) {
|
||||||
|
deselect();
|
||||||
|
res = RES_OK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GET_SECTOR_COUNT : /* Get drive capacity in unit of sector (DWORD) */
|
||||||
|
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) {
|
||||||
|
if ((csd[0] >> 6) == 1) { /* SDC ver 2.00 */
|
||||||
|
csize = csd[9] + ((uint16_t)csd[8] << 8) + ((uint32_t)(csd[7] & 63) << 16) + 1;
|
||||||
|
*(uint32_t*)buff = csize << 10;
|
||||||
|
} else { /* SDC ver 1.XX or MMC ver 3 */
|
||||||
|
n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
|
||||||
|
csize = (csd[8] >> 6) + ((uint16_t)csd[7] << 2) + ((uint16_t)(csd[6] & 3) << 10) + 1;
|
||||||
|
*(uint32_t*)buff = csize << (n - 9);
|
||||||
|
}
|
||||||
|
res = RES_OK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GET_SECTOR_SIZE : /* Get sector size in unit of byte (WORD) */
|
||||||
|
*(uint16_t*)buff = 512;
|
||||||
|
res = RES_OK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GET_BLOCK_SIZE : /* Get erase block size in unit of sector (DWORD) */
|
||||||
|
if (CardType & CT_SD2) { /* SDC ver 2.00 */
|
||||||
|
if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */
|
||||||
|
xchg_spi(0xFF);
|
||||||
|
if (rcvr_datablock(csd, 16)) { /* Read partial block */
|
||||||
|
for (n = 64 - 16; n; n--) xchg_spi(0xFF); /* Purge trailing data */
|
||||||
|
*(uint32_t*)buff = 16UL << (csd[10] >> 4);
|
||||||
|
res = RES_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { /* SDC ver 1.XX or MMC */
|
||||||
|
if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */
|
||||||
|
if (CardType & CT_SD1) { /* SDC ver 1.XX */
|
||||||
|
*(uint32_t*)buff = (((csd[10] & 63) << 1) + ((uint16_t)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1);
|
||||||
|
} else { /* MMC */
|
||||||
|
*(uint32_t*)buff = ((uint16_t)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1);
|
||||||
|
}
|
||||||
|
res = RES_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CTRL_ERASE_SECTOR : /* Erase a block of sectors (used when _USE_ERASE == 1) */
|
||||||
|
if (!(CardType & CT_SDC)) break; /* Check if the card is SDC */
|
||||||
|
if (disk_ioctl(drv, MMC_GET_CSD, csd)) break; /* Get CSD */
|
||||||
|
if (!(csd[0] >> 6) && !(csd[10] & 0x40)) break; /* Check if sector erase can be applied to the card */
|
||||||
|
dp = buff; st = dp[0]; ed = dp[1]; /* Load sector block */
|
||||||
|
if (!(CardType & CT_BLOCK)) {
|
||||||
|
st *= 512; ed *= 512;
|
||||||
|
}
|
||||||
|
if (send_cmd(CMD32, st) == 0 && send_cmd(CMD33, ed) == 0 && send_cmd(CMD38, 0) == 0 && wait_ready(30000)) /* Erase sector block */
|
||||||
|
res = RES_OK; /* FatFs does not check result of this command */
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Following command are not used by FatFs module */
|
||||||
|
|
||||||
|
case MMC_GET_TYPE : /* Get MMC/SDC type (BYTE) */
|
||||||
|
*ptr = CardType;
|
||||||
|
res = RES_OK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MMC_GET_CSD : /* Read CSD (16 bytes) */
|
||||||
|
if (send_cmd(CMD9, 0) == 0 /* READ_CSD */
|
||||||
|
&& rcvr_datablock(ptr, 16))
|
||||||
|
res = RES_OK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MMC_GET_CID : /* Read CID (16 bytes) */
|
||||||
|
if (send_cmd(CMD10, 0) == 0 /* READ_CID */
|
||||||
|
&& rcvr_datablock(ptr, 16))
|
||||||
|
res = RES_OK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MMC_GET_OCR : /* Read OCR (4 bytes) */
|
||||||
|
if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */
|
||||||
|
for (n = 4; n; n--) *ptr++ = xchg_spi(0xFF);
|
||||||
|
res = RES_OK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MMC_GET_SDSTAT : /* Read SD status (64 bytes) */
|
||||||
|
if (send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */
|
||||||
|
xchg_spi(0xFF);
|
||||||
|
if (rcvr_datablock(ptr, 64))
|
||||||
|
res = RES_OK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
res = RES_PARERR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
deselect();
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Device timer function */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* This function must be called from timer interrupt routine in period
|
||||||
|
/ of 1 ms to generate card control timing.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void disk_timerproc (void)
|
||||||
|
{
|
||||||
|
uint8_t s;
|
||||||
|
|
||||||
|
s = Stat;
|
||||||
|
if (WP) /* Write protected */
|
||||||
|
s |= STA_PROTECT;
|
||||||
|
else /* Write enabled */
|
||||||
|
s &= ~STA_PROTECT;
|
||||||
|
//if (INS) /* Card is in socket */
|
||||||
|
s &= ~STA_NODISK;
|
||||||
|
//else /* Socket empty */
|
||||||
|
// s |= (STA_NODISK | STA_NOINIT);
|
||||||
|
Stat = s;
|
||||||
|
}
|
||||||
@@ -1,439 +0,0 @@
|
|||||||
/********************************************************************/
|
|
||||||
// sd card
|
|
||||||
/********************************************************************/
|
|
||||||
#define dspi_dtar0 0x0c
|
|
||||||
#define dspi_dsr 0x2c
|
|
||||||
#define dspi_dtfr 0x34
|
|
||||||
#define dspi_drfr 0x38
|
|
||||||
|
|
||||||
#define LONGASC(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | (d))
|
|
||||||
|
|
||||||
#define MCF_PAD_PAR_DSPI (__MBAR+0xA50)
|
|
||||||
#define MCF_PSC0_PSCTB_8BIT (__MBAR+0x860C)
|
|
||||||
#define MCF_DSPI_DMCR (__MBAR+0x8A00)
|
|
||||||
#define MCF_SLT0_SCNT (__MBAR + 0x908)
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
warte_10ms:
|
|
||||||
move.l d0,-(sp)
|
|
||||||
move.l MCF_SLT0_SCNT,d0
|
|
||||||
sub.l #1320000,d0
|
|
||||||
warte_d6:
|
|
||||||
cmp.l MCF_SLT0_SCNT,d0
|
|
||||||
bcs warte_d6
|
|
||||||
move.l (sp)+,d0
|
|
||||||
rts
|
|
||||||
|
|
||||||
warte_1ms:
|
|
||||||
move.l d0,-(sp)
|
|
||||||
move.l MCF_SLT0_SCNT,d0
|
|
||||||
sub.l #132000,d0
|
|
||||||
warte_d5:
|
|
||||||
cmp.l MCF_SLT0_SCNT,d0
|
|
||||||
bcs warte_d5
|
|
||||||
move.l (sp)+,d0
|
|
||||||
rts
|
|
||||||
|
|
||||||
.global sd_idle
|
|
||||||
.global sd_init
|
|
||||||
|
|
||||||
sd_init:
|
|
||||||
lea MCF_PSC0_PSCTB_8BIT,a6
|
|
||||||
move.l #LONGASC('S', 'D', '-', 'C'),(a6)
|
|
||||||
move.l #LONGASC('a', 'r', 'd', ' '),(a6)
|
|
||||||
|
|
||||||
move.l buffer,a5 // basis addresse (diesen bereich brauchen wir nicht mehr!)
|
|
||||||
move.l #0x1fffffff,d0 // normal dspi
|
|
||||||
move.l d0,MCF_PAD_PAR_DSPI
|
|
||||||
lea MCF_DSPI_DMCR,a0
|
|
||||||
move.l #0x800d3c00,(a0) // 8 bit cs5 on
|
|
||||||
move.l #0x38558897,d0
|
|
||||||
move.l d0,dspi_dtar0(a0) // 400kHz
|
|
||||||
move.l #0x082000ff,d4 // tx vorbesetzen
|
|
||||||
mov3q.l #-1,dspi_dsr(a0)
|
|
||||||
|
|
||||||
bsr.l warte_1ms
|
|
||||||
move.l #0xc00d3c00,(a0) // 8 bit 4MHz clocken cs off
|
|
||||||
bsr.l warte_10ms
|
|
||||||
move.l #0x800d3c00,(a0) // 8 bit 4MHz normal cs on
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
move.l #0x802d3c00,(a0) // 8 bit 4MHz normal cs off
|
|
||||||
clr.b d4
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
move.l #0x800d3c00,(a0) // 8 bit 4MHz normal cs on
|
|
||||||
move.b #0xff,d4
|
|
||||||
bsr sd_com
|
|
||||||
bsr sd_com
|
|
||||||
move.l #0x802d3c00,(a0) // 8 bit 4MHz normal cs off
|
|
||||||
bsr.l warte_10ms
|
|
||||||
|
|
||||||
// sd idle
|
|
||||||
move.l #100,d6 // 100 versuche
|
|
||||||
move.l #10,d3 // 10 versuche
|
|
||||||
sd_idle:
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x40,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x95,d4
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0x01,d5
|
|
||||||
beq idle_end
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0x01,d5
|
|
||||||
beq idle_end
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0x01,d5
|
|
||||||
beq idle_end
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0x01,d5
|
|
||||||
beq idle_end
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0x01,d5
|
|
||||||
beq idle_end
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0x01,d5
|
|
||||||
beq idle_end
|
|
||||||
subq.l #1,d6
|
|
||||||
beq sd_not
|
|
||||||
bra sd_idle
|
|
||||||
idle_end:
|
|
||||||
// cdm 8
|
|
||||||
read_ic:
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x48,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x01,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0xaa,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x87,d4
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
bsr sd_get_status
|
|
||||||
cmp.b #5,d5
|
|
||||||
beq sd_v1
|
|
||||||
cmp.b #1,d5
|
|
||||||
bne read_ic
|
|
||||||
|
|
||||||
move.b #0xff,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b d5,d0
|
|
||||||
bsr sd_com
|
|
||||||
move.b d5,d1
|
|
||||||
bsr sd_com
|
|
||||||
move.b d5,d2
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0xaa,d5
|
|
||||||
bne sd_testd3
|
|
||||||
move.l #LONGASC('S', 'D', 'H', 'C'),(a6)
|
|
||||||
move.b #' ',(a6)
|
|
||||||
sd_v1:
|
|
||||||
|
|
||||||
// cdm 58
|
|
||||||
read_ocr:
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x7a,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x01,d4
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
bsr sd_get_status
|
|
||||||
move.l #LONGASC('V', 'e', 'r', '1'),d6
|
|
||||||
cmp.b #5,d5
|
|
||||||
beq read_ocr
|
|
||||||
cmp.b #1,d5
|
|
||||||
bne read_ocr
|
|
||||||
|
|
||||||
move.b #0xff,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b d5,d0
|
|
||||||
bsr sd_com
|
|
||||||
move.b d5,d1
|
|
||||||
bsr sd_com
|
|
||||||
move.b d5,d2
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
// acdm 41
|
|
||||||
move.l #20000,d6 // 20000 versuche ready can bis 1 sec gehen
|
|
||||||
wait_of_aktiv:
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x77,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x95,d4
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
bsr sd_get_status
|
|
||||||
cmp.b #0x05,d5
|
|
||||||
beq wait_of_aktiv
|
|
||||||
|
|
||||||
wait_of_aktiv2:
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x69,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x40,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x95,d4
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
bsr sd_get_status
|
|
||||||
tst.b d5
|
|
||||||
beq sd_init_ok
|
|
||||||
cmp.b #0x05,d5
|
|
||||||
beq wait_of_aktiv2
|
|
||||||
subq.l #1,d6
|
|
||||||
bne wait_of_aktiv
|
|
||||||
sd_testd3:
|
|
||||||
subq.l #1,d3
|
|
||||||
bne sd_idle
|
|
||||||
bra sd_error
|
|
||||||
|
|
||||||
sd_init_ok:
|
|
||||||
// cdm 10
|
|
||||||
read_cid:
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x4a,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x95,d4
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
move.l a5,a4 // adresse setzen
|
|
||||||
bsr sd_rcv_info
|
|
||||||
|
|
||||||
// name ausgeben
|
|
||||||
lea 1(a5),a4
|
|
||||||
moveq #7,d7
|
|
||||||
sd_nam_loop:
|
|
||||||
move.b (a4)+,(a6)
|
|
||||||
subq.l #1,d7
|
|
||||||
bne sd_nam_loop
|
|
||||||
move.b #' ',(a6)
|
|
||||||
|
|
||||||
// cdm 9
|
|
||||||
read_csd:
|
|
||||||
move.b #0xff,d4 // receive byt
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x49,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x00,d4
|
|
||||||
bsr sd_com
|
|
||||||
move.b #0x01,d4
|
|
||||||
bsr sd_com
|
|
||||||
|
|
||||||
move.l a5,a4 // adresse setzen
|
|
||||||
bsr sd_rcv_info
|
|
||||||
|
|
||||||
mvz.b (a5),d0
|
|
||||||
lsr.l #6,d0
|
|
||||||
|
|
||||||
bne sd_csd2 // format v2
|
|
||||||
move.l 6(a5),d1
|
|
||||||
moveq #14,d0 // bit 73..62 c_size
|
|
||||||
lsr.l d0,d1 // bits extrahieren
|
|
||||||
and.l #0xfff,d1 // 12 bits
|
|
||||||
addq.l #1,d1
|
|
||||||
mvz.w 9(a5),d0
|
|
||||||
lsr.l #7,d0 // bits 49..47
|
|
||||||
and.l #0x7,d0 // 3 bits
|
|
||||||
moveq.l #8,d2 // x256 (dif v1 v2)
|
|
||||||
sub.l d0,d2
|
|
||||||
lsr.l d2,d1
|
|
||||||
bra sd_print_size
|
|
||||||
sd_csd2:
|
|
||||||
mvz.w 8(a5),d1
|
|
||||||
addq.l #1,d1
|
|
||||||
sd_print_size:
|
|
||||||
swap d1
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_16G
|
|
||||||
move.l #LONGASC('3', '2', 'G', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_16G:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_8G
|
|
||||||
move.l #LONGASC('1', '6', 'G', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_8G:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_4G
|
|
||||||
move.l #LONGASC(' ', '4', 'G', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_4G:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_2G
|
|
||||||
move.l #LONGASC(' ', '4', 'G', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_2G:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_1G
|
|
||||||
move.l #LONGASC(' ', '2', 'G', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_1G:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_512M
|
|
||||||
move.l #LONGASC(' ', '1', 'G', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_512M:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_256M
|
|
||||||
move.b #'5',(a6)
|
|
||||||
move.l #LONGASC('1', '2', 'M', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_256M:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_128M
|
|
||||||
move.b #'2',(a6)
|
|
||||||
move.l #LONGASC('5', '6', 'M', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_128M:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_64M
|
|
||||||
move.b #'1',(a6)
|
|
||||||
move.l #LONGASC('2', '8', 'M', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_64M:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_32M
|
|
||||||
move.l #LONGASC('6', '4', 'M', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_32M:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_16M
|
|
||||||
move.l #LONGASC('3', '2', 'M', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_16M:
|
|
||||||
lsl.l #1,d1
|
|
||||||
bcc sd_8M
|
|
||||||
move.l #LONGASC('1', '6', 'M', 'B'),(a6)
|
|
||||||
bra sd_ok
|
|
||||||
sd_8M:
|
|
||||||
move.l #LONGASC('<', '9', 'M', 'B'),(a6)
|
|
||||||
sd_ok:
|
|
||||||
move.l #LONGASC(' ', 'O', 'K', '!'),(a6)
|
|
||||||
move.l #0x0a0d,(a6)
|
|
||||||
//halt
|
|
||||||
//halt
|
|
||||||
rts
|
|
||||||
// subs ende -------------------------------
|
|
||||||
sd_V1:
|
|
||||||
move.l #LONGASC('n', 'o', 'n', '!'),(a6)
|
|
||||||
move.l #0x0a0d,(a6)
|
|
||||||
//halt
|
|
||||||
//halt
|
|
||||||
rts
|
|
||||||
sd_error:
|
|
||||||
move.l #LONGASC('E', 'r', 'r', 'o'),(a0)
|
|
||||||
move.l #LONGASC('r', '!', '', ''), (a0)
|
|
||||||
move.l #0x0a0d,(a6)
|
|
||||||
halt
|
|
||||||
halt
|
|
||||||
rts
|
|
||||||
sd_not:
|
|
||||||
move.l #LONGASC('n', 'o', 'n', '!'),(a0)
|
|
||||||
move.l #0x0a0d,(a6)
|
|
||||||
halt
|
|
||||||
halt
|
|
||||||
rts
|
|
||||||
|
|
||||||
// status holen -------------------------------
|
|
||||||
sd_get_status:
|
|
||||||
move.b #0xff,d4
|
|
||||||
bsr sd_com
|
|
||||||
cmp.b #0xff,d5
|
|
||||||
beq sd_get_status
|
|
||||||
rts
|
|
||||||
// byt senden und holen ---------------------
|
|
||||||
sd_com:
|
|
||||||
move.l d4,dspi_dtfr(a0)
|
|
||||||
wait_auf_complett:
|
|
||||||
btst.b #7,dspi_dsr(a0)
|
|
||||||
beq wait_auf_complett
|
|
||||||
move.l dspi_drfr(a0),d5
|
|
||||||
mov3q.l #-1,dspi_dsr(a0) // clr status register
|
|
||||||
rts
|
|
||||||
|
|
||||||
// daten holen ----------------------------
|
|
||||||
sd_rcv_info:
|
|
||||||
moveq #18,d3 // 16 byts + 2 byts crc
|
|
||||||
move.b #0xff,d4
|
|
||||||
sd_rcv_rb_w:
|
|
||||||
bsr sd_get_status
|
|
||||||
cmp.b #0xfe,d5 // daten bereit?
|
|
||||||
bne sd_rcv_rb_w // nein->
|
|
||||||
sd_rcv_rd_rb:
|
|
||||||
bsr sd_com
|
|
||||||
move.b d5,(a4)+
|
|
||||||
subq.l #1,d3
|
|
||||||
bne sd_rcv_rd_rb
|
|
||||||
rts
|
|
||||||
/******************************************/
|
|
||||||
|
|
||||||
.data
|
|
||||||
buffer: dc.l 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
@@ -328,10 +328,11 @@ void wait_pll(void)
|
|||||||
} while ((* (volatile int16_t *) 0xf0000800 < 0) && MCF_SLT0_SCNT > trgt);
|
} while ((* (volatile int16_t *) 0xf0000800 < 0) && MCF_SLT0_SCNT > trgt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static volatile uint8_t *pll_base = (volatile uint8_t *) 0xf0000600;
|
|
||||||
|
|
||||||
void init_pll(void)
|
void init_pll(void)
|
||||||
{
|
{
|
||||||
|
static volatile uint8_t *pll_base = (volatile uint8_t *) 0xf0000600;
|
||||||
|
|
||||||
xprintf("FPGA PLL initialization: ");
|
xprintf("FPGA PLL initialization: ");
|
||||||
|
|
||||||
wait_pll();
|
wait_pll();
|
||||||
@@ -482,7 +483,7 @@ void test_upd720101(void)
|
|||||||
MCF_PCI_PCICAR_FUNCNUM(0) +
|
MCF_PCI_PCICAR_FUNCNUM(0) +
|
||||||
MCF_PCI_PCICAR_DWORD(57);
|
MCF_PCI_PCICAR_DWORD(57);
|
||||||
|
|
||||||
//* (uint8_t *) PCI_IO_OFFSET = 0x20; // commented out (hangs currently)
|
//* (uint8_t *) PCI_IO_OFFSET = 0x20;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -495,7 +496,7 @@ void test_upd720101(void)
|
|||||||
xprintf("finished\r\n");
|
xprintf("finished\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool i2c_transfer_finished(void)
|
static uint32_t i2c_transfer_finished(void)
|
||||||
{
|
{
|
||||||
if (MCF_I2C_I2SR & MCF_I2C_I2SR_IIF)
|
if (MCF_I2C_I2SR & MCF_I2C_I2SR_IIF)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -509,7 +510,7 @@ static void wait_i2c_transfer_finished(void)
|
|||||||
MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear interrupt bit (byte transfer finished */
|
MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear interrupt bit (byte transfer finished */
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool i2c_bus_free(void)
|
static uint32_t i2c_bus_free(void)
|
||||||
{
|
{
|
||||||
return (MCF_I2C_I2SR & MCF_I2C_I2SR_IBB);
|
return (MCF_I2C_I2SR & MCF_I2C_I2SR_IBB);
|
||||||
}
|
}
|
||||||
@@ -714,7 +715,7 @@ void init_ac97(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uart_out_word(' NOT');
|
|
||||||
livo:
|
livo:
|
||||||
// AUX VOLUME ->-0dB
|
// AUX VOLUME ->-0dB
|
||||||
MCF_PSC2_PSCTB_AC97 = 0xE0000000; //START SLOT1 + SLOT2, FIRST FRAME
|
MCF_PSC2_PSCTB_AC97 = 0xE0000000; //START SLOT1 + SLOT2, FIRST FRAME
|
||||||
@@ -750,9 +751,6 @@ livo:
|
|||||||
|
|
||||||
/* Symbols from the linker script */
|
/* Symbols from the linker script */
|
||||||
|
|
||||||
extern uint8_t _STRAM_END[];
|
|
||||||
#define STRAM_END ((uint32_t)_STRAM_END)
|
|
||||||
|
|
||||||
extern uint8_t _FIRETOS[];
|
extern uint8_t _FIRETOS[];
|
||||||
#define FIRETOS ((uint32_t)_FIRETOS) /* where FireTOS is stored in flash */
|
#define FIRETOS ((uint32_t)_FIRETOS) /* where FireTOS is stored in flash */
|
||||||
|
|
||||||
|
|||||||
17
sources/unicode.c
Normal file
17
sources/unicode.c
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#include <ff.h>
|
||||||
|
|
||||||
|
#if _USE_LFN != 0
|
||||||
|
|
||||||
|
#if _CODE_PAGE == 932
|
||||||
|
#include "cc932.c"
|
||||||
|
#elif _CODE_PAGE == 936
|
||||||
|
#include "cc936.c"
|
||||||
|
#elif _CODE_PAGE == 949
|
||||||
|
#include "cc949.c"
|
||||||
|
#elif _CODE_PAGE == 950
|
||||||
|
#include "cc950.c"
|
||||||
|
#else
|
||||||
|
#include "ccsbcs.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user