Skip to content

Commit

Permalink
Build 305 - First public release of V0.3.1
Browse files Browse the repository at this point in the history
  • Loading branch information
duncanamps committed Jul 8, 2023
1 parent 73f5af2 commit 51f0a3b
Show file tree
Hide file tree
Showing 12 changed files with 595 additions and 15 deletions.
24 changes: 10 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ xa80 - X-Assembler for x80 processors

![xa80_short](https://github.com/duncanamps/xa80/assets/6016794/5a307bc0-b6b6-458f-91a2-7ae34e710088)

This is V0.3 which is a developing build version of the software and is largely incomplete, and in some areas, unusable. If you wish to download the day-to-day working and supported version, please access it from here -> [xa80 V0.2 GitHub](https://github.com/duncanamps/xa80/tree/V0.2).
This is V0.3 which is the supported stable release of the software.

#### Synopsis

Expand All @@ -15,8 +15,6 @@ xa80 is a command line tool that allows the cross assembly of source files aimed
* .log file containing errors encountered during the assembly
* .map file containing the symbol information
* .com file containing the actual machine code which can be executed on, for example, CP/M machines
* .obj80 file which creates the object code and symbol information suitable for use with a linker **(NOT IMPLEMENTED)**
* .dbg80 file containing debug information such as symbols, source lines, etc. for use with a simulator **(NOT IMPLEMENTED)**

#### Key features

Expand All @@ -25,11 +23,11 @@ Here are some of the key features of xa80:
* Open source
* Two pass assembler
* Supports mnemonics from different processors (8080, 8085, Z80, Z180) as a baked in standard
* Supports 24bit code generation for the EZ80 processor **(NOT IMPLEMENTED)**
* Ability to add additional opcode maps as external files
* Opcode compiler so you can add your own secret/hidden instructions and extend to other processor variants in the "family"
* Macro capability with nested expansion of macros allowed
* Conditional assembly with IF / IFDEF / IFNDEF statements
* Repetition through REPEAT and WHILE statements
* Full expression evaluator with many functions and string handling capability
* Rich set of command line parameters
* xa80 Environment variable for commonly used parameters
Expand Down Expand Up @@ -58,18 +56,18 @@ which are supported by the Lazarus ecosystem in 32 and 64 bit flavours, includin
* Windows

**Tip**: For most people, it won't be necessary to alter or recompile the software. Just use the pre-compiled binaries available from this repository if they are
sufficient for your needs. All you will need is **xa80** or **xa80.exe** depending on your operating system.
sufficient for your needs. All you will need is **xa80** or **xa80.exe** depending on your operating system. There are packages available containing the binary and manuals.

#### Dependencies

To modify the grammar for the opcode compiler, or xa80 itself, will require the use of a tool called LaCoGen (Lazarus Compiler Generator).
LaCoGen is [available from this GitHub](https://github.com/duncanamps/lacogen1). The grammar to deal with operands is contained in the .lac file and for the
most part can be left alone. It's only if you want to add new functions or operators that you would need to get involved in changing
the grammar file and recompiling with LaCoGen.
the grammar file and recompiling with LaCoGen; 99.9% of people won't need to look at this.

#### Documentation

The [docs/](https://github.com/duncanamps/xa80/tree/main/docs) folder contains a user guide explaining how the assembler is used.
The [docs/](https://github.com/duncanamps/xa80/tree/main/docs) folder contains a user guide explaining how the assembler is used, and also the opcode compiler if you want to get into the detail.

#### Folder Structure

Expand All @@ -83,20 +81,18 @@ Folders are organised as follows:
* [opcodes/](https://github.com/duncanamps/xa80/tree/main/opcodes) - The folder containing the opcode compiler oc_comp (see readme.txt in the folder)
* [opcodes/lac/](https://github.com/duncanamps/xa80/tree/main/opcodes/lac) - Grammar for the opcode compiler, opcode_compiler.lac compiles info opcode_compiler.lacobj
* [opcodes/source/](https://github.com/duncanamps/xa80/tree/main/opcodes/source) - The source files describing the different combinations of instructions and operands
* [test_files/](https://github.com/duncanamps/xa80/tree/main/test_files) - A set of test files to check that things work, and also includes some deliberate fails to check the assembler response
* [test_files/](https://github.com/duncanamps/xa80/tree/main/test_files) - A set of test files to check that things work, and also includes some deliberate fails to check the assembler response to warning and error conditions
* [units/](https://github.com/duncanamps/xa80/tree/main/units) - The bulk of the source code resides in here

#### Known Issues

* Need to get a bunch of major features working such as object files, debug files, and 24 bit code generation

* No major issues identified at this time

#### Development roadmap

* V0.2 - **Current Production**
* V0.3 - Heavy use of assembler with automated testing to remove any bugs found
* V1.0 - Introduces segmented architecture, object files, debug info generation
* V2.0 - Introduces 24 bit capability
* V0.3 - **Current Stable Release**
* V1.0 - FUTURE: Introduce segmented architecture, object files, debug info generation
* V2.0 - FUTURE: Introduce 24 bit capability

#### Author

Expand Down
Binary file added binaries/release/linux-x86_64/v03/oc_comp
Binary file not shown.
Binary file added binaries/release/linux-x86_64/v03/xa80
Binary file not shown.
Binary file added binaries/release/win64-x86_64/v03/oc_comp.exe
Binary file not shown.
Binary file modified binaries/release/win64-x86_64/v03/xa80.exe
Binary file not shown.
Binary file modified docs/xa80_assembler_user_manual_0.3.pdf
Binary file not shown.
Binary file modified docs/xa80_opcode_compiler_user_manual_0.3.pdf
Binary file not shown.
7 changes: 7 additions & 0 deletions opcodes/oc_comp.lpi
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@
<Resource_0 FileName="lac\opcode_compiler.lacobj" Type="RCDATA" ResourceName="OPCODE_COMPILER"/>
</Resources>
</General>
<VersionInfo>
<UseVersionInfo Value="True"/>
<AutoIncrementBuild Value="True"/>
<MinorVersionNr Value="3"/>
<RevisionNr Value="1"/>
<StringTable FileDescription="xa80 opcode compiler" LegalCopyright="Copyright 2022-2023 Duncan Munro"/>
</VersionInfo>
<BuildModes>
<Item Name="Debug" Default="True"/>
<Item Name="Release">
Expand Down
Binary file modified opcodes/oc_comp.res
Binary file not shown.
134 changes: 134 additions & 0 deletions opcodes/oc_comp_v03.lpi
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="12"/>
<PathDelim Value="\"/>
<General>
<Flags>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
<MainUnitHasScaledStatement Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<Title Value="Opcode Compiler"/>
<UseAppBundle Value="False"/>
<ResourceType Value="res"/>
<Resources Count="1">
<Resource_0 FileName="lac\opcode_compiler.lacobj" Type="RCDATA" ResourceName="OPCODE_COMPILER"/>
</Resources>
</General>
<VersionInfo>
<UseVersionInfo Value="True"/>
<AutoIncrementBuild Value="True"/>
<MinorVersionNr Value="3"/>
<RevisionNr Value="1"/>
<StringTable FileDescription="xa80 opcode compiler" LegalCopyright="Copyright 2022-2023 Duncan Munro"/>
</VersionInfo>
<BuildModes>
<Item Name="Debug" Default="True"/>
<Item Name="Release">
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="..\binaries\release\$(TargetOS)-$(TargetCPU)\v03\oc_comp"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value="..\units;lac"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)\v03"/>
</SearchPaths>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
<DebugInfoType Value="dsDwarf3"/>
</Debugging>
<LinkSmart Value="True"/>
</Linking>
</CompilerOptions>
</Item>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<UseFileFilters Value="True"/>
</PublishOptions>
<RunParams>
<FormatVersion Value="2"/>
</RunParams>
<Units>
<Unit>
<Filename Value="oc_comp_v03.lpr"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="..\units\uinstruction.pas"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="lac\lacogen_module.pas"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="lac\lacogen_types.pas"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="..\units\uasmglobals.pas"/>
<IsPartOfProject Value="True"/>
</Unit>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="..\binaries\release\$(TargetOS)-$(TargetCPU)\oc_comp_v03"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value="..\units;lac"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Checks>
<IOChecks Value="True"/>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
<StackChecks Value="True"/>
</Checks>
<VerifyObjMethodCallValidity Value="True"/>
</CodeGeneration>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf3"/>
<UseHeaptrc Value="True"/>
<TrashVariables Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions>
<Item>
<Name Value="EAbort"/>
</Item>
<Item>
<Name Value="ECodetoolError"/>
</Item>
<Item>
<Name Value="EFOpenError"/>
</Item>
</Exceptions>
</Debugging>
</CONFIG>
Loading

0 comments on commit 51f0a3b

Please sign in to comment.